JAL-1013 - rename nucleotide and ensure current calculation score model reflected...
[jalview.git] / src / jalview / gui / PCAPanel.java
index 3d38a87..e3959ea 100755 (executable)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
- * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7)
+ * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
  * 
  * This file is part of Jalview.
  * 
@@ -52,6 +52,11 @@ public class PCAPanel extends GPCAPanel implements Runnable
   SequenceI[] seqs;
 
   /**
+   * use the identity matrix for calculating similarity between sequences. 
+   */
+  private boolean nucleotide=false;
+
+  /**
    * Creates a new PCAPanel object.
    * 
    * @param av
@@ -67,6 +72,7 @@ public class PCAPanel extends GPCAPanel implements Runnable
     boolean sameLength = true;
 
     seqstrings = av.getAlignmentView(av.getSelectionGroup() != null);
+    nucleotide=av.getAlignment().isNucleotide();
     if (av.getSelectionGroup() == null)
     {
       seqs = av.alignment.getSequencesArray();
@@ -100,9 +106,7 @@ public class PCAPanel extends GPCAPanel implements Runnable
       return;
     }
 
-    Desktop
-            .addInternalFrame(this, "Principal component analysis", 400,
-                    400);
+    Desktop.addInternalFrame(this, "Principal component analysis", 400, 400);
 
     PaintRefresher.Register(this, av.getSequenceSetId());
 
@@ -131,7 +135,8 @@ public class PCAPanel extends GPCAPanel implements Runnable
   {
     try
     {
-      pca = new PCA(seqstrings.getSequenceStrings(' '));
+      calcSettings.setEnabled(false);
+      pca = new PCA(seqstrings.getSequenceStrings(' '), nucleotide);
       pca.run();
 
       // Now find the component coordinates
@@ -172,15 +177,30 @@ public class PCAPanel extends GPCAPanel implements Runnable
       rc.repaint();
 
       addKeyListener(rc);
+      nuclSetting.setSelected(nucleotide);
+      protSetting.setSelected(!nucleotide);
 
     } catch (OutOfMemoryError er)
     {
       new OOMWarning("calculating PCA", er);
 
     }
-
+    calcSettings.setEnabled(true);
+  }
+  @Override
+  protected void nuclSetting_actionPerfomed(ActionEvent arg0)
+  {
+    nucleotide=true;
+    Thread worker = new Thread(this);
+    worker.start();
+  }
+  @Override
+  protected void protSetting_actionPerfomed(ActionEvent arg0)
+  {
+    nucleotide=false;
+    Thread worker = new Thread(this);
+    worker.start();
   }
-
   /**
    * DOCUMENT ME!
    */
@@ -244,12 +264,13 @@ public class PCAPanel extends GPCAPanel implements Runnable
   public void outputValues_actionPerformed(ActionEvent e)
   {
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
-    try {
+    try
+    {
       cap.setText(pca.getDetails());
       Desktop.addInternalFrame(cap, "PCA details", 500, 500);
     } catch (OutOfMemoryError oom)
     {
-      new OOMWarning("opening PCA details",oom);
+      new OOMWarning("opening PCA details", oom);
       cap.dispose();
     }
   }
@@ -414,8 +435,8 @@ public class PCAPanel extends GPCAPanel implements Runnable
     else
     {
       im = new jalview.util.ImageMaker(this, jalview.util.ImageMaker.EPS,
-              "Make EPS file from PCA", width, height, null, this
-                      .getTitle());
+              "Make EPS file from PCA", width, height, null,
+              this.getTitle());
     }
 
     if (im.getGraphics() != null)
@@ -492,18 +513,24 @@ public class PCAPanel extends GPCAPanel implements Runnable
     associateViewsMenu.add(itemf);
 
   }
-  /* (non-Javadoc)
-   * @see jalview.jbgui.GPCAPanel#outputPoints_actionPerformed(java.awt.event.ActionEvent)
+
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * jalview.jbgui.GPCAPanel#outputPoints_actionPerformed(java.awt.event.ActionEvent
+   * )
    */
   protected void outputPoints_actionPerformed(ActionEvent e)
   {
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
-    try {
+    try
+    {
       cap.setText(getPointsasCsv(false));
-      Desktop.addInternalFrame(cap, "Points for "+getTitle(), 500, 500);
+      Desktop.addInternalFrame(cap, "Points for " + getTitle(), 500, 500);
     } catch (OutOfMemoryError oom)
     {
-      new OOMWarning("exporting PCA points",oom);
+      new OOMWarning("exporting PCA points", oom);
       cap.dispose();
     }
   }
@@ -512,36 +539,42 @@ public class PCAPanel extends GPCAPanel implements Runnable
   {
     StringBuffer csv = new StringBuffer();
     csv.append("\"Sequence\"");
-    if (transformed) {
+    if (transformed)
+    {
       csv.append(",");
       csv.append(xCombobox.getSelectedIndex());
       csv.append(",");
       csv.append(yCombobox.getSelectedIndex());
       csv.append(",");
       csv.append(zCombobox.getSelectedIndex());
-    } else {
-      for (int d=1,dmax=pca.component(1).length;d<=dmax;d++)
+    }
+    else
+    {
+      for (int d = 1, dmax = pca.component(1).length; d <= dmax; d++)
       {
-        csv.append(","+d);
+        csv.append("," + d);
       }
     }
     csv.append("\n");
-    for (int s=0;s<seqs.length;s++)
+    for (int s = 0; s < seqs.length; s++)
     {
-      csv.append("\""+seqs[s].getName()+"\"");
+      csv.append("\"" + seqs[s].getName() + "\"");
       double fl[];
-      if (!transformed) {
+      if (!transformed)
+      {
         // output pca in correct order
         fl = pca.component(s);
-        for (int d=fl.length-1; d>=0;d--)
+        for (int d = fl.length - 1; d >= 0; d--)
         {
           csv.append(",");
           csv.append(fl[d]);
         }
-    } else {
-      // output current x,y,z coords for points
+      }
+      else
+      {
+        // output current x,y,z coords for points
         fl = rc.getPointPosition(s);
-        for (int d=0; d<fl.length;d++)
+        for (int d = 0; d < fl.length; d++)
         {
           csv.append(",");
           csv.append(fl[d]);
@@ -552,18 +585,24 @@ public class PCAPanel extends GPCAPanel implements Runnable
     return csv.toString();
   }
 
-  /* (non-Javadoc)
-   * @see jalview.jbgui.GPCAPanel#outputProjPoints_actionPerformed(java.awt.event.ActionEvent)
+  /*
+   * (non-Javadoc)
+   * 
+   * @see
+   * jalview.jbgui.GPCAPanel#outputProjPoints_actionPerformed(java.awt.event
+   * .ActionEvent)
    */
   protected void outputProjPoints_actionPerformed(ActionEvent e)
   {
     CutAndPasteTransfer cap = new CutAndPasteTransfer();
-    try {
+    try
+    {
       cap.setText(getPointsasCsv(true));
-      Desktop.addInternalFrame(cap, "Transformed points for "+getTitle(), 500, 500);
+      Desktop.addInternalFrame(cap, "Transformed points for " + getTitle(),
+              500, 500);
     } catch (OutOfMemoryError oom)
     {
-      new OOMWarning("exporting transformed PCA points",oom);
+      new OOMWarning("exporting transformed PCA points", oom);
       cap.dispose();
     }
   }