From: jprocter Date: Sat, 17 Nov 2012 18:35:43 +0000 (+0000) Subject: method to construct sequence mapping for matching positions in aligned sequences X-Git-Tag: Jalview_2_9~265^2~19 X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;ds=sidebyside;h=3889d8cc311503f8d40d9618acec1b0f4baf2aec;p=jalview.git method to construct sequence mapping for matching positions in aligned sequences --- diff --git a/src/jalview/analysis/AlignSeq.java b/src/jalview/analysis/AlignSeq.java index 3ede7a8..832f519 100755 --- a/src/jalview/analysis/AlignSeq.java +++ b/src/jalview/analysis/AlignSeq.java @@ -940,7 +940,80 @@ public class AlignSeq return as; } + /** + * + * @return mapping from positions in S1 to corresponding positions in S2 + */ + public jalview.datamodel.Mapping getMappingFromS1(boolean allowmismatch) + { + ArrayList as1 = new ArrayList(), as2 = new ArrayList(); + int pdbpos = s2.getStart() + getSeq2Start() - 2; + int alignpos = s1.getStart() + getSeq1Start() - 2; + int lp2 = pdbpos - 3, lp1 = alignpos - 3; + boolean lastmatch = false; + // and now trace the alignment onto the atom set. + for (int i = 0; i < astr1.length(); i++) + { + char c1 = astr1.charAt(i), c2 = astr2.charAt(i); + if (c1 != '-') + { + alignpos++; + } + + if (c2 != '-') + { + pdbpos++; + } + + if (allowmismatch || c1 == c2) + { + lastmatch = true; + // extend mapping interval. + if (lp1 + 1 != alignpos) + { + as1.add(Integer.valueOf(alignpos)); + lp1 = alignpos; + } + + if (lp2 + 1 != pdbpos) + { + as2.add(Integer.valueOf(pdbpos)); + lp2 = pdbpos; + } + } + else + { + 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; + for (Integer ip : as1) + { + mapseq1[i++] = ip; + } + ; + i = 0; + for (Integer ip : as2) + { + mapseq2[i++] = ip; + } + ; + if (lastmatch) + { + mapseq1[mapseq1.length - 1] = alignpos; + mapseq2[mapseq2.length - 1] = pdbpos; + } + MapList map = new MapList(mapseq1, mapseq2, 1, 1); + jalview.datamodel.Mapping mapping = new Mapping(map); + mapping.setTo(s2); + return mapping; + } + + /** * compute the PID vector used by the redundancy filter. * * @param originalSequences