X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPCAPanel.java;h=fe0c4f99ae1d24b972519251597ac183e6a467aa;hb=d053a3c980cf4318b9a19a255f9fc870e74de989;hp=9c852c5c24ca57f40fa01225219e500c0f4ff189;hpb=d423f22792e47dbc800ae220a58677f988971d06;p=jalview.git diff --git a/src/jalview/gui/PCAPanel.java b/src/jalview/gui/PCAPanel.java index 9c852c5..fe0c4f9 100755 --- a/src/jalview/gui/PCAPanel.java +++ b/src/jalview/gui/PCAPanel.java @@ -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, J Engelhardt, LM Lui, G Barton, M Clamp, S Searle * * This file is part of Jalview. * @@ -36,6 +36,7 @@ import jalview.jbgui.*; */ public class PCAPanel extends GPCAPanel implements Runnable { + PCA pca; int top; @@ -68,11 +69,11 @@ public class PCAPanel extends GPCAPanel implements Runnable seqstrings = av.getAlignmentView(av.getSelectionGroup() != null); if (av.getSelectionGroup() == null) { - seqs = av.alignment.getSequencesArray(); + seqs = av.getAlignment().getSequencesArray(); } else { - seqs = av.getSelectionGroup().getSequencesInOrder(av.alignment); + seqs = av.getSelectionGroup().getSequencesInOrder(av.getAlignment()); } SeqCigar sq[] = seqstrings.getSequences(); int length = sq[0].getWidth(); @@ -99,9 +100,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()); @@ -243,9 +242,15 @@ public class PCAPanel extends GPCAPanel implements Runnable public void outputValues_actionPerformed(ActionEvent e) { CutAndPasteTransfer cap = new CutAndPasteTransfer(); - Desktop.addInternalFrame(cap, "PCA details", 500, 500); - - cap.setText(pca.getDetails()); + try + { + cap.setText(pca.getDetails()); + Desktop.addInternalFrame(cap, "PCA details", 500, 500); + } catch (OutOfMemoryError oom) + { + new OOMWarning("opening PCA details", oom); + cap.dispose(); + } } public void showLabels_actionPerformed(ActionEvent e) @@ -408,8 +413,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) @@ -487,4 +492,97 @@ public class PCAPanel extends GPCAPanel implements Runnable } + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GPCAPanel#outputPoints_actionPerformed(java.awt.event.ActionEvent + * ) + */ + protected void outputPoints_actionPerformed(ActionEvent e) + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(); + try + { + cap.setText(getPointsasCsv(false)); + Desktop.addInternalFrame(cap, "Points for " + getTitle(), 500, 500); + } catch (OutOfMemoryError oom) + { + new OOMWarning("exporting PCA points", oom); + cap.dispose(); + } + } + + private String getPointsasCsv(boolean transformed) + { + StringBuffer csv = new StringBuffer(); + csv.append("\"Sequence\""); + 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++) + { + csv.append("," + d); + } + } + csv.append("\n"); + for (int s = 0; s < seqs.length; s++) + { + csv.append("\"" + seqs[s].getName() + "\""); + double fl[]; + if (!transformed) + { + // output pca in correct order + fl = pca.component(s); + for (int d = fl.length - 1; d >= 0; d--) + { + csv.append(","); + csv.append(fl[d]); + } + } + else + { + // output current x,y,z coords for points + fl = rc.getPointPosition(s); + for (int d = 0; d < fl.length; d++) + { + csv.append(","); + csv.append(fl[d]); + } + } + csv.append("\n"); + } + return csv.toString(); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GPCAPanel#outputProjPoints_actionPerformed(java.awt.event + * .ActionEvent) + */ + protected void outputProjPoints_actionPerformed(ActionEvent e) + { + CutAndPasteTransfer cap = new CutAndPasteTransfer(); + try + { + cap.setText(getPointsasCsv(true)); + Desktop.addInternalFrame(cap, "Transformed points for " + getTitle(), + 500, 500); + } catch (OutOfMemoryError oom) + { + new OOMWarning("exporting transformed PCA points", oom); + cap.dispose(); + } + } + }