protected override float Calculate(PeakScoringContext context, IPeptidePeakData <ISummaryPeakData> summaryPeakData) { float max = float.MinValue; foreach (var peakData in GetIncludedGroups(summaryPeakData)) { max = Math.Max(max, (float)CalcCountScore(peakData)); } return(max != float.MinValue ? max : float.NaN); }
public PeptidePeakDataConverter(IPeptidePeakData <TData> peptidePeakData) { _peptidePeakData = peptidePeakData; var groupPeakData = _peptidePeakData.TransitionGroupPeakData; TransitionGroupPeakData = groupPeakData == null ? new List <ITransitionGroupPeakData <ISummaryPeakData> >() : groupPeakData.Select(gp => new TransitionGroupPeakDataConverter <TData>(gp) as ITransitionGroupPeakData <ISummaryPeakData>).ToList(); AnalyteGroupPeakData = TransitionGroupPeakData.Where(t => !t.IsStandard).ToArray(); StandardGroupPeakData = TransitionGroupPeakData.Where(t => t.IsStandard).ToArray(); }
protected override float Calculate(PeakScoringContext context, IPeptidePeakData <ISummaryPeakData> summaryPeakData) { var massErrors = new List <double>(); var weights = new List <double>(); bool noTransitions = true; bool allZeroWeights = true; foreach (var tranGroup in GetTransitionGroups(summaryPeakData)) { foreach (var pdTran in tranGroup.TransitionPeakData) { if (!IsIonType(pdTran.NodeTran)) { continue; } noTransitions = false; var peakData = pdTran.PeakData; double?massError = peakData.MassError; if (massError.HasValue) { massErrors.Add(MassErrorFunction(massError.Value)); double weight = GetWeight(peakData); weights.Add(weight); if (weight != 0) { allZeroWeights = false; } } } } // If there are no qualifying transitions, return NaN if (noTransitions) { return(float.NaN); } // If there are qualifying tranistions but they all have null mass error, // then return maximum possible mass error if (massErrors.Count == 0) { return((float)MaximumValue(context)); } if (allZeroWeights) { weights = weights.ConvertAll(weight => 1.0); } var massStats = new Statistics(massErrors); var weightsStats = new Statistics(weights); return((float)massStats.Mean(weightsStats)); }
protected override float Calculate(PeakScoringContext context, IPeptidePeakData <ISummaryPeakData> summaryPeakData) { foreach (var groupPeakData in summaryPeakData.TransitionGroupPeakData) { foreach (var peakData in groupPeakData.TransitionPeakData) { if (peakData.PeakData.Identified != PeakIdentification.FALSE) { return(1); } } } return(0); }
protected override float Calculate(PeakScoringContext context, IPeptidePeakData <ISummaryPeakData> summaryPeakData) { bool noTransitions = true; bool allZeroWeights = true; // Use running mean calculation to avoid allocations which show up in a profiler double weightedMeanMassError = 0; double totalWeight = 0; double unweightedMeanMassError = 0; int totalSeen = 0; foreach (var pdTran in GetIonTypes(GetTransitionGroups(summaryPeakData))) { noTransitions = false; var peakData = pdTran.PeakData; double?massError = peakData.MassError; if (massError.HasValue) { double error = MassErrorFunction(massError.Value); double weight = GetWeight(peakData); if (weight != 0) { allZeroWeights = false; totalWeight += weight; weightedMeanMassError += (error - weightedMeanMassError) * weight / totalWeight; } totalSeen++; unweightedMeanMassError += (error - unweightedMeanMassError) / totalSeen; } } // If there are no qualifying transitions, return NaN if (noTransitions) { return(float.NaN); } // If there are qualifying tranistions but they all have null mass error, // then return maximum possible mass error if (totalSeen == 0) { return((float)MaximumValue(context)); } if (allZeroWeights) { return((float)unweightedMeanMassError); } return((float)weightedMeanMassError); }
protected override float Calculate(PeakScoringContext context, IPeptidePeakData <IDetailedPeakData> summaryPeakData) { var tranGroupPeakDatas = GetTransitionGroups(summaryPeakData); if (tranGroupPeakDatas.Count == 0) { return(float.NaN); } var snValues = new List <double>(); var weights = new List <double>(); foreach (var pdTran in GetIonTypes(tranGroupPeakDatas)) { var peakData = pdTran.PeakData; if (peakData == null || peakData.Intensities == null || peakData.Intensities.Length == 0) { continue; } double?snValue = GetSnValue(peakData); if (snValue.HasValue) { snValues.Add(Math.Abs(snValue.Value)); weights.Add(GetWeight(peakData)); } } if (snValues.Count == 0) { return(float.NaN); } var snStats = new Statistics(snValues); var weightsStats = new Statistics(weights); if (weights.All(weight => weight == 0)) { return(0); } return((float)snStats.Mean(weightsStats)); }
private double SummedArea(IPeptidePeakData <ISummaryPeakData> summaryPeakData, bool isStandard) { // Slightly verbose implementation, because simpler implementation using // Linq showed up in a profiler. double sumArea = 0; foreach (var groupPd in summaryPeakData.TransitionGroupPeakData) { if (groupPd.IsStandard != isStandard) { continue; } foreach (var pd in groupPd.TransitionPeakData) { if (!pd.PeakData.IsForcedIntegration) { sumArea += pd.PeakData.Area; } } } return(sumArea); }
protected override float Calculate(PeakScoringContext context, IPeptidePeakData <ISummaryPeakData> summaryPeakData) { return(MQuestHelpers.CalculateIdotp(context, summaryPeakData)); }
protected override IEnumerable <ITransitionGroupPeakData <TData> > GetTransitionGroups <TData>( IPeptidePeakData <TData> summaryPeakData) { return(MQuestHelpers.GetAnalyteGroups(summaryPeakData)); }
protected abstract float Calculate(PeakScoringContext context, IPeptidePeakData <IDetailedPeakData> summaryPeakData);
protected override IList <ITransitionGroupPeakData <ISummaryPeakData> > GetIncludedGroups(IPeptidePeakData <ISummaryPeakData> summaryPeakData) { return(MQuestHelpers.GetBestAvailableGroups(summaryPeakData)); }
public void MQuestScoreEquals(IPeakFeatureCalculator calc, double score, IPeptidePeakData peptidePeakData) { AreCloseEnough(calc.Calculate(new PeakScoringContext(null), peptidePeakData), score); }
protected abstract IList <ITransitionGroupPeakData <ISummaryPeakData> > GetIncludedGroups(IPeptidePeakData <ISummaryPeakData> summaryPeakData);
protected override float Calculate(PeakScoringContext context, IPeptidePeakData <ISummaryPeakData> summaryPeakData) { return(Score(SummedArea(summaryPeakData, false), SummedArea(summaryPeakData, true))); }
protected abstract IList <ITransitionGroupPeakData <TData> > GetTransitionGroups <TData>( IPeptidePeakData <TData> summaryPeakData);
protected override IList <ITransitionGroupPeakData <TData> > GetTransitionGroups <TData>( IPeptidePeakData <TData> summaryPeakData) { return(MQuestHelpers.GetStandardGroups(summaryPeakData)); }
public float Calculate(PeakScoringContext context, IPeptidePeakData peakGroupData) { return(Calculate(context, (IPeptidePeakData <IDetailedPeakData>)peakGroupData)); }