Пример #1
0
        /// <summary>获取峰对象响应值</summary>
        /// <param name="peak_list">峰对象集合</param>
        /// <param name="qm">响应值类型选择</param>
        /// <returns>返回响应值</returns>
        protected static double GetResponseValue(Peak p, PeakQuantificationMethod.QualitativeMethod qm)
        {
            double _value = 0;

            switch (qm)
            {
            case PeakQuantificationMethod.QualitativeMethod.qm_peakArea:
                _value = p.PeakArea;
                break;

            case PeakQuantificationMethod.QualitativeMethod.qm_peakHeight:
                _value = p.PeakHeight;
                break;

            case PeakQuantificationMethod.QualitativeMethod.qm_peakAreaSquareRoot:
                _value = Math.Sqrt(p.PeakArea);
                break;

            case PeakQuantificationMethod.QualitativeMethod.qm_peakHeightSquareRoot:
                _value = Math.Sqrt(p.PeakHeight);
                break;

            default:
                _value = 0;
                break;
            }
            if (double.IsNaN(_value))
            {
                _value = 0;
            }
            return(_value);
        }
Пример #2
0
        /// <summary>从多组标样中获取拟合曲线所需的点列表</summary>
        /// <param name="peak_list">标准样品列表</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>点列表</returns>
        public static List <PointF> GetCalibrationCurve(List <Peak> peak_list, PeakQuantificationMethod.QualitativeMethod qm)
        {
            if (peak_list == null)
            {
                return(null);
            }

            List <PointF> _point_list = new List <PointF>();

            foreach (Peak _p in peak_list)
            {
                //if (Double.IsNaN(_p.Capacity) || Double.IsInfinity(_p.Capacity) || _p.Capacity == 0)
                if (Double.IsNaN(_p.Capacity) || Double.IsInfinity(_p.Capacity))
                {
                    continue;
                }

                float _x = (float)(GetResponseValue(_p, qm));
                float _y = (float)(_p.Capacity);

                _point_list.Add(new PointF(_x, _y));
            }

            return((_point_list.Count > 0) ? _point_list : null);
        }
Пример #3
0
        /// <summary>从多组标样中获取拟合曲线所需的点列表</summary>
        /// <param name="peak_list">标准样品列表</param>
        /// <param name="pqm">定量参数</param>
        /// <returns>点列表</returns>
        public static List <PointF> GetCalibrationCurve(List <Peak> peak_list, PeakQuantificationMethod.QualitativeMethod qm)
        {
            if (peak_list == null)
            {
                return(null);
            }

            List <PointF> _point_list = new List <PointF>();

            if ((peak_list.Count % 2) != 0)
            {
                return(null);
            }

            for (int i = 0; i < peak_list.Count; i += 2)
            {
                Peak _p = peak_list[i];

                //if (Double.IsNaN(_p.Capacity) || Double.IsInfinity(_p.Capacity) || _p.Capacity == 0)
                if (Double.IsNaN(_p.Capacity) || Double.IsInfinity(_p.Capacity))
                {
                    continue;
                }

                Peak _isp = peak_list[i + 1];

                float _x = (float)(GetResponseValue(_p, qm) * _isp.Capacity / GetResponseValue(_isp, qm));
                float _y = (float)(_p.Capacity);

                _point_list.Add(new PointF(_x, _y));
            }

            return((_point_list.Count > 0) ? _point_list : null);
        }
Пример #4
0
        /// <summary>获取峰对象响应值总和</summary>
        /// <param name="peak_list">峰对象集合</param>
        /// <param name="qm">相应值类型选择</param>
        /// <param name="sm">求和参数</param>
        /// <returns>返回求和值</returns>
        protected static double GetResponseSum(List <Peak> peak_list, PeakQuantificationMethod.QualitativeMethod qm, PeakQuantificationMethod.SumMethod sm)
        {
            double _sum = 0;

            List <Peak> _valid_peaks = null;

            switch (sm)
            {
            case PeakQuantificationMethod.SumMethod.sm_normal:
                _valid_peaks = peak_list.FindAll(CPeakFilter.FindNaturalPeak);
                if (_valid_peaks != null)
                {
                    foreach (Peak _p in _valid_peaks)
                    {
                        _sum += GetResponseValue(_p, qm);
                    }
                }
                break;

            case PeakQuantificationMethod.SumMethod.sm_absolute_adjust:
            case PeakQuantificationMethod.SumMethod.sm_relative_adjust:
                _valid_peaks = peak_list.FindAll(CPeakFilter.FindCheckedPeak);
                if (_valid_peaks != null)
                {
                    foreach (Peak _p in _valid_peaks)
                    {
                        _sum += _p.AdjustFactor * GetResponseValue(_p, qm);
                    }
                }
                break;

            default:
                break;
            }
            return(_sum);
        }
Пример #5
0
        /// <summary>计算峰列表中每个有效峰的相对校正因子</summary>
        /// <param name="std_peak_list">标准峰对象列表</param>
        /// <param name="qm">响应值类型选择</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo GetAdjustFactor(List <Peak> std_peak_list, PeakQuantificationMethod.QualitativeMethod qm)
        {
            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;
            double _factor           = 0.0;

            if (std_peak_list == null)
            {
                return(QualitativeErrorInfo.PeakListError);
            }

            //至少包含一个内标物和被测物
            if (std_peak_list.Count < 2)
            {
                return(QualitativeErrorInfo.PeakListError);
            }

            //查找内标物
            Peak _internal_standard_peak = std_peak_list.Find(CPeakFilter.FindInternalStandardPeak);

            if (_internal_standard_peak == null)
            {
                return(QualitativeErrorInfo.InternalStandardError);
            }

            //计算内标物的绝对校正因子
            _rc = CQuantificationBase.ComputeAbsoluteAdjustFactor(_internal_standard_peak, qm, ref _factor);
            if (_rc != QualitativeErrorInfo.Success)
            {
                return(QualitativeErrorInfo.InternalStandardError);
            }

            _internal_standard_peak.AdjustFactor = _factor;

            //计算未知物的校正因子(注意未知物列表要剔除内标物)
            foreach (Peak _p in std_peak_list)
            {
                if (!CPeakFilter.FindCheckedPeak(_p) || ((_p.InternalStandard != null) && (_p.InternalStandard != "")))
                {
                    continue;
                }

                _factor = 0.0;

                _rc = CQuantificationBase.ComputeRelativeAdjustFactor(_p, _internal_standard_peak, qm, ref _factor);
                if (_rc == QualitativeErrorInfo.Success)
                {
                    _p.AdjustFactor = _factor;
                }
            }

            return(_rc);
        }
Пример #6
0
        /// <summary>计算峰列表中每个有效峰的校正因子</summary>
        /// <param name="std_peak_list">峰对象列表</param>
        /// <param name="qm">响应值类型选择</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo GetAdjustFactor(List <Peak> std_peak_list, PeakQuantificationMethod.QualitativeMethod qm)
        {
            QualitativeErrorInfo _rc = QualitativeErrorInfo.Success;

            try
            {
                List <Peak> _valid_peaks = std_peak_list.FindAll(CPeakFilter.FindCheckedPeak);
                if (_valid_peaks != null)
                {
                    foreach (Peak _p in _valid_peaks)
                    {
                        double _factor = 0.0;

                        _rc = ComputeAbsoluteAdjustFactor(_p, qm, ref _factor);
                        if (_rc == QualitativeErrorInfo.Success)
                        {
                            _p.AdjustFactor = _factor;
                        }
                    }
                }
            }
            catch (System.Exception ex)
            {
                Debug.WriteLine(ex.Message);
                _rc = QualitativeErrorInfo.PeakListError;
            }

            return(_rc);
        }
Пример #7
0
        /// <summary>计算指定峰相对对校正因子</summary>
        /// <param name="std_peak">标准峰对象</param>
        /// <param name="internal_standard_peak">内标峰对象</param>
        /// <param name="qm">响应值类型选择</param>
        /// <param name="adjust_factor">校正因子</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo ComputeRelativeAdjustFactor(Peak std_peak, Peak internal_standard_peak, PeakQuantificationMethod.QualitativeMethod qm, ref double adjust_factor)
        {
            double _absolute_adjust_factor = 0.0;

            QualitativeErrorInfo _rc = CQuantificationExternal.ComputeAbsoluteAdjustFactor(std_peak, qm, ref _absolute_adjust_factor);

            if (_rc != QualitativeErrorInfo.Success)
            {
                return(_rc);
            }

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

            adjust_factor = _absolute_adjust_factor / internal_standard_peak.AdjustFactor;
            return(_rc);
        }
Пример #8
0
        /// <summary>计算指定峰绝对校正因子</summary>
        /// <param name="std_peak">峰对象</param>
        /// <param name="qm">响应值类型选择</param>
        /// <param name="adjust_factor">校正因子</param>
        /// <returns>QualitativeErrorInfo枚举值</returns>
        public static QualitativeErrorInfo ComputeAbsoluteAdjustFactor(Peak std_peak, PeakQuantificationMethod.QualitativeMethod qm, ref double adjust_factor)
        {
            QualitativeErrorInfo _rc = QualitativeErrorInfo.CapacityError;

            if (std_peak.Capacity >= 0 && !double.IsNaN(std_peak.Capacity))
            {
                adjust_factor = std_peak.Capacity / GetResponseValue(std_peak, qm);
                _rc           = QualitativeErrorInfo.Success;
            }
            return(_rc);
        }