+
+ /**
+ * return a new mapping object with a maplist modifed to only map the visible
+ * regions defined by viscontigs.
+ *
+ * @param viscontigs
+ * @return
+ */
+ public Mapping intersectVisContigs(int[] viscontigs)
+ {
+ Mapping copy = new Mapping(this);
+ if (map != null)
+ {
+ int vpos = 0;
+ int apos = 0;
+ Vector toRange = new Vector();
+ Vector fromRange = new Vector();
+ for (int vc = 0; vc < viscontigs.length; vc += 2)
+ {
+ // find a mapped range in this visible region
+ int[] mpr = locateMappedRange(1 + viscontigs[vc],
+ viscontigs[vc + 1] - 1);
+ if (mpr != null)
+ {
+ for (int m = 0; m < mpr.length; m += 2)
+ {
+ 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)
+ {
+ fromRange.addElement(new int[]
+ { xpos[x], xpos[x + 1] });
+ }
+ }
+ }
+ }
+ int[] from = new int[fromRange.size() * 2];
+ int[] to = new int[toRange.size() * 2];
+ int[] r;
+ for (int f = 0, fSize = fromRange.size(); f < fSize; f++)
+ {
+ r = (int[]) fromRange.elementAt(f);
+ from[f * 2] = r[0];
+ from[f * 2 + 1] = r[1];
+ }
+ for (int f = 0, fSize = toRange.size(); f < fSize; f++)
+ {
+ r = (int[]) toRange.elementAt(f);
+ to[f * 2] = r[0];
+ to[f * 2 + 1] = r[1];
+ }
+ copy.setMap(new MapList(from, to, map.getFromRatio(), map
+ .getToRatio()));
+ }
+ return copy;
+ }
+
+ public static void main(String[] args)
+ {
+ /**
+ * trite test of the intersectVisContigs method for a simple DNA -> Protein
+ * exon map and a range of visContigs
+ */
+ MapList fk = new MapList(new int[]
+ { 1, 6, 8, 13, 15, 23 }, new int[]
+ { 1, 7 }, 3, 1);
+ Mapping m = new Mapping(fk);
+ Mapping m_1 = m.intersectVisContigs(new int[]
+ { fk.getFromLowest(), fk.getFromHighest() });
+ Mapping m_2 = m.intersectVisContigs(new int[]
+ { 1, 7, 11, 20 });
+ System.out.println("" + m_1.map.getFromRanges());
+
+ }
+
+ /**
+ * get the sequence being mapped to - if any
+ *
+ * @return null or a dataset sequence
+ */
+ public SequenceI getTo()
+ {
+ return to;
+ }
+
+ /**
+ * set the dataset sequence being mapped to if any
+ *
+ * @param tto
+ */
+ public void setTo(SequenceI tto)
+ {
+ to = tto;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#finalize()
+ */
+ protected void finalize() throws Throwable
+ {
+ map = null;
+ to = null;
+ super.finalize();
+ }
+