From 3a2924d94334b170106141ec4e4773034c5995ce Mon Sep 17 00:00:00 2001 From: jprocter Date: Wed, 25 Apr 2007 16:46:11 +0000 Subject: [PATCH] moving word methods to MapList and begin bug-fix for single-residue codon span feature location (see TODOs) --- src/jalview/datamodel/Mapping.java | 40 ++++++++++------------ src/jalview/util/MapList.java | 64 ++++++++++++++++++++++++++++++++---- 2 files changed, 76 insertions(+), 28 deletions(-) diff --git a/src/jalview/datamodel/Mapping.java b/src/jalview/datamodel/Mapping.java index 2594c31..b9874a4 100644 --- a/src/jalview/datamodel/Mapping.java +++ b/src/jalview/datamodel/Mapping.java @@ -5,9 +5,9 @@ import jalview.util.MapList; public class Mapping { /** * Contains the - * start-end pairs mapping from - * the associated sequence to the - * sequence in the database + * start-end pairs mapping from + * the associated sequence to the + * sequence in the database * coordinate system * it also takes care of step difference between coordinate systems */ @@ -37,14 +37,14 @@ public class Mapping { this(to, new MapList(exon, is, i, j)); } /** - * create a duplicate (and independent) mapping object with + * create a duplicate (and independent) mapping object with * the same reference to any SequenceI being mapped to. * @param map2 */ public Mapping(Mapping map2) { if (map2!=this && map2!=null) { - if (map2.map!=null) + if (map2.map!=null) { map=new MapList(map2.map); } @@ -67,7 +67,7 @@ public class Mapping { /** * Equals that compares both the to references and MapList mappings. * @param other - * @return + * @return */ public boolean equals(Mapping other) { if (other==null) @@ -88,7 +88,7 @@ public class Mapping { * @param mpos * @return */ - public int getPosition(int mpos) + public int getPosition(int mpos) { if (map!=null) { int[] mp = map.shiftTo(mpos); @@ -103,14 +103,14 @@ public class Mapping { if (map!=null) { int[] mp=map.shiftTo(mpos); if (mp!=null) { - return new int[] {mp[0], mp[0]+mp[2]*(map.getFromRatio()-1)}; + return new int[] {mp[0], mp[0]+mp[2]*(map.getFromRatio()-1)}; } } return null; } /** - * width of mapped unit in associated sequence - * + * width of mapped unit in associated sequence + * */ public int getWidth() { if (map!=null) { @@ -157,18 +157,13 @@ public class Mapping { return null; } /** - * locates the region of feature f in the associated sequence's reference frame + * locates the region of feature f in the associated sequence's reference frame * @param f * @return one or more features corresponding to f */ public SequenceFeature[] locateFeature(SequenceFeature f) { - // this is a stopgap - features broken over exon boundaries will not be - // broken into a collection of feature fragments. - // TODO: implement creation of several features from a single feature on a discontinuously mapped seuqence - // need a function like int [] fromrange = map.getRange(from,to) - // need to make subgrouped sequence features. - if (true) { + if (true) { // f.getBegin()!=f.getEnd()) { if (map!=null) { int[] frange = map.locateInFrom(f.getBegin(), f.getEnd()); SequenceFeature[] vf = new SequenceFeature[frange.length/2]; @@ -182,16 +177,17 @@ public class Mapping { return vf; } } - if (false){ + if (false) //else + { int[] word = getWord(f.getBegin()); - if (word[0]word[1]) + if (word[0]>word[1]) { f.setEnd(word[0]); } else { @@ -201,7 +197,7 @@ public class Mapping { // give up and just return the feature. return new SequenceFeature[] { f }; } - + /** * return a series of contigs on the associated sequence corresponding to * the from,to interval on the mapped reference frame @@ -221,7 +217,7 @@ public class Mapping { * @return */ public int[] locateMappedRange(int from, int to) { - //TODO + //TODO return null; } } diff --git a/src/jalview/util/MapList.java b/src/jalview/util/MapList.java index 4922267..826ead7 100644 --- a/src/jalview/util/MapList.java +++ b/src/jalview/util/MapList.java @@ -417,7 +417,7 @@ public class MapList public int[] locateInFrom(int start, int end) { // inefficient implementation int fromStart[] = shiftTo(start); - int fromEnd[] = shiftTo(end); + int fromEnd[] = shiftTo(end); // needs to be inclusive of end of symbol position if (fromStart==null || fromEnd==null) return null; int iv[] = getIntervals(fromShifts, fromStart, fromEnd,fromRatio); @@ -450,9 +450,11 @@ public class MapList */ private int[] getIntervals(Vector fromShifts2, int[] fromStart, int[] fromEnd, int fromRatio2) { - // correct for word direction for start and end - int startpos = fromStart[0]+fromStart[2]*(fromRatio2-1); - int endpos = fromEnd[0]+fromEnd[2]*(fromRatio2-1); + // TODO: correct for word boundary w.r.t. fromStart->fromEnd direction for startpos and endpos. + // test is (1,8,12,17) to (1,5) and features on to : 2,2; 3,3; 4,3; 3,4; 4,4; 5,3; 3,5; 2,4; 4,2; + // correct for word direction for start and end : + int startpos = fromStart[0]+fromStart[2]*(fromRatio2-1); // Math.min(fromStart[0], .. ); + int endpos = fromEnd[0]+fromEnd[2]*(fromRatio2-1); // Math.max(fromEnd[0],); int intv=0,intvSize= fromShifts2.size(); int iv[],i=0,fs=-1,fe=-1; // containing intervals while (intv