X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fanalysis%2FAlignSeq.java;fp=src%2Fjalview%2Fanalysis%2FAlignSeq.java;h=ba7e520e4be08450e63f262e892dbb8a41cfb007;hb=b8810711642d8473325c8a3d3e76cc5c3c9b5bbd;hp=f5afa9cb56dad418afafec4c072393911944e7d8;hpb=936d4dc095734df2b1e9f3bf9e0bd29b9c86434c;p=jalview.git diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index f5afa9c..ba7e520 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -1020,22 +1020,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; @@ -1069,11 +1076,19 @@ public class AlignSeq * @param ochains * @param al * @param dnaOrProtein - * @param removeOldAnnots when true, old annotation is cleared before new annotation transferred + * @param removeOldAnnots + * when true, old annotation is cleared before new annotation + * transferred + * @return List originals, List replacement, + * List alignment between each> */ - public static void replaceMatchingSeqsWith(List seqs, List annotations, List ochains, + public static List> replaceMatchingSeqsWith( + List seqs, List annotations, + List ochains, AlignmentI al, String dnaOrProtein, boolean removeOldAnnots) { + List orig = new ArrayList(), repl = new ArrayList(); + List aligs = new ArrayList(); if (al != null && al.getHeight() > 0) { ArrayList matches = new ArrayList(); @@ -1108,10 +1123,13 @@ public class AlignSeq if ((q = ochains.indexOf(sp)) > -1) { seqs.set(p, sq = matches.get(q)); + orig.add(sp); + repl.add(sq); sq.setName(sp.getName()); sq.setDescription(sp.getDescription()); Mapping sp2sq; sq.transferAnnotation(sp, sp2sq = aligns.get(q).getMappingFromS1(false)); + aligs.add(aligns.get(q)); int inspos = -1; for (int ap = 0; ap < annotations.size();) { @@ -1135,13 +1153,14 @@ public class AlignSeq ap++; } } - if (sq.getAnnotation() != null) + if (sq.getAnnotation() != null && sq.getAnnotation().length > 0) { annotations.addAll(inspos, Arrays.asList(sq.getAnnotation())); } } } } + return Arrays.asList(orig, repl, aligs); } /**