From f47a150ed125e0c3dd418a2604e1afc496032aba Mon Sep 17 00:00:00 2001 From: Ethan Bass Date: Tue, 16 Jun 2020 14:16:29 -0400 Subject: [PATCH 1/5] added quoted_node_names option to taxonomy class to fix newick import error. --- pyham/taxonomy.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/pyham/taxonomy.py b/pyham/taxonomy.py index 942dc7e..7e88578 100644 --- a/pyham/taxonomy.py +++ b/pyham/taxonomy.py @@ -27,13 +27,14 @@ class Taxonomy(object): | leaves (:obj:`set`): Set of Etree node that contained a ExtantGenome. """ - def __init__(self, tree_file, tree_format='newick_string', use_internal_name=False, phyloxml_leaf_name_tag=None, phyloxml_internal_name_tag=None): + def __init__(self, tree_file, tree_format='newick_string', use_internal_name=False, phyloxml_leaf_name_tag=None, phyloxml_internal_name_tag=None, quoted_node_names=True): """ Args: | tree_file (:obj:`str`): Path to the file that contained the taxonomy information. | tree_format (:obj:`str`): type of inputted tree file. Defaults to newick_string. Can be 'newick', 'phyloxml, 'newick_string'. | use_internal_name (:obj:`Boolean`, optional): Specify wheter using the given internal node name or use the | concatenatation of the children name. Defaults to False. + | quoted_node_names (:obj:'Boolean', optional): Specify whether newick file has quoted node names. """ self.tree_file = tree_file @@ -43,7 +44,7 @@ def __init__(self, tree_file, tree_format='newick_string', use_internal_name=Fal self.phyloxml_internal_name_tag = phyloxml_internal_name_tag # create tree - self.tree = self._build_tree(tree_file, tree_format) + self.tree = self._build_tree(tree_file, tree_format, quoted_node_names) # create internal node name if required self._generate_internal_node_name(self.tree) @@ -239,16 +240,16 @@ def _get_name_phyloxml(self, node, phyloxml_species_name_tag): "Node {} in the phyloxml file {} have no taxonomy scientific code to populate the species name".format( node, self.tree_file)) - def _build_tree(self, tree_file, tree_format): + def _build_tree(self, tree_file, tree_format, quoted_node_names): if tree_format == 'newick_string': self.tree_str = tree_file - return ete3.Tree(self.tree_str, format=1) + return ete3.Tree(self.tree_str, format=1, quoted_node_names=quoted_node_names) elif tree_format == 'newick': with open(tree_file, 'r') as nwk_file: self.tree_str = nwk_file.read() - return ete3.Tree(self.tree_str, format=1) + return ete3.Tree(self.tree_str, format=1, quoted_node_names=quoted_node_names) elif tree_format == 'phyloxml': from ete3 import Phyloxml From 9c4c4e176af0c44b3a994ce4c7828d71473ed6e8 Mon Sep 17 00:00:00 2001 From: Ethan Bass Date: Sat, 1 Aug 2020 09:55:34 -0400 Subject: [PATCH 2/5] pyham2 --- .DS_Store | Bin 0 -> 10244 bytes {pyham => pyham2}/TreeProfile.py | 0 {pyham => pyham2}/__init__.py | 0 {pyham => pyham2}/abstractgene.py | 0 {pyham => pyham2}/genome.py | 0 {pyham => pyham2}/ham.py | 0 {pyham => pyham2}/iham.py | 0 {pyham => pyham2}/mapper.py | 0 {pyham => pyham2}/parsers.py | 0 {pyham => pyham2}/taxonomy.py | 0 {pyham => pyham2}/utils.py | 0 11 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 .DS_Store rename {pyham => pyham2}/TreeProfile.py (100%) rename {pyham => pyham2}/__init__.py (100%) rename {pyham => pyham2}/abstractgene.py (100%) rename {pyham => pyham2}/genome.py (100%) rename {pyham => pyham2}/ham.py (100%) rename {pyham => pyham2}/iham.py (100%) rename {pyham => pyham2}/mapper.py (100%) rename {pyham => pyham2}/parsers.py (100%) rename {pyham => pyham2}/taxonomy.py (100%) rename {pyham => pyham2}/utils.py (100%) diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..1635ee54b53339c75e19270d9151eabbbed3c655 GIT binary patch literal 10244 zcmeHMU2GIp6h3EZ%gj*hwEQkwx>9QRDWxr~1w&!Gt&%E8Wm{S((C+Sx-ND(Jb!WCe z)MBHFF$NVM6vdwhG#Z165u=Gug1l(_OB5n%Q1ItLUwkAQHJ&?nw(M-%7ashHbCbE} z-h0lu=iG0;ott|X05FnO8UR87Akf34TuRjph3VNdtpwbWr6iI3K_6;}Cd^cNnx#MB zBj6+8Bj6+8Bj6+OZ$W_eY*vJMT>7<-fRBKWz!U=P`w*gs$*?OYxpY1qR5?cgl0`J^ z6l%+?K{DjZuq!9IBn=hht|YlDx}CbL_4@(CPeIFwKxV~}(*YK)IqX&2`Y;%Qy8 z?E3mIFfga6xMZ#%2=j#b!v1K|9EsX7J8MN^nSR#mirLAy+wL|^eX1Rc@7C0j0eNA& zY1lE%P&1CRrl@4HuU9h^b0lJB4aIWiiE@P~ih?*GFC8CmuCEO>G_*|AhQ=G}Z*Hs& zHE(R5m=J{}H4UwugQ>AYZ*RiXvnj(GkjoP>J(1O8w%Vra z%-HI))lr+Z_F87fZg&g^WI1c8yHv8%hSd(TCf5o!)6TT5nTEAn%~&L>!}XLZ74c;0 zqRJIFt*vjqWoyT|`PY@nQiZgzcUZHuxUTk$Xo{WO6SESkp=id?UP9HdwYxPnBbEmi zh}}jkrJh^7WT_ln7QA6LFF~#r`m%BD-mGSi@fcOX8%6moVV^=7?l2WLqvB|SRlyoT z=x5{Y8I@{2EUgNz5#^ZBZP9x96zin*qHKxX_t2~7u8mTYAS+^z9*e6wA8L^{3Gy9c z?=W9BAKWZ$5z4Vv?4v8b6s^bN!)?KKL4IF2z+!KYS@zDfYEXD*bydM_g0P2a+7v}q zgzE4rj-P{oD6?HZ2rHloHbWQeq3^*69Dyg{DL4Tq;Z1l4&cY|~DSQT>!v(kuKfy2X zEBpq(!yj0JWhi3>F2E43#x=MWTQH1m*p408iMue0J-8eDQ9%`lFo_0^;3yu#aeNSu z;G=jHpTOhzBEEz#<16?!zKf^v41S0o;d%TDzvg)ca+Kb|`?(q~Qp-zeYuNqW1`fUS+}C%O{e<9Zn91G&xc@uh7dxdgsAq z*GrW>#4UBS@K=!IxjdJ#NMH;JR)s1nWkw&~U0Flj05P0*SFfp*k{n=eP3854rsE{PVM$*}|LK zB?{md9|0c$9|0c$9|0eMYeHZS_X@H5|66DO|Noli_MLnLd<6a*2w+i1v?D^f<_^1s zX|ucb5IuwRu)^#nxpZ8pVkT_dxsIm}yN-9x`ZVU=nK=5eYd6WI<4%5#JITN4&jA1Y P@1OsH-$DIf&;Ne`%S8k; literal 0 HcmV?d00001 diff --git a/pyham/TreeProfile.py b/pyham2/TreeProfile.py similarity index 100% rename from pyham/TreeProfile.py rename to pyham2/TreeProfile.py diff --git a/pyham/__init__.py b/pyham2/__init__.py similarity index 100% rename from pyham/__init__.py rename to pyham2/__init__.py diff --git a/pyham/abstractgene.py b/pyham2/abstractgene.py similarity index 100% rename from pyham/abstractgene.py rename to pyham2/abstractgene.py diff --git a/pyham/genome.py b/pyham2/genome.py similarity index 100% rename from pyham/genome.py rename to pyham2/genome.py diff --git a/pyham/ham.py b/pyham2/ham.py similarity index 100% rename from pyham/ham.py rename to pyham2/ham.py diff --git a/pyham/iham.py b/pyham2/iham.py similarity index 100% rename from pyham/iham.py rename to pyham2/iham.py diff --git a/pyham/mapper.py b/pyham2/mapper.py similarity index 100% rename from pyham/mapper.py rename to pyham2/mapper.py diff --git a/pyham/parsers.py b/pyham2/parsers.py similarity index 100% rename from pyham/parsers.py rename to pyham2/parsers.py diff --git a/pyham/taxonomy.py b/pyham2/taxonomy.py similarity index 100% rename from pyham/taxonomy.py rename to pyham2/taxonomy.py diff --git a/pyham/utils.py b/pyham2/utils.py similarity index 100% rename from pyham/utils.py rename to pyham2/utils.py From d7e395d9cf2d4792347927da3248e292d9605185 Mon Sep 17 00:00:00 2001 From: Ethan Bass Date: Sat, 1 Aug 2020 15:51:06 -0400 Subject: [PATCH 3/5] fix 'ancestral genome' bug Bug causes fatal error when ancestral genome is also extant genome. Solved by overwriting extant genome with ancestral genome. --- pyham2/ham.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/pyham2/ham.py b/pyham2/ham.py index d5b3a1b..f955f53 100644 --- a/pyham2/ham.py +++ b/pyham2/ham.py @@ -902,11 +902,12 @@ def _get_ancestral_genome_by_taxon(self, tax_node): :obj:`AncestralGenome` """ - - if "genome" in tax_node.features: + #make sure genome is ancestral genome + if "genome" in tax_node.features and isinstance(tax_node.genome, AncestralGenome): return tax_node.genome - + else: + #create genome or overwrite extant genome with ancestral genome ancestral_genome = AncestralGenome() self.taxonomy.add_genome_to_node(tax_node, ancestral_genome) From c5fbd13a46dde7975d61a4862e547bd1224ce40e Mon Sep 17 00:00:00 2001 From: Ethan Bass Date: Sat, 1 Aug 2020 16:06:25 -0400 Subject: [PATCH 4/5] I believe this line is redundant, since you are getting the mrca of the genome set and then backing up another level? --- pyham2/abstractgene.py | 1 - 1 file changed, 1 deletion(-) diff --git a/pyham2/abstractgene.py b/pyham2/abstractgene.py index 0f58531..b96819b 100644 --- a/pyham2/abstractgene.py +++ b/pyham2/abstractgene.py @@ -502,7 +502,6 @@ def set_MRCA(self): else: self.MRCA = self.ham._get_ancestral_genome_by_mrca_of_genome_set(children_genomes) - self.MRCA = self.ham._get_ancestral_genome_by_taxon(self.MRCA.taxon.up) def add_child(self, child): """ From 465976765798e3a7ace1a8807d183c1d5e3755e6 Mon Sep 17 00:00:00 2001 From: Ethan Bass Date: Sat, 1 Aug 2020 16:08:58 -0400 Subject: [PATCH 5/5] Revert "pyham2" This reverts commit 9c4c4e176af0c44b3a994ce4c7828d71473ed6e8. --- .DS_Store | Bin 10244 -> 0 bytes {pyham2 => pyham}/TreeProfile.py | 0 {pyham2 => pyham}/__init__.py | 0 {pyham2 => pyham}/abstractgene.py | 0 {pyham2 => pyham}/genome.py | 0 {pyham2 => pyham}/ham.py | 0 {pyham2 => pyham}/iham.py | 0 {pyham2 => pyham}/mapper.py | 0 {pyham2 => pyham}/parsers.py | 0 {pyham2 => pyham}/taxonomy.py | 0 {pyham2 => pyham}/utils.py | 0 11 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 .DS_Store rename {pyham2 => pyham}/TreeProfile.py (100%) rename {pyham2 => pyham}/__init__.py (100%) rename {pyham2 => pyham}/abstractgene.py (100%) rename {pyham2 => pyham}/genome.py (100%) rename {pyham2 => pyham}/ham.py (100%) rename {pyham2 => pyham}/iham.py (100%) rename {pyham2 => pyham}/mapper.py (100%) rename {pyham2 => pyham}/parsers.py (100%) rename {pyham2 => pyham}/taxonomy.py (100%) rename {pyham2 => pyham}/utils.py (100%) diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 1635ee54b53339c75e19270d9151eabbbed3c655..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10244 zcmeHMU2GIp6h3EZ%gj*hwEQkwx>9QRDWxr~1w&!Gt&%E8Wm{S((C+Sx-ND(Jb!WCe z)MBHFF$NVM6vdwhG#Z165u=Gug1l(_OB5n%Q1ItLUwkAQHJ&?nw(M-%7ashHbCbE} z-h0lu=iG0;ott|X05FnO8UR87Akf34TuRjph3VNdtpwbWr6iI3K_6;}Cd^cNnx#MB zBj6+8Bj6+8Bj6+OZ$W_eY*vJMT>7<-fRBKWz!U=P`w*gs$*?OYxpY1qR5?cgl0`J^ z6l%+?K{DjZuq!9IBn=hht|YlDx}CbL_4@(CPeIFwKxV~}(*YK)IqX&2`Y;%Qy8 z?E3mIFfga6xMZ#%2=j#b!v1K|9EsX7J8MN^nSR#mirLAy+wL|^eX1Rc@7C0j0eNA& zY1lE%P&1CRrl@4HuU9h^b0lJB4aIWiiE@P~ih?*GFC8CmuCEO>G_*|AhQ=G}Z*Hs& zHE(R5m=J{}H4UwugQ>AYZ*RiXvnj(GkjoP>J(1O8w%Vra z%-HI))lr+Z_F87fZg&g^WI1c8yHv8%hSd(TCf5o!)6TT5nTEAn%~&L>!}XLZ74c;0 zqRJIFt*vjqWoyT|`PY@nQiZgzcUZHuxUTk$Xo{WO6SESkp=id?UP9HdwYxPnBbEmi zh}}jkrJh^7WT_ln7QA6LFF~#r`m%BD-mGSi@fcOX8%6moVV^=7?l2WLqvB|SRlyoT z=x5{Y8I@{2EUgNz5#^ZBZP9x96zin*qHKxX_t2~7u8mTYAS+^z9*e6wA8L^{3Gy9c z?=W9BAKWZ$5z4Vv?4v8b6s^bN!)?KKL4IF2z+!KYS@zDfYEXD*bydM_g0P2a+7v}q zgzE4rj-P{oD6?HZ2rHloHbWQeq3^*69Dyg{DL4Tq;Z1l4&cY|~DSQT>!v(kuKfy2X zEBpq(!yj0JWhi3>F2E43#x=MWTQH1m*p408iMue0J-8eDQ9%`lFo_0^;3yu#aeNSu z;G=jHpTOhzBEEz#<16?!zKf^v41S0o;d%TDzvg)ca+Kb|`?(q~Qp-zeYuNqW1`fUS+}C%O{e<9Zn91G&xc@uh7dxdgsAq z*GrW>#4UBS@K=!IxjdJ#NMH;JR)s1nWkw&~U0Flj05P0*SFfp*k{n=eP3854rsE{PVM$*}|LK zB?{md9|0c$9|0c$9|0eMYeHZS_X@H5|66DO|Noli_MLnLd<6a*2w+i1v?D^f<_^1s zX|ucb5IuwRu)^#nxpZ8pVkT_dxsIm}yN-9x`ZVU=nK=5eYd6WI<4%5#JITN4&jA1Y P@1OsH-$DIf&;Ne`%S8k; diff --git a/pyham2/TreeProfile.py b/pyham/TreeProfile.py similarity index 100% rename from pyham2/TreeProfile.py rename to pyham/TreeProfile.py diff --git a/pyham2/__init__.py b/pyham/__init__.py similarity index 100% rename from pyham2/__init__.py rename to pyham/__init__.py diff --git a/pyham2/abstractgene.py b/pyham/abstractgene.py similarity index 100% rename from pyham2/abstractgene.py rename to pyham/abstractgene.py diff --git a/pyham2/genome.py b/pyham/genome.py similarity index 100% rename from pyham2/genome.py rename to pyham/genome.py diff --git a/pyham2/ham.py b/pyham/ham.py similarity index 100% rename from pyham2/ham.py rename to pyham/ham.py diff --git a/pyham2/iham.py b/pyham/iham.py similarity index 100% rename from pyham2/iham.py rename to pyham/iham.py diff --git a/pyham2/mapper.py b/pyham/mapper.py similarity index 100% rename from pyham2/mapper.py rename to pyham/mapper.py diff --git a/pyham2/parsers.py b/pyham/parsers.py similarity index 100% rename from pyham2/parsers.py rename to pyham/parsers.py diff --git a/pyham2/taxonomy.py b/pyham/taxonomy.py similarity index 100% rename from pyham2/taxonomy.py rename to pyham/taxonomy.py diff --git a/pyham2/utils.py b/pyham/utils.py similarity index 100% rename from pyham2/utils.py rename to pyham/utils.py