SuGeT (SuperGeneTree)

Given a set of gene trees and a species tree, this software finds a supergenetree of the input trees that minimizes the reconciliation cost with the species tree. A supergenetree is a tree that "contains" all the input gene trees. The user can also specify to preserve the orthology/paralogy relations from the input trees. The runtime is exponential in the number of input trees. See this paper for details.

To cite: M Lafond, C Chauve, N El-Mabrouk, A Ouangraoua, "Gene Tree Construction and Correction using SuperTree and Reconciliation", IEEE/ACM Transactions on Computational Biology and Bioinformatics, 2017


Given a non-binary gene tree, a species tree and an optional gene distance matrix, this software outputs a binarization of the gene tree that minimizes the duplication+loss score. Since the number of solutions can easily get exponential, the algorithm can use a NJ distance criterion to join the 'nearest' subtrees first.
This software was used for the experimental studies in this paper. profileNJ extends the linear-time algorithm for gene tree resolution published in this paper and can also handle weights on duplications and losses as seen in this paper. It is maintained by Emmanuel Noutahi.

To cite: E Noutahi, M Semeria, M Lafond, J Seguin, B Boussau, L Gueguen, N El-Mabrouk, E Tannier, "Efficient Gene Tree Correction Guided by Genome Evolution", PLOS One (2016)

OPCC (OrthoPara-ConstraintChecker)

A python script that tests satisfiability/consistency with a species tree of a set of orthologies/paralogies/undecided. In other words, given a set of genes and their partial orthology/paralogy relationships, can we build a gene tree that depicts these relationships ? And, can we build such a gene tree that also agrees with a species tree ?
This script was extended by Mark Jones to check if the gene tree also agrees with some species tree.

To cite: M Lafond, N El-Mabrouk, "Orthology and Paralogy Constraints: Satisfiability and Consistency", BMC Genomics (2014)


Given a rooted binary gene tree and species tree, corrects a NAD (Non-Apparent Duplication) of the gene tree by applying multifurcation. User may specify a node to correct by appending the string "[CORRECT]" to the label of the node in the newick string. If none specified, this program corrects the highest NAD.

Download the source code

As seen in the ECCB 2014 paper, "Polytomy Refinement for the Correction of Dubious Duplications in Gene Trees." featuring Manuel Lafond, Cedric Chauve, Riccardo Dondi and Nadia El-Mabrouk.

Functionalities of this software are fairly limited. If you are seriously interested in this work, I suggest contacting me.


Given a gene tree, a species tree and a list of gene pairs that are required to be orthologs, find a gene tree as close as possible to the original that satisfies these constraints under reconciliation. As seen in this paper.


Old version (that was used for the publication)
Download the source code (

To cite : M Lafond, M Semeria, K M Swenson, E Tannier, N El-Mabrouk : Gene tree correction guided by orthology BMC Bioinformatics 14:S5I; 10.1186/1471-2105-14-S15-S5-T, 2013.


Given a non-binary gene tree and a binary species tree, this set of C++ classes finds an optimal binary resolution of the gene tree such that the number of duplications + losses is minimized. It is an implementation of what appeared in this paper.

This version is obsolete - please use profileNJ above, which does the same tasks and more!

Download the source code (

To cite :
Lafond M, Swenson KM, El-Mabrouk N: An optimal reconciliation algorithm for gene trees with polytomies.
In WABI, volume 7534 of LNBI/LNBI; 2012:106-122.