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(); } }
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; } } }
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); } } } }