Пример #1
0
        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();
                }
            }
        }
Пример #2
0
        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);
        }
Пример #3
0
        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);
        }
Пример #4
0
        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);
                }
            }
        }
Пример #5
0
        /// <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();
            }
        }