public void TestFormatter() { string filePath = @"TestUtils\BAM\SeqAlignment.bam"; string outputfilePath = "BAMTests123.bam"; BAMParser parser = null; try { parser = new BAMParser(); BAMFormatter formatter = new BAMFormatter(); SequenceAlignmentMap alignmentMap = parser.Parse(filePath); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); formatter.Format(alignmentMap, outputfilePath); formatter.CreateSortedBAMFile = true; formatter.CreateIndexFile = true; alignmentMap = parser.Parse(filePath); formatter.Format(alignmentMap, outputfilePath); Assert.IsTrue(File.Exists("BAMTests123.bam.bai")); alignmentMap = parser.Parse(outputfilePath); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); alignmentMap = parser.ParseRange("BAMTests123.bam", new SequenceRange("chr20", 0, int.MaxValue)); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); alignmentMap = parser.ParseRange("BAMTests123.bam", new SequenceRange("chr20", 0, 28833)); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 1); } finally { if (parser != null) { parser.Dispose(); } } }
public void TestFormatter() { string filePath = @"TestUtils\BAM\SeqAlignment.bam".TestDir(); const string outputfilePath = "BAMTests123.bam"; string outputIndexFile = outputfilePath + ".bai"; BAMParser parser = new BAMParser(); SequenceAlignmentMap alignmentMap = parser.ParseOne <SequenceAlignmentMap>(filePath); Assert.IsNotNull(alignmentMap); Assert.IsNotNull(alignmentMap.Header); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.IsNotNull(alignmentMap.QuerySequences); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); BAMFormatter formatter = new BAMFormatter(); formatter.Format(alignmentMap, outputfilePath); formatter.CreateSortedBAMFile = true; formatter.CreateIndexFile = true; formatter.Format(alignmentMap, outputfilePath); Assert.IsTrue(File.Exists("BAMTests123.bam.bai")); alignmentMap = parser.ParseOne <SequenceAlignmentMap>(outputfilePath); Assert.IsNotNull(alignmentMap); Assert.IsNotNull(alignmentMap.Header); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); alignmentMap = parser.ParseRange("BAMTests123.bam", new SequenceRange("chr20", 0, int.MaxValue)); Assert.IsNotNull(alignmentMap); Assert.IsNotNull(alignmentMap.Header); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); alignmentMap = parser.ParseRange("BAMTests123.bam", new SequenceRange("chr20", 0, 28833)); Assert.IsNotNull(alignmentMap); Assert.IsNotNull(alignmentMap.Header); Assert.AreEqual(alignmentMap.Header.GetReferenceSequencesInfoFromSQHeader().Count, 1); Assert.AreEqual(alignmentMap.Header.ReferenceSequences.Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 1); File.Delete(outputfilePath); File.Delete(outputIndexFile); }
public void TestFormatter() { string filePath = @"TestData\BAM\SeqAlignment.bam"; string outputfilePath = "bamtest1.bam"; BAMParser parser = new BAMParser(); BAMFormatter formatter = new BAMFormatter(); SequenceAlignmentMap alignmentMap = parser.Parse(filePath); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequences().Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); formatter.Format(alignmentMap, outputfilePath); formatter.CreateSortedBAMFile = true; formatter.CreateIndexFile = true; alignmentMap = parser.Parse(filePath); formatter.Format(alignmentMap, "bamtest.bam"); Assert.IsTrue(File.Exists("bamtest.bam.bai")); alignmentMap = parser.Parse(outputfilePath); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequences().Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); alignmentMap = parser.ParseRange("bamtest.bam", new SequenceRange("chr20", 0, int.MaxValue)); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequences().Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 2); alignmentMap = parser.ParseRange("bamtest.bam", new SequenceRange("chr20", 0, 28833)); Assert.IsTrue(alignmentMap != null); Assert.AreEqual(alignmentMap.Header.GetReferenceSequences().Count, 1); Assert.AreEqual(alignmentMap.QuerySequences.Count, 1); }
public static IEnumerable <ISequenceAlignmentParser> OutputAlignedMitoReadsFromBamFile(string Filename) { //Very inefficient right now BAMParser bp = new BAMParser(); foreach (MitoBlastMatchRegion region in regionsThatMatch) { var map = bp.ParseRange(Filename, region.Contig, region.Start, region.End); foreach (ISequence seq in map.QuerySequences.SelectMany(x => x.Sequences)) { yield return(seq as ISequenceAlignmentParser); } } }
/// <summary> /// Parse BAM and validate parsed aligned sequences and its properties. /// </summary> /// <param name="nodeName">Different xml nodes used for different test cases</param> /// <param name="BAMParserPam">BAM Parse method parameters</param> /// <param name="IsEncoding">True for BAMParser ctor with encoding. /// False otherwise </param> void ValidateBAMParser(string nodeName, BAMParserParameters BAMParserPam, bool IsReferenceIndex) { // Get input and output values from xml node. string bamFilePath = utilityObj.xmlUtil.GetTextValue(nodeName, Constants.FilePathNode); string expectedAlignedSeqFilePath = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ExpectedSequence); string refIndexValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.RefIndexNode); string startIndexValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.StartIndexNode); string endIndexValue = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.EndIndexNode); string alignedSeqCount = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.AlignedSeqCountNode); string refSeqName = utilityObj.xmlUtil.GetTextValue( nodeName, Constants.ChromosomeNameNode); SequenceAlignmentMap seqAlignment = null; BAMParser bamParser = null; try { bamParser = new BAMParser(); // Parse a BAM file with different parameters. switch (BAMParserPam) { case BAMParserParameters.StreamReader: using (Stream stream = new FileStream(bamFilePath, FileMode.Open, FileAccess.Read)) { seqAlignment = bamParser.Parse(stream); } break; case BAMParserParameters.FileName: seqAlignment = bamParser.Parse(bamFilePath); break; case BAMParserParameters.ParseRangeFileName: seqAlignment = bamParser.ParseRange(bamFilePath, Convert.ToInt32(refIndexValue, (IFormatProvider)null)); break; case BAMParserParameters.ParseRangeWithIndex: seqAlignment = bamParser.ParseRange(bamFilePath, Convert.ToInt32(refIndexValue, (IFormatProvider)null), Convert.ToInt32(startIndexValue, (IFormatProvider)null), Convert.ToInt32(endIndexValue, (IFormatProvider)null)); break; case BAMParserParameters.ParseRangeUsingRefSeq: seqAlignment = bamParser.ParseRange(bamFilePath, refSeqName); break; case BAMParserParameters.ParseRangeUsingRefSeqAndFlag: seqAlignment = bamParser.ParseRange(bamFilePath, refSeqName); break; case BAMParserParameters.ParseRangeUsingRefSeqUsingIndex: seqAlignment = bamParser.ParseRange(bamFilePath, refSeqName, Convert.ToInt32(startIndexValue, (IFormatProvider)null), Convert.ToInt32(endIndexValue, (IFormatProvider)null)); break; case BAMParserParameters.ParseRangeUsingIndexesAndFlag: seqAlignment = bamParser.ParseRange(bamFilePath, refSeqName, Convert.ToInt32(startIndexValue, (IFormatProvider)null), Convert.ToInt32(endIndexValue, (IFormatProvider)null)); break; } // Validate BAM Header record fileds. if (!IsReferenceIndex) { ValidateBAMHeaderRecords(nodeName, seqAlignment); } IList <SAMAlignedSequence> alignedSeqs = seqAlignment.QuerySequences; Assert.AreEqual(alignedSeqCount, alignedSeqs.Count.ToString((IFormatProvider)null)); // Get expected sequences using (FastAParser parserObj = new FastAParser(expectedAlignedSeqFilePath)) { IEnumerable <ISequence> expectedSequences = parserObj.Parse(); IList <ISequence> expectedSequencesList = expectedSequences.ToList(); // Validate aligned sequences from BAM file. for (int index = 0; index < alignedSeqs.Count; index++) { Assert.AreEqual( new string(expectedSequencesList[index].Select(a => (char)a).ToArray()), new string(alignedSeqs[index].QuerySequence.Select(a => (char)a).ToArray())); // Log to NUNIT GUI. ApplicationLog.WriteLine(string.Format((IFormatProvider)null, "BAM Parser BVT : Validated Aligned sequence :{0} successfully", alignedSeqs[index].QuerySequence.ToString())); Console.WriteLine(string.Format((IFormatProvider)null, "BAM Parser BVT : Validated the aligned sequence :{0} successfully", alignedSeqs[index].QuerySequence.ToString())); } } } finally { bamParser.Dispose(); } }