+ //&!
+ private static final int GAP_OPEN_COST = 120;
+ //private static final int GAP_OPEN_COST = 100;
+
+ private static final int GAP_EXTEND_COST = 20;
+ //private static final int GAP_EXTEND_COST = 5;
+
+ private static final int GAP_INDEX = -1;
+
+ public static final String PEP = "pep";
+
+ public static final String DNA = "dna";
+
+ private static final String NEWLINE = System.lineSeparator();
+
+ float[][] score;
+
+ float alignmentScore;
+
+ float[][] E;
+
+ float[][] F;
+
+ int[][] traceback; // todo is this actually used?
+
+ int[] seq1;
+
+ int[] seq2;
+
+ SequenceI s1;
+
+ SequenceI s2;
+
+ public String s1str;
+
+ public String s2str;
+
+ int maxi;
+
+ int maxj;
+
+ int[] aseq1;
+
+ int[] aseq2;
+
+ public String astr1 = "";
+
+ public String astr2 = "";
+
+ public String indelfreeAstr1 = "";
+
+ public String indelfreeAstr2 = "";
+
+ /** DOCUMENT ME!! */
+ public int seq1start;
+
+ /** DOCUMENT ME!! */
+ public int seq1end;
+
+ /** DOCUMENT ME!! */
+ public int seq2start;
+
+ public int seq2end;
+
+ int count;
+
+ public float maxscore;
+
+ public float meanScore; //needed for PaSiMap
+
+ public int hypotheticMaxScore; // needed for PaSiMap
+
+ int prev = 0;
+
+ StringBuffer output = new StringBuffer();
+
+ String type; // AlignSeq.PEP or AlignSeq.DNA
+
+ private ScoreMatrix scoreMatrix;
+
+ /**
+ * Creates a new AlignSeq object.
+ *
+ * @param s1
+ * first sequence for alignment
+ * @param s2
+ * second sequence for alignment
+ * @param type
+ * molecule type, either AlignSeq.PEP or AlignSeq.DNA
+ */
+ public AlignSeq(SequenceI s1, SequenceI s2, String type)
+ {
+ seqInit(s1, s1.getSequenceAsString(), s2, s2.getSequenceAsString(),
+ type);
+ }
+
+ /**
+ * Creates a new AlignSeq object.
+ *
+ * @param s1
+ * DOCUMENT ME!
+ * @param s2
+ * DOCUMENT ME!
+ * @param type
+ * DOCUMENT ME!
+ */
+ public AlignSeq(SequenceI s1, String string1, SequenceI s2,
+ String string2, String type)
+ {
+ seqInit(s1, string1.toUpperCase(Locale.ROOT), s2,
+ string2.toUpperCase(Locale.ROOT), type);
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public float getMaxScore()
+ {
+ return maxscore;
+ }
+
+ /**
+ * returns the overall score of the alignment
+ *
+ * @return
+ */
+ public float getAlignmentScore()
+ {
+ return alignmentScore;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getSeq2Start()
+ {
+ return seq2start;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getSeq2End()
+ {
+ return seq2end;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getSeq1Start()
+ {
+ return seq1start;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int getSeq1End()
+ {
+ return seq1end;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getOutput()
+ {
+ return output.toString();
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getAStr1()
+ {
+ return astr1;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public String getAStr2()
+ {
+ return astr2;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int[] getASeq1()
+ {
+ return aseq1;
+ }
+
+ /**
+ * DOCUMENT ME!
+ *
+ * @return DOCUMENT ME!
+ */
+ public int[] getASeq2()
+ {
+ return aseq2;
+ }
+
+ /**
+ *
+ * @return aligned instance of Seq 1
+ */
+ public SequenceI getAlignedSeq1()
+ {
+ SequenceI alSeq1 = new Sequence(s1.getName(), getAStr1());
+ alSeq1.setStart(s1.getStart() + getSeq1Start() - 1);
+ alSeq1.setEnd(s1.getStart() + getSeq1End() - 1);
+ alSeq1.setDatasetSequence(
+ s1.getDatasetSequence() == null ? s1 : s1.getDatasetSequence());
+ return alSeq1;
+ }
+
+ /**
+ *
+ * @return aligned instance of Seq 2
+ */
+ public SequenceI getAlignedSeq2()
+ {
+ SequenceI alSeq2 = new Sequence(s2.getName(), getAStr2());
+ alSeq2.setStart(s2.getStart() + getSeq2Start() - 1);
+ alSeq2.setEnd(s2.getStart() + getSeq2End() - 1);
+ alSeq2.setDatasetSequence(
+ s2.getDatasetSequence() == null ? s2 : s2.getDatasetSequence());
+ return alSeq2;
+ }
+
+ /**
+ * Construct score matrix for sequences with standard DNA or PEPTIDE matrix
+ *
+ * @param s1
+ * - sequence 1
+ * @param string1
+ * - string to use for s1
+ * @param s2
+ * - sequence 2
+ * @param string2
+ * - string to use for s2
+ * @param type
+ * DNA or PEPTIDE
+ */
+ public void seqInit(SequenceI s1, String string1, SequenceI s2,
+ String string2, String type)
+ {
+ this.s1 = s1;
+ this.s2 = s2;
+ setDefaultParams(type);
+ seqInit(string1, string2);
+ }
+
+ /**
+ * construct score matrix for string1 and string2 (after removing any existing
+ * gaps
+ *
+ * @param string1
+ * @param string2
+ */
+ private void seqInit(String string1, String string2)
+ {
+ s1str = extractGaps(jalview.util.Comparison.GapChars, string1);
+ s2str = extractGaps(jalview.util.Comparison.GapChars, string2);
+
+ if (s1str.length() == 0 || s2str.length() == 0)