コード例 #1
0
        public double?GetLimitOfQuantification(CalibrationCurve calibrationCurve)
        {
            if (!QuantificationSettings.MaxLoqBias.HasValue && !QuantificationSettings.MaxLoqCv.HasValue)
            {
                return(null);
            }
            var concentrationReplicateLookup = GetStandardConcentrations().ToLookup(entry => entry.Value, entry => entry.Key);

            foreach (var concentrationReplicate in concentrationReplicateLookup.OrderBy(grouping => grouping.Key))
            {
                var peakAreas = new List <double>();
                foreach (var replicateIndex in concentrationReplicate)
                {
                    double?peakArea = GetNormalizedPeakArea(replicateIndex);
                    if (peakArea.HasValue)
                    {
                        peakAreas.Add(peakArea.Value);
                    }
                }
                if (QuantificationSettings.MaxLoqCv.HasValue)
                {
                    double cv = peakAreas.StandardDeviation() / peakAreas.Mean();
                    if (double.IsNaN(cv) || double.IsInfinity(cv))
                    {
                        continue;
                    }
                    if (cv * 100 > QuantificationSettings.MaxLoqCv)
                    {
                        continue;
                    }
                }
                if (QuantificationSettings.MaxLoqBias.HasValue)
                {
                    if (calibrationCurve == null)
                    {
                        continue;
                    }
                    double meanPeakArea = peakAreas.Mean();
                    double?backCalculatedConcentration =
                        GetConcentrationFromXValue(calibrationCurve.GetFittedX(meanPeakArea));
                    if (!backCalculatedConcentration.HasValue)
                    {
                        continue;
                    }
                    double bias = (concentrationReplicate.Key - backCalculatedConcentration.Value) /
                                  concentrationReplicate.Key;
                    if (double.IsNaN(bias) || double.IsInfinity(bias))
                    {
                        continue;
                    }
                    if (Math.Abs(bias * 10) > QuantificationSettings.MaxLoqBias.Value)
                    {
                        continue;
                    }
                }
                return(concentrationReplicate.Key);
            }
            return(null);
        }
コード例 #2
0
        public static double?BlankPlusSdMultiple(CalibrationCurve calibrationCurve, CalibrationCurveFitter fitter, double sdMultiple)
        {
            List <double> blankPeakAreas  = new List <double>();
            var           measuredResults = fitter.SrmSettings.MeasuredResults;

            if (measuredResults == null)
            {
                return(null);
            }
            for (int iReplicate = 0; iReplicate < measuredResults.Chromatograms.Count; iReplicate++)
            {
                var chromatogramSet = measuredResults.Chromatograms[iReplicate];
                if (!SampleType.BLANK.Equals(chromatogramSet.SampleType))
                {
                    continue;
                }
                double?peakArea = fitter.GetNormalizedPeakArea(new CalibrationPoint(iReplicate, null));
                if (!peakArea.HasValue)
                {
                    continue;
                }
                blankPeakAreas.Add(peakArea.Value);
            }
            if (!blankPeakAreas.Any())
            {
                return(null);
            }
            double meanPlusSd = blankPeakAreas.Mean();

            if (sdMultiple != 0)
            {
                meanPlusSd = blankPeakAreas.StandardDeviation() * sdMultiple;
            }
            if (double.IsNaN(meanPlusSd) || double.IsInfinity(meanPlusSd))
            {
                return(null);
            }
            return(calibrationCurve.GetFittedX(meanPlusSd));
        }