git://source.jalview.org
/
jalview.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'develop' into features/JAL-1705_ensembl
[jalview.git]
/
src
/
jalview
/
datamodel
/
Mapping.java
diff --git
a/src/jalview/datamodel/Mapping.java
b/src/jalview/datamodel/Mapping.java
index
d7b7eb9
..
6c619ce
100644
(file)
--- a/
src/jalview/datamodel/Mapping.java
+++ b/
src/jalview/datamodel/Mapping.java
@@
-20,12
+20,12
@@
*/
package jalview.datamodel;
*/
package jalview.datamodel;
+import jalview.util.MapList;
+
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Vector;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Vector;
-import jalview.util.MapList;
-
public class Mapping
{
/**
public class Mapping
{
/**
@@
-48,6
+48,11
@@
public class Mapping
private final char[] alignedSeq;
/*
private final char[] alignedSeq;
/*
+ * the sequence start residue
+ */
+ private int start;
+
+ /*
* Next position (base 0) in the aligned sequence
*/
private int alignedColumn = 0;
* Next position (base 0) in the aligned sequence
*/
private int alignedColumn = 0;
@@
-90,13
+95,14
@@
public class Mapping
/**
* Constructor
*
/**
* Constructor
*
- * @param cs
- * the aligned sequence characters
+ * @param seq
+ * the aligned sequence
* @param gapChar
*/
* @param gapChar
*/
- public AlignedCodonIterator(char[] cs, char gapChar)
+ public AlignedCodonIterator(SequenceI seq, char gapChar)
{
{
- this.alignedSeq = cs;
+ this.alignedSeq = seq.getSequence();
+ this.start = seq.getStart();
this.gap = gapChar;
fromRanges = map.getFromRanges().iterator();
toRanges = map.getToRanges().iterator();
this.gap = gapChar;
fromRanges = map.getFromRanges().iterator();
toRanges = map.getToRanges().iterator();
@@
-163,8
+169,10
@@
public class Mapping
{
// TODO should ideally handle toRatio other than 1 as well...
// i.e. code like getNextCodon()
{
// TODO should ideally handle toRatio other than 1 as well...
// i.e. code like getNextCodon()
- if (toPosition <= currentToRange[1]) {
- char pep = Mapping.this.to.getSequence()[toPosition - 1];
+ if (toPosition <= currentToRange[1])
+ {
+ SequenceI seq = Mapping.this.to;
+ char pep = seq.getSequence()[toPosition - seq.getStart()];
toPosition++;
return String.valueOf(pep);
}
toPosition++;
return String.valueOf(pep);
}
@@
-241,8
+249,11
@@
public class Mapping
*/
private int getAlignedColumn(int sequencePos)
{
*/
private int getAlignedColumn(int sequencePos)
{
- while (alignedBases < sequencePos
- && alignedColumn < alignedSeq.length)
+ /*
+ * 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)
{
if (alignedSeq[alignedColumn++] != gap)
{
{
if (alignedSeq[alignedColumn++] != gap)
{
@@
-466,8
+477,7
@@
public class Mapping
int[] mp = map.shiftFrom(pos);
if (mp != null)
{
int[] mp = map.shiftFrom(pos);
if (mp != null)
{
- return new int[]
- { mp[0], mp[0] + mp[2] * (map.getToRatio() - 1) };
+ return new int[] { mp[0], mp[0] + mp[2] * (map.getToRatio() - 1) };
}
}
return null;
}
}
return null;
@@
-528,8
+538,7
@@
public class Mapping
}
}
// give up and just return the feature.
}
}
// give up and just return the feature.
- return new SequenceFeature[]
- { f };
+ return new SequenceFeature[] { f };
}
/**
}
/**
@@
-565,8
+574,7
@@
public class Mapping
}
return map.locateInFrom(from, to);
}
}
return map.locateInFrom(from, to);
}
- return new int[]
- { from, to };
+ return new int[] { from, to };
}
/**
}
/**
@@
-602,8
+610,7
@@
public class Mapping
}
return map.locateInTo(from, to);
}
}
return map.locateInTo(from, to);
}
- return new int[]
- { from, to };
+ return new int[] { from, to };
}
/**
}
/**
@@
-631,13
+638,11
@@
public class Mapping
{
for (int m = 0; m < mpr.length; m += 2)
{
{
for (int m = 0; m < mpr.length; m += 2)
{
- toRange.addElement(new int[]
- { mpr[m], mpr[m + 1] });
+ toRange.addElement(new int[] { mpr[m], mpr[m + 1] });
int[] xpos = locateRange(mpr[m], mpr[m + 1]);
for (int x = 0; x < xpos.length; x += 2)
{
int[] xpos = locateRange(mpr[m], mpr[m + 1]);
for (int x = 0; x < xpos.length; x += 2)
{
- fromRange.addElement(new int[]
- { xpos[x], xpos[x + 1] });
+ fromRange.addElement(new int[] { xpos[x], xpos[x + 1] });
}
}
}
}
}
}
@@
-697,7
+702,7
@@
public class Mapping
public Iterator<AlignedCodon> getCodonIterator(SequenceI seq, char gapChar)
{
public Iterator<AlignedCodon> getCodonIterator(SequenceI seq, char gapChar)
{
- return new AlignedCodonIterator(seq.getSequence(), gapChar);
+ return new AlignedCodonIterator(seq, gapChar);
}
}
}
}