{
throw new Error("Unimplemented when no local sequence given.");
}
- // return a ContactListI for column
- // column is index into localFrame
- // 1. map column to corresponding column in matrix
-
- final int _lcolumn = localFrame.findPosition(from);
- final int _rcolumn = (from == to) ? _lcolumn
- : localFrame.findPosition(to);
- if (toSeq == null)
- {
- // no mapping
- return new int[] { _lcolumn, _rcolumn };
- }
-
SequenceI lf = localFrame, uf = refSeq;
+ // check that localFrame is derived from refSeq
// just look for dataset sequences and check they are the same.
// in future we could use DBRefMappings/whatever.
while (lf.getDatasetSequence() != null
+ "' is not mappable for the given localFrame sequence. ("
+ localFrame.getName() + ")");
}
+
+ // now look up from-to matrix columns in toSeq frame
+
+ if (toSeq == null)
+ {
+ // no mapping - so we assume 1:1
+ return new int[] { from, to };
+ }
+ // from-to are matrix columns
+ // first locate on reference sequence
- int[] mappedPositions = toSeq.locateInFrom(_lcolumn, _rcolumn);
- // TODO - trim to localFrame ?
- // if (mappedPositions!=null) {
- // int s=-1,e=-1;
- // for (int p=0;p<mappedPositions.length;p++)
- // {
- // if (s==-1 && mappedPositions[p]>=localFrame.getStart())
- // {
- // s=p; // remember first position within local frame
- // }
- // if (e==-1 || mappedPositions[p]<=localFrame.getEnd())
- // {
- // // update end pointer
- // e=p;
- // // compute local map
- // mappedPositions[p] = localFrame.findIndex(mappedPositions[p]);
- // }
- // }
- // }
+ int[] mappedPositions = toSeq.locateInFrom(from, to);
+ if (mappedPositions==null)
+ {
+ return null;
+ }
+
+ // and now map to localFrame
+ // from-to columns on the associated sequence should be
+ // i. restricted to positions in localFrame
+ // ii.
+
+// int s = -1, e = -1;
+// for (int p = 0; p < mappedPositions.length; p++)
+// {
+// if (s == -1 && mappedPositions[p] >= localFrame.getStart())
+// {
+// s = p; // remember first position within local frame
+// }
+// if (e == -1 || mappedPositions[p] <= localFrame.getEnd())
+// {
+// // update end pointer
+// e = p;
+// // compute local map
+// mappedPositions[p] = localFrame.findIndex(mappedPositions[p]);
+// }
+// }
+// int[] _trimmed = new int[e - s + 1];
+// return _trimmed;
return mappedPositions;
}
}
}
+ /**
+ * check mapping and resolution methods work
+ */
+ @Test(groups= {"Functional"})
+ public void testMappableContactMatrix() {
+ SequenceI newseq = new Sequence("Seq", "ASDQEASDQEASDQE");
+ MapList map = new MapList(new int[]
+ { 5, 9 }, new int[] { 1, 5 }, 1, 1);
+ AlignmentAnnotation aa = newseq
+ .addContactList(new PAEContactMatrix(newseq,map, PAEdata,null));
+ ContactListI clist = newseq.getContactListFor(aa, 4);
+ assertNotNull(clist);
+ clist = newseq.getContactListFor(aa, 3);
+ assertNull(clist);
+
+ ContactMatrixI cm = newseq.getContactMatrixFor(aa);
+ MappableContactMatrixI mcm = (MappableContactMatrixI) cm;
+ int[] pos = mcm.getMappedPositionsFor(newseq, 0);
+ assertNull(pos);
+
+ pos = mcm.getMappedPositionsFor(newseq, 1);
+ assertNotNull(pos);
+ assertEquals(pos[0],4+newseq.getStart());
+
+ pos = mcm.getMappedPositionsFor(newseq, 6); // after end of matrix
+ assertNull(pos);
+ pos = mcm.getMappedPositionsFor(newseq, 5); // at end of matrix
+ assertNotNull(pos);
+ assertEquals(pos[0],8+newseq.getStart());
+ SequenceI alseq = newseq.deriveSequence();
+ alseq.insertCharAt(5,'-');
+ pos = mcm.getMappedPositionsFor(alseq, 5); // at end of matrix
+ assertNotNull(pos);
+ assertEquals(pos[0],8+newseq.getStart());
+
+
+ }
}