public static void TestSummedMsDataFile() { ThermoStaticData rawFile = ThermoStaticData.LoadAllStaticData(@"05-13-16_cali_MS_60K-res_MS.raw"); // 3 scans SummedMsDataFile summed3 = new SummedMsDataFile(rawFile, 3, 10); Assert.AreEqual(rawFile.NumSpectra - 2, summed3.NumSpectra); var resultingTic = summed3.GetOneBasedScan(1).TotalIonCurrent; var mySummedTic = rawFile.GetOneBasedScan(1).MassSpectrum.SumOfAllY + rawFile.GetOneBasedScan(2).MassSpectrum.SumOfAllY + rawFile.GetOneBasedScan(3).MassSpectrum.SumOfAllY; var instrumentSummedTic = rawFile.GetOneBasedScan(1).TotalIonCurrent + rawFile.GetOneBasedScan(2).TotalIonCurrent + rawFile.GetOneBasedScan(3).TotalIonCurrent; // Tics are approximately what they should be Assert.IsTrue(Math.Abs(resultingTic - mySummedTic) / mySummedTic < 1e-4); Assert.IsTrue(Math.Abs(resultingTic - instrumentSummedTic) / instrumentSummedTic < 1e-1); // Equal to representative Assert.AreEqual(summed3.GetOneBasedScan(1).RetentionTime, rawFile.GetOneBasedScan(2).RetentionTime); Assert.IsTrue(summed3.GetOneBasedScan(1).MassSpectrum.Size <= rawFile.GetOneBasedScan(1).MassSpectrum.Size + rawFile.GetOneBasedScan(2).MassSpectrum.Size + rawFile.GetOneBasedScan(3).MassSpectrum.Size); Assert.IsTrue(summed3.GetOneBasedScan(1).MassSpectrum.Size >= rawFile.GetOneBasedScan(1).MassSpectrum.Size); Assert.IsTrue(summed3.GetOneBasedScan(1).MassSpectrum.Size >= rawFile.GetOneBasedScan(2).MassSpectrum.Size); Assert.IsTrue(summed3.GetOneBasedScan(1).MassSpectrum.Size >= rawFile.GetOneBasedScan(3).MassSpectrum.Size); Assert.IsTrue(summed3.GetOneBasedScan(1).MassSpectrum.YofPeakWithHighestY == rawFile.GetOneBasedScan(1).MassSpectrum.YofPeakWithHighestY + rawFile.GetOneBasedScan(2).MassSpectrum.YofPeakWithHighestY + rawFile.GetOneBasedScan(3).MassSpectrum.YofPeakWithHighestY); // Interval of 893-899 mz Assert.AreEqual(2, rawFile.GetOneBasedScan(1).MassSpectrum.NumPeaksWithinRange(893, 899)); Assert.AreEqual(2, rawFile.GetOneBasedScan(2).MassSpectrum.NumPeaksWithinRange(893, 899)); Assert.AreEqual(1, rawFile.GetOneBasedScan(3).MassSpectrum.NumPeaksWithinRange(893, 899)); // One peak persists across the three scans! So instead of 5 see three peaks in summed Assert.AreEqual(3, summed3.GetOneBasedScan(1).MassSpectrum.NumPeaksWithinRange(893, 899)); Assert.AreEqual(summed3.GetOneBasedScan(1).MassSpectrum.FirstX, Math.Min(Math.Min(rawFile.GetOneBasedScan(1).MassSpectrum.FirstX.Value, rawFile.GetOneBasedScan(2).MassSpectrum.FirstX.Value), rawFile.GetOneBasedScan(3).MassSpectrum.FirstX.Value)); Assert.AreEqual(summed3.GetOneBasedScan(1).MassSpectrum.LastX, Math.Max(Math.Max(rawFile.GetOneBasedScan(1).MassSpectrum.LastX.Value, rawFile.GetOneBasedScan(2).MassSpectrum.LastX.Value), rawFile.GetOneBasedScan(3).MassSpectrum.LastX.Value)); // 5 scans SummedMsDataFile summed5 = new SummedMsDataFile(rawFile, 5, 10); Assert.AreEqual(rawFile.NumSpectra - 4, summed5.NumSpectra); MzmlMethods.CreateAndWriteMyMzmlWithCalibratedSpectra(summed5, "testSummed.mzML", false); var ok = Mzml.LoadAllStaticData("testSummed.mzML"); MzmlMethods.CreateAndWriteMyMzmlWithCalibratedSpectra(ok, "testSummed2.mzML", false); Mzml.LoadAllStaticData("testSummed2.mzML"); }
private static void DoFileDecon(string[] args) { var p = new FluentCommandLineParser <ApplicationArguments>(); p.Setup(arg => arg.AggregationTolerancePpm) .As("AggregationTolerancePpm"); p.Setup(arg => arg.DeconvolutionTolerancePpm) .As("DeconvolutionTolerancePpm"); p.Setup(arg => arg.MinScan) .As("MinScan"); p.Setup(arg => arg.MaxScan) .As("MaxScan"); p.Setup(arg => arg.MinAssumedChargeState) .As("MinAssumedChargeState"); p.Setup(arg => arg.MaxAssumedChargeState) .As("MaxAssumedChargeState"); p.Setup(arg => arg.IntensityRatioLimit) .As("IntensityRatioLimit"); p.Setup(arg => arg.AverageScans) .As("AverageScans"); p.Setup(arg => arg.NumScansRequired) .As("NumScansRequired"); p.Setup(arg => arg.FilePath) .As("FilePath"). Required(); var result = p.Parse(args); Console.WriteLine("Running deconvolution using the following parameters:"); Console.WriteLine(p.Object); if (result.HasErrors == false) { MsDataFile myMsDataFile; if (Path.GetExtension(p.Object.FilePath).Equals(".mzML", StringComparison.OrdinalIgnoreCase)) { myMsDataFile = Mzml.LoadAllStaticData(p.Object.FilePath); } else { myMsDataFile = ThermoStaticData.LoadAllStaticData(p.Object.FilePath); } if (p.Object.AverageScans > 1) { myMsDataFile = new SummedMsDataFile(myMsDataFile, p.Object.AverageScans, p.Object.DeconvolutionTolerancePpm); } using (StreamWriter output = new StreamWriter(@"DeconvolutionOutput-" + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture) + ".tsv")) { output.WriteLine("Mass\tScore\tNumPeaks\tNumScans\tMinScan\tMaxScan\tElutionStart\tElutionEnd\tTotalNormalizedIntensity\tObservedCharges\tMostIntenseElutionTime\tMostIntenseCharge\tMostIntenseMz\tNumPeaksInMostIntenseEnvelope\tMostIntenseEnvelopeIntensity\tElutionOfMostIntenseCharge"); foreach (var nice in myMsDataFile.Deconvolute(p.Object.MinScan, p.Object.MaxScan, p.Object.MinAssumedChargeState, p.Object.MaxAssumedChargeState, p.Object.DeconvolutionTolerancePpm, p.Object.IntensityRatioLimit, p.Object.AggregationTolerancePpm, b => b.MsnOrder == 1).OrderByDescending(b => b.Score)) { if ((nice.MaxScanIndex - nice.MinScanIndex + 1) >= p.Object.NumScansRequired) { output.WriteLine(nice.OneLineString()); } } } } else { Console.WriteLine("BAD PARAMETERS"); Console.WriteLine(result.ErrorText); } }