X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fgui%2FPairwiseAlignPanel.java;h=f33b2d64f6b0c27d44a22b34e0ce187cee67ae7f;hb=747167089ecf8d6afc70d417f5a20352e029bd95;hp=972d4f5a81f190d525eebda14204e8ccf4a29f5a;hpb=1340920fd1b15c9bc8cd2284def7ec176a4989d5;p=jalview.git
diff --git a/src/jalview/gui/PairwiseAlignPanel.java b/src/jalview/gui/PairwiseAlignPanel.java
index 972d4f5..f33b2d6 100755
--- a/src/jalview/gui/PairwiseAlignPanel.java
+++ b/src/jalview/gui/PairwiseAlignPanel.java
@@ -1,72 +1,194 @@
-package jalview.gui;
-
-import jalview.datamodel.*;
-import jalview.jbgui.GPairwiseAlignPanel;
-import jalview.analysis.*;
-import java.awt.event.*;
-import javax.swing.*;
-import java.util.*;
-
-
-public class PairwiseAlignPanel extends GPairwiseAlignPanel
-{
- Vector sequences = new Vector();
- AlignViewport av;
-
- public PairwiseAlignPanel(AlignViewport av)
- {
- super();
- this.av = av;
- float scores[][] = new float[av.getAlignment().getHeight()][av.getAlignment().getHeight()];
- double totscore = 0;
- int count = av.getSelectionGroup().getSize();
-
- int acount = 0;
- for (int i = 1; i < count; i++)
- {
- for (int j = 0; j < i; j++)
- {
- acount++;
- AlignSeq as = new AlignSeq(av.getSelectionGroup().getSequenceAt(i),
- av.getSelectionGroup().getSequenceAt(j),"pep");
-
- as.calcScoreMatrix();
- as.traceAlignment();
- as.printAlignment();
- scores[i][j] = (float)as.getMaxScore()/(float)as.getASeq1().length;
- totscore = totscore + scores[i][j];
-
- textarea.append(as.getOutput());
- sequences.add( new Sequence( as.getS1().getName(), as.getAStr1()) );
- sequences.add( new Sequence( as.getS2().getName(), as.getAStr2()) );
-
-
- }
- }
-
- if (count > 2)
- {
- for (int i = 0; i < count;i++)
- for (int j = 0; j < i; j++)
- jalview.util.Format.print(System.out,"%7.3f",scores[i][j]/totscore);
- }
- }
-
-
- protected void viewInEditorButton_actionPerformed(ActionEvent e)
- {
-
- Sequence [] seq = new Sequence[sequences.size()];
-
- for (int i=0;i.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
+package jalview.gui;
+
+import jalview.analysis.AlignSeq;
+import jalview.api.AlignViewportI;
+import jalview.datamodel.Alignment;
+import jalview.datamodel.AlignmentView;
+import jalview.datamodel.SequenceGroup;
+import jalview.datamodel.SequenceI;
+import jalview.jbgui.GPairwiseAlignPanel;
+import jalview.util.MessageManager;
+
+import java.awt.event.ActionEvent;
+import java.util.Vector;
+
+/**
+ * DOCUMENT ME!
+ *
+ * @author $author$
+ * @version $Revision$
+ */
+public class PairwiseAlignPanel extends GPairwiseAlignPanel
+{
+
+ private static final String DASHES = "---------------------\n";
+
+ AlignViewportI av;
+
+ Vector sequences;
+
+ /**
+ * Creates a new PairwiseAlignPanel object.
+ *
+ * @param viewport
+ */
+ public PairwiseAlignPanel(AlignViewportI viewport)
+ {
+ super();
+ this.av = viewport;
+
+ sequences = new Vector<>();
+
+ SequenceGroup selectionGroup = viewport.getSelectionGroup();
+ boolean isSelection = selectionGroup != null
+ && selectionGroup.getSize() > 0;
+ AlignmentView view = viewport.getAlignmentView(isSelection);
+ // String[] seqStrings = viewport.getViewAsString(true);
+ String[] seqStrings = view
+ .getSequenceStrings(viewport.getGapCharacter());
+
+ SequenceI[] seqs;
+ if (isSelection)
+ {
+ seqs = (SequenceI[]) view
+ .getAlignmentAndHiddenColumns(viewport.getGapCharacter())[0];
+ }
+ else
+ {
+ seqs = av.getAlignment().getSequencesArray();
+ }
+
+ String type = (viewport.getAlignment().isNucleotide()) ? AlignSeq.DNA
+ : AlignSeq.PEP;
+
+ float[][] scores = new float[seqs.length][seqs.length];
+ double totscore = 0D;
+ int count = seqs.length;
+ boolean first = true;
+
+ for (int i = 1; i < count; i++)
+ {
+ for (int j = 0; j < i; j++)
+ {
+ AlignSeq as = new AlignSeq(seqs[i], seqStrings[i], seqs[j],
+ seqStrings[j], type);
+
+ if (as.s1str.length() == 0 || as.s2str.length() == 0)
+ {
+ continue;
+ }
+
+ as.calcScoreMatrix();
+ as.traceAlignment();
+
+ if (!first)
+ {
+ System.out.println(DASHES);
+ textarea.append(DASHES);
+ }
+ first = false;
+ as.printAlignment(System.out);
+ scores[i][j] = as.getMaxScore() / as.getASeq1().length;
+ totscore = totscore + scores[i][j];
+
+ textarea.append(as.getOutput());
+ sequences.add(as.getAlignedSeq1());
+ sequences.add(as.getAlignedSeq2());
+ }
+ }
+
+ if (count > 2)
+ {
+ printScoreMatrix(seqs, scores, totscore);
+ }
+ }
+
+ /**
+ * Prints a matrix of seqi-seqj pairwise alignment scores to sysout
+ *
+ * @param seqs
+ * @param scores
+ * @param totscore
+ */
+ protected void printScoreMatrix(SequenceI[] seqs, float[][] scores,
+ double totscore)
+ {
+ System.out
+ .println("Pairwise alignment scaled similarity score matrix\n");
+
+ for (int i = 0; i < seqs.length; i++)
+ {
+ System.out.println(
+ String.format("%3d %s", i + 1, seqs[i].getDisplayId(true)));
+ }
+
+ /*
+ * table heading columns for sequences 1, 2, 3...
+ */
+ System.out.print("\n ");
+ for (int i = 0; i < seqs.length; i++)
+ {
+ System.out.print(String.format("%7d", i + 1));
+ }
+ System.out.println();
+
+ for (int i = 0; i < seqs.length; i++)
+ {
+ System.out.print(String.format("%3d", i + 1));
+ for (int j = 0; j < i; j++)
+ {
+ /*
+ * as a fraction of tot score, outputs are 0 <= score <= 1
+ */
+ System.out.print(String.format("%7.3f", scores[i][j] / totscore));
+ }
+ System.out.println();
+ }
+
+ System.out.println("\n");
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @param e
+ * DOCUMENT ME!
+ */
+ @Override
+ protected void viewInEditorButton_actionPerformed(ActionEvent e)
+ {
+ SequenceI[] seq = new SequenceI[sequences.size()];
+
+ for (int i = 0; i < sequences.size(); i++)
+ {
+ seq[i] = sequences.elementAt(i);
+ }
+
+ AlignFrame af = new AlignFrame(new Alignment(seq),
+ AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+
+ Desktop.addInternalFrame(af,
+ MessageManager.getString("label.pairwise_aligned_sequences"),
+ AlignFrame.DEFAULT_WIDTH, AlignFrame.DEFAULT_HEIGHT);
+ }
+}