Пример #1
0
        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);
        }
Пример #2
0
        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());
        }
Пример #3
0
 public List <SpectrumSearchResult> RunInformedWorkflow(LipidTarget target, double hcdMassError, double cidMassError)
 {
     return(RunInformedWorkflow(target, LcMsRun, hcdMassError, cidMassError));
 }
Пример #4
0
        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);
        }
Пример #5
0
 public void OnLipidTargetChange(LipidTarget lipidTarget)
 {
     CurrentLipidTarget = lipidTarget;
     OnPropertyChanged("CurrentLipidTarget");
 }