X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAlignSeq.java;h=f2f7ea969d960101a4faff2ac1ab5d45f661dc91;hb=838e4f91d4a53dd315640dbc9ff6ef7a815ee576;hp=c546310dd50ede5f5d74ae83d813096cd2ace242;hpb=8fc03b5f923a6b80e2a7fc22f6fdd2c5c7ad9de9;p=jalview.git diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index c546310..f2f7ea9 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -1,6 +1,6 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2) - * Copyright (C) 2014 The Jalview Authors + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.9.0b1) + * Copyright (C) 2015 The Jalview Authors * * This file is part of Jalview. * @@ -51,13 +51,13 @@ public class AlignSeq public static final String DNA = "dna"; - static String[] dna = - { "A", "C", "G", "T", "-" }; + private static final String NEWLINE = System.lineSeparator(); + + static String[] dna = { "A", "C", "G", "T", "-" }; // "C", "T", "A", "G", "-"}; - static String[] pep = - { "A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", "L", "K", "M", "F", - "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-" }; + static String[] pep = { "A", "R", "N", "D", "C", "Q", "E", "G", "H", "I", + "L", "K", "M", "F", "P", "S", "T", "W", "Y", "V", "B", "Z", "X", "-" }; int[][] score; @@ -449,7 +449,8 @@ public class AlignSeq else { output.append("Wrong type = dna or pep only"); - throw new Error(MessageManager.formatMessage("error.unknown_type_dna_or_pep", new String[]{type2})); + throw new Error(MessageManager.formatMessage( + "error.unknown_type_dna_or_pep", new String[] { type2 })); } } @@ -579,21 +580,28 @@ public class AlignSeq int nochunks = ((aseq1.length - count) / len) + 1; pid = 0; - output.append("Score = " + score[maxi][maxj] + "\n"); - output.append("Length of alignment = " + (aseq1.length - count) + "\n"); + output.append("Score = ").append(score[maxi][maxj]).append(NEWLINE); + output.append("Length of alignment = ") + .append(String.valueOf(aseq1.length - count)).append(NEWLINE); output.append("Sequence "); output.append(new Format("%" + maxid + "s").form(s1.getName())); - output.append(" : " + s1.getStart() + " - " + s1.getEnd() - + " (Sequence length = " + s1str.length() + ")\n"); + output.append(" : ").append(String.valueOf(s1.getStart())) + .append(" - ").append(String.valueOf(s1.getEnd())); + output.append(" (Sequence length = ") + .append(String.valueOf(s1str.length())).append(")") + .append(NEWLINE); output.append("Sequence "); output.append(new Format("%" + maxid + "s").form(s2.getName())); - output.append(" : " + s2.getStart() + " - " + s2.getEnd() - + " (Sequence length = " + s2str.length() + ")\n\n"); + output.append(" : ").append(String.valueOf(s2.getStart())) + .append(" - ").append(String.valueOf(s2.getEnd())); + output.append(" (Sequence length = ") + .append(String.valueOf(s2str.length())).append(")") + .append(NEWLINE).append(NEWLINE); for (int j = 0; j < nochunks; j++) { // Print the first aligned sequence - output.append(new Format("%" + (maxid) + "s").form(s1id) + " "); + output.append(new Format("%" + (maxid) + "s").form(s1id)).append(" "); for (int i = 0; i < len; i++) { @@ -603,8 +611,8 @@ public class AlignSeq } } - output.append("\n"); - output.append(new Format("%" + (maxid) + "s").form(" ") + " "); + output.append(NEWLINE); + output.append(new Format("%" + (maxid) + "s").form(" ")).append(" "); // Print out the matching chars for (int i = 0; i < len; i++) @@ -638,9 +646,9 @@ public class AlignSeq } // Now print the second aligned sequence - output = output.append("\n"); - output = output.append(new Format("%" + (maxid) + "s").form(s2id) - + " "); + output = output.append(NEWLINE); + output = output.append(new Format("%" + (maxid) + "s").form(s2id)) + .append(" "); for (int i = 0; i < len; i++) { @@ -650,7 +658,7 @@ public class AlignSeq } } - output = output.append("\n\n"); + output.append(NEWLINE).append(NEWLINE); } pid = pid / (aseq1.length - count) * 100; @@ -804,19 +812,23 @@ public class AlignSeq } /** - * DOCUMENT ME! + * Returns the given sequence with all of the given gap characters removed. * - * @param gapChar - * DOCUMENT ME! + * @param gapChars + * a string of characters to be treated as gaps * @param seq - * DOCUMENT ME! + * the input sequence * - * @return DOCUMENT ME! + * @return */ - public static String extractGaps(String gapChar, String seq) + public static String extractGaps(String gapChars, String seq) { - StringTokenizer str = new StringTokenizer(seq, gapChar); - StringBuffer newString = new StringBuffer(); + if (gapChars == null || seq == null) + { + return null; + } + StringTokenizer str = new StringTokenizer(seq, gapChars); + StringBuilder newString = new StringBuilder(seq.length()); while (str.hasMoreTokens()) { @@ -1020,22 +1032,29 @@ public class AlignSeq if (allowmismatch || c1 == c2) { - lastmatch = true; - // extend mapping interval. + // extend mapping interval if (lp1 + 1 != alignpos || lp2 + 1 != pdbpos) { as1.add(Integer.valueOf(alignpos)); as2.add(Integer.valueOf(pdbpos)); } + lastmatch = true; lp1 = alignpos; lp2 = pdbpos; } else { + // extend mapping interval + if (lastmatch) + { + as1.add(Integer.valueOf(lp1)); + as2.add(Integer.valueOf(lp2)); + } lastmatch = false; } } // construct range pairs + int[] mapseq1 = new int[as1.size() + (lastmatch ? 1 : 0)], mapseq2 = new int[as2 .size() + (lastmatch ? 1 : 0)]; int i = 0; @@ -1077,8 +1096,8 @@ public class AlignSeq */ public static List> replaceMatchingSeqsWith( List seqs, List annotations, - List ochains, - AlignmentI al, String dnaOrProtein, boolean removeOldAnnots) + List ochains, AlignmentI al, String dnaOrProtein, + boolean removeOldAnnots) { List orig = new ArrayList(), repl = new ArrayList(); List aligs = new ArrayList(); @@ -1086,7 +1105,7 @@ public class AlignSeq { ArrayList matches = new ArrayList(); ArrayList aligns = new ArrayList(); - + for (SequenceI sq : ochains) { SequenceI bestm = null; @@ -1094,8 +1113,7 @@ public class AlignSeq int bestscore = 0; for (SequenceI msq : al.getSequences()) { - AlignSeq aseq = doGlobalNWAlignment(msq, sq, - dnaOrProtein); + AlignSeq aseq = doGlobalNWAlignment(msq, sq, dnaOrProtein); if (bestm == null || aseq.getMaxScore() > bestscore) { bestscore = aseq.getMaxScore(); @@ -1121,7 +1139,8 @@ public class AlignSeq sq.setName(sp.getName()); sq.setDescription(sp.getDescription()); Mapping sp2sq; - sq.transferAnnotation(sp, sp2sq = aligns.get(q).getMappingFromS1(false)); + sq.transferAnnotation(sp, + sp2sq = aligns.get(q).getMappingFromS1(false)); aligs.add(aligns.get(q)); int inspos = -1; for (int ap = 0; ap < annotations.size();) @@ -1132,9 +1151,12 @@ public class AlignSeq { inspos = ap; } - if (removeOldAnnots) { + if (removeOldAnnots) + { annotations.remove(ap); - } else { + } + else + { AlignmentAnnotation alan = annotations.remove(ap); alan.liftOver(sq, sp2sq); alan.setSequenceRef(sq); @@ -1146,9 +1168,10 @@ public class AlignSeq ap++; } } - if (sq.getAnnotation() != null) + if (sq.getAnnotation() != null && sq.getAnnotation().length > 0) { - annotations.addAll(inspos, Arrays.asList(sq.getAnnotation())); + annotations.addAll(inspos == -1 ? annotations.size() : inspos, + Arrays.asList(sq.getAnnotation())); } } }