public PeakTransitionGroupFeatureSet GetFeatureScores(SrmDocument document, IPeakScoringModel scoringModel, IProgressMonitor progressMonitor) { if (!ReferenceEquals(document, _document) || !ArrayUtil.EqualsDeep(_cacheCalculators, scoringModel.PeakFeatureCalculators)) { _document = document; _cacheCalculators = scoringModel.PeakFeatureCalculators; _cachedFeatureScores = document.GetPeakFeatures(_cacheCalculators, progressMonitor); } return(_cachedFeatureScores); }
} // Not L10N public MProphetResultsHandler(SrmDocument document, PeakScoringModelSpec scoringModel, PeakTransitionGroupFeatureSet features = null) { Document = document; ScoringModel = scoringModel; _calcs = ScoringModel != null ? ScoringModel.PeakFeatureCalculators : PeakFeatureCalculator.Calculators.ToArray(); _features = features; _featureDictionary = new Dictionary <PeakTransitionGroupIdKey, PeakFeatureStatistics>(); // Legacy defaults QValueCutoff = double.MaxValue; OverrideManual = true; IncludeDecoys = true; }
public void ScoreFeatures(IProgressMonitor progressMonitor = null, bool releaseRawFeatures = false, TextWriter output = null) { if (_features == null) { _features = Document.GetPeakFeatures(_calcs, progressMonitor); } if (ScoringModel == null) { return; } var bestTargetPvalues = new List <double>(_features.TargetCount); var targetIds = new List <PeakTransitionGroupIdKey>(_features.TargetCount); foreach (var transitionGroupFeatures in _features.Features) { int bestIndex = 0; float bestScore = float.MinValue; float bestPvalue = float.NaN; var peakGroupFeatures = transitionGroupFeatures.PeakGroupFeatures; IList <float> mProphetScoresGroup = null, pvalues = null; if (!releaseRawFeatures) { mProphetScoresGroup = new float[peakGroupFeatures.Count]; } if (!releaseRawFeatures) { pvalues = new float[peakGroupFeatures.Count]; } for (int i = 0; i < peakGroupFeatures.Count; i++) { double score = ScoringModel.Score(peakGroupFeatures[i].Features); if (double.IsNaN(bestScore) || score > bestScore) { bestIndex = i; bestScore = (float)score; bestPvalue = (float)(1 - Statistics.PNorm(score)); } if (mProphetScoresGroup != null) { mProphetScoresGroup[i] = (float)score; } if (pvalues != null) { pvalues[i] = (float)(1 - Statistics.PNorm(score)); } } if (bestScore == float.MinValue) { bestScore = float.NaN; } var featureStats = new PeakFeatureStatistics(transitionGroupFeatures, mProphetScoresGroup, pvalues, bestIndex, bestScore, null); _featureDictionary.Add(transitionGroupFeatures.Key, featureStats); if (!transitionGroupFeatures.IsDecoy) { bestTargetPvalues.Add(bestPvalue); targetIds.Add(transitionGroupFeatures.Key); } } _qValues = new Statistics(bestTargetPvalues).Qvalues(MProphetPeakScoringModel.DEFAULT_R_LAMBDA, MProphetPeakScoringModel.PI_ZERO_MIN); for (int i = 0; i < _qValues.Length; ++i) { _featureDictionary[targetIds[i]].QValue = (float)_qValues[i]; } if (releaseRawFeatures) { _features = null; // Done with this memory } }
public void OkDialog() { var helper = new MessageBoxHelper(this); double qCutoff = double.MaxValue; if (reintegrateQCutoff.Checked) { if (!helper.ValidateDecimalTextBox(textBoxCutoff, 0.0, 1.0, out qCutoff)) { return; } } using (var longWaitDlg = new LongWaitDlg { Text = Resources.ReintegrateDlg_OkDialog_Reintegrating, }) { try { var scoringModel = _driverPeakScoringModel.SelectedItem; if (Equals(scoringModel, LegacyScoringModel.DEFAULT_UNTRAINED_MODEL)) { scoringModel = LegacyScoringModel.DEFAULT_MODEL; } if (scoringModel == null || !scoringModel.IsTrained) { throw new InvalidDataException(Resources.ReintegrateDlg_OkDialog_You_must_train_and_select_a_model_in_order_to_reintegrate_peaks_); } PeakTransitionGroupFeatureSet featureScores = null; if (ArrayUtil.EqualsDeep(_cacheCalculators, scoringModel.PeakFeatureCalculators)) { featureScores = _cachedFeatureScores; } var resultsHandler = new MProphetResultsHandler(Document, scoringModel, featureScores) { QValueCutoff = qCutoff, OverrideManual = checkBoxOverwrite.Checked, }; longWaitDlg.PerformWork(this, 1000, pm => { resultsHandler.ScoreFeatures(pm); if (resultsHandler.IsMissingScores()) { throw new InvalidDataException(Resources.ReintegrateDlg_OkDialog_The_current_peak_scoring_model_is_incompatible_with_one_or_more_peptides_in_the_document___Please_train_a_new_model_); } Document = resultsHandler.ChangePeaks(pm); }); if (longWaitDlg.IsCanceled) { return; } } catch (Exception x) { var message = TextUtil.LineSeparate(string.Format(Resources.ReintegrateDlg_OkDialog_Failed_attempting_to_reintegrate_peaks_), x.Message); MessageDlg.ShowWithException(this, message, x); return; } } var newPeakScoringModel = _driverPeakScoringModel.SelectedItem; if (!Equals(newPeakScoringModel, Document.Settings.PeptideSettings.Integration.PeakScoringModel)) { Document = Document.ChangeSettings(Document.Settings.ChangePeptideIntegration( i => i.ChangePeakScoringModel(newPeakScoringModel))); } DialogResult = DialogResult.OK; }