private void WriteUncompressedSortedBAM(SequenceAlignmentMap sequenceAlignmentMap, Stream writer)
{
if (SortType != BAMSortByFields.ReadNames)
{
List<IGrouping<string, SAMAlignedSequence>> groups =
sequenceAlignmentMap.QuerySequences.GroupBy(Q => Q.RName).OrderBy(G => G.Key).ToList();
foreach (SequenceRange range in this.refSequences)
{
IGrouping<string, SAMAlignedSequence> group = groups.FirstOrDefault(G => G.Key.Equals(range.ID));
if (group == null)
{
continue;
}
// sort aligned sequence on left co-ordinate.
List<SAMAlignedSequence> alignedSeqs = group.OrderBy(A => A.Pos).ToList();
foreach (SAMAlignedSequence alignedSeq in alignedSeqs)
{
ValidateSQHeader(alignedSeq.RName);
WriteAlignedSequence(alignedSeq, writer);
writer.Flush();
}
}
}
else
{
List<SAMAlignedSequence> alignedSeqs =
sequenceAlignmentMap.QuerySequences.OrderBy(Q => Q.QName).ToList();
foreach (SAMAlignedSequence alignedSeq in alignedSeqs)
{
ValidateSQHeader(alignedSeq.RName);
WriteAlignedSequence(alignedSeq, writer);
writer.Flush();
}
}
}