public void peak_interference_UIMF_expectInterference_test1() { var uimfFrame1200_142 = FileRefs.RawDataBasePath + @"\UIMF\Sarc_MS_90_21Aug10_Cheetah_10-08-02_0000_frame1200_scan142.txt"; Run run = new DeconTools.Backend.Runs.MSScanFromTextFileRun(uimfFrame1200_142); var scanSet = new ScanSet(0); run.CurrentScanSet = scanSet; var msgen = MSGeneratorFactory.CreateMSGenerator(run.MSFileType); msgen.MinMZ = 200; msgen.MaxMZ = 2000; var peakDetector = new DeconToolsPeakDetectorV2(4, 3, DeconTools.Backend.Globals.PeakFitType.QUADRATIC, true); var decon = new HornDeconvolutor(); decon.MinIntensityForScore = 10; decon.DeleteIntensityThreshold = 10; decon.MaxFitAllowed = 0.4; decon.MinMZ = 200; decon.MaxMZ = 2000; decon.IsMZRangeUsed = false; var zeroFiller = new DeconToolsZeroFiller(); msgen.Execute(run.ResultCollection); zeroFiller.Execute(run.ResultCollection); peakDetector.Execute(run.ResultCollection); decon.Execute(run.ResultCollection); //Assert.AreEqual(93, run.ResultCollection.ResultList.Count); var testResult = run.ResultCollection.ResultList.Where(p => p.IsotopicProfile.MonoPeakMZ > 428 && p.IsotopicProfile.MonoPeakMZ < 430).First(); var monoPeak = testResult.IsotopicProfile.getMonoPeak(); var lastPeak = testResult.IsotopicProfile.Peaklist[testResult.IsotopicProfile.Peaklist.Count - 1]; var startIndexOfXYData = MathUtils.BinarySearchWithTolerance(run.XYData.Xvalues, monoPeak.XValue - 3, 0, (run.XYData.Xvalues.Length - 1), 2); //interference scorer var interferenceScorer = new InterferenceScorer(); var stopwatch = new Stopwatch(); stopwatch.Start(); var scanPeaks = run.PeakList.Select <Peak, MSPeak>(i => (MSPeak)i).ToList(); var interferenceScore = interferenceScorer.GetInterferenceScore(scanPeaks, testResult.IsotopicProfile.Peaklist, monoPeak.XValue - 1.1, lastPeak.XValue + lastPeak.Width); stopwatch.Stop(); Console.WriteLine("interference= " + interferenceScore); Console.WriteLine("Time taken = " + stopwatch.ElapsedMilliseconds); }
public SmartChromPeakSelector(SmartChromPeakSelectorParameters parameters) { this.Parameters = parameters; MSPeakDetector = new DeconToolsPeakDetectorV2(parameters.MSPeakDetectorPeakBR, parameters.MSPeakDetectorSigNoiseThresh, DeconTools.Backend.Globals.PeakFitType.QUADRATIC, true); var iterativeTFFParams = new IterativeTFFParameters(); iterativeTFFParams.ToleranceInPPM = parameters.MSToleranceInPPM; iterativeTFFParams.MinimumRelIntensityForForPeakInclusion = parameters.IterativeTffMinRelIntensityForPeakInclusion; if (parameters.MSFeatureFinderType == DeconTools.Backend.Globals.TargetedFeatureFinderType.BASIC) { throw new NotSupportedException("Currently the Basic TFF is not supported in the SmartChromPeakSelector"); //TargetedMSFeatureFinder = new TargetedFeatureFinders.BasicTFF(parameters.MSToleranceInPPM); } else { TargetedMSFeatureFinder = new IterativeTFF(iterativeTFFParams); } resultValidator = new ResultValidatorTask(); fitScoreCalc = new IsotopicProfileFitScoreCalculator(); InterferenceScorer = new InterferenceScorer(); }
protected virtual void DoMainInitialization() { ValidateParameters(); TheorFeatureGen = new JoshTheorFeatureGenerator(DeconTools.Backend.Globals.LabellingType.NONE, 0.005); ChromGen = new PeakChromatogramGenerator(WorkflowParameters.ChromGenTolerance, WorkflowParameters.ChromGeneratorMode, DeconTools.Backend.Globals.IsotopicProfileType.UNLABELLED, WorkflowParameters.ChromGenToleranceUnit) { TopNPeaksLowerCutOff = 0.333, ChromWindowWidthForAlignedData = (float)WorkflowParameters.ChromNETTolerance * 2, ChromWindowWidthForNonAlignedData = (float)WorkflowParameters.ChromNETTolerance * 2 }; //only var allowNegativeValues = false; ChromSmoother = new SavitzkyGolaySmoother(WorkflowParameters.ChromSmootherNumPointsInSmooth, 2, allowNegativeValues); ChromPeakDetector = new ChromPeakDetector(WorkflowParameters.ChromPeakDetectorPeakBR, WorkflowParameters.ChromPeakDetectorSigNoise); ChromPeakSelector = CreateChromPeakSelector(WorkflowParameters); ChromPeakAnalyzer = new ChromPeakAnalyzer(WorkflowParameters); IterativeTffParameters = new IterativeTFFParameters(); IterativeTffParameters.ToleranceInPPM = WorkflowParameters.MSToleranceInPPM; MsfeatureFinder = new IterativeTFF(IterativeTffParameters); FitScoreCalc = new IsotopicProfileFitScoreCalculator(); InterferenceScorer = new InterferenceScorer(); ResultValidator = new ResultValidatorTask(); ChromatogramCorrelator = new IqChromCorrelator(WorkflowParameters.ChromSmootherNumPointsInSmooth, 0.05, WorkflowParameters.ChromGenTolerance); }
public ChromPeakAnalyzer(TargetedWorkflowParameters parameters) { Parameters = parameters; var iterativeTffParameters = new IterativeTFFParameters(); TargetedMSFeatureFinder = new IterativeTFF(iterativeTffParameters); InterferenceScorer = new InterferenceScorer(); MSPeakDetector = new DeconToolsPeakDetectorV2(); FitScoreCalc = new IsotopicProfileFitScoreCalculator(); ResultValidator = new ResultValidatorTask(); }
public void peak_interference_weakFeature_test1() { Run run = new XCaliburRun2(FileRefs.RawDataMSFiles.OrbitrapStdFile1); var scanSet = new ScanSet(6005); run.CurrentScanSet = scanSet; Task msgen = MSGeneratorFactory.CreateMSGenerator(run.MSFileType); var peakDetector = new DeconToolsPeakDetectorV2(1.3, 2, DeconTools.Backend.Globals.PeakFitType.QUADRATIC, true); var decon = new HornDeconvolutor(); msgen.Execute(run.ResultCollection); peakDetector.Execute(run.ResultCollection); decon.Execute(run.ResultCollection); Assert.AreEqual(93, run.ResultCollection.ResultList.Count); var testResult = run.ResultCollection.ResultList.Where(p => p.IsotopicProfile.MonoPeakMZ > 597 && p.IsotopicProfile.MonoPeakMZ < 598).First(); var monoPeak = testResult.IsotopicProfile.getMonoPeak(); var lastPeak = testResult.IsotopicProfile.Peaklist[testResult.IsotopicProfile.Peaklist.Count - 1]; var startIndexOfXYData = MathUtils.BinarySearchWithTolerance(run.XYData.Xvalues, monoPeak.XValue - 3, 0, (run.XYData.Xvalues.Length - 1), 2); //interference scorer var interferenceScorer = new InterferenceScorer(); var stopwatch = new Stopwatch(); stopwatch.Start(); var scanPeaks = run.PeakList.Select <Peak, MSPeak>(i => (MSPeak)i).ToList(); var interferenceScore = interferenceScorer.GetInterferenceScore(scanPeaks, testResult.IsotopicProfile.Peaklist, monoPeak.XValue - 1.1, lastPeak.XValue + lastPeak.Width); stopwatch.Stop(); Console.WriteLine("interference= " + interferenceScore); Console.WriteLine("Time taken = " + stopwatch.ElapsedMilliseconds); }
public void interference_allFeaturesInScan_test1() { Run run = new XCaliburRun2(FileRefs.RawDataMSFiles.OrbitrapStdFile1); var scanSet = new ScanSet(6005); run.CurrentScanSet = scanSet; Task msgen = MSGeneratorFactory.CreateMSGenerator(run.MSFileType); var peakDetector = new DeconToolsPeakDetectorV2(1.3, 2, DeconTools.Backend.Globals.PeakFitType.QUADRATIC, true); var decon = new HornDeconvolutor(); msgen.Execute(run.ResultCollection); peakDetector.Execute(run.ResultCollection); decon.Execute(run.ResultCollection); Assert.AreEqual(93, run.ResultCollection.ResultList.Count); foreach (var isosResult in run.ResultCollection.ResultList) { var monoPeak = isosResult.IsotopicProfile.getMonoPeak(); var lastPeak = isosResult.IsotopicProfile.Peaklist[isosResult.IsotopicProfile.Peaklist.Count - 1]; var startIndexOfXYData = MathUtils.BinarySearchWithTolerance(run.XYData.Xvalues, monoPeak.XValue - 3, 0, (run.XYData.Xvalues.Length - 1), 2); //interference scorer var interferenceScorer = new InterferenceScorer(); var stopwatch = new Stopwatch(); stopwatch.Start(); var interferenceScore = interferenceScorer.GetInterferenceScore(run.XYData, isosResult.IsotopicProfile.Peaklist, monoPeak.XValue - 1.1, lastPeak.XValue + lastPeak.Width, startIndexOfXYData); stopwatch.Stop(); Console.WriteLine("interference= \t" + interferenceScore); } TestUtilities.DisplayMSFeatures(run.ResultCollection.ResultList); }
/// <summary> /// Calculates Metrics based on ChromPeakIqTarget /// NET Error, Mass Error, Isotopic Fit, & Isotope Correlation /// </summary> protected override void ExecuteWorkflow(IqResult result) { result.IsExported = false; if (MSGenerator == null) { MSGenerator = MSGeneratorFactory.CreateMSGenerator(Run.MSFileType); MSGenerator.IsTICRequested = false; } var target = result.Target as ChromPeakIqTarget; if (target == null) { throw new NullReferenceException("The ChromPeakAnalyzerIqWorkflow only works with the ChromPeakIqTarget."); } MSGenerator.MinMZ = target.MZTheor - 2; MSGenerator.MaxMZ = target.MZTheor + 5; //Sums Scan var lcscanset = _chromPeakUtilities.GetLCScanSetForChromPeak(target.ChromPeak, Run, WorkflowParameters.NumMSScansToSum); //Generate a mass spectrum var massSpectrumXYData = MSGenerator.GenerateMS(Run, lcscanset); //massSpectrumXYData = massSpectrumXYData.TrimData(result.Target.MZTheor - 5, result.Target.MZTheor + 15); //Find isotopic profile List <Peak> mspeakList; result.ObservedIsotopicProfile = TargetedMSFeatureFinder.IterativelyFindMSFeature(massSpectrumXYData, target.TheorIsotopicProfile, out mspeakList); //Get NET Error var netError = target.ChromPeak.NETValue - target.ElutionTimeTheor; var leftOfMonoPeakLooker = new LeftOfMonoPeakLooker(); var peakToTheLeft = leftOfMonoPeakLooker.LookforPeakToTheLeftOfMonoPeak(target.TheorIsotopicProfile.getMonoPeak(), target.ChargeState, mspeakList); var hasPeakTotheLeft = peakToTheLeft != null; if (result.ObservedIsotopicProfile == null) { result.IsotopicProfileFound = false; result.FitScore = 1; } else { //Get fit score var observedIsoList = result.ObservedIsotopicProfile.Peaklist.Cast <Peak>().ToList(); var minIntensityForScore = 0.05; var fitScore = PeakFitter.GetFit(target.TheorIsotopicProfile.Peaklist.Select(p => (Peak)p).ToList(), observedIsoList, minIntensityForScore, WorkflowParameters.MSToleranceInPPM); //get i_score var iscore = InterferenceScorer.GetInterferenceScore(result.ObservedIsotopicProfile, mspeakList); //get ppm error var massErrorInDaltons = TheorMostIntensePeakMassError(target.TheorIsotopicProfile, result.ObservedIsotopicProfile, target.ChargeState); var ppmError = (massErrorInDaltons / target.MonoMassTheor) * 1e6; //Get Isotope Correlation var scan = lcscanset.PrimaryScanNumber; double chromScanWindowWidth = target.ChromPeak.Width * 2; //Determines where to start and stop chromatogram correlation var startScan = scan - (int)Math.Round(chromScanWindowWidth / 2, 0); var stopScan = scan + (int)Math.Round(chromScanWindowWidth / 2, 0); result.CorrelationData = ChromatogramCorrelator.CorrelateData(Run, result, startScan, stopScan); result.LcScanObs = lcscanset.PrimaryScanNumber; result.ChromPeakSelected = target.ChromPeak; result.LCScanSetSelected = new ScanSet(lcscanset.PrimaryScanNumber); result.IsotopicProfileFound = true; result.FitScore = fitScore; result.InterferenceScore = iscore; result.IsIsotopicProfileFlagged = hasPeakTotheLeft; result.NETError = netError; result.MassErrorBefore = ppmError; result.IqResultDetail.MassSpectrum = massSpectrumXYData; result.Abundance = GetAbundance(result); } Display(result); }
protected override void ExecuteWorkflow(IqResult result) { var children = result.Target.ChildTargets().ToList(); foreach (var child in children) { child.DoWorkflow(); var childResult = child.GetResult(); var chromPeakLevelResults = childResult.ChildResults(); var filteredChromPeakResults = chromPeakLevelResults.Where(r => r.IsotopicProfileFound).ToList(); childResult.FavoriteChild = SelectBestChromPeakIqResult(childResult, filteredChromPeakResults); GetDataFromFavoriteChild(childResult); } result.FavoriteChild = SelectBestChargeStateChildResult(result); GetDataFromFavoriteChild(result); var favResult = result.FavoriteChild; double?rsquaredVal, slope; getRsquaredVal(result, out rsquaredVal, out slope); var favChargeState = result.FavoriteChild == null ? 0 : result.FavoriteChild.Target.ChargeState; var favMz = result.FavoriteChild == null ? 0 : result.FavoriteChild.Target.MZTheor; if (!_headerLogged) { _headerLogged = true; IqLogger.Log.Info("\t" + "TargetID" + "\t\t\t" + "M/Z" + "\t" + "Charge" + "\t" + "LCScan" + "\t" + "RSquared" + "\t" + "Slope"); } IqLogger.Log.Info("\t" + result.Target.ID + "\t\t\t" + favMz.ToString("0.000") + "\t" + favChargeState + "\t" + result.LcScanObs + "\t" + rsquaredVal + "\t" + slope); //now get the mass spectrum given the info from the favorite child charge state result if (favResult != null) { var scanset = new ScanSetFactory().CreateScanSet(Run, favResult.LCScanSetSelected.PrimaryScanNumber, WorkflowParameters.NumMSScansToSum); var selectedChromPeak = favResult.ChromPeakSelected; var sigma = selectedChromPeak.Width / 2.35; var chromScanWindowWidth = 4 * sigma; //Determines where to start and stop chromatogram correlation var startScan = scanset.PrimaryScanNumber - (int)Math.Round(chromScanWindowWidth / 2, 0); var stopScan = scanset.PrimaryScanNumber + (int)Math.Round(chromScanWindowWidth / 2, 0); var massSpectrum = MSGenerator.GenerateMS(Run, scanset); foreach (var iqTarget in children) { var childStateIqResult = (O16O18IqResult)iqTarget.GetResult(); childStateIqResult.IqResultDetail.MassSpectrum = massSpectrum.TrimData(iqTarget.MZTheor - 3, iqTarget.MZTheor + 8); var mspeakList = _mspeakDetector.FindPeaks(childStateIqResult.IqResultDetail.MassSpectrum.Xvalues, childStateIqResult.IqResultDetail.MassSpectrum.Yvalues); childStateIqResult.CorrelationData = ChromatogramCorrelator.CorrelateData(Run, childStateIqResult, startScan, stopScan); childStateIqResult.CorrelationO16O18SingleLabel = childStateIqResult.GetCorrelationO16O18SingleLabel(); childStateIqResult.CorrelationO16O18DoubleLabel = childStateIqResult.GetCorrelationO16O18DoubleLabel(); childStateIqResult.CorrelationBetweenSingleAndDoubleLabel = childStateIqResult.GetCorrelationBetweenSingleAndDoubleLabel(); childStateIqResult.RatioO16O18DoubleLabel = childStateIqResult.GetRatioO16O18DoubleLabel(); childStateIqResult.RatioO16O18SingleLabel = childStateIqResult.GetRatioO16O18SingleLabel(); childStateIqResult.RatioSingleToDoubleLabel = childStateIqResult.GetRatioSingleToDoubleLabel(); childStateIqResult.ObservedIsotopicProfile = MsfeatureFinder.IterativelyFindMSFeature(childStateIqResult.IqResultDetail.MassSpectrum, iqTarget.TheorIsotopicProfile); if (childStateIqResult.ObservedIsotopicProfile != null) { var observedIsoList = childStateIqResult.ObservedIsotopicProfile.Peaklist.Cast <Peak>().Take(4).ToList(); //first 4 peaks excludes the O18 double label peak (fifth peak) var theorPeakList = iqTarget.TheorIsotopicProfile.Peaklist.Select(p => (Peak)p).Take(4).ToList(); childStateIqResult.FitScore = PeakFitter.GetFit(theorPeakList, observedIsoList, 0.05, WorkflowParameters.MSToleranceInPPM); var o18Iso = childStateIqResult.ConvertO16ProfileToO18(iqTarget.TheorIsotopicProfile, 4); theorPeakList = o18Iso.Peaklist.Select(p => (Peak)p).ToList(); observedIsoList = childStateIqResult.ObservedIsotopicProfile.Peaklist.Cast <Peak>().Skip(4).ToList(); //skips the first 4 peaks and thus includes the O18 double label isotopic profile childStateIqResult.FitScoreO18Profile = PeakFitter.GetFit(theorPeakList, observedIsoList, 0.05, WorkflowParameters.MSToleranceInPPM); childStateIqResult.InterferenceScore = InterferenceScorer.GetInterferenceScore(childStateIqResult.ObservedIsotopicProfile, mspeakList); childStateIqResult.MZObs = childStateIqResult.ObservedIsotopicProfile.MonoPeakMZ; childStateIqResult.MonoMassObs = childStateIqResult.ObservedIsotopicProfile.MonoIsotopicMass; childStateIqResult.MZObsCalibrated = Run.GetAlignedMZ(childStateIqResult.MZObs); childStateIqResult.MonoMassObsCalibrated = (childStateIqResult.MZObsCalibrated - DeconTools.Backend.Globals.PROTON_MASS) * childStateIqResult.Target.ChargeState; childStateIqResult.ElutionTimeObs = ((ChromPeak)favResult.ChromPeakSelected).NETValue; } else { childStateIqResult.FitScore = -1; childStateIqResult.InterferenceScore = -1; } getRsquaredVal(childStateIqResult, out rsquaredVal, out slope); IqLogger.Log.Info("\t\t\t" + childStateIqResult.Target.ID + "\t" + childStateIqResult.Target.MZTheor.ToString("0.000") + "\t" + childStateIqResult.Target.ChargeState + "\t" + childStateIqResult.LcScanObs + "\t" + childStateIqResult.FitScore.ToString("0.000") + "\t" + rsquaredVal + "\t" + slope); childStateIqResult.LCScanSetSelected = favResult.LCScanSetSelected; childStateIqResult.LcScanObs = favResult.LcScanObs; if (GraphsAreOutputted) { if (_graphGenerator == null) { _graphGenerator = new BasicGraphControl(); } ExportGraphs(childStateIqResult); } } } }
/// <summary> /// Calculates Metrics based on ChromPeakIqTarget /// NET Error, Mass Error, Isotopic Fit, & Isotope Correlation /// </summary> protected override void ExecuteWorkflow(IqResult result) { result.IsExported = false; if (MSGenerator == null) { MSGenerator = MSGeneratorFactory.CreateMSGenerator(Run.MSFileType); MSGenerator.IsTICRequested = false; } var target = result.Target as ChromPeakIqTarget; if (target == null) { throw new NullReferenceException("The ChromPeakAnalyzerIqWorkflow only works with the ChromPeakIqTarget."); } var lcscanset = _chromPeakUtilities.GetLCScanSetForChromPeak(target.ChromPeak, Run, WorkflowParameters.SmartChromPeakSelectorNumMSSummed); //Generate a mass spectrum var massSpectrumXYData = MSGenerator.GenerateMS(Run, lcscanset); massSpectrumXYData = massSpectrumXYData.TrimData(result.Target.MZTheor - 5, result.Target.MZTheor + 15); //Find isotopic profile List <Peak> mspeakList; result.ObservedIsotopicProfile = TargetedMSFeatureFinder.IterativelyFindMSFeature(massSpectrumXYData, target.TheorIsotopicProfile, out mspeakList); //Default Worst Scores double iscore = 1; //Get NET Error var netError = target.ChromPeak.NETValue - target.ElutionTimeTheor; var leftOfMonoPeakLooker = new LeftOfMonoPeakLooker(); var peakToTheLeft = leftOfMonoPeakLooker.LookforPeakToTheLeftOfMonoPeak(target.TheorIsotopicProfile.getMonoPeak(), target.ChargeState, mspeakList); var hasPeakTotheLeft = peakToTheLeft != null; if (result.ObservedIsotopicProfile == null) { result.IsotopicProfileFound = false; result.FitScore = 1; } else { //Get fit score O16 profile var observedIsoList = result.ObservedIsotopicProfile.Peaklist.Cast <Peak>().Take(4).ToList(); //first 4 peaks excludes the O18 double label peak (fifth peak) var theorPeakList = target.TheorIsotopicProfile.Peaklist.Select(p => (Peak)p).Take(4).ToList(); result.FitScore = PeakFitter.GetFit(theorPeakList, observedIsoList, 0.05, WorkflowParameters.MSToleranceInPPM); // fit score O18 profile var o18Iso = ((O16O18IqResult)result).ConvertO16ProfileToO18(target.TheorIsotopicProfile, 4); theorPeakList = o18Iso.Peaklist.Select(p => (Peak)p).ToList(); observedIsoList = result.ObservedIsotopicProfile.Peaklist.Cast <Peak>().Skip(4).ToList(); //skips the first 4 peaks and thus includes the O18 double label isotopic profile ((O16O18IqResult)result).FitScoreO18Profile = PeakFitter.GetFit(theorPeakList, observedIsoList, 0.05, WorkflowParameters.MSToleranceInPPM); //get i_score iscore = InterferenceScorer.GetInterferenceScore(result.ObservedIsotopicProfile, mspeakList); //get ppm error var massErrorInDaltons = TheorMostIntensePeakMassError(target.TheorIsotopicProfile, result.ObservedIsotopicProfile, target.ChargeState); var ppmError = (massErrorInDaltons / target.MonoMassTheor) * 1e6; //Get Isotope Correlation var scan = lcscanset.PrimaryScanNumber; var sigma = target.ChromPeak.Width / 2.35; var chromScanWindowWidth = 4 * sigma; //Determines where to start and stop chromatogram correlation var startScan = scan - (int)Math.Round(chromScanWindowWidth / 2, 0); var stopScan = scan + (int)Math.Round(chromScanWindowWidth / 2, 0); result.CorrelationData = ChromatogramCorrelator.CorrelateData(Run, result, startScan, stopScan); result.LcScanObs = lcscanset.PrimaryScanNumber; result.ChromPeakSelected = target.ChromPeak; result.LCScanSetSelected = new ScanSet(lcscanset.PrimaryScanNumber); result.IsotopicProfileFound = true; result.InterferenceScore = iscore; result.IsIsotopicProfileFlagged = hasPeakTotheLeft; result.NETError = netError; result.MassErrorBefore = ppmError; result.IqResultDetail.MassSpectrum = massSpectrumXYData; result.Abundance = GetAbundance(result); } }