public List <ChromPeakQualityData> GetChromPeakQualityData(Run run, IqTarget target, List <Peak> chromPeakList) { var peakQualityList = new List <ChromPeakQualityData>(); if (MSGenerator == null) { MSGenerator = MSGeneratorFactory.CreateMSGenerator(run.MSFileType); MSGenerator.IsTICRequested = false; } //iterate over peaks within tolerance and score each peak according to MSFeature quality #if DEBUG var tempMinScanWithinTol = (int)run.NetAlignmentInfo.GetScanForNet(target.ElutionTimeTheor - Parameters.ChromNETTolerance); var tempMaxScanWithinTol = (int)run.NetAlignmentInfo.GetScanForNet(target.ElutionTimeTheor + Parameters.ChromNETTolerance); var tempCenterTol = (int)run.NetAlignmentInfo.GetScanForNet(target.ElutionTimeTheor); Console.WriteLine("SmartPeakSelector --> NETTolerance= " + Parameters.ChromNETTolerance + "; chromMinCenterMax= " + tempMinScanWithinTol + "\t" + tempCenterTol + "" + "\t" + tempMaxScanWithinTol); Console.WriteLine("MT= " + target.ID + ";z= " + target.ChargeState + "; mz= " + target.MZTheor.ToString("0.000") + "; ------------------------- PeaksWithinTol = " + chromPeakList.Count); #endif //target.NumChromPeaksWithinTolerance = peaksWithinTol.Count; foreach (ChromPeak chromPeak in chromPeakList) { // TODO: Currently hard-coded to sum only 1 scan var lcscanset = _chromPeakUtilities.GetLCScanSetForChromPeak(chromPeak, run, 1); //generate a mass spectrum var massSpectrumXYData = MSGenerator.GenerateMS(run, lcscanset); //find isotopic profile var mspeakList = new List <Peak>(); var observedIso = TargetedMSFeatureFinder.IterativelyFindMSFeature(massSpectrumXYData, target.TheorIsotopicProfile, out mspeakList); double fitScore = 1; double iscore = 1; //get fit score fitScore = FitScoreCalc.CalculateFitScore(target.TheorIsotopicProfile, observedIso, massSpectrumXYData); //get i_score iscore = InterferenceScorer.GetInterferenceScore(target.TheorIsotopicProfile, mspeakList); var leftOfMonoPeakLooker = new LeftOfMonoPeakLooker(); var peakToTheLeft = leftOfMonoPeakLooker.LookforPeakToTheLeftOfMonoPeak(target.TheorIsotopicProfile.getMonoPeak(), target.ChargeState, mspeakList); var hasPeakTotheLeft = peakToTheLeft != null; //collect the results together var pq = new ChromPeakQualityData(chromPeak); if (observedIso == null) { pq.IsotopicProfileFound = false; } else { pq.IsotopicProfileFound = true; pq.Abundance = observedIso.IntensityMostAbundant; pq.FitScore = fitScore; pq.InterferenceScore = iscore; pq.IsotopicProfile = observedIso; pq.IsIsotopicProfileFlagged = hasPeakTotheLeft; pq.ScanLc = lcscanset.PrimaryScanNumber; } peakQualityList.Add(pq); #if DEBUG pq.Display(); #endif } return(peakQualityList); }
public override void Execute(ResultCollection resultList) { Check.Require(resultList.Run.CurrentMassTag != null, this.Name + " failed. MassTag was not defined."); var currentResult = resultList.GetTargetedResult(resultList.Run.CurrentMassTag); if (msgen == null) { msgen = MSGeneratorFactory.CreateMSGenerator(resultList.Run.MSFileType); msgen.IsTICRequested = false; } var currentTarget = resultList.Run.CurrentMassTag; // Set the MS Generator to use a window around the target so that we do not grab a lot of unecessary data from the UIMF file msgen.MinMZ = currentTarget.MZ - 10; msgen.MaxMZ = currentTarget.MZ + 10; float normalizedElutionTime; if (currentResult.Run.CurrentMassTag.ElutionTimeUnit == DeconTools.Backend.Globals.ElutionTimeUnit.ScanNum) { normalizedElutionTime = resultList.Run.CurrentMassTag.ScanLCTarget / (float)currentResult.Run.GetNumMSScans(); } else { normalizedElutionTime = resultList.Run.CurrentMassTag.NormalizedElutionTime; } //collect Chrom peaks that fall within the NET tolerance var peaksWithinTol = new List <ChromPeak>(); // foreach (ChromPeak peak in resultList.Run.PeakList) { if (Math.Abs(peak.NETValue - normalizedElutionTime) <= Parameters.NETTolerance) //peak.NETValue was determined by the ChromPeakDetector or a future ChromAligner Task { peaksWithinTol.Add(peak); } } var peakQualityList = new List <ChromPeakQualityData>(); //iterate over peaks within tolerance and score each peak according to MSFeature quality #if DEBUG var tempMinScanWithinTol = (int)resultList.Run.NetAlignmentInfo.GetScanForNet(normalizedElutionTime - Parameters.NETTolerance); var tempMaxScanWithinTol = (int)resultList.Run.NetAlignmentInfo.GetScanForNet(normalizedElutionTime + Parameters.NETTolerance); var tempCenterTol = (int)resultList.Run.NetAlignmentInfo.GetScanForNet(normalizedElutionTime); Console.WriteLine("SmartPeakSelector --> NETTolerance= " + Parameters.NETTolerance + "; chromMinCenterMax= " + tempMinScanWithinTol + "\t" + tempCenterTol + "" + "\t" + tempMaxScanWithinTol); Console.WriteLine("MT= " + currentResult.Target.ID + ";z= " + currentResult.Target.ChargeState + "; mz= " + currentResult.Target.MZ.ToString("0.000") + "; ------------------------- PeaksWithinTol = " + peaksWithinTol.Count); #endif currentResult.NumChromPeaksWithinTolerance = peaksWithinTol.Count; currentResult.NumQualityChromPeaks = -1; ChromPeak bestChromPeak; if (currentResult.NumChromPeaksWithinTolerance > _parameters.NumChromPeaksAllowed) { bestChromPeak = null; } else { foreach (var chromPeak in peaksWithinTol) { var pq = new ChromPeakQualityData(chromPeak); peakQualityList.Add(pq); // TODO: Currently hard-coded to sum only 1 scan resultList.Run.CurrentScanSet = ChromPeakUtilities.GetLCScanSetForChromPeakUIMF(chromPeak, resultList.Run, 1); //This resets the flags and the scores on a given result currentResult.ResetResult(); //generate a mass spectrum msgen.Execute(resultList); //find isotopic profile TargetedMSFeatureFinder.Execute(resultList); //get fit score fitScoreCalc.Execute(resultList); //get i_score resultValidator.Execute(resultList); //collect the results together AddScoresToPeakQualityData(pq, currentResult); #if DEBUG pq.Display(); #endif } //run a algorithm that decides, based on fit score mostly. bestChromPeak = determineBestChromPeak(peakQualityList, currentResult); } currentResult.ChromPeakQualityList = peakQualityList; resultList.Run.CurrentScanSet = ChromPeakUtilities.GetLCScanSetForChromPeakUIMF(bestChromPeak, resultList.Run, Parameters.NumScansToSum); UpdateResultWithChromPeakAndLCScanInfo(currentResult, bestChromPeak); }
public override void Execute(ResultCollection resultList) { Check.Require(resultList.Run.CurrentMassTag != null, this.Name + " failed. MassTag was not defined."); var currentResult = resultList.GetTargetedResult(resultList.Run.CurrentMassTag); if (msgen == null) { msgen = MSGeneratorFactory.CreateMSGenerator(resultList.Run.MSFileType); msgen.IsTICRequested = false; } var mt = resultList.Run.CurrentMassTag; float normalizedElutionTime; if (currentResult.Run.CurrentMassTag.ElutionTimeUnit == DeconTools.Backend.Globals.ElutionTimeUnit.ScanNum) { normalizedElutionTime = resultList.Run.CurrentMassTag.ScanLCTarget / (float)currentResult.Run.GetNumMSScans(); } else { normalizedElutionTime = resultList.Run.CurrentMassTag.NormalizedElutionTime; } //collect Chrom peaks that fall within the NET tolerance var peaksWithinTol = new List <ChromPeak>(); // foreach (ChromPeak peak in resultList.Run.PeakList) { if (Math.Abs(peak.NETValue - normalizedElutionTime) <= Parameters.NETTolerance) //peak.NETValue was determined by the ChromPeakDetector or a future ChromAligner Task { peaksWithinTol.Add(peak); } } var peakQualityList = new List <ChromPeakQualityData>(); //iterate over peaks within tolerance and score each peak according to MSFeature quality var tempMinScanWithinTol = (int)resultList.Run.NetAlignmentInfo.GetScanForNet(normalizedElutionTime - Parameters.NETTolerance); var tempMaxScanWithinTol = (int)resultList.Run.NetAlignmentInfo.GetScanForNet(normalizedElutionTime + Parameters.NETTolerance); var tempCenterTol = (int)resultList.Run.NetAlignmentInfo.GetScanForNet(normalizedElutionTime); IqLogger.Log.Debug("SmartPeakSelector --> NETTolerance= " + Parameters.NETTolerance + "; chromMinCenterMax= " + tempMinScanWithinTol + "\t" + tempCenterTol + "" + "\t" + tempMaxScanWithinTol); IqLogger.Log.Debug("MT= " + currentResult.Target.ID + ";z= " + currentResult.Target.ChargeState + "; mz= " + currentResult.Target.MZ.ToString("0.000") + "; ------------------------- PeaksWithinTol = " + peaksWithinTol.Count); currentResult.NumChromPeaksWithinTolerance = peaksWithinTol.Count; currentResult.NumQualityChromPeaks = -1; ChromPeak bestChromPeak; if (currentResult.NumChromPeaksWithinTolerance > _parameters.NumChromPeaksAllowed) { bestChromPeak = null; } else { foreach (var chromPeak in peaksWithinTol) { var pq = new ChromPeakQualityData(chromPeak); peakQualityList.Add(pq); var lcscanSet = ChromPeakUtilities.GetLCScanSetForChromPeak(chromPeak, resultList.Run, _parameters.NumMSSummedInSmartSelector); resultList.Run.CurrentScanSet = lcscanSet; //This resets the flags and the scores on a given result currentResult.ResetResult(); //generate a mass spectrum msgen.Execute(resultList); //find isotopic profile TargetedMSFeatureFinder.Execute(resultList); try { //get fit score fitScoreCalc.Execute(resultList); //get i_score resultValidator.Execute(resultList); } catch (Exception) { currentResult.FailedResult = true; } //collect the results together AddScoresToPeakQualityData(pq, currentResult); #if DEBUG IqLogger.Log.Debug(pq.Display() + Environment.NewLine); #endif } //run a algorithm that decides, based on fit score mostly. bestChromPeak = determineBestChromPeak(peakQualityList, currentResult); } currentResult.ChromPeakQualityList = peakQualityList; if (Parameters.SummingMode == SummingModeEnum.SUMMINGMODE_STATIC) { resultList.Run.CurrentScanSet = ChromPeakUtilities.GetLCScanSetForChromPeak(bestChromPeak, resultList.Run, Parameters.NumScansToSum); } else { resultList.Run.CurrentScanSet = ChromPeakUtilities.GetLCScanSetForChromPeakBasedOnPeakWidth(bestChromPeak, resultList.Run, Parameters.AreaOfPeakToSumInDynamicSumming, Parameters.MaxScansSummedInDynamicSumming); } UpdateResultWithChromPeakAndLCScanInfo(currentResult, bestChromPeak); }