Esempio n. 1
0
        private static RegressionLine GetRegression(TargetMap <double> knownIrts, DbIrtPeptide[] matchingPeptides, int?minPoints, out RegressionGraphData graphData)
        {
            graphData = null;

            var matchingPeptideIrts = new TargetMap <List <double> >(matchingPeptides.Select(pep =>
                                                                                             new KeyValuePair <Target, List <double> >(pep.ModifiedTarget, new List <double>())));

            foreach (var pep in matchingPeptides)
            {
                var list = matchingPeptideIrts[pep.ModifiedTarget];
                list.Add(pep.Irt);
            }
            var listX   = new List <double>();
            var listY   = new List <double>();
            var targets = new Dictionary <int, Target>();

            foreach (var(i, kvp) in matchingPeptideIrts.Where(kvp => kvp.Value.Count > 0).Select((kvp, i) => Tuple.Create(i, kvp)))
            {
                targets[i] = kvp.Key;
                listX.Add(new Statistics(kvp.Value).Median());
                listY.Add(knownIrts[kvp.Key]);
            }

            var regressionMinPoints = minPoints ?? RCalcIrt.MinStandardCount(knownIrts.Count);
            var removed             = new List <Tuple <double, double> >();

            if (!IrtRegression.TryGet <RegressionLine>(listX, listY, regressionMinPoints, out var regression, removed))
            {
                return(null);
            }

            var outliers = new HashSet <int>();

            for (var i = 0; i < listX.Count; i++)
            {
                if (removed.Contains(Tuple.Create(listX[i], listY[i])))
                {
                    outliers.Add(i);
                }
            }

            graphData = new RegressionGraphData
            {
                Title          = Resources.ChooseIrtStandardPeptidesDlg_OkDialog_Linear_regression,
                LabelX         = Resources.ChooseIrtStandardPeptidesDlg_OkDialog_Library_iRTs,
                LabelY         = Resources.ChooseIrtStandardPeptidesDlg_OkDialog_Known_iRTs,
                XValues        = listX.ToArray(),
                YValues        = listY.ToArray(),
                Tooltips       = targets.ToDictionary(target => target.Key, target => target.Value.ToString()),
                OutlierIndices = outliers,
                RegressionLine = regression,
                MinCorrelation = RCalcIrt.MIN_IRT_TO_TIME_CORRELATION,
                MinPoints      = regressionMinPoints,
            };
            return(regression as RegressionLine);
        }