/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
- * 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.
*
import java.io.*;
import jalview.datamodel.*;
+import jalview.datamodel.BinarySequence.InvalidSequenceTypeException;
import jalview.math.*;
+import jalview.schemes.ResidueProperties;
+import jalview.schemes.ScoreMatrix;
/**
* Performs Principal Component Analysis on given sequences
/**
* Creates a new PCA object.
- *
+ * By default, uses blosum62 matrix to generate sequence similarity matrices
* @param s
- * Set of sequences to perform PCA on
+ * Set of amino acid sequences to perform PCA on
*/
public PCA(String[] s)
{
+ this(s, false);
+ }
+
+ /**
+ * Creates a new PCA object.
+ * By default, uses blosum62 matrix to generate sequence similarity matrices
+ * @param s
+ * Set of sequences to perform PCA on
+ * @param nucleotides if true, uses standard DNA/RNA matrix for sequence similarity calculation.
+ */
+ public PCA(String[] s, boolean nucleotides)
+ {
BinarySequence[] bs = new BinarySequence[s.length];
int ii = 0;
while ((ii < s.length) && (s[ii] != null))
{
- bs[ii] = new BinarySequence(s[ii]);
+ bs[ii] = new BinarySequence(s[ii],nucleotides);
bs[ii].encode();
ii++;
}
BinarySequence[] bs2 = new BinarySequence[s.length];
ii = 0;
+ String sm=nucleotides ? "DNA" : "BLOSUM62";
+ ScoreMatrix smtrx=ResidueProperties.getScoreMatrix(sm);
+ details.append("PCA calculation using "+sm+" sequence similarity matrix\n========\n\n");
+
while ((ii < s.length) && (s[ii] != null))
{
- bs2[ii] = new BinarySequence(s[ii]);
- bs2[ii].blosumEncode();
+ bs2[ii] = new BinarySequence(s[ii], nucleotides);
+ if (smtrx != null)
+ {
+ try
+ {
+ bs2[ii].matrixEncode(smtrx);
+ } catch (InvalidSequenceTypeException x)
+ {
+ details.append("Unexpected mismatch of sequence type and score matrix. Calculation will not be valid!\n\n");
+ }
+ }
ii++;
}
details.append(" --- Eigenvalues ---\n");
eigenvector.printD(ps);
ps.println();
- /*for (int seq=0;seq<symm.rows;seq++)
- {
- ps.print("\"Seq"+seq+"\"");
- for (int ev=0;ev<symm.rows; ev++)
- {
-
- ps.print(","+component(seq, ev));
- }
- ps.println();
- }*/
+ /*
+ * for (int seq=0;seq<symm.rows;seq++) { ps.print("\"Seq"+seq+"\""); for
+ * (int ev=0;ev<symm.rows; ev++) {
+ *
+ * ps.print(","+component(seq, ev)); } ps.println(); }
+ */
}
}