in progress
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 22 Aug 2014 20:25:45 +0000 (20:25 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 22 Aug 2014 20:25:45 +0000 (20:25 +0000)
forester/java/src/org/forester/archaeopteryx/ControlPanel.java
forester/java/src/org/forester/archaeopteryx/TreePanel.java
forester/java/src/org/forester/archaeopteryx/phylogeny/data/RenderableMsaSequence.java
forester/java/src/org/forester/archaeopteryx/phylogeny/data/RenderableVector.java
forester/java/src/org/forester/archaeopteryx/tools/PhylogeneticInferrer.java
forester/java/src/org/forester/phylogeny/PhylogenyMethods.java

index d051dab..bafb79d 100644 (file)
@@ -2458,6 +2458,6 @@ final class ControlPanel extends JPanel implements ActionListener {
 
     public boolean isShowMolSequences() {
         // TODO Auto-generated method stub
-        return false;
+        return true;
     }
 }
index e8bbfea..3f6496b 100644 (file)
@@ -660,7 +660,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                     && ( node.getNodeData().getSequence().isMolecularSequenceAligned() )
                     && ( !ForesterUtil.isEmpty( node.getNodeData().getSequence().getMolecularSequence() ) ) ) {
                 // FIXME 
-                sum += 100;
+                sum += RenderableMsaSequence.DEFAULT_WIDTH + 30;
             }
             if ( sum >= max_length ) {
                 _longest_ext_node_info = max_length;
@@ -4883,16 +4883,14 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                 final int h = y < default_height ? ForesterUtil.roundToInt( y ) : default_height;
                 rs.setRenderingHeight( h > 1 ? h : 2 );
                 if ( getControlPanel().isDrawPhylogram() ) {
-                    if ( getOptions().isLineUpRendarableNodeData() ) {
+                   
                         rs.render( ( float ) ( ( getMaxDistanceToRoot() * getXcorrectionFactor() ) + _length_of_longest_text ),
                                    node.getYcoord() - ( h / 2 ),
                                    g,
                                    this,
                                    to_pdf );
-                    }
-                    else {
-                        rs.render( node.getXcoord() + x, node.getYcoord() - ( h / 2 ), g, this, to_pdf );
-                    }
+                    
+                    
                 }
                 else {
                     rs.render( getPhylogeny().getFirstExternalNode().getXcoord() + _length_of_longest_text,
index baa1284..c83a5da 100644 (file)
@@ -32,31 +32,20 @@ import java.awt.Graphics2D;
 import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 import java.io.Writer;
-import java.util.List;
 
-import org.forester.archaeopteryx.AptxUtil;
 import org.forester.archaeopteryx.Configuration;
 import org.forester.archaeopteryx.TreePanel;
 import org.forester.phylogeny.data.PhylogenyData;
-import org.forester.phylogeny.data.PhylogenyDataUtil;
-import org.forester.util.DescriptiveStatistics;
-import org.forester.util.ForesterUtil;
 
 public final class RenderableMsaSequence implements RenderablePhylogenyData {
 
-    final static int                VECTOR_DEFAULT_HEIGHT   = 12;
-    public final static int         VECTOR_DEFAULT_WIDTH    = 120;
-    private double                  _rendering_factor_width = 1.0;
-    private String            _seq;
-    private final Rectangle2D       _rectangle              = new Rectangle2D.Float();
-    private double                  _height                 = VECTOR_DEFAULT_HEIGHT;
-    private double                  _min;
-    private double                  _max;
-    private double                  _mean;
-    private Color                   _min_color              = Color.BLUE;
-    private Color                   _max_color              = Color.YELLOW;
-    private Color                   _mean_color             = Color.WHITE;
-    private int                     _width                  = VECTOR_DEFAULT_WIDTH;
+    final static int                     DEFAULT_HEIGHT          = 12;
+    final public static int              DEFAULT_WIDTH           = 400;
+    private double                       _rendering_factor_width = 1.0;
+    private char                         _seq[];
+    private final Rectangle2D            _rectangle              = new Rectangle2D.Float();
+    private double                       _height                 = DEFAULT_HEIGHT;
+    private final float                  _width                  = DEFAULT_WIDTH;
     private static RenderableMsaSequence _instance               = null;
 
     private RenderableMsaSequence() {
@@ -65,7 +54,7 @@ public final class RenderableMsaSequence implements RenderablePhylogenyData {
 
     @Override
     public StringBuffer asSimpleText() {
-        return new StringBuffer( _seq );
+        return new StringBuffer( _seq.toString() );
     }
 
     @Override
@@ -103,7 +92,7 @@ public final class RenderableMsaSequence implements RenderablePhylogenyData {
     }
 
     public int getTotalLength() {
-        return _seq.length();
+        return _seq.length;
     }
 
     @Override
@@ -117,10 +106,23 @@ public final class RenderableMsaSequence implements RenderablePhylogenyData {
                         final Graphics2D g,
                         final TreePanel tree_panel,
                         final boolean to_pdf ) {
-        final double y = y1;
-        final double start = x1 + 20.0;
-        g.drawString( _seq, x1, y1
-                                       );
+        final float y = y1;
+        final float start = x1 + 20;
+        final float width = _width / _seq.length;
+        for( int i = 0; i < _seq.length; ++i ) {
+            final char c = _seq[ i ];
+            if ( width < 4 ) {
+                if ( c != '-' ) {
+                    g.setColor( calculateColor( c ) );
+                    _rectangle.setFrame( start + ( i * width ), y - 0.5, width + 1, getRenderingHeight() );
+                    g.fill( _rectangle );
+                }
+            }
+            else {
+                g.setColor( calculateColor( c ) );
+                g.drawString( String.valueOf( c ), start + ( i * width ), y - 0.5f );
+            }
+        }
     }
 
     @Override
@@ -147,24 +149,38 @@ public final class RenderableMsaSequence implements RenderablePhylogenyData {
         throw new NoSuchMethodError();
     }
 
-    private Color calculateColor( final double v ) {
-        return ForesterUtil.calcColor( v, _min, _max, _mean, _min_color, _max_color, _mean_color );
+    private Color calculateColor( final char c ) {
+        if ( ( c == 'G' ) || ( c == 'A' ) || ( c == 'S' ) || ( c == 'T' ) ) {
+            return Color.ORANGE;
+        }
+        else if ( ( c == 'N' ) || ( c == 'Q' ) || ( c == 'H' ) ) {
+            return Color.MAGENTA;
+        }
+        else if ( ( c == 'D' ) || ( c == 'E' ) ) {
+            return Color.RED;
+        }
+        else if ( ( c == 'K' ) || ( c == 'R' ) ) {
+            return Color.BLUE;
+        }
+        else if ( c == '-' ) {
+            return Color.GRAY;
+        }
+        else {
+            return Color.GREEN;
+        }
     }
 
     private double getRenderingHeight() {
         return _height;
     }
 
-    public static RenderableMsaSequence createInstance( final String seq,
-                                                   final Configuration configuration ) {
+    public static RenderableMsaSequence createInstance( final String seq, final Configuration configuration ) {
         if ( _instance == null ) {
             _instance = new RenderableMsaSequence();
         }
-        _instance._seq = seq;
+        _instance._seq = seq.toCharArray();
         if ( configuration != null ) {
-          
         }
-       
         return _instance;
     }
 }
index 5399cc6..4fd86bd 100644 (file)
@@ -121,7 +121,7 @@ public final class RenderableVector implements RenderablePhylogenyData {
         final double width = ( double ) _width / _values.size();
         for( int i = 0; i < _values.size(); ++i ) {
             g.setColor( calculateColor( _values.get( i ) ) );
-            _rectangle.setFrame( start + ( i * width ), y - 0.5, width, getRenderingHeight() );
+            _rectangle.setFrame( start + ( i * width ), y - 0.5, width + 1, getRenderingHeight() );
             g.fill( _rectangle );
         }
     }
index f972745..57d9c3c 100644 (file)
@@ -144,7 +144,9 @@ public class PhylogeneticInferrer extends RunnableProcess {
         }
         final NeighborJoiningF nj = NeighborJoiningF.createInstance( false, 5 );
         final Phylogeny phy = nj.execute( m );
+        PhylogenyMethods.addMolecularSeqsToTree( phy, msa );
         PhylogenyMethods.extractFastaInformation( phy );
+        
         return phy;
     }
 
index 9e0c782..9426a96 100644 (file)
@@ -46,6 +46,7 @@ import org.forester.io.parsers.PhylogenyParser;
 import org.forester.io.parsers.phyloxml.PhyloXmlDataFormatException;\r
 import org.forester.io.parsers.phyloxml.PhyloXmlUtil;\r
 import org.forester.io.parsers.util.PhylogenyParserException;\r
+import org.forester.msa.Msa;\r
 import org.forester.phylogeny.data.Accession;\r
 import org.forester.phylogeny.data.Annotation;\r
 import org.forester.phylogeny.data.BranchColor;\r
@@ -1810,4 +1811,22 @@ public class PhylogenyMethods {
         TAXONOMY_ID_UNIPROT_2,\r
         TAXONOMY_SCIENTIFIC_NAME;\r
     }\r
+\r
+    public static void addMolecularSeqsToTree( final Phylogeny phy, final Msa msa ) {\r
+        for( int s = 0; s < msa.getNumberOfSequences(); ++s ) {\r
+            final org.forester.sequence.Sequence seq = msa.getSequence( s );\r
+            final PhylogenyNode node = phy.getNode( seq.getIdentifier() );\r
+            final org.forester.phylogeny.data.Sequence new_seq = new Sequence();\r
+            new_seq.setMolecularSequenceAligned( true );\r
+            new_seq.setMolecularSequence( seq.getMolecularSequenceAsString() );\r
+            new_seq.setName( seq.getIdentifier() );\r
+            try {\r
+                new_seq.setType( PhyloXmlUtil.SEQ_TYPE_PROTEIN );\r
+            }\r
+            catch ( final PhyloXmlDataFormatException ignore ) {\r
+                // do nothing\r
+            }\r
+            node.getNodeData().addSequence( new_seq );\r
+        }\r
+    }\r
 }\r