public double ScoreLipid(LipidTarget lipidTarget, SpectrumSearchResult spectrumSearchResult) { var relatedScoreModelUnits = GetRelatedScoreModelUnits(lipidTarget); var cidResultList = spectrumSearchResult.CidSearchResultList; var hcdResultList = spectrumSearchResult.HcdSearchResultList; var cidMaxIntensity = spectrumSearchResult.CidSpectrum != null && spectrumSearchResult.CidSpectrum.Peaks.Any() ? spectrumSearchResult.CidSpectrum.Peaks.Max(x => x.Intensity) : 1; var hcdMaxIntensity = spectrumSearchResult.HcdSpectrum != null && spectrumSearchResult.HcdSpectrum.Peaks.Any() ? spectrumSearchResult.HcdSpectrum.Peaks.Max(x => x.Intensity) : 1; double lipidScore = 0; if (cidMaxIntensity > 1) { // Score CID Results lipidScore += ScoreSingleFragmentationType(cidResultList, relatedScoreModelUnits, FragmentationType.CID, cidMaxIntensity); } if (hcdMaxIntensity > 1) { // Score CID Results lipidScore += ScoreSingleFragmentationType(hcdResultList, relatedScoreModelUnits, FragmentationType.HCD, hcdMaxIntensity); } return(lipidScore); }
private List <ScoreModelUnit> GetRelatedScoreModelUnits(LipidTarget lipidTarget) { var lipidClass = lipidTarget.LipidClass; var lipidType = lipidTarget.LipidType; var fragmentationMode = lipidTarget.FragmentationMode; return(ScoreModelUnitList.Where(x => x.LipidClass == lipidClass && x.LipidType == lipidType && x.FragmentationMode == fragmentationMode).ToList()); }
public List <SpectrumSearchResult> RunInformedWorkflow(LipidTarget target, double hcdMassError, double cidMassError) { return(RunInformedWorkflow(target, LcMsRun, hcdMassError, cidMassError)); }
public static List <SpectrumSearchResult> RunInformedWorkflow( LipidTarget target, LcMsRun lcmsRun, double hcdMassError, double cidMassError, ScoreModel scoreModel = null) { IEnumerable <MsMsSearchUnit> msMsSearchUnits = target.GetMsMsSearchUnits(); // I have to subtract an H for the target Ion since InformedProteomics will assume protenated var targetIon = new Ion(target.Composition - Composition.Hydrogen, 1); var targetMz = target.MzRounded; var hcdTolerance = new Tolerance(hcdMassError, ToleranceUnit.Ppm); var cidTolerance = new Tolerance(cidMassError, ToleranceUnit.Ppm); var activationMethodCombination = GlobalWorkflow.FigureOutActivationMethodCombination(lcmsRun); // Find out which MS/MS scans have a precursor m/z that matches the target //List<int> matchingMsMsScanNumbers = lcmsRun.GetFragmentationSpectraScanNums(targetIon).ToList(); var matchingMsMsScanNumbers = lcmsRun.GetFragmentationSpectraScanNums(targetMz).ToList(); var spectrumSearchResultList = new List <SpectrumSearchResult>(); for (var i = 0; i + 1 < matchingMsMsScanNumbers.Count; i += 2) { var firstScanNumber = matchingMsMsScanNumbers[i]; var secondScanNumber = matchingMsMsScanNumbers[i + 1]; // Scan numbers should be consecutive. /* * if (secondScanNumber - firstScanNumber != 1) * { * i--; * continue; * } * */ ProductSpectrum firstMsMsSpectrum = null; ProductSpectrum secondMsMsSpectrum = null; if (activationMethodCombination == ActivationMethodCombination.CidThenHcd || activationMethodCombination == ActivationMethodCombination.HcdThenCid) { // Lookup the MS/MS Spectrum firstMsMsSpectrum = lcmsRun.GetSpectrum(firstScanNumber) as ProductSpectrum; if (firstMsMsSpectrum == null) { continue; } // Lookup the MS/MS Spectrum secondMsMsSpectrum = lcmsRun.GetSpectrum(secondScanNumber) as ProductSpectrum; if (secondMsMsSpectrum == null) { continue; } } else if (activationMethodCombination == ActivationMethodCombination.CidOnly || activationMethodCombination == ActivationMethodCombination.HcdOnly) { firstMsMsSpectrum = lcmsRun.GetSpectrum(firstScanNumber) as ProductSpectrum; } if (firstMsMsSpectrum == null) { continue; } // Filter MS/MS Spectrum based on mass error var msMsPrecursorMz = firstMsMsSpectrum.IsolationWindow.IsolationWindowTargetMz; //if (Math.Abs(msMsPrecursorMz - targetMz) > 0.4) continue; var ppmError = LipidUtil.PpmError(targetMz, msMsPrecursorMz); if (Math.Abs(ppmError) > hcdMassError) { continue; } // Assign each MS/MS spectrum to HCD or CID ProductSpectrum hcdSpectrum; ProductSpectrum cidSpectrum; if (firstMsMsSpectrum.ActivationMethod == ActivationMethod.HCD) { hcdSpectrum = firstMsMsSpectrum; cidSpectrum = secondMsMsSpectrum; } else { hcdSpectrum = secondMsMsSpectrum; cidSpectrum = firstMsMsSpectrum; } // Get all matching peaks var hcdSearchResultList = hcdSpectrum != null ? (from msMsSearchUnit in msMsSearchUnits let peak = hcdSpectrum.FindPeak(msMsSearchUnit.Mz, hcdTolerance) select new MsMsSearchResult(msMsSearchUnit, peak)).ToList() : new List <MsMsSearchResult>(); var cidSearchResultList = cidSpectrum != null ? (from msMsSearchUnit in msMsSearchUnits let peak = cidSpectrum.FindPeak(msMsSearchUnit.Mz, cidTolerance) select new MsMsSearchResult(msMsSearchUnit, peak)).ToList() : new List <MsMsSearchResult>(); // Find the MS1 data //Xic xic = lcmsRun.GetPrecursorExtractedIonChromatogram(targetMz, hcdTolerance, firstScanNumber); var precursorScanNumber = 0; if (lcmsRun.MinMsLevel == 1) //Make sure there are precursor scans in file { precursorScanNumber = lcmsRun.GetPrecursorScanNum(matchingMsMsScanNumbers[i]); } var precursorSpectrum = lcmsRun.GetSpectrum(precursorScanNumber); var xic = lcmsRun.GetFullPrecursorIonExtractedIonChromatogram(targetMz, hcdTolerance); // Bogus data if (precursorSpectrum != null && (xic.GetApexScanNum() < 0 || xic.GetSumIntensities() <= 0)) { continue; } SpectrumSearchResult spectrumSearchResult; if (precursorSpectrum != null) { spectrumSearchResult = new SpectrumSearchResult(hcdSpectrum, cidSpectrum, precursorSpectrum, hcdSearchResultList, cidSearchResultList, xic, lcmsRun, scoreModel, target) { PrecursorTolerance = new Tolerance(hcdMassError, ToleranceUnit.Ppm) }; } else //If there are no precursor scans in this file { spectrumSearchResult = new SpectrumSearchResult(hcdSpectrum, cidSpectrum, hcdSearchResultList, cidSearchResultList, lcmsRun, scoreModel, target) { PrecursorTolerance = new Tolerance(hcdMassError, ToleranceUnit.Ppm), }; } spectrumSearchResultList.Add(spectrumSearchResult); } return(spectrumSearchResultList); }
public void OnLipidTargetChange(LipidTarget lipidTarget) { CurrentLipidTarget = lipidTarget; OnPropertyChanged("CurrentLipidTarget"); }