maclandrol / profileNJ

Gene tree correction using species tree and NJ
GNU General Public License v3.0
9 stars 2 forks source link

Problème dans la prise en compte de format d'arbre de gène par profileNJ #9

Closed YoannAnselmetti closed 7 years ago

YoannAnselmetti commented 7 years ago

Bonjour Emmanuel, je rencontre un problème avec profileNJ. Je me suis mis à ete3 pour traiter les arbres de gènes et j'ai donc généré à partir d'un arbre RAxML un arbre lisible par ete3. Cependant, quand je le donne en entrée de profileNJ celui-ci n'arrive pas à le lire...

Voici la commande et l'erreur de profileNJ (dernière version de profileNJ dispo sur GitHub): ./profileNJ -s Anopheles_species_tree_X_topology.nwk -g gene_tree_GF0000057.nwk -o output_GT.nwk -r best --firstbest --seuil 100.0 --cost 2.0 1.0

Traceback (most recent call last): File "../Software/TREE_INFERENCE/profileNJ/bin/profileNJ", line 191, in oritree, specietree, distance_matrix, node_order = TreeUtils.polySolverPreprocessing(gtree, args.specietree.name, cur_dist, specie_pos=args.spos, capitalize=args.cap, gene_sep=args.gene_sep, nFlag=args.nflag, smap=(args.smap.name if args.batch else args.smap), errorproof=args.tryhard) File "/usr/local/lib/python2.7/dist-packages/ProfileNJ-20151027-py2.7.egg/profileNJ/TreeLib/TreeUtils.py", line 641, in polySolverPreprocessing genetree = TreeClass(genetree) File "/usr/local/lib/python2.7/dist-packages/ProfileNJ-20151027-py2.7.egg/profileNJ/TreeLib/TreeClass.py", line 36, in init self, newick=newick, format=format, dist=dist, support=support, name=name) File "/usr/local/lib/python2.7/dist-packages/ete3-3.0.0b35-py2.7.egg/ete3/coretype/tree.py", line 210, in init read_newick(newick, root_node = self, format=format) File "/usr/local/lib/python2.7/dist-packages/ete3-3.0.0b35-py2.7.egg/ete3/parser/newick.py", line 237, in read_newick return _read_newick_from_string(nw, root_node, matcher, format) File "/usr/local/lib/python2.7/dist-packages/ete3-3.0.0b35-py2.7.egg/ete3/parser/newick.py", line 289, in _read_newick_from_string _read_node_data(closing_internal, current_parent, "internal", matcher, formatcode) File "/usr/local/lib/python2.7/dist-packages/ete3-3.0.0b35-py2.7.egg/ete3/parser/newick.py", line 386, in _read_node_data raise NewickError("Unexpected newick format '%s' " %subnw[0:50]) ete3.parser.newick.NewickError: Unexpected newick format '97%%0.07657231775906227222'

J'ai mis en pièce-jointe le fichier d'arbres de gène et l'arbre des espèces. Mon arbre de gène est au "format 0" de ete3, à l'exception que les supports sont des entiers entre 0 et 100, et non des flottants entre 0 et 1: Format 0 = (A:0.350596,(B:0.728431,(D:0.609498,G:0.125729)1.000000:0.642905)1.000000:0.567737);

test_profileNJ.zip

maclandrol commented 7 years ago

C'est ton séparateur @.

L'arbre de gène n'est pas lu directement par TreeClass, le séparateur est tout d'abord identifié et le string du newick est modifié pour détecter plus facilement la correspondance entre gène et espèce.

Dans ton cas, il faut que tu utilises l'argument --sep pour spécifier le séparateur, et optionnellement --spos pour la position de l'espèce.

Cette commande fonctionne pour tes données.

profileNJ -s Anopheles_species_tree_X_topology.nwk -g gene_tree_GF0000057.nwk -o output_GT.nwk -r best --firstbest --seuil 100.0 --cost 2.0 1.0 --sep '@' --spos 'postfix'

maclandrol commented 7 years ago

Aussi la classe TreeClass utilisé par profileNJ hérite de la classe Tree de ete3 en y ajoutant plusieurs nouvelles fonctionnalités. Mais de base, TreeClass supporte toutes les méthodes de Tree.