public void TestAMoreRealFile() { var theScan = myMsDataFile.GetOneBasedScan(2); Assert.AreEqual(1, theScan.IsolationRange.Width); Assert.AreEqual(DissociationType.Unknown, theScan.DissociationType); Assert.AreEqual(693.99, theScan.IsolationMz); Assert.AreEqual(1, theScan.IsolationRange.Maximum - theScan.IsolationRange.Minimum); Assert.AreEqual(1, theScan.OneBasedPrecursorScanNumber); Assert.AreEqual(3, theScan.SelectedIonChargeStateGuess.Value); var precursorScan = myMsDataFile.GetOneBasedScan(theScan.OneBasedPrecursorScanNumber.Value); theScan.RefineSelectedMzAndIntensity(precursorScan.MassSpectrum); Assert.AreEqual(.32872, theScan.SelectedIonIntensity, 0.01); Assert.AreEqual(693.9892, theScan.SelectedIonMZ, 0.01); Assert.AreEqual(693.655, theScan.SelectedIonMonoisotopicGuessMz, 0.001); Assert.AreNotEqual(0, myMsDataFile.GetOneBasedScan(2).MassSpectrum.FirstX); Assert.AreEqual(myMsDataFile.GetOneBasedScan(2).MassSpectrum.CopyTo2DArray()[0, 0], myMsDataFile.GetOneBasedScan(2).MassSpectrum.FirstX); Assert.AreNotEqual(0, myMsDataFile.GetOneBasedScan(2).MassSpectrum.LastX); theScan.ComputeMonoisotopicPeakIntensity(precursorScan.MassSpectrum); theScan.TransformMzs(b => 0, b => 0); Assert.AreEqual("Scan #2", myMsDataFile.GetOneBasedScan(2).ToString()); Assert.AreEqual(0, myMsDataFile.GetOneBasedScan(2).MassSpectrum.FirstX); Assert.AreEqual(0, myMsDataFile.GetOneBasedScan(2).MassSpectrum.LastX); Assert.AreEqual(0, theScan.SelectedIonMZ); List <MsDataScan> a = myMsDataFile.GetAllScansList(); foreach (var b in a) { Assert.IsFalse(b.IsCentroid); } foreach (var b in myMsDataFile) { Assert.AreEqual(Polarity.Positive, b.Polarity); } }
public void TestCoIsolation() { Peptide pep1 = new Peptide("AAAAAA"); Peptide pep2 = new Peptide("AAA[H]AAA"); var dist1 = IsotopicDistribution.GetDistribution(pep1.GetChemicalFormula(), 0.1, 0.01); var dist2 = IsotopicDistribution.GetDistribution(pep2.GetChemicalFormula(), 0.1, 0.01); MsDataScan[] Scans = new MsDataScan[2]; double[] ms1intensities = new double[] { 0.8, 0.8, 0.2, 0.02, 0.2, 0.02 }; double[] ms1mzs = dist1.Masses.Concat(dist2.Masses).OrderBy(b => b).Select(b => b.ToMz(1)).ToArray(); double selectedIonMz = ms1mzs[1]; MzSpectrum MS1 = new MzSpectrum(ms1mzs, ms1intensities, false); Scans[0] = new MsDataScan(MS1, 1, 1, false, Polarity.Positive, 1.0, new MzRange(300, 2000), "first spectrum", MZAnalyzerType.Unknown, MS1.SumOfAllY, null, null, null); // Horrible fragmentation, but we don't care about this! double[] ms2intensities = new double[] { 1000 }; double[] ms2mzs = new double[] { 1000 }; MzSpectrum MS2 = new MzSpectrum(ms2mzs, ms2intensities, false); double isolationMZ = selectedIonMz; Scans[1] = new MsDataScan(MS2, 2, 2, false, Polarity.Positive, 2.0, new MzRange(100, 1500), "second spectrum", MZAnalyzerType.Unknown, MS2.SumOfAllY, null, null, null, selectedIonMz, null, null, isolationMZ, 2.5, DissociationType.HCD, 1, null); var myMsDataFile = new FakeMsDataFile(Scans); var cool = myMsDataFile.GetAllScansList().Last(); int maxAssumedChargeState = 1; Tolerance massTolerance = Tolerance.ParseToleranceString("10 PPM"); var isolatedMasses = cool.GetIsolatedMassesAndCharges(myMsDataFile.GetOneBasedScan(cool.OneBasedPrecursorScanNumber.Value).MassSpectrum, 1, maxAssumedChargeState, 10, 5).ToList(); Assert.AreEqual(2, isolatedMasses.Count); Assert.AreEqual(2, isolatedMasses.Count(b => b.charge == 1)); Assert.AreEqual(pep1.MonoisotopicMass, isolatedMasses.Select(b => b.peaks.First().Item1.ToMass(b.charge)).Min(), 1e-9); Assert.AreEqual(pep2.MonoisotopicMass, isolatedMasses.Select(b => b.peaks.First().Item1.ToMass(b.charge)).Max(), 1e-9); Assert.AreEqual(pep1.MonoisotopicMass, isolatedMasses.Select(b => b.monoisotopicMass.ToMz(b.charge).ToMass(b.charge)).Min(), 1e-9); Assert.AreEqual(pep2.MonoisotopicMass, isolatedMasses.Select(b => b.monoisotopicMass.ToMz(b.charge).ToMass(b.charge)).Max(), 1e-9); }
[TestCase(1081.385183, 13, 35454636, 1081.385)] //This is a lesser abundant charge state envelope at the high mz end public void TestDeconvolutionProteoformMultiChargeState(double selectedIonMz, int selectedIonChargeStateGuess, double selectedIonIntensity, double isolationMz) { MsDataScan[] Scans = new MsDataScan[1]; //txt file, not mgf, because it's an MS1. Most intense proteoform has mass of ~14037.9 Da string Ms1SpectrumPath = Path.Combine(TestContext.CurrentContext.TestDirectory, @"DataFiles\14kDaProteoformMzIntensityMs1.txt"); string[] spectrumLines = File.ReadAllLines(Ms1SpectrumPath); int mzIntensityPairsCount = spectrumLines.Length; double[] ms1mzs = new double[mzIntensityPairsCount]; double[] ms1intensities = new double[mzIntensityPairsCount]; for (int i = 0; i < mzIntensityPairsCount; i++) { string[] pair = spectrumLines[i].Split('\t'); ms1mzs[i] = Convert.ToDouble(pair[0]); ms1intensities[i] = Convert.ToDouble(pair[1]); } MzSpectrum spectrum = new MzSpectrum(ms1mzs, ms1intensities, false); Scans[0] = new MsDataScan(spectrum, 1, 1, false, Polarity.Positive, 1.0, new MzRange(495, 1617), "first spectrum", MZAnalyzerType.Unknown, spectrum.SumOfAllY, null, null, null, selectedIonMz, selectedIonChargeStateGuess, selectedIonIntensity, isolationMz, 4); var myMsDataFile = new FakeMsDataFile(Scans); MsDataScan scan = myMsDataFile.GetAllScansList()[0]; List <IsotopicEnvelope> isolatedMasses = scan.GetIsolatedMassesAndCharges(spectrum, 1, 60, 4, 3).ToList(); List <double> monoIsotopicMasses = isolatedMasses.Select(m => m.MonoisotopicMass).ToList(); //The primary monoisotopic mass should be the same regardless of which peak in which charge state was selected for isolation. //this case is interesting because other monoisotopic mass may have a sodium adduct. The unit test could be expanded to consider this. Assert.That(monoIsotopicMasses[0], Is.EqualTo(14037.926829).Within(.0005)); }