X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FTreePanelUtil.java;h=b58894d2f5e2775762d1f40cef67c0a660bb41d7;hb=54d8e3a926c3cf3477199c8b85aca478230e223c;hp=7c1cbafadc14b35a58b192442eeaab2b98c4a5a4;hpb=f8ecfc1d254f7f413ee5c47fbb012b609f7f4fd1;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/TreePanelUtil.java b/forester/java/src/org/forester/archaeopteryx/TreePanelUtil.java index 7c1cbaf..b58894d 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; @@ -22,65 +23,27 @@ import org.forester.analysis.TaxonomyDataManager; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyMethods; 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; import org.forester.phylogeny.iterators.PreorderTreeIterator; import org.forester.util.ForesterConstants; import org.forester.util.ForesterUtil; -import org.forester.util.SequenceIdParser; +import org.forester.util.SequenceAccessionTools; +import org.forester.util.StringInt; import org.forester.ws.seqdb.UniProtTaxonomy; public class TreePanelUtil { - static int makeSB( 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 ) ) { - for( final String d : data ) { - if ( !ForesterUtil.isEmpty( d ) ) { - if ( map.containsKey( d ) ) { - map.put( d, map.get( d ) + 1 ); - } - else { - map.put( d, 1 ); - } - } - } - } - 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 ); - } - size = map.size(); - } - else { - for( final String d : data ) { - if ( !ForesterUtil.isEmpty( d ) ) { - sb.append( d ); - sb.append( ForesterUtil.LINE_SEPARATOR ); - } - } - size = data.size(); - } - return size; - } - public final static String createUriForSeqWeb( final PhylogenyNode node, final Configuration conf, final TreePanel tp ) { String uri_str = null; - final String upkb = ForesterUtil.extractUniProtKbProteinSeqIdentifier( node ); + final String upkb = SequenceAccessionTools.obtainUniProtAccessorFromDataFields( node ); if ( !ForesterUtil.isEmpty( upkb ) ) { try { uri_str = ForesterUtil.UNIPROT_KB + URLEncoder.encode( upkb, ForesterConstants.UTF8 ); @@ -91,10 +54,10 @@ public class TreePanelUtil { } } if ( ForesterUtil.isEmpty( uri_str ) ) { - final String v = ForesterUtil.extractGenbankAccessor( node ); + final String v = SequenceAccessionTools.obtainGenbankAccessorFromDataFields( node ); if ( !ForesterUtil.isEmpty( v ) ) { try { - if ( SequenceIdParser.isProtein( v ) ) { + if ( SequenceAccessionTools.isProteinDbQuery( v ) ) { uri_str = ForesterUtil.NCBI_PROTEIN + URLEncoder.encode( v, ForesterConstants.UTF8 ); } else { @@ -108,10 +71,10 @@ public class TreePanelUtil { } } if ( ForesterUtil.isEmpty( uri_str ) ) { - final String v = ForesterUtil.extractRefSeqAccessorAccessor( node ); + final String v = SequenceAccessionTools.obtainRefSeqAccessorFromDataFields( node ); if ( !ForesterUtil.isEmpty( v ) ) { try { - if ( SequenceIdParser.isProtein( v ) ) { + if ( SequenceAccessionTools.isProteinDbQuery( v ) ) { uri_str = ForesterUtil.NCBI_PROTEIN + URLEncoder.encode( v, ForesterConstants.UTF8 ); } else { @@ -125,7 +88,7 @@ public class TreePanelUtil { } } if ( ForesterUtil.isEmpty( uri_str ) ) { - final String v = ForesterUtil.extractGInumber( node ); + final String v = SequenceAccessionTools.obtainGiNumberFromDataFields( node ); if ( !ForesterUtil.isEmpty( v ) ) { try { uri_str = ForesterUtil.NCBI_GI + URLEncoder.encode( v, ForesterConstants.UTF8 ); @@ -139,12 +102,27 @@ public class TreePanelUtil { return uri_str; } + public static List createUrisForPdbWeb( final PhylogenyNode node, + final List pdb_accs, + final Configuration configuration, + final TreePanel treePanel ) { + final List uris = new ArrayList(); + if ( !ForesterUtil.isEmpty( pdb_accs ) ) { + for( final Accession pdb_acc : pdb_accs ) { + if ( !ForesterUtil.isEmpty( pdb_acc.getValue() ) ) { + uris.add( ForesterUtil.PDB + pdb_acc.getValue() ); + } + } + } + return uris; + } + /** * Returns the set of distinct taxonomies of * 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(); @@ -172,7 +150,7 @@ public class TreePanelUtil { if ( cp.isShowSeqSymbols() && node.getNodeData().isHasSequence() && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getSymbol() ) ) { TreePanelUtil - .showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence().getSymbol(), sb ); + .showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence().getSymbol(), sb ); } if ( cp.isShowGeneNames() && node.getNodeData().isHasSequence() && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getGeneName() ) ) { @@ -183,29 +161,29 @@ public class TreePanelUtil { && ( node.getNodeData().getSequence().getAccession() != null ) && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getAccession().toString() ) ) { TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getSequence().getAccession() - .toString(), sb ); + .toString(), sb ); } if ( cp.isShowTaxonomyCode() && node.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getTaxonomyCode() ) ) { TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy() - .getTaxonomyCode(), sb ); + .getTaxonomyCode(), sb ); } if ( cp.isShowTaxonomyScientificNames() && node.getNodeData().isHasTaxonomy() && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getScientificName() ) ) { TreePanelUtil.showExtDescNodeDataUserSelectedHelperHelper( node.getNodeData().getTaxonomy() - .getScientificName(), sb ); + .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 ); - } + .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 ); @@ -223,44 +201,6 @@ public class TreePanelUtil { JOptionPane.showMessageDialog( parent, msg, title, JOptionPane.INFORMATION_MESSAGE ); } - final static Color calculateColorFromString( final String str, final boolean is_taxonomy ) { - final String my_str = str.toUpperCase(); - char first = my_str.charAt( 0 ); - char second = ' '; - char third = ' '; - if ( my_str.length() > 1 ) { - if ( is_taxonomy ) { - second = my_str.charAt( 1 ); - } - else { - second = my_str.charAt( my_str.length() - 1 ); - } - if ( is_taxonomy ) { - if ( my_str.length() > 2 ) { - if ( my_str.indexOf( " " ) > 0 ) { - third = my_str.charAt( my_str.indexOf( " " ) + 1 ); - } - else { - third = my_str.charAt( 2 ); - } - } - } - else if ( my_str.length() > 2 ) { - third = my_str.charAt( ( my_str.length() - 1 ) / 2 ); - } - } - first = TreePanelUtil.normalizeCharForRGB( first ); - second = TreePanelUtil.normalizeCharForRGB( second ); - third = TreePanelUtil.normalizeCharForRGB( third ); - if ( ( first > 235 ) && ( second > 235 ) && ( third > 235 ) ) { - first = 0; - } - else if ( ( first < 60 ) && ( second < 60 ) && ( third < 60 ) ) { - second = 255; - } - return new Color( first, second, third ); - } - final static void collapseSpeciesSpecificSubtrees( final Phylogeny phy ) { boolean inferred = false; for( final PhylogenyNodeIterator it = phy.iteratorPreorder(); it.hasNext(); ) { @@ -271,7 +211,7 @@ public class TreePanelUtil { TreePanelUtil.collapseSubtree( n, true ); if ( !n.getNodeData().isHasTaxonomy() ) { n.getNodeData().setTaxonomy( ( Taxonomy ) n.getAllExternalDescendants().get( 0 ).getNodeData() - .getTaxonomy().copy() ); + .getTaxonomy().copy() ); } inferred = true; } @@ -343,7 +283,7 @@ public class TreePanelUtil { final List descs = PhylogenyMethods.getAllDescendants( n ); for( final PhylogenyNode desc : descs ) { desc.getBranchData() - .setBranchColor( new BranchColor( tree_panel.calculateTaxonomyBasedColor( tax ) ) ); + .setBranchColor( new BranchColor( tree_panel.calculateTaxonomyBasedColor( tax ) ) ); } } } @@ -362,7 +302,7 @@ public class TreePanelUtil { if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getRank() ) && n.getNodeData().getTaxonomy().getRank().equalsIgnoreCase( rank ) ) { final BranchColor c = new BranchColor( tree_panel.calculateTaxonomyBasedColor( n.getNodeData() - .getTaxonomy() ) ); + .getTaxonomy() ) ); TreePanelUtil.colorizeSubtree( n, c ); ++colorizations; if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) { @@ -380,7 +320,7 @@ public class TreePanelUtil { 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 ) ) ); + .colorizeSubtree( node, new BranchColor( true_lineage_to_color_map.get( lin ) ) ); ++colorizations; success = true; break; @@ -459,7 +399,7 @@ public class TreePanelUtil { if ( sb.charAt( sb.length() - 1 ) == ' ' ) { sb.deleteCharAt( sb.length() - 1 ); } - if ( i < ans.size() - 1 ) { + if ( i < ( ans.size() - 1 ) ) { sb.append( ", " ); } } @@ -499,12 +439,65 @@ public class TreePanelUtil { .getSynonyms().isEmpty() ); } - final static char normalizeCharForRGB( char c ) { - c -= 65; - c *= 10.2; - c = c > 255 ? 255 : c; - c = c < 0 ? 0 : c; - return c; + static final int nodeDataIntoStringBuffer( final List data, final Options optz, final StringBuilder sb ) { + final SortedMap map = new TreeMap(); + 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 ) ) { + map.put( d, map.get( d ) + 1 ); + } + else { + map.put( d, 1 ); + } + } + } + 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(); + } + else { + for( final String d : data ) { + if ( !ForesterUtil.isEmpty( d ) ) { + sb.append( d ); + sb.append( ForesterUtil.LINE_SEPARATOR ); + } + } + size = data.size(); + } + return size; + } + + final static String pdbAccToString( final List accs, final int i ) { + if ( ForesterUtil.isEmpty( accs.get( i ).getComment() ) ) { + return accs.get( i ).getValue(); + } + return accs.get( i ).getValue() + " (" + accs.get( i ).getComment().toLowerCase() + ")"; } final static Phylogeny subTree( final PhylogenyNode new_root, final Phylogeny source_phy ) {