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
            }
        }
Exemple #4
0
        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;
        }