/** * @param gas_seq The sequence which we wish to map it against other sequence(s) * @param gas_targetSeqs The target sequence */ private HashMap<Integer, Integer> doMapSeq2Seq( GappedAlignmentString gas_seq, GappedAlignmentString[] gas_targetSeqs) { int N = gas_seq.gappedLength(); // making map allocation more efficient int initCapacity = (int) Math.ceil(1.5 * N); HashMap<Integer, Integer> map = new HashMap<Integer, Integer>(initCapacity); // When a gap position corresponds to a gap remove it from seq HashMap<Integer, Integer> gapped2UngappedMap_seq = gas_seq.getGapped2UngappedMap(); Integer[] gapPositions_seq = gas_seq.determineGapPositions(); for (Integer e : gapPositions_seq) gapped2UngappedMap_seq.remove(e); // When a gap position corresponds to a gap, put -1 as its value HashMap<Integer, Integer> gapped2UngappedMap_targetSeq = gas_targetSeqs[0].getGapped2UngappedMap(); Integer[] gapPositions_targetSeq = gas_targetSeqs[0].determineGapPositions(); for (Integer e : gapPositions_targetSeq) gapped2UngappedMap_targetSeq.put(e, -1); Integer[] gappedPositionsNoGaps_seq = gapped2UngappedMap_seq.keySet().toArray(new Integer[gapped2UngappedMap_seq.size()]); for (Integer gappedPosNoGaps : gappedPositionsNoGaps_seq) { Integer ungappedPos = gapped2UngappedMap_targetSeq.get(gappedPosNoGaps); if (ungappedPos.equals(null)) { ungappedPos = -1; } map.put(gapped2UngappedMap_seq.get(gappedPosNoGaps), ungappedPos); } return map; } // end of doMapSeq2Seq method