X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Fphylogeny%2FPhylogenyMethods.java;h=2b7fd29cec240e418fe463a7d441d0fb6d73d25f;hb=83a8b55648437acc36f0e82ec065db173304f97c;hp=6569c810d982d6e7ff9c5e524da01b730d352721;hpb=48f7a89be9d34f1930a1f863e608235cc27184c5;p=jalview.git diff --git a/forester/java/src/org/forester/phylogeny/PhylogenyMethods.java b/forester/java/src/org/forester/phylogeny/PhylogenyMethods.java index 6569c81..2b7fd29 100644 --- a/forester/java/src/org/forester/phylogeny/PhylogenyMethods.java +++ b/forester/java/src/org/forester/phylogeny/PhylogenyMethods.java @@ -5,7 +5,7 @@ // Copyright (C) 2008-2009 Christian M. Zmasek // Copyright (C) 2008-2009 Burnham Institute for Medical Research // All rights reserved -// +// // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public // License as published by the Free Software Foundation; either @@ -15,7 +15,7 @@ // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU // Lesser General Public License for more details. -// +// // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA @@ -41,6 +41,8 @@ import org.forester.phylogeny.data.Confidence; import org.forester.phylogeny.data.DomainArchitecture; import org.forester.phylogeny.data.Taxonomy; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; +import org.forester.util.BasicDescriptiveStatistics; +import org.forester.util.DescriptiveStatistics; import org.forester.util.FailedConditionCheckException; import org.forester.util.ForesterUtil; @@ -271,15 +273,28 @@ public class PhylogenyMethods { return max; } - public static int calculateMaximumNumberOfDescendantsPerNode( final Phylogeny phy ) { - int max = 0; + public static DescriptiveStatistics calculatNumberOfDescendantsPerNodeStatistics( final Phylogeny phy ) { + final DescriptiveStatistics stats = new BasicDescriptiveStatistics(); for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) { - final PhylogenyNode node = iter.next(); - if ( node.getNumberOfDescendants() > max ) { - max = node.getNumberOfDescendants(); + final PhylogenyNode n = iter.next(); + if ( !n.isExternal() ) { + stats.addValue( n.getNumberOfDescendants() ); } } - return max; + return stats; + } + + public static DescriptiveStatistics calculatConfidenceStatistics( final Phylogeny phy ) { + final DescriptiveStatistics stats = new BasicDescriptiveStatistics(); + for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) { + final PhylogenyNode n = iter.next(); + if ( !n.isExternal() ) { + if ( n.getBranchData().isHasConfidences() ) { + stats.addValue( n.getBranchData().getConfidence( 0 ).getValue() ); + } + } + } + return stats; } /** @@ -894,8 +909,10 @@ public class PhylogenyMethods { blue += child_color.getBlue(); } } - setBranchColorValue( node, new Color( ForesterUtil.roundToInt( red / n ), ForesterUtil - .roundToInt( green / n ), ForesterUtil.roundToInt( blue / n ) ) ); + setBranchColorValue( node, + new Color( ForesterUtil.roundToInt( red / n ), + ForesterUtil.roundToInt( green / n ), + ForesterUtil.roundToInt( blue / n ) ) ); } } } @@ -913,8 +930,8 @@ public class PhylogenyMethods { parent.removeChildNode( remove_me ); for( final PhylogenyNode desc : descs ) { parent.addAsChild( desc ); - desc.setDistanceToParent( addPhylogenyDistances( remove_me.getDistanceToParent(), desc - .getDistanceToParent() ) ); + desc.setDistanceToParent( addPhylogenyDistances( remove_me.getDistanceToParent(), + desc.getDistanceToParent() ) ); } remove_me.setParent( null ); phylogeny.setIdHash( null ); @@ -968,15 +985,16 @@ public class PhylogenyMethods { } } } - else if ( node.getNodeData().isHasSequence() + if ( !match && node.getNodeData().isHasSequence() && match( node.getNodeData().getSequence().getName(), query, case_sensitive, partial ) ) { match = true; } - else if ( node.getNodeData().isHasSequence() + if ( !match && node.getNodeData().isHasSequence() && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial ) ) { match = true; } - else if ( node.getNodeData().isHasSequence() + if ( !match + && node.getNodeData().isHasSequence() && ( node.getNodeData().getSequence().getAccession() != null ) && match( node.getNodeData().getSequence().getAccession().getValue(), query, @@ -984,7 +1002,7 @@ public class PhylogenyMethods { partial ) ) { match = true; } - else if ( node.getNodeData().isHasSequence() + if ( !match && node.getNodeData().isHasSequence() && ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) { final DomainArchitecture da = node.getNodeData().getSequence().getDomainArchitecture(); I: for( int i = 0; i < da.getNumberOfDomains(); ++i ) { @@ -994,6 +1012,22 @@ public class PhylogenyMethods { } } } + if ( !match && ( node.getNodeData().getBinaryCharacters() != null ) ) { + Iterator it = node.getNodeData().getBinaryCharacters().getPresentCharacters().iterator(); + I: while ( it.hasNext() ) { + if ( match( it.next(), query, case_sensitive, partial ) ) { + match = true; + break I; + } + } + it = node.getNodeData().getBinaryCharacters().getGainedCharacters().iterator(); + I: while ( it.hasNext() ) { + if ( match( it.next(), query, case_sensitive, partial ) ) { + match = true; + break I; + } + } + } if ( match ) { nodes.add( node ); } @@ -1050,15 +1084,16 @@ public class PhylogenyMethods { } } } - else if ( node.getNodeData().isHasSequence() + if ( !match && node.getNodeData().isHasSequence() && match( node.getNodeData().getSequence().getName(), query, case_sensitive, partial ) ) { match = true; } - else if ( node.getNodeData().isHasSequence() + if ( !match && node.getNodeData().isHasSequence() && match( node.getNodeData().getSequence().getSymbol(), query, case_sensitive, partial ) ) { match = true; } - else if ( node.getNodeData().isHasSequence() + if ( !match + && node.getNodeData().isHasSequence() && ( node.getNodeData().getSequence().getAccession() != null ) && match( node.getNodeData().getSequence().getAccession().getValue(), query, @@ -1066,7 +1101,7 @@ public class PhylogenyMethods { partial ) ) { match = true; } - else if ( node.getNodeData().isHasSequence() + if ( !match && node.getNodeData().isHasSequence() && ( node.getNodeData().getSequence().getDomainArchitecture() != null ) ) { final DomainArchitecture da = node.getNodeData().getSequence().getDomainArchitecture(); I: for( int i = 0; i < da.getNumberOfDomains(); ++i ) { @@ -1076,6 +1111,38 @@ public class PhylogenyMethods { } } } + if ( !match && ( node.getNodeData().getBinaryCharacters() != null ) ) { + Iterator it = node.getNodeData().getBinaryCharacters().getPresentCharacters().iterator(); + I: while ( it.hasNext() ) { + if ( match( it.next(), query, case_sensitive, partial ) ) { + match = true; + break I; + } + } + it = node.getNodeData().getBinaryCharacters().getGainedCharacters().iterator(); + I: while ( it.hasNext() ) { + if ( match( it.next(), query, case_sensitive, partial ) ) { + match = true; + break I; + } + } + // final String[] bcp_ary = node.getNodeData().getBinaryCharacters() + // .getPresentCharactersAsStringArray(); + // I: for( final String bc : bcp_ary ) { + // if ( match( bc, query, case_sensitive, partial ) ) { + // match = true; + // break I; + // } + // } + // final String[] bcg_ary = node.getNodeData().getBinaryCharacters() + // .getGainedCharactersAsStringArray(); + // I: for( final String bc : bcg_ary ) { + // if ( match( bc, query, case_sensitive, partial ) ) { + // match = true; + // break I; + // } + // } + } if ( !match ) { all_matched = false; break;