X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2FMapping.java;h=4d90e3e0b6c042533ef42f020ccbb232c9b7094c;hb=71a3cc0202bd8b731f01e5706372e9bae047d592;hp=a0a050fd7beed934d076a6951ce2f1314f3063e7;hpb=5133de48f4251fa73eedcda66d6e2f2c25ff876b;p=jalview.git diff --git a/src/jalview/datamodel/Mapping.java b/src/jalview/datamodel/Mapping.java index a0a050f..4d90e3e 100644 --- a/src/jalview/datamodel/Mapping.java +++ b/src/jalview/datamodel/Mapping.java @@ -20,12 +20,13 @@ */ package jalview.datamodel; -import jalview.util.MapList; - import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Vector; +import jalview.util.Comparison; +import jalview.util.MapList; + public class Mapping { /** @@ -45,7 +46,7 @@ public class Mapping /* * The characters of the aligned sequence e.g. "-cGT-ACgTG-" */ - private final char[] alignedSeq; + private final SequenceI alignedSeq; /* * the sequence start residue @@ -101,7 +102,7 @@ public class Mapping */ public AlignedCodonIterator(SequenceI seq, char gapChar) { - this.alignedSeq = seq.getSequence(); + this.alignedSeq = seq; this.start = seq.getStart(); this.gap = gapChar; fromRanges = map.getFromRanges().iterator(); @@ -175,14 +176,14 @@ public class Mapping if (toPosition <= currentToRange[1]) { SequenceI seq = Mapping.this.to; - char pep = seq.getSequence()[toPosition - seq.getStart()]; + char pep = seq.getCharAt(toPosition - seq.getStart()); toPosition++; return String.valueOf(pep); } if (!toRanges.hasNext()) { - throw new NoSuchElementException("Ran out of peptide at position " - + toPosition); + throw new NoSuchElementException( + "Ran out of peptide at position " + toPosition); } currentToRange = toRanges.next(); toPosition = currentToRange[0]; @@ -256,9 +257,11 @@ public class Mapping * allow for offset e.g. treat pos 8 as 2 if sequence starts at 7 */ int truePos = sequencePos - (start - 1); - while (alignedBases < truePos && alignedColumn < alignedSeq.length) + int length = alignedSeq.getLength(); + while (alignedBases < truePos && alignedColumn < length) { - if (alignedSeq[alignedColumn++] != gap) + char c = alignedSeq.getCharAt(alignedColumn++); + if (c != gap && !Comparison.isGap(c)) { alignedBases++; } @@ -430,23 +433,6 @@ public class Mapping } /** - * gets boundary in direction of mapping - * - * @param position - * in mapped reference frame - * @return int{start, end} positions in associated sequence (in direction of - * mapped word) - */ - public int[] getWord(int mpos) - { - if (map != null) - { - return map.getToWord(mpos); - } - return null; - } - - /** * width of mapped unit in associated sequence * */ @@ -528,9 +514,8 @@ public class Mapping SequenceFeature[] vf = new SequenceFeature[frange.length / 2]; for (int i = 0, v = 0; i < frange.length; i += 2, v++) { - vf[v] = new SequenceFeature(f); - vf[v].setBegin(frange[i]); - vf[v].setEnd(frange[i + 1]); + vf[v] = new SequenceFeature(f, frange[i], frange[i + 1], + f.getFeatureGroup(), f.getScore()); if (frange.length > 2) { vf[v].setDescription(f.getDescription() + "\nPart " + (v + 1)); @@ -539,27 +524,7 @@ public class Mapping return vf; } } - if (false) // else - { - int[] word = getWord(f.getBegin()); - if (word[0] < word[1]) - { - f.setBegin(word[0]); - } - else - { - f.setBegin(word[1]); - } - word = getWord(f.getEnd()); - if (word[0] > word[1]) - { - f.setEnd(word[0]); - } - else - { - f.setEnd(word[1]); - } - } + // give up and just return the feature. return new SequenceFeature[] { f }; } @@ -685,8 +650,8 @@ public class Mapping to[f * 2] = r[0]; to[f * 2 + 1] = r[1]; } - copy.setMap(new MapList(from, to, map.getFromRatio(), map - .getToRatio())); + copy.setMap( + new MapList(from, to, map.getFromRatio(), map.getToRatio())); } return copy; } @@ -711,19 +676,6 @@ public class Mapping to = tto; } - /* - * (non-Javadoc) - * - * @see java.lang.Object#finalize() - */ - @Override - protected void finalize() throws Throwable - { - map = null; - to = null; - super.finalize(); - } - /** * Returns an iterator which can serve up the aligned codon column positions * and their corresponding peptide products @@ -733,7 +685,8 @@ public class Mapping * @param gapChar * @return */ - public Iterator getCodonIterator(SequenceI seq, char gapChar) + public Iterator getCodonIterator(SequenceI seq, + char gapChar) { return new AlignedCodonIterator(seq, gapChar); } @@ -744,8 +697,8 @@ public class Mapping @Override public String toString() { - return String.format("%s %s", this.map.toString(), this.to == null ? "" - : this.to.getName()); + return String.format("%s %s", this.map.toString(), + this.to == null ? "" : this.to.getName()); } /**