Пример #1
0
        /// <summary>归一法</summary>
        /// <param name="std_peak_list">峰对象列表</param>
        /// <param name="qm">定量参数</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo Quantitate(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            if (peak_list == null)
            {
                return(QualitativeErrorInfo.PeakListError);
            }

            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;

            double _sum = GetResponseSum(peak_list, pqm.Qualitative_Method, PeakQuantificationMethod.SumMethod.sm_absolute_adjust);

            if (_sum == 0)
            {
                return(QualitativeErrorInfo.CapacityError);
            }

            //归一法首先需要定性,以确定校准因子
            foreach (Peak _p in peak_list)
            {
                if (!CPeakFilter.FindCheckedPeak(_p))
                {
                    continue;
                }

                _p.Capacity = _p.AdjustFactor * GetResponseValue(_p, pqm.Qualitative_Method) / _sum;
            }

            return(_rc);
        }
Пример #2
0
        /// <summary>计算峰列表中峰对象所对应的物质的量</summary>
        /// <param name="peak_list">峰对象列表</param>
        /// <param name="capacity">物质的量</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo Quantitate(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;
            double _capacity         = 0.0;

            if (pqm.Calibration_Method != PeakQuantificationMethod.CalibrationMethod.cm_ExternalStandard)
            {
                return(QualitativeErrorInfo.CalibrationMethodError);
            }

            //外标定量
            foreach (Peak _p in peak_list)
            {
                if (!CPeakFilter.FindCheckedPeak(_p))
                {
                    continue;
                }

                _capacity = 0.0;

                _rc = GetCapacity(_p, pqm, ref _capacity);
                if (_rc == QualitativeErrorInfo.Success)
                {
                    _p.Capacity = _capacity;
                }
            }
            return(_rc);
        }
Пример #3
0
        /// <summary>百分比法</summary>
        /// <param name="std_peak_list">峰对象列表</param>
        /// <param name="qm">定量参数</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo Quantitate(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            if (peak_list == null)
            {
                return(QualitativeErrorInfo.PeakListError);
            }

            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;

            double _sum = GetResponseSum(peak_list, pqm.Qualitative_Method, PeakQuantificationMethod.SumMethod.sm_normal);

            if (_sum == 0)
            {
                return(QualitativeErrorInfo.ResponseValueError);
            }

            foreach (Peak _p in peak_list)
            {
                if (!CPeakFilter.FindNaturalPeak(_p))
                {
                    continue;
                }

                _p.Checked  = true;
                _p.Capacity = GetResponseValue(_p, pqm.Qualitative_Method) / _sum;
            }

            return(_rc);
        }
Пример #4
0
        /// <summary>计算校准曲线系数</summary>
        /// <param name="std_peak_list">标准峰对象列表</param>
        /// <param name="qm">定量参数</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static List <double> GetCoefficient(List <Peak> std_peak_list, PeakQuantificationMethod pqm)
        {
            if (pqm.Calibration_Method != PeakQuantificationMethod.CalibrationMethod.cm_InternalStandard)
            {
                return(null);
            }

            List <PointF> _point_list = GetCalibrationCurve(std_peak_list, pqm.Qualitative_Method);

            return(CurveFitting(_point_list, pqm));
        }
Пример #5
0
        /// <summary>计算校准曲线系数</summary>
        /// <param name="std_peak_list">标准峰对象列表</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>返回系数列表</returns>
        public static List <double> GetCoefficient(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            switch (pqm.Calibration_Method)
            {
            case PeakQuantificationMethod.CalibrationMethod.cm_ExternalStandard:
                return(CQuantificationExternal.GetCoefficient(peak_list, pqm));

            case PeakQuantificationMethod.CalibrationMethod.cm_InternalStandard:
                return(CQuantificationInternal.GetCoefficient(peak_list, pqm));

            default:
                return(null);
            }
        }
Пример #6
0
        /// <summary>从多组标样中获取拟合曲线所需的点列表</summary>
        /// <param name="peak_list">标准样品列表</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>点列表</returns>
        public static List <PointF> GetCalibrationCurve(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            switch (pqm.Calibration_Method)
            {
            case PeakQuantificationMethod.CalibrationMethod.cm_ExternalStandard:
                return(CQuantificationExternal.GetCalibrationCurve(peak_list, pqm.Qualitative_Method));

            case PeakQuantificationMethod.CalibrationMethod.cm_InternalStandard:
                return(CQuantificationInternal.GetCalibrationCurve(peak_list, pqm.Qualitative_Method));

            default:
                return(null);
            }
        }
Пример #7
0
        /// <summary>计算峰列表中每个有效峰的校正因子</summary>
        /// <param name="std_peak_list">标准峰对象列表</param>
        /// <param name="qm">定量参数</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo GetAdjustFactor(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            switch (pqm.Calibration_Method)
            {
            case PeakQuantificationMethod.CalibrationMethod.cm_CorrectedNormalization:
            case PeakQuantificationMethod.CalibrationMethod.cm_ExternalStandard:
                return(CQuantificationExternal.GetAdjustFactor(peak_list, pqm.Qualitative_Method));

            case PeakQuantificationMethod.CalibrationMethod.cm_CorrectedNormalizationWithISD:
            case PeakQuantificationMethod.CalibrationMethod.cm_InternalStandard:
                return(CQuantificationInternal.GetAdjustFactor(peak_list, pqm.Qualitative_Method));

            default:
                return(QualitativeErrorInfo.CalibrationMethodError);
            }
        }
Пример #8
0
        /// <summary>获取校准曲线方程</summary>
        /// <param name="coefficient">系数</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>校准曲线方程字符串</returns>
        public static string GetFittingFormula(List <double> coefficient, PeakQuantificationMethod pqm)
        {
            switch (pqm.CurveFitting_Method)
            {
            case PeakQuantificationMethod.CurveFittingMethod.cfm_linear:
                return(CLeastSquareFitting.GetFormula(coefficient, 1));

            case PeakQuantificationMethod.CurveFittingMethod.cfm_quadratic:
                return(CLeastSquareFitting.GetFormula(coefficient, 2));

            case PeakQuantificationMethod.CurveFittingMethod.cfm_cubic:
                return(CLeastSquareFitting.GetFormula(coefficient, 3));

            case PeakQuantificationMethod.CurveFittingMethod.cfm_log:
                return(CLogFitting.GetFormula(coefficient));

            default:
                return(null);
            }
        }
Пример #9
0
        /// <summary>获取曲线拟合后的系数</summary>
        /// <param name="point_list">待拟合点</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>拟合系数列表</returns>
        public static List <Double> CurveFitting(List <PointF> point_list, PeakQuantificationMethod pqm)
        {
            switch (pqm.CurveFitting_Method)
            {
            case PeakQuantificationMethod.CurveFittingMethod.cfm_linear:
                return(CLeastSquareFitting.Fitting(point_list, 1, pqm.ZeroPassage));

            case PeakQuantificationMethod.CurveFittingMethod.cfm_quadratic:
                return(CLeastSquareFitting.Fitting(point_list, 2, pqm.ZeroPassage));

            case PeakQuantificationMethod.CurveFittingMethod.cfm_cubic:
                return(CLeastSquareFitting.Fitting(point_list, 3, pqm.ZeroPassage));

            case PeakQuantificationMethod.CurveFittingMethod.cfm_log:
                return(CLogFitting.Fitting(point_list, pqm.ZeroPassage));

            default:
                return(null);
            }
        }
Пример #10
0
        /// <summary>计算峰列表中所有有效峰对应的物质的量</summary>
        /// <param name="peak_list">峰对象列表</param>
        /// <param name="capacity">物质的量</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo Quantitate(List <Peak> peak_list, PeakQuantificationMethod pqm)
        {
            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;
            double _capacity         = 0.0;

            if (pqm.Calibration_Method != PeakQuantificationMethod.CalibrationMethod.cm_InternalStandard)
            {
                return(QualitativeErrorInfo.CalibrationMethodError);
            }

            //内标定量
            Peak _internal_standard_peak = peak_list.Find(CPeakFilter.FindInternalStandardPeak);

            //if ((_internal_standard_peak == null) || (_internal_standard_peak.AdjustFactor == 0))
            if (_internal_standard_peak == null)
            {
                return(QualitativeErrorInfo.InternalStandardError);
            }

            foreach (Peak _p in peak_list)
            {
                if (!CPeakFilter.FindCheckedPeak(_p) || ((_p.InternalStandard != null) && (_p.InternalStandard != "")))
                {
                    continue;
                }

                _capacity = 0.0;

                _rc = GetCapacity(_p, _internal_standard_peak, pqm, ref _capacity);
                if (_rc == QualitativeErrorInfo.Success)
                {
                    _p.Capacity = _capacity;
                }
            }

            return(_rc);
        }
Пример #11
0
 /// <summary>获取校准曲线方程</summary>
 /// <param name="coefficient">系数</param>
 /// <param name="pqm">定量参数</param>
 /// <returns>校准曲线方程字符串</returns>
 public static string GetFittingFormula(List <double> coefficient, PeakQuantificationMethod pqm)
 {
     return(CQuantificationBase.GetFittingFormula(coefficient, pqm));
 }
Пример #12
0
        /// <summary>从多个标样峰列表中找出特定物质的多浓度标样峰</summary>
        /// <param name="std_papl">多个标样峰列表</param>
        /// <param name="std_name">标样名称</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>同种物质的标样峰列表</returns>
        public static List <Peak> GetStandardPeakList(List <PeakAndPointList> std_papl, string std_name, PeakQuantificationMethod pqm)
        {
            switch (pqm.Calibration_Method)
            {
            case PeakQuantificationMethod.CalibrationMethod.cm_ExternalStandard:
                return(CQuantificationExternal.GetStandardPeakList(std_papl, std_name));

            case PeakQuantificationMethod.CalibrationMethod.cm_InternalStandard:
                return(CQuantificationInternal.GetStandardPeakList(std_papl, std_name));

            default:
                return(null);
            }
        }
Пример #13
0
        /// <summary>计算指定峰的物质的量</summary>
        /// <param name="p">峰对象</param>
        /// <param name="internal_standard_peak">内标峰</param>
        /// <param name="pqm">定量参数</param>
        /// <param name="capacity">物质的量</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo GetCapacity(Peak p, Peak internal_standard_peak, PeakQuantificationMethod pqm, ref double capacity)
        {
            if ((p == null) || (internal_standard_peak == null))
            {
                return(QualitativeErrorInfo.PeakObjectError);
            }

            double _internal_standard_response = GetResponseValue(internal_standard_peak, pqm.Qualitative_Method);

            if (_internal_standard_response == 0)
            {
                return(QualitativeErrorInfo.InternalStandardError);
            }

            double _response = internal_standard_peak.Capacity / _internal_standard_response * GetResponseValue(p, pqm.Qualitative_Method);

            return(Capacity(p, _response, pqm.CurveFitting_Method, ref capacity));
        }
Пример #14
0
        /// <summary>计算指定峰的物质的量</summary>
        /// <param name="p">峰对象</param>
        /// <param name="qm">定量参数</param>
        /// <param name="capacity">物质的量</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo GetCapacity(Peak p, PeakQuantificationMethod pqm, ref double capacity)
        {
            double _response = GetResponseValue(p, pqm.Qualitative_Method);

            return(Capacity(p, _response, pqm.CurveFitting_Method, ref capacity));
        }
Пример #15
0
        private static List <Peak> GetAverStandardPeakList(List <PeakAndPointList> unknown_std_papl, List <Peak> standard_list, PeakIdentificationMethod pim, PeakQuantificationMethod pqm)
        {
            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;

            if ((unknown_std_papl == null) || (unknown_std_papl.Count == 0) || (standard_list == null) || (standard_list.Count == 0))
            {
                return(null);
            }

            int[]    _std_count = new int[standard_list.Count];
            double[] _std_rt    = new double[standard_list.Count];

            List <Peak> _aver_std_list = new List <Peak>();

            for (int i = 0; i < standard_list.Count; i++)
            {
                _std_count[i] = 0;
                _std_rt[i]    = 0;

                Peak _p = new Peak();

                _p.Name    = standard_list[i].Name;
                _p.Checked = true;
                _p.Index   = i;

                _aver_std_list.Add(_p);
            }

            foreach (PeakAndPointList _papl in unknown_std_papl)
            {
                List <Peak> _unknown_std_list = _papl.PeakList.FindAll(CPeakFilter.FindNaturalPeak);
                if (_unknown_std_list == null)
                {
                    continue;
                }

                //定性标样峰
                List <Peak> _target_list = CIdentificationFactory.Identify(standard_list, _unknown_std_list, pim);
                if (_target_list == null)
                {
                    continue;
                }

                _rc = CQuantificationFactory.GetAdjustFactor(_target_list, pqm);    //计算校正因子
                if (_rc != QualitativeErrorInfo.Success)
                {
                    continue;
                }

                foreach (Peak _p in _aver_std_list)
                {
                    foreach (Peak _p0 in _target_list)
                    {
                        if (_p.Name == _p0.Name)
                        {
                            _p.Capacity     += _p0.Capacity;
                            _p.PeakHeight   += _p0.PeakHeight;
                            _p.PeakArea     += _p0.PeakArea;
                            _p.AdjustFactor += _p0.AdjustFactor;

                            _std_count[_p.Index]++;
                            _std_rt[_p.Index] += _p0.PeakPoint.X;

                            _target_list.Remove(_p0);
                            break;
                        }
                    }
                }
            }

            foreach (Peak _p in _aver_std_list)
            {
                int _count = _std_count[_p.Index];

                _std_rt[_p.Index] /= _count;

                _p.Capacity     /= _count;
                _p.PeakHeight   /= _count;
                _p.PeakArea     /= _count;
                _p.AdjustFactor /= _count;

                _p.PeakPoint = new PointF((float)_std_rt[_p.Index], 0);
            }

            return((_aver_std_list.Count > 0) ? _aver_std_list : null);
        }