}
/**
- * Remove the last 3 mapped positions from the given ranges
- *
- * @param ranges
- * @param mappedLength
- */
- public static void unmapStopCodon(List<int[]> ranges,
- int mappedLength)
- {
- if (mappedLength < 3)
- {
- return;
- }
- boolean done = false;
- int targetLength = mappedLength - 3;
- int mapped = 0;
- Iterator<int[]> it = ranges.iterator();
- while (!done && it.hasNext())
- {
- int[] range = it.next();
- int length = Math.abs(range[1] - range[0]) + 1;
- if (mapped + length == targetLength)
- {
- done = true;
- }
- else if (mapped + length < targetLength)
- {
- mapped += length;
- continue;
- }
- else
- {
- /*
- * need just a bit of this range
- */
- int needed = targetLength - mapped;
- int sense = range[1] >= range[0] ? 1 : -1;
- range[1] = range[0] + (sense * (needed - 1));
- done = true;
- }
- }
- /*
- * remove any trailing ranges
- */
- while (it.hasNext())
- {
- it.next();
- it.remove();
- }
- }
-
- /**
* Returns the total length of the supplied ranges
*
* @param ranges