示例#1
0
 public PerformSingleCheck(Guid emrSystemId, CheckStage stage, string version, Guid integrityCheckId)
 {
     EmrSystemId      = emrSystemId;
     Stage            = stage;
     Version          = version;
     IntegrityCheckId = integrityCheckId;
 }
示例#2
0
        /// <summary>
        /// 进行峰判别
        /// </summary>
        /// <param name="fd_data">输入数据</param>
        /// <param name="index"></param>
        /// <returns>检测到峰的标志:检测到峰后返回true,否则返回false</returns>
        protected virtual bool CheckPeak(PointF[] fd_data, int index)
        {
            switch (_mState)
            {
            case CheckStage.StartPointChecked:
                _mState = CheckStartingPoint(fd_data, index);
                if (_mState != CheckStage.PeakPointChecked)
                {
                    break;
                }
                _mPeak.StartPoint = fd_data[index + 0];
                break;

            case CheckStage.PeakPointChecked:
                _mState = CheckPeakPoint(fd_data, index);
                if (_mState != CheckStage.EndPointChecked)
                {
                    break;
                }
                _mPeak.PeakPoint = fd_data[index + 1];
                break;

            case CheckStage.EndPointChecked:
                _mState = CheckEndingPoint(fd_data, index);
                if (_mState != CheckStage.StartPointChecked)
                {
                    break;
                }
                _mPeak.EndPoint = fd_data[index + 2];

                if (_Onfoundpeak == null)
                {
                    break;
                }

                PeakArgs _new_peak = CopyPeak(_mPeak);
                if (_new_peak == null)
                {
                    break;
                }
                _Onfoundpeak(this, _new_peak);    //触发事件,读取峰数据
                break;
            }
            return(true);
        }
示例#3
0
        /// <summary>
        /// 清空历史数据
        /// </summary>
        public void ClearData()
        {
            WindowLength  = 20;
            PointX        = 0;
            CheckMidPeak  = false;
            ProgrameStage = CheckStage.StartPointChecke;
            Window.Clear();
            Window = new List <PointF>();
            HisEnd = new PointF(0, 0);
            SorData.Clear();
            SorData = new List <PointF>();
            pointHash.Clear();
            pointHash = new Hashtable();
            SourceData.Clear();
            SourceData = new List <PointF>();

            peakfounde = new PeakFoundEventArgs();
            midpeak    = new PeakFoundEventArgs();
        }
示例#4
0
        /// <summary>
        /// 判峰执行
        /// </summary>
        /// <returns></returns>
        public override bool Execute()
        {
            Init();

            if (this.PeakLocationParam == null)
            {
                return(false);
            }
            if (this.PeakLocationParam.First_Order_Derivative == null)
            {
                return(false);
            }
            if (this.PeakLocationParam.First_Order_Derivative.Length < _mWindowSize)
            {
                return(false);
            }

            for (int i = 0; i < this.PeakLocationParam.First_Order_Derivative.Length - _mWindowSize + 1; i++)
            {
                CheckPeak(this.PeakLocationParam.First_Order_Derivative, i);
            }

            if (_mState == CheckStage.EndPointChecked)
            {
                _mPeak.EndPoint = this.PeakLocationParam.First_Order_Derivative[this.PeakLocationParam.First_Order_Derivative.Length - 1];

                if (_Onfoundpeak != null)
                {
                    PeakArgs _new_peak = CopyPeak(_mPeak);
                    if (_new_peak != null)
                    {
                        _Onfoundpeak(this, _new_peak);//触发事件,读取峰数据
                    }
                }

                _mState = CheckStage.StartPointChecked;
            }

            return(true);
        }
示例#5
0
        /// <summary>
        /// 进行峰判别
        /// </summary>
        /// <param name="Buf">输入数据</param>
        /// <param name="PWidthStep">峰宽的增长幅度
        /// <returns>检测到峰的标志:检测到峰后返回true,否则返回false</returns>
        public bool CheckPeak(PointF PointData)
        {
            pointHash.Add(PointX, PointData.X);
            PointData = new PointF(PointX, PointData.Y);
            PointX++;
            StaticMethods.QueAdd(Window, PointData, WindowLength); //数据加入队列
            SorData.Add(PointData);                                //当前数据存储,用于每个峰数据定点的查询
            switch (ProgrameStage)
            {
            case CheckStage.StartPointChecke:
                ProgrameStage = _CheckStartingPoint(Window);

                if (ProgrameStage == CheckStage.PeakPointChecke)
                {
                    //  peakfounde.StartPoint = StaticMethods.GetMin(Window);
                    peakfounde.StartPoint = Window[0];
                    if (CheckMidPeak)
                    {
                        CheckMidPeak = false;
                        if (peakfounde.StartPoint.X > HisEnd.X)
                        {
                            midpeak.StartPoint  = new PointF(HisEnd.X, HisEnd.Y);
                            midpeak.EndingPoint = new PointF(peakfounde.StartPoint.X, peakfounde.StartPoint.Y);
                            midpeak.PeakPoint   = StaticMethods.GetMax(getpeakdata(SorData, midpeak.StartPoint.X, midpeak.EndingPoint.X));
                            peaklist.Add(_excangepeak(copypeak(midpeak), pointHash));
                            delhash((int)(midpeak.EndingPoint.X), pointHash);
                        }
                        else
                        {
                            peakfounde.StartPoint = new PointF(HisEnd.X, HisEnd.Y);
                        }
                    }
                }
                break;

            case CheckStage.PeakPointChecke:
                ProgrameStage = _CheckPeakPoint(Window);
                break;

            case CheckStage.EndPointChecke:
                ProgrameStage = _CheckEndingPoint(Window);
                if (Stoped)    //如果手动停止,直接将状态改变为判别到峰的状态,直接输出数据
                {
                    ProgrameStage = CheckStage.StartPointChecke;
                    _isStoped     = false;
                }

                if (ProgrameStage == CheckStage.StartPointChecke)
                {
                    peakfounde.EndingPoint = StaticMethods.GetMin(Window);    //写终点
                    HisEnd = new PointF(peakfounde.EndingPoint.X, peakfounde.EndingPoint.Y);
                    peakfounde.PeakPoint = StaticMethods.GetMax(getpeakdata(SorData, peakfounde.StartPoint.X, peakfounde.EndingPoint.X));
                    //   peakfounde.StartPoint = new PointF(SorData[0].X, SorData[0].Y);
                    //   PeakWidth += PWidthStep;//最小峰宽自增
                    //if(peakfounde .EndingPoint .X >=4512f)
                    //    peakfounde.EndingPoint = StaticMethods.GetMin(Window);//写终点;
                    if (foundpeak != null)
                    {
                        peaklist.Add(_excangepeak(copypeak(peakfounde), pointHash));
                        foundpeak(this, peaklist);    //触发事件,读取峰数据
                        peaklist.Clear();
                        delhash((int)(peakfounde.EndingPoint.X), pointHash);
                        ReCheckWindowlength(peakfounde);
                        CheckMidPeak = true;
                    }

                    delforestdata(SorData, peakfounde.EndingPoint.X);    //删除峰终点以前的数据
                }

                break;
            }
            IsOver = true;//判别结束
            return(IsOver);
        }
示例#6
0
 public PerformCheck(Guid emrSystemId, CheckStage stage, string version)
 {
     EmrSystemId = emrSystemId;
     Stage       = stage;
     Version     = version;
 }
示例#7
0
 /// <summary>
 /// 清空历史数据
 /// </summary>
 public override void Init()
 {
     _mState = CheckStage.StartPointChecked;
     _mPeak  = new PeakArgs();
 }