From 4fe245b8f8ced3dfe7bc225388c6a04202aa1718 Mon Sep 17 00:00:00 2001 From: amwaterhouse Date: Wed, 21 Sep 2005 17:08:56 +0000 Subject: [PATCH] Sequences must be aligned before PCA --- src/jalview/appletgui/AlignFrame.java | 18 +++++++++++++++++ src/jalview/gui/AlignFrame.java | 8 ++------ src/jalview/gui/PCAPanel.java | 34 ++++++++++++++++++++++++++++++++- 3 files changed, 53 insertions(+), 7 deletions(-) diff --git a/src/jalview/appletgui/AlignFrame.java b/src/jalview/appletgui/AlignFrame.java index 1cfddf8..3da1401 100755 --- a/src/jalview/appletgui/AlignFrame.java +++ b/src/jalview/appletgui/AlignFrame.java @@ -1125,6 +1125,24 @@ public class AlignFrame public void PCAMenuItem_actionPerformed(ActionEvent e) { + //are the sequences aligned? + if (!viewport.alignment.isAligned()) + { + SequenceI current; + int Width = viewport.getAlignment().getWidth(); + + for (int i = 0; i < viewport.getAlignment().getSequences().size(); + i++) + { + current = viewport.getAlignment().getSequenceAt(i); + + if (current.getLength() < Width) + { + current.insertCharAt(Width - 1, viewport.getGapCharacter()); + } + } + alignPanel.repaint(); + } if ( (viewport.getSelectionGroup() != null && viewport.getSelectionGroup().getSize() < 4 && diff --git a/src/jalview/gui/AlignFrame.java b/src/jalview/gui/AlignFrame.java index b6705ad..4d0e1b2 100755 --- a/src/jalview/gui/AlignFrame.java +++ b/src/jalview/gui/AlignFrame.java @@ -1149,7 +1149,7 @@ public class AlignFrame */ public void font_actionPerformed(ActionEvent e) { - FontChooser fc = new FontChooser(alignPanel); + new FontChooser(alignPanel); } /** @@ -1836,11 +1836,7 @@ public class AlignFrame return; } - PCAPanel pcaPanel = new PCAPanel(viewport); - JInternalFrame frame = new JInternalFrame(); - frame.setContentPane(pcaPanel); - Desktop.addInternalFrame(frame, "Principal component analysis", - 400, 400); + new PCAPanel(viewport); } /** diff --git a/src/jalview/gui/PCAPanel.java b/src/jalview/gui/PCAPanel.java index 8685b3e..26f1160 100755 --- a/src/jalview/gui/PCAPanel.java +++ b/src/jalview/gui/PCAPanel.java @@ -29,6 +29,7 @@ import java.awt.event.*; import java.util.*; import javax.swing.JOptionPane; +import javax.swing.JInternalFrame; /** @@ -55,26 +56,57 @@ public class PCAPanel extends GPCAPanel implements Runnable { this.av = av; + boolean sameLength = true; + if ((av.getSelectionGroup() != null) && (av.getSelectionGroup().getSize() > 3)) { seqs = new Sequence[av.getSelectionGroup().getSize()]; - + int length = av.getSelectionGroup().getSequenceAt(0).getLength(); for (int i = 0; i < av.getSelectionGroup().getSize(); i++) { seqs[i] = av.getSelectionGroup().getSequenceAt(i); + if(seqs[i].getLength()!=length) + { + sameLength = false; + break; + } } } else { seqs = new Sequence[av.getAlignment().getHeight()]; + int length = av.alignment.getSequenceAt(0).getLength(); for (int i = 0; i < av.getAlignment().getHeight(); i++) { seqs[i] = av.getAlignment().getSequenceAt(i); + if(seqs[i].getLength()!=length) + { + sameLength = false; + break; + } + } } + if (!sameLength) + { + JOptionPane.showMessageDialog(Desktop.desktop, + "The sequences must be aligned before calculating PCA.\n" + + "Try using the Pad function in the edit menu,\n" + + "or one of the multiple sequence alignment web services.", + "Sequences not aligned", + JOptionPane.WARNING_MESSAGE); + + return; + } + + JInternalFrame frame = new JInternalFrame(); + frame.setContentPane(this); + Desktop.addInternalFrame(frame, "Principal component analysis", + 400, 400); + rc = new RotatableCanvas(av); add(rc, BorderLayout.CENTER); -- 1.7.10.2