public bool CalcRegressionWith(IRetentionTimeProvider retentionTimes, IEnumerable <DbIrtPeptide> standardPeptideList, DbIrtPeptide[] items) { if (items.Any()) { // Attempt to get a regression based on shared peptides var calculator = new CurrentCalculator(standardPeptideList, items); var peptidesTimes = retentionTimes.PeptideRetentionTimes.ToArray(); var regression = RetentionTimeRegression.FindThreshold(RCalcIrt.MIN_IRT_TO_TIME_CORRELATION, RetentionTimeRegression.ThresholdPrecision, peptidesTimes, new MeasuredRetentionTime[0], peptidesTimes, null, calculator, RegressionMethodRT.linear, () => false); var startingCount = peptidesTimes.Length; var regressionCount = regression != null ? regression.PeptideTimes.Count : 0; if (regression != null && RCalcIrt.IsAcceptableStandardCount(startingCount, regressionCount)) { // Finally must recalculate the regression, because it is transposed from what // we want. var statTimes = new Statistics(regression.PeptideTimes.Select(pt => pt.RetentionTime)); var statIrts = new Statistics(regression.PeptideTimes.Select(pt => calculator.ScoreSequence(pt.PeptideSequence) ?? calculator.UnknownScore)); RegressionRefined = new RegressionLine(statIrts.Slope(statTimes), statIrts.Intercept(statTimes)); RegressionSuccess = true; return(true); } } return(false); }
public override IEnumerable <Target> ChooseRegressionPeptides(IEnumerable <Target> peptides, out int minCount) { var returnStandard = peptides.Where(_dictStandards.ContainsKey).ToArray(); var returnCount = returnStandard.Length; var standardsCount = _dictStandards.Count; if (!RCalcIrt.IsAcceptableStandardCount(standardsCount, returnCount)) { throw new IncompleteStandardException(this); } minCount = RCalcIrt.MinStandardCount(standardsCount); return(returnStandard); }