public PerformSingleCheck(Guid emrSystemId, CheckStage stage, string version, Guid integrityCheckId) { EmrSystemId = emrSystemId; Stage = stage; Version = version; IntegrityCheckId = integrityCheckId; }
/// <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); }
/// <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(); }
/// <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); }
/// <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); }
public PerformCheck(Guid emrSystemId, CheckStage stage, string version) { EmrSystemId = emrSystemId; Stage = stage; Version = version; }
/// <summary> /// 清空历史数据 /// </summary> public override void Init() { _mState = CheckStage.StartPointChecked; _mPeak = new PeakArgs(); }