コード例 #1
0
        /// <summary>获取时间窗口</summary>
        /// <param name="rt">保留时间</param>
        /// <param name="pim">定性方法</param>
        /// <returns></returns>
        public static double GetTimeBand(double rt, PeakIdentificationMethod pim)
        {
            double _band = 0.0;

            if (pim.Time_Method == PeakIdentificationMethod.TimeMethod.tm_window)
            {
                _band = rt * pim.TimeWindow;
            }
            else
            {
                _band = pim.TimeBand;
            }

            return(_band);
        }
コード例 #2
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);
        }
コード例 #3
0
        /// <summary>定性方法</summary>
        /// <param name="std_pl">标样峰对象列表</param>
        /// <param name="unknown_pl">未知样峰对象列表</param>
        /// <param name="pim">定性参数</param>
        /// <returns>返回识别峰列表</returns>
        public static List <Peak> Identify(List <Peak> std_peak_list, List <Peak> unknown_peak_list, PeakIdentificationMethod pim)
        {
            switch (pim.Identification_Method)
            {
            case PeakIdentificationMethod.IdentificationMethod.im_relative:
                //return CIdentificationRelative.IdentifyPeakList(std_peak_list, unknown_peak_list, pim);
                return(_IdRelative.IdentifyPeakList(std_peak_list, unknown_peak_list, pim));

            case PeakIdentificationMethod.IdentificationMethod.im_absolute:
            default:
                return(_IdAbsolute.IdentifyPeakList(std_peak_list, unknown_peak_list, pim));
                //return CIdentificationAbsolute.IdentifyPeakList(std_peak_list, unknown_peak_list, pim);
            }
        }
コード例 #4
0
        /// <summary>相对保留时间定性方法</summary>
        /// <param name="std_pl">标样峰对象列表</param>
        /// <param name="unknown_pl">未知样峰对象列表</param>
        /// <param name="pim">定性参数</param>
        /// <returns>QualitativeErrorInfo枚举</returns>
        public override List <Peak> IdentifyPeakList(List <Peak> std_peak_list, List <Peak> unknown_peak_list, PeakIdentificationMethod pim)
        {
            try
            {
                List <Peak> _valid_standard_list = std_peak_list.FindAll(CPeakFilter.FindCheckedPeak);          //获取标样峰列表中的有效峰
                List <Peak> _valid_unknown_list  = unknown_peak_list.FindAll(CPeakFilter.FindNaturalPeak);      //获取未知样峰列表中的有效峰
                List <Peak> _std_ref_list        = _valid_standard_list.FindAll(CPeakFilter.FindReferencePeak); //查找标样中的参考峰

                //定性未知样中的参考物
                List <Peak> _unknown_ref_list = base.IdentifyPeakList(_std_ref_list, _valid_unknown_list, pim);
                if ((_unknown_ref_list == null) || (_unknown_ref_list.Count == 0) || (_unknown_ref_list.Count != _std_ref_list.Count))
                {
                    return(null);
                }

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

                //定性未知样中的其他物质
                //______/\_________/\_________/\___________

                int _standard_ref_index = _valid_standard_list.IndexOf(_std_ref_list[0]);
                int _unknown_ref_index  = _valid_unknown_list.IndexOf(_unknown_ref_list[0]);

                List <Peak> _valid_standard_peaks = _valid_standard_list.GetRange(0, _standard_ref_index); //第一个参考峰之前的标准峰
                List <Peak> _valid_unknown_peaks  = _valid_unknown_list.GetRange(0, _unknown_ref_index);   //第一个参考峰之前的未知峰

                //定性第一个参考峰之前的未知峰,单参考峰定性方法
                List <Peak> _return_peaks = IdentifyPeakList(_valid_standard_peaks, _valid_unknown_peaks, _std_ref_list[0], _unknown_ref_list[0], pim);

                _valid_standard_list.RemoveRange(0, _standard_ref_index);
                _valid_unknown_list.RemoveRange(0, _unknown_ref_index);

                if (_return_peaks != null)
                {
                    _target_list.AddRange(_return_peaks);
                }

                //两个参考峰之间的标准峰
                for (int i = 0; i < _std_ref_list.Count - 1; i++)
                {
                    _standard_ref_index = _valid_standard_list.IndexOf(_std_ref_list[i]) + 1;
                    _unknown_ref_index  = _valid_unknown_list.IndexOf(_unknown_ref_list[i]) + 1;

                    int _standard_peaks = _valid_standard_list.IndexOf(_std_ref_list[i + 1]) - _standard_ref_index;
                    if (_standard_peaks == 0)
                    {
                        continue;
                    }

                    int _unknown_peaks = _valid_unknown_list.IndexOf(_unknown_ref_list[i + 1]) - _unknown_ref_index;
                    if (_unknown_peaks == 0)
                    {
                        continue;
                    }

                    _valid_standard_peaks = _valid_standard_list.GetRange(_standard_ref_index, _standard_peaks);
                    if (_valid_standard_peaks == null)
                    {
                        continue;
                    }

                    _valid_unknown_peaks = _valid_unknown_list.GetRange(_unknown_ref_index, _unknown_peaks);
                    if (_valid_unknown_peaks == null)
                    {
                        continue;
                    }

                    List <Peak> _standard_ref_tmp = _std_ref_list.GetRange(i, 2);
                    List <Peak> _unknown_ref_tmp  = _unknown_ref_list.GetRange(i, 2);

                    foreach (Peak _p in _valid_standard_peaks)
                    {
                        Peak _target_peak = IdentifyPeak(_valid_unknown_peaks, _standard_ref_tmp, _unknown_ref_tmp, _p.PeakPoint.X, pim);
                        if (_target_peak != null)
                        {
                            UpdatePeakInfo(_target_peak, _p, true);
                            _valid_unknown_peaks.RemoveRange(0, _valid_unknown_peaks.IndexOf(_target_peak) + 1);
                            _target_list.Add(_target_peak);
                        }
                    }
                }

                //最后一个参考峰之后的标准峰
                int _last_index = _std_ref_list.Count - 1;

                _standard_ref_index = _valid_standard_list.IndexOf(_std_ref_list[_last_index]);
                _unknown_ref_index  = _valid_unknown_list.IndexOf(_unknown_ref_list[_last_index]);

                _valid_standard_peaks = _valid_standard_list.GetRange(_standard_ref_index, _valid_standard_list.Count - _standard_ref_index - 1); //最后一个参考峰之后的未知峰
                _valid_unknown_peaks  = _valid_unknown_list.GetRange(_unknown_ref_index, _valid_unknown_list.Count - _unknown_ref_index - 1);     //定性最后一个参考峰之后的未知峰

                _return_peaks = IdentifyPeakList(_valid_standard_peaks, _valid_unknown_peaks, _std_ref_list[_last_index], _unknown_ref_list[_last_index], pim);

                if (_return_peaks != null)
                {
                    _target_list.AddRange(_return_peaks);
                }

                return((_target_list.Count > 0) ? _target_list : null);
            }
            catch (System.Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return(null);
            }
        }
コード例 #5
0
        /// <summary>相对保留时间定性方法,单参考峰</summary>
        /// <param name="std_peak_list">标样峰列表</param>
        /// <param name="unknown_peak_list">未知样峰列表</param>
        /// <param name="std_ref">标样中的参考峰</param>
        /// <param name="unknown_ref">未知样中的参考峰</param>
        /// <param name="pim">定性参数</param>
        /// <returns>成功匹配的峰对象</returns>
        public List <Peak> IdentifyPeakList(List <Peak> std_peak_list, List <Peak> unknown_peak_list, Peak std_ref, Peak unknown_ref, PeakIdentificationMethod pim)
        {
            if ((std_peak_list == null) || (unknown_peak_list == null))
            {
                return(null);
            }

            //获取有效峰列表
            List <Peak> _standard_list = std_peak_list.FindAll(CPeakFilter.FindCheckedPeak);

            if (_standard_list == null)
            {
                return(null);
            }

            List <Peak> _unknown_list = unknown_peak_list.FindAll(CPeakFilter.FindNaturalPeak);

            if (_unknown_list == null)
            {
                return(null);
            }

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

            foreach (Peak _p in std_peak_list)
            {
                Peak _target_peak = IdentifyPeak(_unknown_list, std_ref, unknown_ref, _p.PeakPoint.X, pim);
                if (_target_peak != null)
                {
                    UpdatePeakInfo(_target_peak, _p, true);
                    _unknown_list.RemoveRange(0, _unknown_list.IndexOf(_target_peak) + 1);
                    _target_list.Add(_target_peak);
                }
            }
            return((_target_list.Count > 0) ? _target_list : null);
        }
コード例 #6
0
        /// <summary>相对保留时间定性方法,多参考峰</summary>
        /// <param name="peak_list">未知样峰对象列表</param>
        /// <param name="std_ref_list">标样中的参考峰列表</param>
        /// <param name="measure_ref_list">未知样中的参考峰列表</param>
        /// <param name="std_rt">保留时间</param>
        /// <param name="pim">定性参数</param>
        /// <returns>成功匹配的峰对象</returns>
        public Peak IdentifyPeak(List <Peak> peak_list, List <Peak> std_ref_list, List <Peak> unknown_ref_list, double std_rt, PeakIdentificationMethod pim)
        {
            if ((peak_list == null) || (std_ref_list == null) || (unknown_ref_list == null))
            {
                return(null);
            }

            if ((std_ref_list.Count != 2) || (unknown_ref_list.Count != 2))
            {
                return(null);
            }

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

            double _band = CTimeBand.GetTimeBand(std_rt, pim);
            double _corr_rt = 0.0, _delta_time = 0.0;

            foreach (Peak _p in peak_list)
            {
                //if (!FilterPeak(_p)) continue;

                _corr_rt    = ((_p.PeakPoint.X - unknown_ref_list[0].PeakPoint.X) / (unknown_ref_list[1].PeakPoint.X - unknown_ref_list[0].PeakPoint.X)) * (std_ref_list[1].PeakPoint.X - std_ref_list[0].PeakPoint.X) + std_ref_list[0].PeakPoint.X;
                _delta_time = Math.Abs(_corr_rt - std_rt);

                if (_delta_time <= _band)
                {
                    _target_list.Add(_p);
                }
            }

            return(CPeakSelect.PeakSelect(_target_list, std_rt, pim.PeakSelect_Method));
        }
コード例 #7
0
        /// <summary>相对保留时间定性方法,单参考峰</summary>
        /// <param name="peak_list">未知样峰对象列表</param>
        /// <param name="std_ref">标样中的参考峰</param>
        /// <param name="measure_ref">未知样中的参考峰</param>
        /// <param name="std_rt">保留时间</param>
        /// <param name="pim">定性参数</param>
        /// <returns>成功匹配的峰对象</returns>
        public Peak IdentifyPeak(List <Peak> peak_list, Peak std_ref, Peak unknown_ref, double std_rt, PeakIdentificationMethod pim)
        {
            if ((std_ref == null) || (unknown_ref == null) || (peak_list == null))
            {
                return(null);
            }

            if (unknown_ref.PeakPoint.X == 0)
            {
                return(null);
            }

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

            double _band       = CTimeBand.GetTimeBand(std_rt, pim);
            double _delta_time = 0.0;

            foreach (Peak _p in peak_list)
            {
                //if (!FilterPeak(_p)) continue;

                _delta_time = Math.Abs(std_rt - (std_ref.PeakPoint.X / unknown_ref.PeakPoint.X) * _p.PeakPoint.X);

                if (_delta_time <= _band)
                {
                    _target_list.Add(_p);
                }
            }

            return(CPeakSelect.PeakSelect(_target_list, std_rt, pim.PeakSelect_Method));
        }
コード例 #8
0
        /// <summary>绝对保留时间定性方法</summary>
        /// <param name="std_peak_list">标样峰对象列表</param>
        /// <param name="unknown_peak_list">未知样峰对象列表</param>
        /// <param name="pim">定性参数</param>
        /// <returns>返回识别的峰列表</returns>
        public virtual List <Peak> IdentifyPeakList(List <Peak> std_peak_list, List <Peak> unknown_peak_list, PeakIdentificationMethod pim)
        {
            try
            {
                //获取有效峰列表
                List <Peak> _standard_list = std_peak_list.FindAll(CPeakFilter.FindCheckedPeak);
                if (_standard_list == null)
                {
                    return(null);
                }

                List <Peak> _unknown_list = unknown_peak_list.FindAll(CPeakFilter.FindNaturalPeak);
                if (_unknown_list == null)
                {
                    return(null);
                }

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

                //峰匹配过程
                Peak   _p, _pnext;
                double next_sdt_rt = 0.0;

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

                    if (i < (_standard_list.Count - 1))
                    {
                        _pnext      = _standard_list[i + 1];
                        next_sdt_rt = _pnext.PeakPoint.X;
                    }
                    else
                    {
                        next_sdt_rt = double.MaxValue;
                    }

                    Peak _target_peak = IdentifyPeak(_unknown_list, _p.PeakPoint.X, next_sdt_rt, pim);
                    if (_target_peak != null)
                    {
                        UpdatePeakInfo(_target_peak, _p, true);
                        //将已经匹配过的峰从列表中移出,加速匹配过程
                        _unknown_list.RemoveRange(0, _unknown_list.IndexOf(_target_peak) + 1);
                        _target_list.Add(_target_peak);
                    }
                }
                return((_target_list.Count > 0) ? _target_list : null);
            }
            catch (System.Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return(null);
            }
        }
コード例 #9
0
        /// <summary>绝对保留时间定性方法</summary>
        /// <param name="peakList">未知样峰对象列表</param>
        /// <param name="std_rt">保留时间</param>
        /// <param name="pim">定性参数</param>
        /// <returns>成功匹配的峰对象</returns>
        public Peak IdentifyPeak(List <Peak> peak_list, double std_rt, double next_std_rt, PeakIdentificationMethod pim)
        {
            if (peak_list == null)
            {
                return(null);
            }

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

            double _band = CTimeBand.GetTimeBand(std_rt, pim);
            double _delta_time = 0.0, _delta_time_for_next_std = 0.0;

            foreach (Peak _p in peak_list)
            {
                //if (!FilterPeak(_p)) continue;

                _delta_time = Math.Abs(std_rt - _p.PeakPoint.X);
                _delta_time_for_next_std = Math.Abs(next_std_rt - _p.PeakPoint.X);

                if ((_delta_time <= _band) && (_delta_time <= _delta_time_for_next_std))
                {
                    _target_peak_list.Add(_p);
                }
            }

            return(CPeakSelect.PeakSelect(_target_peak_list, std_rt, pim.PeakSelect_Method));
        }