- SAMRecord rec = it.next();
- int start = rec.getStart();
- int end = rec.getEnd();
-
- SequenceI seq = new Sequence(rec.getReadName(), rec.getReadString());
-
- String cigarredRead = parser.parseCigarToSequence(rec, insertions);
-
- SequenceI alsq = seq.deriveSequence();
- alsq.setSequence(cigarredRead);
- alsq.setStart(start);
- alsq.setEnd(end);
- seqs.add(alsq);
+ SAMRecordIterator it = fileReader.query(chromosome, start, end,
+ false);
+ CigarParser parser = new CigarParser('-');
+ SortedMap<Integer, Integer> insertions = parser.getInsertions(it);
+ it.close();
+
+ it = fileReader.query(chromosome, start, end, false);
+ while (it.hasNext())
+ {
+ SAMRecord rec = it.next();
+
+ // set the alignment start to be start of first read (we assume reads
+ // are sorted)
+ if (alignmentStart == -1)
+ {
+ alignmentStart = rec.getAlignmentStart();
+ }
+
+ // make dataset sequence: start at 1, end at read length
+ SequenceI seq = new Sequence(rec.getReadName(),
+ rec.getReadString().toLowerCase());
+ seq.setStart(1);
+ seq.setEnd(rec.getReadLength());
+
+ String newRead = parser.parseCigarToSequence(rec, insertions,
+ alignmentStart, seq);
+
+ // make alignment sequences
+ SequenceI alsq = seq.deriveSequence();
+ alsq.setSequence(newRead);
+
+ // set start relative to soft clip; assume end is set by Sequence code
+ alsq.setStart(rec.getStart() - rec.getUnclippedStart() + 1);
+ seqs.add(alsq);
+ }