private void MaxScalar(EditMom res, MomList mlist, int i, DateTime t) { if (res.ValueLess(mlist.MeanI(i))) { res.CopyValueFrom(mlist, i); res.Error = mlist.ErrorI(i); } }
//Агрегация по равномерным сегментам //На входе функция с параметрами: текущий результат, список и обрабатываемый номер private void Agregate(Action <EditMom, MomList, int, DateTime> fun) { double seglen = _pars[0].Real, segshift = _pars.Length < 2 ? 0 : _pars[1].Real * seglen; var moms = _initialSignal.OutValue; if (moms.Count == 0) { return; } var mlist = MFactory.NewList(DataType); //Добавляем в список границы сегментов var t = Connect.PeriodBegin; int i = 0; while (t < Connect.PeriodEnd.AddMilliseconds(1)) { while (i < moms.Count && moms.TimeI(i) < t) { if (moms.TimeI(i) >= Connect.PeriodBegin && moms.TimeI(i) <= Connect.PeriodEnd) { mlist.AddMom(moms.ToMomI(i)); } i++; } AddUniformMom(moms, mlist, i, t); t = t.AddSeconds(seglen); } if (i < moms.Count && moms.TimeI(i) == Connect.PeriodEnd) { mlist.AddMom(moms.ToMomI(i)); } t = Connect.PeriodBegin; i = 0; while (t < Connect.PeriodEnd.AddMilliseconds(-1)) { var me = new EditMom(DataType, t.AddSeconds(segshift)); if (fun.Method.Name == "AverageScalar") { me.Real = 0; } else { me.CopyValueFrom(mlist, i); } t = t.AddSeconds(seglen); while (i < mlist.Count && mlist.TimeI(i) <= t) { fun(me, mlist, i++, t); } if (i > 0 && mlist.TimeI(i - 1) == t) { i--; } MomList.AddMom(me); } }
private void LastScalar(EditMom res, MomList mlist, int i, DateTime t) { res.CopyValueFrom(mlist, i); res.Error = mlist.ErrorI(i); }