X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FTreePanelUtil.java;h=38f935b4aa85eef2ffdc006ab29f8c8c203782af;hb=5642da5f473ab9ae57fee86c0cb3b33525a2e916;hp=6f6999d31f6075af64303513f7bc86feb8e9d591;hpb=7e567e18a5ba32035a8db4ca041023c9e862d25b;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/TreePanelUtil.java b/forester/java/src/org/forester/archaeopteryx/TreePanelUtil.java index 6f6999d..38f935b 100644 --- a/forester/java/src/org/forester/archaeopteryx/TreePanelUtil.java +++ b/forester/java/src/org/forester/archaeopteryx/TreePanelUtil.java @@ -6,6 +6,7 @@ import java.awt.Component; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.ArrayList; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -25,7 +26,7 @@ import org.forester.phylogeny.PhylogenyNode; import org.forester.phylogeny.data.Accession; import org.forester.phylogeny.data.Annotation; import org.forester.phylogeny.data.BranchColor; -import org.forester.phylogeny.data.NodeData.NODE_DATA; +import org.forester.phylogeny.data.NodeDataField; import org.forester.phylogeny.data.Sequence; import org.forester.phylogeny.data.Taxonomy; import org.forester.phylogeny.iterators.PhylogenyNodeIterator; @@ -33,6 +34,7 @@ import org.forester.phylogeny.iterators.PreorderTreeIterator; import org.forester.util.ForesterConstants; import org.forester.util.ForesterUtil; import org.forester.util.SequenceAccessionTools; +import org.forester.util.StringInt; import org.forester.ws.seqdb.UniProtTaxonomy; public class TreePanelUtil { @@ -44,7 +46,7 @@ public class TreePanelUtil { final String upkb = SequenceAccessionTools.obtainUniProtAccessorFromDataFields( node ); if ( !ForesterUtil.isEmpty( upkb ) ) { try { - uri_str = ForesterUtil.UNIPROT_KB + URLEncoder.encode( upkb, ForesterConstants.UTF8 ); + uri_str = ForesterUtil.UNIPROT_KB + URLEncoder.encode( upkb, ForesterConstants.UTF_8 ); } catch ( final UnsupportedEncodingException e ) { AptxUtil.showErrorMessage( tp, e.toString() ); @@ -56,10 +58,10 @@ public class TreePanelUtil { if ( !ForesterUtil.isEmpty( v ) ) { try { if ( SequenceAccessionTools.isProteinDbQuery( v ) ) { - uri_str = ForesterUtil.NCBI_PROTEIN + URLEncoder.encode( v, ForesterConstants.UTF8 ); + uri_str = ForesterUtil.NCBI_PROTEIN + URLEncoder.encode( v, ForesterConstants.UTF_8 ); } else { - uri_str = ForesterUtil.NCBI_NUCCORE + URLEncoder.encode( v, ForesterConstants.UTF8 ); + uri_str = ForesterUtil.NCBI_NUCCORE + URLEncoder.encode( v, ForesterConstants.UTF_8 ); } } catch ( final UnsupportedEncodingException e ) { @@ -73,10 +75,10 @@ public class TreePanelUtil { if ( !ForesterUtil.isEmpty( v ) ) { try { if ( SequenceAccessionTools.isProteinDbQuery( v ) ) { - uri_str = ForesterUtil.NCBI_PROTEIN + URLEncoder.encode( v, ForesterConstants.UTF8 ); + uri_str = ForesterUtil.NCBI_PROTEIN + URLEncoder.encode( v, ForesterConstants.UTF_8 ); } else { - uri_str = ForesterUtil.NCBI_NUCCORE + URLEncoder.encode( v, ForesterConstants.UTF8 ); + uri_str = ForesterUtil.NCBI_NUCCORE + URLEncoder.encode( v, ForesterConstants.UTF_8 ); } } catch ( final UnsupportedEncodingException e ) { @@ -89,7 +91,7 @@ public class TreePanelUtil { final String v = SequenceAccessionTools.obtainGiNumberFromDataFields( node ); if ( !ForesterUtil.isEmpty( v ) ) { try { - uri_str = ForesterUtil.NCBI_GI + URLEncoder.encode( v, ForesterConstants.UTF8 ); + uri_str = ForesterUtil.NCBI_GI + URLEncoder.encode( v, ForesterConstants.UTF_8 ); } catch ( final UnsupportedEncodingException e ) { AptxUtil.showErrorMessage( tp, e.toString() ); @@ -120,7 +122,7 @@ public class TreePanelUtil { * all external nodes of node. * If at least one the external nodes has no taxonomy, * null is returned. - * + * */ public static Set obtainDistinctTaxonomies( final PhylogenyNode node ) { final List descs = node.getAllExternalDescendants(); @@ -147,8 +149,8 @@ public class TreePanelUtil { } if ( cp.isShowSeqSymbols() && node.getNodeData().isHasSequence() && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getSymbol() ) ) { - TreePanelUtil - .showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence().getSymbol(), sb ); + TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence().getSymbol(), + sb ); } if ( cp.isShowGeneNames() && node.getNodeData().isHasSequence() && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getGeneName() ) ) { @@ -163,25 +165,27 @@ public class TreePanelUtil { } if ( cp.isShowTaxonomyCode() && node.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getTaxonomyCode() ) ) { - TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy() - .getTaxonomyCode(), sb ); + TreePanelUtil + .showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy().getTaxonomyCode(), + sb ); } if ( cp.isShowTaxonomyScientificNames() && node.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getScientificName() ) ) { - TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy() - .getScientificName(), sb ); + TreePanelUtil + .showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy().getScientificName(), + sb ); } if ( cp.isShowTaxonomyCommonNames() && node.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getCommonName() ) ) { - TreePanelUtil - .showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy().getCommonName(), sb ); - } - if ( ( cp.isShowSeqNames() || cp.isShowSeqSymbols() || cp.isShowSequenceAcc() ) - && node.getNodeData().isHasSequence() - && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) { - TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence() - .getMolecularSequence(), sb ); + TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy().getCommonName(), + sb ); } + // if ( ( cp.isShowSeqNames() || cp.isShowSeqSymbols() || cp.isShowSequenceAcc() ) + // && node.getNodeData().isHasSequence() + // && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) { + // TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence() + // .getMolecularSequence(), sb ); + // } final String s = sb.toString().trim(); if ( !ForesterUtil.isEmpty( s ) ) { data.add( s ); @@ -201,6 +205,9 @@ public class TreePanelUtil { final static void collapseSpeciesSpecificSubtrees( final Phylogeny phy ) { boolean inferred = false; + for( final PhylogenyNodeIterator iter = phy.iteratorPreorder(); iter.hasNext(); ) { + iter.next().setCollapse( false ); + } for( final PhylogenyNodeIterator it = phy.iteratorPreorder(); it.hasNext(); ) { final PhylogenyNode n = it.next(); if ( !n.isExternal() && !n.isCollapse() && ( n.getNumberOfDescendants() > 1 ) ) { @@ -234,7 +241,18 @@ public class TreePanelUtil { } } - static void colorizeSubtree( final PhylogenyNode node, final BranchColor c ) { + final static void uncollapseSubtree( final PhylogenyNode node ) { + node.setCollapse( false ); + if ( node.isExternal() ) { + return; + } + final PhylogenyNodeIterator it = new PreorderTreeIterator( node ); + while ( it.hasNext() ) { + it.next().setCollapse( false ); + } + } + + public static void colorizeSubtree( final PhylogenyNode node, final BranchColor c ) { node.getBranchData().setBranchColor( c ); final List descs = PhylogenyMethods.getAllDescendants( node ); for( final PhylogenyNode desc : descs ) { @@ -277,7 +295,8 @@ public class TreePanelUtil { if ( !n.getBranchData().isHasBranchColor() ) { final Taxonomy tax = PhylogenyMethods.getExternalDescendantsTaxonomy( n ); if ( tax != null ) { - n.getBranchData().setBranchColor( new BranchColor( tree_panel.calculateTaxonomyBasedColor( tax ) ) ); + n.getBranchData() + .setBranchColor( new BranchColor( tree_panel.calculateTaxonomyBasedColor( tax ) ) ); final List descs = PhylogenyMethods.getAllDescendants( n ); for( final PhylogenyNode desc : descs ) { desc.getBranchData() @@ -288,23 +307,97 @@ public class TreePanelUtil { } } - final static int colorPhylogenyAccordingToRanks( final Phylogeny tree, final String rank, final TreePanel tree_panel ) { +// final static int collapseByTaxonomicRank( final Phylogeny tree, final String rank, final TreePanel tree_panel ) { +// final Set true_lineage_set = new HashSet(); +// for( final PhylogenyNodeIterator iter = tree.iteratorPreorder(); iter.hasNext(); ) { +// iter.next().setCollapse( false ); +// } +// int collapsed = 0; +// for( final PhylogenyNodeIterator it = tree.iteratorPostorder(); it.hasNext(); ) { +// final PhylogenyNode n = it.next(); +// if ( !n.isExternal() && n.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getRank() ) +// && n.getNodeData().getTaxonomy().getRank().equalsIgnoreCase( rank ) /*&& !n.isRoot()*/ ) { +// TreePanelUtil.collapseSubtree( n, true ); +// ++collapsed; +// if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) { +// true_lineage_set.add( n.getNodeData().getTaxonomy().getScientificName() ); +// } +// } +// } +// for( final PhylogenyNodeIterator it = tree.iteratorPostorder(); it.hasNext(); ) { +// final PhylogenyNode node = it.next(); +// if ( ( !node.isExternal() && !node.isCollapse() ) && node.getNodeData().isHasTaxonomy() +// && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getLineage() ) /* && !node.isRoot()*/ ) { +// boolean success = false; +// if ( !true_lineage_set.isEmpty() ) { +// for( final String lin : node.getNodeData().getTaxonomy().getLineage() ) { +// if ( true_lineage_set.contains( lin ) ) { +// TreePanelUtil.collapseSubtree( node, true ); +// ++collapsed; +// success = true; +// break; +// } +// } +// } +// if ( !success ) { +// final Map lineage_to_rank_map = MainPanel.getLineageToRankMap(); +// for( final String lin : node.getNodeData().getTaxonomy().getLineage() ) { +// final Taxonomy temp_tax = new Taxonomy(); +// temp_tax.setScientificName( lin ); +// if ( lineage_to_rank_map.containsKey( lin ) +// && !ForesterUtil.isEmpty( lineage_to_rank_map.get( lin ) ) +// && lineage_to_rank_map.get( lin ).equalsIgnoreCase( rank ) ) { +// TreePanelUtil.collapseSubtree( node, true ); +// ++collapsed; +// true_lineage_set.add( lin ); +// break; +// } +// else { +// UniProtTaxonomy up = null; +// try { +// up = TaxonomyDataManager.obtainUniProtTaxonomy( temp_tax, null, null ); +// } +// catch ( final Exception e ) { +// e.printStackTrace(); +// } +// if ( ( up != null ) && !ForesterUtil.isEmpty( up.getRank() ) ) { +// lineage_to_rank_map.put( lin, up.getRank() ); +// System.out.println( lin + "->" + up.getRank() ); +// if ( up.getRank().equalsIgnoreCase( rank ) ) { +// TreePanelUtil.collapseSubtree( node, true ); +// ++collapsed; +// true_lineage_set.add( lin ); +// break; +// } +// } +// } +// } +// } +// } +// } +// return collapsed; +// } + + final static int colorPhylogenyAccordingToRanks( final Phylogeny tree, + final String rank, + final TreePanel tree_panel ) { final Map true_lineage_to_color_map = new HashMap(); int colorizations = 0; for( final PhylogenyNodeIterator it = tree.iteratorPostorder(); it.hasNext(); ) { final PhylogenyNode n = it.next(); if ( n.getNodeData().isHasTaxonomy() && ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) - || !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getCommonName() ) || !ForesterUtil - .isEmpty( n.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) { + || !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getCommonName() ) + || !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) { if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getRank() ) && n.getNodeData().getTaxonomy().getRank().equalsIgnoreCase( rank ) ) { - final BranchColor c = new BranchColor( tree_panel.calculateTaxonomyBasedColor( n.getNodeData() - .getTaxonomy() ) ); + final BranchColor c = new BranchColor( tree_panel + .calculateTaxonomyBasedColor( n.getNodeData().getTaxonomy() ) ); TreePanelUtil.colorizeSubtree( n, c ); ++colorizations; if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) { - true_lineage_to_color_map.put( n.getNodeData().getTaxonomy().getScientificName(), c.getValue() ); + true_lineage_to_color_map.put( n.getNodeData().getTaxonomy().getScientificName(), + c.getValue() ); } } } @@ -317,8 +410,8 @@ public class TreePanelUtil { if ( !true_lineage_to_color_map.isEmpty() ) { for( final String lin : node.getNodeData().getTaxonomy().getLineage() ) { if ( true_lineage_to_color_map.containsKey( lin ) ) { - TreePanelUtil - .colorizeSubtree( node, new BranchColor( true_lineage_to_color_map.get( lin ) ) ); + TreePanelUtil.colorizeSubtree( node, + new BranchColor( true_lineage_to_color_map.get( lin ) ) ); ++colorizations; success = true; break; @@ -349,8 +442,10 @@ public class TreePanelUtil { } if ( ( up != null ) && !ForesterUtil.isEmpty( up.getRank() ) ) { lineage_to_rank_map.put( lin, up.getRank() ); + System.out.println( lin + "->" + up.getRank() ); if ( up.getRank().equalsIgnoreCase( rank ) ) { - final BranchColor c = new BranchColor( tree_panel.calculateTaxonomyBasedColor( temp_tax ) ); + final BranchColor c = new BranchColor( tree_panel + .calculateTaxonomyBasedColor( temp_tax ) ); TreePanelUtil.colorizeSubtree( node, c ); ++colorizations; true_lineage_to_color_map.put( lin, c.getValue() ); @@ -365,7 +460,8 @@ public class TreePanelUtil { return colorizations; } - final static String createAnnotationString( final SortedSet annotations, final boolean show_ref_sources ) { + final static String createAnnotationString( final SortedSet annotations, + final boolean show_ref_sources ) { final SortedMap> m = new TreeMap>(); for( final Annotation an : annotations ) { final String ref_source = ForesterUtil.isEmpty( an.getRefSource() ) ? "?" : an.getRefSource(); @@ -433,14 +529,15 @@ public class TreePanelUtil { final static boolean isTaxonomyEmpty( final Taxonomy tax ) { return ( ( tax.getIdentifier() == null ) && ForesterUtil.isEmpty( tax.getTaxonomyCode() ) - && ForesterUtil.isEmpty( tax.getCommonName() ) && ForesterUtil.isEmpty( tax.getScientificName() ) && tax - .getSynonyms().isEmpty() ); + && ForesterUtil.isEmpty( tax.getCommonName() ) && ForesterUtil.isEmpty( tax.getScientificName() ) + && tax.getSynonyms().isEmpty() ); } - static int makeSB( final List data, final Options optz, final StringBuilder sb ) { + static final int nodeDataIntoStringBuffer( final List data, final Options optz, final StringBuilder sb ) { final SortedMap map = new TreeMap(); - if ( ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ ) - && ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ_FASTA ) ) { + int size = 0; + if ( ( optz.getExtDescNodeDataToReturn() != NodeDataField.SEQUENCE_MOL_SEQ_FASTA ) + && ( optz.getExtDescNodeDataToReturn() != NodeDataField.GO_TERM_IDS ) ) { for( final String d : data ) { if ( !ForesterUtil.isEmpty( d ) ) { if ( map.containsKey( d ) ) { @@ -451,17 +548,30 @@ public class TreePanelUtil { } } } - } - int size = 0; - if ( ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ ) - && ( optz.getExtDescNodeDataToReturn() != NODE_DATA.SEQUENCE_MOL_SEQ_FASTA ) ) { - for( final Entry e : map.entrySet() ) { - final String v = e.getKey(); - final Object c = e.getValue(); - sb.append( v ); - sb.append( "\t" ); - sb.append( c ); - sb.append( ForesterUtil.LINE_SEPARATOR ); + if ( ( optz.getExtDescNodeDataToReturn() == NodeDataField.DOMAINS_ALL ) + || ( optz.getExtDescNodeDataToReturn() == NodeDataField.DOMAINS_COLLAPSED_PER_PROTEIN ) + || ( optz.getExtDescNodeDataToReturn() == NodeDataField.SEQ_ANNOTATIONS ) ) { + final ArrayList sis = new ArrayList(); + for( final Entry e : map.entrySet() ) { + sis.add( new StringInt( e.getKey(), e.getValue() ) ); + } + Collections.sort( sis, new StringInt.DescendingIntComparator() ); + for( final StringInt si : sis ) { + sb.append( si.getString() ); + sb.append( "\t" ); + sb.append( si.getInt() ); + sb.append( ForesterUtil.LINE_SEPARATOR ); + } + } + else { + for( final Entry e : map.entrySet() ) { + final String v = e.getKey(); + final Object c = e.getValue(); + sb.append( v ); + sb.append( "\t" ); + sb.append( c ); + sb.append( ForesterUtil.LINE_SEPARATOR ); + } } size = map.size(); }