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