public override PrecursorInfo GetPrecursorInfo(int scanNum) { m_spec = m_reader.GetSpectrum(scanNum); var precursor = new PrecursorInfo(); var level = m_spec.MSLevelInfo; if (level == MSLevel.MS) { precursor.MSLevel = 1; } else if (level == MSLevel.MSMS) { precursor.MSLevel = 2; } else { precursor.MSLevel = 1; } //this returns a list of precursor masses (not sure how there can be more than one) var precursorMZlist = m_spec.GetPrecursorIon(out var precursorMassCount); //if a mass is returned if (precursorMassCount == 1) { //mass precursor.PrecursorMZ = precursorMZlist[0]; //intensity m_spec.GetPrecursorIntensity(out var precursorIntensity); precursor.PrecursorIntensity = (float)precursorIntensity; //charge m_spec.GetPrecursorCharge(out var precursorCharge); precursor.PrecursorCharge = precursorCharge; //adjust scan number if needed precursor.PrecursorScan = scanNum; // TODO: Only CID possible in Agilent files? precursor.FragmentationType = FragmentionType.CID; } else if (precursorMassCount > 1) { throw new NotImplementedException("Strange case where more than one precursor is used to generate one spectrum"); } else { precursor.PrecursorMZ = 0; precursor.PrecursorIntensity = 0; precursor.PrecursorCharge = -1; precursor.PrecursorScan = scanNum; } precursor.IonizationMode = m_spec.IonPolarity == IonPolarity.Negative ? IonizationMode.Negative : IonizationMode.Positive; return(precursor); }
public double[] GetPrecursorInfo(int scanNum) { PrecursorInfo infos = raws.GetPrecursorInfo(scanNum, path); double[] mzCharge = new double[2]; double mz = infos.dMonoIsoMass; int charge = infos.nChargeState; mzCharge[0] = mz; mzCharge[1] = charge; return(mzCharge); }
public override PrecursorInfo GetPrecursorInfo(int scanNum) { var scanInfo = GetScanInfo(scanNum); XRawFileIO.ExtractParentIonMZFromFilterText(scanInfo, out var precursorMz, out var msLevel, out var fragmentationType); var ionMode = XRawFileIO.DetermineIonizationMode(scanInfo); var precursor = new PrecursorInfo { MSLevel = msLevel }; // Get Precursor MZ if (scanInfo == null) { precursor.PrecursorMZ = 0; } else { precursor.PrecursorMZ = precursorMz; } // Get the Parent scan if MS level is not MS1 if (precursor.MSLevel > 1) { var stepBack = 0; while (scanNum - stepBack > 0) { if (scanNum - stepBack > 0) { var testScanLevel = GetMSLevel(scanNum - stepBack); stepBack++; if (testScanLevel == 1) //the first precursor scan prior { break; } } } precursor.PrecursorScan = scanNum - (stepBack - 1); switch (fragmentationType) { case "hcd": precursor.FragmentationType = FragmentionType.HCD; break; case "etd": precursor.FragmentationType = FragmentionType.ETD; break; case "cid": precursor.FragmentationType = FragmentionType.CID; break; default: precursor.FragmentationType = FragmentionType.None; break; } } else { precursor.PrecursorScan = scanNum; precursor.FragmentationType = FragmentionType.None; } precursor.IonizationMode = ionMode.Equals(IonModeConstants.Positive) ? IonizationMode.Positive : IonizationMode.Negative; //TODO: we still need to get charge //precursor.PrecursorCharge = 1; return(precursor); }