import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map.Entry;
import java.util.Set;
+import java.util.SortedMap;
import java.util.SortedSet;
+import java.util.TreeMap;
import javax.swing.BorderFactory;
import javax.swing.JApplet;
public final class TreePanel extends JPanel implements ActionListener, MouseWheelListener, Printable {
+ private static final BasicStroke STROKE_2 = new BasicStroke( 2f );
+ private static final BasicStroke STROKE_1 = new BasicStroke( 1f );
+ private static final BasicStroke STROKE_075 = new BasicStroke( 0.75f );
+ private static final BasicStroke STROKE_05 = new BasicStroke( 0.5f );
+ private static final BasicStroke STROKE_025 = new BasicStroke( 0.25f );
+ private static final BasicStroke STROKE_01 = new BasicStroke( 0.1f );
+ private static final BasicStroke STROKE_005 = new BasicStroke( 0.05f );
private static final float PI = ( float ) ( Math.PI );
private static final double TWO_PI = 2 * Math.PI;
private static final float ONEHALF_PI = ( float ) ( 1.5 * Math.PI );
if ( !ForesterUtil.isEmpty( tax.getTaxonomyCode() ) ) {
c = getControlPanel().getSpeciesColors().get( tax.getTaxonomyCode() );
}
- if ( c == null && !ForesterUtil.isEmpty( tax.getScientificName() ) ) {
+ if ( ( c == null ) && !ForesterUtil.isEmpty( tax.getScientificName() ) ) {
c = getControlPanel().getSpeciesColors().get( tax.getScientificName() );
}
if ( c == null ) {
c = AptxUtil.calculateColorFromString( tax.getTaxonomyCode() );
getControlPanel().getSpeciesColors().put( tax.getTaxonomyCode(), c );
}
- else {
+ else {
c = AptxUtil.calculateColorFromString( tax.getScientificName() );
getControlPanel().getSpeciesColors().put( tax.getScientificName(), c );
}
g.fillRect( graphics_file_x, graphics_file_y, graphics_file_width, graphics_file_height );
}
}
- g.setStroke( new BasicStroke( 1 ) );
+ setupStroke( g );
}
else {
g.setStroke( new BasicStroke( getOptions().getPrintLineWidth() ) );
return Blast.isContainsQueryForBlast( node );
}
+ final private String isCanOpenSeqWeb( final PhylogenyNode node ) {
+ String v = ForesterUtil.extractUniProtKbProteinSeqIdentifier( node );
+ if ( ForesterUtil.isEmpty( v ) ) {
+ v = ForesterUtil.extractGenbankAccessor( node );
+ }
+ if ( ForesterUtil.isEmpty( v ) ) {
+ v = ForesterUtil.extractRefSeqAccessorAccessor( node );
+ }
+ if ( ForesterUtil.isEmpty( v ) ) {
+ v = ForesterUtil.extractGInumber( node );
+ }
+ return v;
+ }
+
final private boolean isCanOpenTaxWeb( final PhylogenyNode node ) {
if ( node.getNodeData().isHasTaxonomy()
&& ( ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getScientificName() ) )
return "Scientific Names";
case TAXONOMY_CODE:
return "Taxonomy Codes";
+ case TAXONOMY_COMM0N_NAME:
+ return "Taxonomy Common Names";
case UNKNOWN:
return "User Selected Data";
default:
}
}
- final private String isCanOpenSeqWeb( final PhylogenyNode node ) {
- String v = ForesterUtil.extractUniProtKbProteinSeqIdentifier( node );
- if ( ForesterUtil.isEmpty( v ) ) {
- v = ForesterUtil.extractGenbankAccessor( node );
- }
- if ( ForesterUtil.isEmpty( v ) ) {
- v = ForesterUtil.extractRefSeqAccessorAccessor( node );
- }
- if ( ForesterUtil.isEmpty( v ) ) {
- v = ForesterUtil.extractGInumber( node );
- }
- return v;
- }
-
final private void openSeqWeb( final PhylogenyNode node ) {
if ( ForesterUtil.isEmpty( isCanOpenSeqWeb( node ) ) ) {
cannotOpenBrowserWarningMessage( "sequence" );
final float y = getVisibleRect().y + getOvYPosition() + ( getOvMaxHeight() / y_ratio );
g.setColor( getTreeColorSet().getFoundColor() );
getOvRectangle().setRect( x, y, width, height );
+ final Stroke s = g.getStroke();
+ g.setStroke( STROKE_1 );
if ( ( width < 6 ) && ( height < 6 ) ) {
drawRectFilled( x, y, 6, 6, g );
getOvVirtualRectangle().setRect( x, y, 6, 6 );
}
getOvVirtualRectangle().setRect( x, y, width, height );
}
+ g.setStroke( s );
}
final private void paintPhylogenyLite( final Graphics2D g ) {
.getWidth() ) ) ) );
_phylogeny.getRoot().setYSecondary( ( getVisibleRect().y + getOvYStart() ) );
final Stroke s = g.getStroke();
- g.setStroke( new BasicStroke( 0.5f ) ); //TODO
+ g.setStroke( STROKE_05 );
for( final PhylogenyNode element : _nodes_in_preorder ) {
paintNodeLite( g, element );
}
else {
g.setColor( getTreeColorSet().getBranchLengthColor() );
}
+ final Stroke s = g.getStroke();
+ g.setStroke( STROKE_1 );
drawLine( x1, y1, x1, y2, g );
drawLine( x2, y1, x2, y2, g );
drawLine( x1, y3, x2, y3, g );
if ( getScaleLabel() != null ) {
g.drawString( getScaleLabel(), ( x1 + 2 ), y3 - 2 );
}
+ g.setStroke( s );
}
final private int paintTaxonomy( final Graphics2D g,
_scale_label = scale_label;
}
+ private final void setupStroke( final Graphics2D g ) {
+ if ( getYdistance() < 0.001 ) {
+ g.setStroke( STROKE_005 );
+ }
+ else if ( getYdistance() < 0.01 ) {
+ g.setStroke( STROKE_01 );
+ }
+ else if ( getYdistance() < 0.5 ) {
+ g.setStroke( STROKE_025 );
+ }
+ else if ( getYdistance() < 1 ) {
+ g.setStroke( STROKE_05 );
+ }
+ else if ( getYdistance() < 2 ) {
+ g.setStroke( STROKE_075 );
+ }
+ else if ( getYdistance() < 20 ) {
+ g.setStroke( STROKE_1 );
+ }
+ else {
+ g.setStroke( STROKE_2 );
+ }
+ }
+
final private void setUpUrtFactor() {
final int d = getVisibleRect().width < getVisibleRect().height ? getVisibleRect().width
: getVisibleRect().height;
final StringBuilder sb = new StringBuilder();
if ( n.getNodeData().isHasSequence()
&& !ForesterUtil.isEmpty( n.getNodeData().getSequence().getMolecularSequence() ) ) {
+ final StringBuilder ann = new StringBuilder();
+ if ( !ForesterUtil.isEmpty( n.getName() ) ) {
+ ann.append( n.getName() );
+ ann.append( "|" );
+ }
+ if ( !ForesterUtil.isEmpty( n.getNodeData().getSequence().getSymbol() ) ) {
+ ann.append( "SYM=" );
+ ann.append( n.getNodeData().getSequence().getSymbol() );
+ ann.append( "|" );
+ }
if ( !ForesterUtil.isEmpty( n.getNodeData().getSequence().getName() ) ) {
- sb.append( SequenceWriter.toFasta( n.getNodeData().getSequence().getName(), n.getNodeData()
- .getSequence().getMolecularSequence(), 60 ) );
+ ann.append( "NAME=" );
+ ann.append( n.getNodeData().getSequence().getName() );
+ ann.append( "|" );
}
- else {
- sb.append( SequenceWriter.toFasta( n.getName(), n.getNodeData().getSequence()
- .getMolecularSequence(), 60 ) );
+ if ( n.getNodeData().getSequence().getAccession() != null ) {
+ ann.append( "ACC=" );
+ ann.append( n.getNodeData().getSequence().getAccession().asText() );
+ ann.append( "|" );
+ }
+ if ( n.getNodeData().isHasTaxonomy() ) {
+ if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getTaxonomyCode() ) ) {
+ ann.append( "TAXID=" );
+ ann.append( n.getNodeData().getTaxonomy().getTaxonomyCode() );
+ ann.append( "|" );
+ }
+ if ( !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getScientificName() ) ) {
+ ann.append( "SN=" );
+ ann.append( n.getNodeData().getTaxonomy().getScientificName() );
+ ann.append( "|" );
+ }
+ }
+ String ann_str = ann.toString().trim();
+ if ( ann_str.endsWith( "|" ) ) {
+ ann_str = ann_str.substring( 0, ann_str.length() - 1 );
}
+ sb.append( SequenceWriter.toFasta( ann_str, n.getNodeData().getSequence()
+ .getMolecularSequence(), 60 ) );
data.add( sb.toString() );
}
break;
data.add( n.getNodeData().getTaxonomy().getScientificName() );
}
break;
+ case TAXONOMY_COMM0N_NAME:
+ if ( n.getNodeData().isHasTaxonomy()
+ && !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getCommonName() ) ) {
+ data.add( n.getNodeData().getTaxonomy().getCommonName() );
+ }
+ break;
case TAXONOMY_CODE:
if ( n.getNodeData().isHasTaxonomy()
&& !ForesterUtil.isEmpty( n.getNodeData().getTaxonomy().getTaxonomyCode() ) ) {
+ getOptions().getExtDescNodeDataToReturn() );
}
} // for loop
+ final StringBuilder sb = new StringBuilder();
+ final int size = makeSB( data, getOptions(), sb );
if ( ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE )
|| ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.BUFFER_ONLY ) ) {
- final StringBuilder sb = new StringBuilder();
- for( final String d : data ) {
- if ( !ForesterUtil.isEmpty( d ) ) {
- if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE ) {
- System.out.println( d );
- }
- sb.append( d );
- sb.append( ForesterUtil.LINE_SEPARATOR );
- }
+ if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.CONSOLE ) {
+ System.out.println( sb );
}
if ( sb.length() < 1 ) {
clearCurrentExternalNodesDataBuffer();
}
}
else if ( getConfiguration().getExtNodeDataReturnOn() == EXT_NODE_DATA_RETURN_ON.WINODW ) {
- final StringBuilder sb = new StringBuilder();
- for( final String d : data ) {
- if ( !ForesterUtil.isEmpty( d ) ) {
- sb.append( d );
- sb.append( ForesterUtil.LINE_SEPARATOR );
- }
- }
if ( sb.length() < 1 ) {
AptxUtil.showInformationMessage( this,
"No Appropriate Data (" + obtainTitleForExtDescNodeData() + ")",
}
else {
setCurrentExternalNodesDataBuffer( sb );
- final String title = "External Descendants "
- + ( getOptions().getExtDescNodeDataToReturn() == NODE_DATA.UNKNOWN ? "Data"
- : obtainTitleForExtDescNodeData() ) + " (" + data.size() + "/"
- + node.getNumberOfExternalNodes() + ") For Node " + node;
+ final String title = ( getOptions().getExtDescNodeDataToReturn() == NODE_DATA.UNKNOWN ? "Data"
+ : obtainTitleForExtDescNodeData() )
+ + " for "
+ + data.size()
+ + "/"
+ + node.getNumberOfExternalNodes()
+ + " external descendats of node "
+ + node
+ + ", unique entries: " + size;
final String s = sb.toString().trim();
if ( getMainPanel().getMainFrame() == null ) {
// Must be "E" applet version.
}
}
+ private int makeSB( final List<String> data, final Options optz, final StringBuilder sb ) {
+ final SortedMap<String, Integer> map = new TreeMap<String, Integer>();
+ 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<String, Integer> 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 private void showNodeDataPopup( final MouseEvent e, final PhylogenyNode node ) {
try {
if ( ( node.getName().length() > 0 )