Example #1
0
        public void ReadMzMLChromatogramsTestDelayedRandom(string inputFileRelativePath, int expectedChromatograms, bool immediateRandomAccess)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, immediateRandomAccess, true))
            {
                if (!immediateRandomAccess)
                {
                    // For non-random access readers, the number of chromatograms (as reported by NumChromatograms)
                    // will not get populated until after all the spectra (if any) have been read
                    // Therefore, NumChromatograms should currently be zero since immediateRandomAccess was false
                    Assert.AreEqual(0, reader.NumChromatograms);

                    // You cannot use reader.TryMakeRandomAccessCapable() to make the chromatograms available
                    // Thus, exit this method
                    return;
                }

                Assert.AreEqual(expectedChromatograms, reader.NumChromatograms);
                var stepSize = Math.Max(1, expectedChromatograms / 100);

                var chromatogramNumber = 1;
                while (chromatogramNumber <= expectedChromatograms)
                {
                    var chrom = reader.ReadChromatogram(chromatogramNumber);
                    Console.WriteLine("Chromatogram {0,2}, NativeID {1,-35} has {2:N0} data points", chrom.Index, chrom.Id, chrom.Intensities.Length);

                    chromatogramNumber += stepSize;
                }
            }
        }
Example #2
0
        //[TestCase(@"MzML\QC_Shew_16_01-15f_MPA_02redo_8Nov16_Tiger_16-02-14.mzML.gz", 9293)] // implemented, but decompresses first
        public void ReadMzMLChromatogramsTestRandom(string inputFileRelativePath, int expectedChromatograms)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, true, true))
            {
                Assert.AreEqual(expectedChromatograms, reader.NumChromatograms);
                var chromCount = 0;
                foreach (var chrom in reader.ReadAllChromatograms(true))
                {
                    if (chrom == null)
                    {
                        Console.WriteLine("ReadAllChromatograms returned null for chromatogram index {0}", chromCount);
                    }
                    else
                    {
                        Console.WriteLine("Chromatogram {0}, NativeID {1,-45} has {2:N0} data points", chrom.Index, chrom.Id, chrom.Intensities.Length);
                    }

                    chromCount++;
                }
                Assert.AreEqual(expectedChromatograms, chromCount);
            }
        }
Example #3
0
        public void ReadMzMLTest(string inputFileRelativePath, int expectedSpectra, bool includePeaks)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, false, true))
            {
                Assert.AreEqual(expectedSpectra, reader.NumSpectra);
                var specCount = 0;
                foreach (var spec in reader.ReadAllSpectra(includePeaks))
                {
                    if (specCount < 100 || specCount >= expectedSpectra - 100)
                    {
                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45} has {2:N0} data points", spec.ScanNumber, spec.NativeId, spec.Peaks.Length);
                    }
                    else if (specCount == 100)
                    {
                        Console.WriteLine("...");
                    }

                    specCount++;
                }
                Assert.AreEqual(expectedSpectra, specCount);
            }
        }
        public void ReadFileLowMem(string inputFileRelativePath, int expectedNativeIDs, int expectedResults, int expectedPeptides, int expectedProteinSeqs)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            var reader      = new SimpleMZIdentMLReader();
            var spectrumIDs = new SortedSet <string>();
            var peptides    = new SortedSet <string>();
            var proteinSeqs = new SortedSet <string>();
            var specResults = 0;

            using (var results = reader.ReadLowMem(sourceFile.FullName))
            {
                var resultIdentifications = results.Identifications.ToList();
                var resultCountTotal      = resultIdentifications.Count;

                foreach (var specItem in resultIdentifications)
                {
                    specResults++;

                    if (!spectrumIDs.Contains(specItem.NativeId))
                    {
                        spectrumIDs.Add(specItem.NativeId);
                    }

                    foreach (var evidenceItem in specItem.PepEvidence)
                    {
                        if (!peptides.Contains(evidenceItem.SequenceWithNumericMods))
                        {
                            peptides.Add(evidenceItem.SequenceWithNumericMods);
                        }

                        if (!proteinSeqs.Contains(evidenceItem.DbSeq.Accession))
                        {
                            proteinSeqs.Add(evidenceItem.DbSeq.Accession);
                        }
                    }

                    if (specResults % 1000 == 0)
                    {
                        Console.WriteLine("{0,6:N0} / {1,6:N0}", specResults, resultCountTotal);
                    }
                }
            }

            Console.WriteLine();
            Console.WriteLine("Spectrum Identification Results: {0,6:N0}", specResults);
            Console.WriteLine("Native IDs: {0,6:N0}", spectrumIDs.Count);
            Console.WriteLine("Unique Peptides: {0,6:N0}", peptides.Count);
            Console.WriteLine("Unique Protein Sequences: {0,6:N0}", proteinSeqs.Count);

            Assert.AreEqual(expectedResults, specResults, "Spectrum Identification Results");
            Assert.AreEqual(expectedNativeIDs, spectrumIDs.Count, "Native IDs");
            Assert.AreEqual(expectedPeptides, peptides.Count, "Unique Peptides");
            Assert.AreEqual(expectedProteinSeqs, proteinSeqs.Count, "Unique Protein Sequences");
        }
        public void MzIdentMLReadTest(string inputFileRelativePath, int expectedSpecResults, int expectedSpecItems, int expectedPeptides, int expectedSeqs)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            var identData   = new IdentDataObj(MzIdentMlReaderWriter.Read(sourceFile.FullName));
            var specResults = 0;
            var specItems   = 0;

            foreach (var specList in identData.DataCollection.AnalysisData.SpectrumIdentificationList)
            {
                if (specList.SpectrumIdentificationResults == null)
                {
                    continue;
                }

                specResults += specList.SpectrumIdentificationResults.Count;
                foreach (var specResult in specList.SpectrumIdentificationResults)
                {
                    specItems += specResult.SpectrumIdentificationItems.Count;
                }
            }

            var observedPeptides = 0;

            if (identData.SequenceCollection.Peptides != null)
            {
                observedPeptides = identData.SequenceCollection.Peptides.Count;
            }

            var observeProteins = 0;

            if (identData.SequenceCollection.DBSequences != null)
            {
                observeProteins = identData.SequenceCollection.DBSequences.Count;
            }

            Console.WriteLine();
            Console.WriteLine("Spectrum Identification Results: {0,6:N0}", specResults);
            Console.WriteLine("Native IDs: {0,6:N0}", specItems);
            Console.WriteLine("Unique Peptides: {0,6:N0}", observedPeptides);
            Console.WriteLine("Unique Protein Sequences: {0,6:N0}", observeProteins);

            Assert.AreEqual(expectedSpecResults, specResults, "Spectrum Identification Results");
            Assert.AreEqual(expectedSpecItems, specItems, "Native IDs");
            Assert.AreEqual(expectedPeptides, observedPeptides, "Unique Peptides");
            Assert.AreEqual(expectedSeqs, observeProteins, "Unique Protein Sequences");
        }
Example #6
0
        public void ReadMzMLChromatogramsTestNonRandom(string inputFileRelativePath, int expectedSpectra, int expectedChromatograms)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, false, true))
            {
                Assert.AreEqual(expectedSpectra, reader.NumSpectra);
                if (expectedSpectra != 0)
                {
                    Assert.AreEqual(0, reader.NumChromatograms);
                }
                var specCount = 0;
                foreach (var spec in reader.ReadAllSpectra(true))
                {
                    if (specCount < 100 || specCount >= expectedSpectra - 100)
                    {
                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45} has {2:N0} data points", spec.ScanNumber, spec.NativeId, spec.Peaks.Length);
                    }
                    else if (specCount == 100)
                    {
                        Console.WriteLine("...");
                    }

                    specCount++;
                }
                Assert.AreEqual(expectedSpectra, specCount);
                Assert.AreEqual(expectedChromatograms, reader.NumChromatograms);

                var chromCount = 0;
                foreach (var chrom in reader.ReadAllChromatograms(false))
                {
                    if (chrom == null)
                    {
                        Console.WriteLine("ReadAllChromatograms returned null for chromatogram index {0}", chromCount);
                    }
                    else
                    {
                        Console.WriteLine("Chromatogram {0}, NativeID {1,-45} has {2:N0} data points", chrom.Index, chrom.Id, chrom.Intensities.Length);
                    }

                    chromCount++;
                }
                Assert.AreEqual(expectedChromatograms, reader.NumChromatograms);
                Assert.AreEqual(expectedChromatograms, chromCount);
            }
        }
        public void MzMLIndexedReadTest(string inputFileRelativePath, int expectedSpectra)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            var reader = new MzMLReader(Path.Combine(TestPath.ExtTestDataDirectory, sourceFile.FullName));
            //mzMLType mzMLData = reader.Read();
            var mzMLData = new MSData(reader.Read());

            Console.WriteLine("Spectrum count: " + mzMLData.Run.SpectrumList.Spectra.Count);
            Assert.AreEqual(expectedSpectra, mzMLData.Run.SpectrumList.Spectra.Count, "Spectrum count");
        }
Example #8
0
        public void ReadMzMLCompareScanNumbers(string inputFileRelativePath, string artificialScanNumberList, string expectedActualScanNumberList)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            var artificialScanNumbers = ParseOrderedIntegerList(artificialScanNumberList);

            var expectedActualScanNumbers = ParseOrderedIntegerList(expectedActualScanNumberList);

            // Run the test twice, first with randomAccess disabled, then with randomAccess enabled
            for (var i = 0; i < 2; i++)
            {
                var randomAccess = i > 0;

                using (var reader = new SimpleMzMLReader(sourceFile.FullName, randomAccess, true))
                {
                    for (var j = 0; j < artificialScanNumbers.Count; j++)
                    {
                        var artificialScanNumber = artificialScanNumbers[j];
                        var expectedScanNumber   = expectedActualScanNumbers[j];

                        var spectrum = reader.ReadMassSpectrum(artificialScanNumber, false);

                        if (expectedScanNumber <= 0)
                        {
                            Console.WriteLine("Spectrum {0,4} does not exist; this was expected", artificialScanNumber);

                            Assert.IsNull(spectrum);
                            continue;
                        }
                        Assert.IsNotNull(spectrum);

                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45}, scan {2,4}", spectrum.ScanNumber, spectrum.NativeId, spectrum.NativeIdScanNumber);

                        Assert.AreEqual(expectedScanNumber, spectrum.NativeIdScanNumber);

                        var comparisonSpectrum = reader.GetSpectrumForScan(spectrum.NativeIdScanNumber, false);

                        Assert.AreEqual(comparisonSpectrum.NativeId, spectrum.NativeId);
                    }
                }

                Console.WriteLine();
            }
        }
Example #9
0
        public void MzMLIndexedReadTest(string inputFileRelativePath, int expectedSpectra)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            var reader   = new MzMLReader(sourceFile.FullName);
            var mzMLData = reader.Read();

            Console.WriteLine("Spectrum count: " + mzMLData.run.spectrumList.count);
            Console.WriteLine("Array length: " + mzMLData.run.spectrumList.spectrum.Count);

            Assert.AreEqual(expectedSpectra.ToString(), mzMLData.run.spectrumList.count, "Spectrum Count");
            Assert.AreEqual(expectedSpectra, mzMLData.run.spectrumList.spectrum.Count, "Array length");
        }
Example #10
0
        public void ReadMzMLTestRetrieveByScanNumber(string inputFileRelativePath, int expectedSpectra, bool includePeaks, string scanNumberList, string expectedMissingScanNumbers)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            var scanNumbers = ParseDelimitedIntegerList(scanNumberList);

            var expectedMissingScans = ParseDelimitedIntegerList(expectedMissingScanNumbers);

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, true, true))
            {
                Assert.AreEqual(expectedSpectra, reader.NumSpectra);

                foreach (var scanNumber in scanNumbers)
                {
                    var spec = reader.GetSpectrumForScan(scanNumber, includePeaks);

                    if (spec == null)
                    {
                        if (expectedMissingScans.Contains(scanNumber))
                        {
                            Console.WriteLine("Scan {0} not found; this is expected", scanNumber);
                            continue;
                        }
                        Assert.Fail("GetSpectrumForScan returned null for scan {0}", scanNumber);
                    }

                    if (includePeaks)
                    {
                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45}, scan {2,4} has {3:N0} data points", spec.ScanNumber, spec.NativeId, spec.NativeIdScanNumber, spec.Peaks.Length);
                    }
                    else
                    {
                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45}, scan {2,4} (peaks not loaded)", spec.ScanNumber, spec.NativeId, spec.NativeIdScanNumber);
                    }

                    Assert.AreEqual(scanNumber, spec.NativeIdScanNumber);
                }
            }
        }
Example #11
0
        public void ReadMzMLTestRandom(string inputFileRelativePath, int expectedSpectra, bool includePeaks, bool immediateRandomAccess)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, immediateRandomAccess, true))
            {
                if (!immediateRandomAccess)
                {
                    reader.TryMakeRandomAccessCapable();
                }

                Assert.AreEqual(expectedSpectra, reader.NumSpectra);
                var stepSize = Math.Max(1, expectedSpectra / 100);

                // Note: calling .ReadMassSpectrum with scanNumber = 1 returns the first spectrum in the file, regardless of its actual scan number
                var scanNumber = 1;
                while (scanNumber <= expectedSpectra)
                {
                    var spec = reader.ReadMassSpectrum(scanNumber, includePeaks);

                    if (includePeaks)
                    {
                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45}, scan {2,4} has {3:N0} data points", spec.ScanNumber, spec.NativeId, spec.NativeIdScanNumber, spec.Peaks.Length);
                    }
                    else
                    {
                        Console.WriteLine("Spectrum {0,4}, NativeID {1,-45}, scan {2,4} (peaks not loaded)", spec.ScanNumber, spec.NativeId, spec.NativeIdScanNumber);
                    }

                    scanNumber += stepSize;
                }
            }
        }
Example #12
0
        public void TestGetParentScan(string inputFileRelativePath, int startScan, int endScan, params int[] expectedPrecursorScans)
        {
            if (!TestPath.FindInputFile(inputFileRelativePath, out var sourceFile))
            {
                Console.WriteLine("File not found: " + inputFileRelativePath);
                return;
            }

            using (var reader = new SimpleMzMLReader(sourceFile.FullName, true, true))
            {
                for (var scanNumber = startScan; scanNumber <= endScan; scanNumber++)
                {
                    var spectrum = reader.ReadMassSpectrum(scanNumber, false);
                    if (spectrum == null)
                    {
                        continue;
                    }

                    var targetIndex = scanNumber - startScan;
                    int expectedPrecursorScan;

                    if (targetIndex >= 0 && targetIndex < expectedPrecursorScans.Length)
                    {
                        expectedPrecursorScan = expectedPrecursorScans[targetIndex];
                    }
                    else
                    {
                        expectedPrecursorScan = 0;
                    }

                    if (spectrum.Precursors.Count == 0)
                    {
                        Console.WriteLine("Scan {0} is not a fragmentation scan", spectrum.ScanNumber);

                        if (expectedPrecursorScan > 0)
                        {
                            Assert.Fail("Scan {0} was supposed to have precursor scan {1}, but it has no precursors", spectrum.ScanNumber, expectedPrecursorScan);
                        }

                        continue;
                    }

                    var precursorSpectrumReference = spectrum.Precursors[0].PrecursorSpectrumRef;

                    // Parse out scan number from the precursor spectrum reference
                    // "controllerType=0 controllerNumber=1 scan=1"
                    if (!NativeIdConversion.TryGetScanNumberLong(precursorSpectrumReference, out var precursorScan))
                    {
                        Assert.Fail("Invalid spectrum reference: " + precursorSpectrumReference);
                    }

                    Console.WriteLine("Scan {0} has precursor {1:F2} m/z, precursor scan {2}",
                                      spectrum.ScanNumber,
                                      spectrum.Precursors[0].IsolationWindow.TargetMz,
                                      precursorScan);

                    if (expectedPrecursorScan != 0)
                    {
                        Assert.AreEqual(expectedPrecursorScan, precursorScan,
                                        "Precursor scan number does not match the expected value for scan {0}",
                                        spectrum.ScanNumber);
                    }
                }
            }
        }