/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }