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