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); } }
//Добавить особую ошибку в заданный EditMom public void PutErr(EditMom mom, string errMess, //Сообщение ошибки int quality = 2, //Качество ошибки int errNum = 0) //Номер ошибки среди ошибок для одной функции, число от 0 до 8 { var number = CurFun.ErrorNumber + errNum + 1; ((MomErrFactory)ErrPool.Factory).AddDescr(number, errMess, quality); mom.AddError(ErrPool.MakeError(number, Contextable)); }
public void MomListTime() { var pool = MakeErrPool(); var c = new ContextTest("Context"); var list = MFactory.NewList(DataType.Time); Assert.AreEqual(0, list.Count); Assert.AreEqual(DataType.Time, list.DataType); var err1 = pool.MakeError(1, c); var err2 = pool.MakeError(2, c); list.AddMom(RTime(0), RTime(0)); list.AddMom(RTime(0, 10), RTime(1), err1); list.AddMom(RTime(0, 20), RTime(2), err2); Assert.AreEqual(3, list.Count); Assert.AreEqual(RTime(0), list.TimeI(0)); Assert.AreEqual(RTime(0, 10), list.TimeI(1)); Assert.AreEqual(RTime(0, 20), list.TimeI(2)); Assert.AreEqual(RTime(0), list.DateI(0)); Assert.AreEqual(RTime(1), list.DateI(1)); Assert.AreEqual(RTime(2), list.DateI(2)); Assert.IsNull(list.ErrorI(0)); Assert.IsNotNull(list.ErrorI(1)); Assert.AreEqual(1, list.ErrorI(1).Number); Assert.AreEqual("Warning", list.ErrorI(1).Text); Assert.IsNotNull(list.ErrorI(2)); Assert.AreEqual(2, list.ErrorI(2).Number); Assert.AreEqual("Error", list.ErrorI(2).Text); list.CurNum = 1; Assert.AreEqual(RTime(1), list.Date); Assert.AreEqual(1, list.Error.Number); Assert.AreEqual(RTime(0, 10), list.Time); var m = list.ToMom(RTime(1), err2); Assert.AreEqual(RTime(1), m.Date); Assert.AreEqual(1, m.Error.Number); Assert.AreEqual(RTime(1), m.Time); var me = new EditMom(DataType.Time); me.Time = RTime(0, 5); me.Date = RTime(0, 30); list.AddMom(me); me.Time = RTime(0, 15); me.Date = RTime(1, 30); list.AddMom(me, err1); me.Time = RTime(0, 25); me.Date = RTime(2, 30); list.AddMom(me, err2); Assert.AreEqual(6, list.Count); Assert.AreEqual(RTime(0), list.TimeI(0)); Assert.AreEqual(RTime(0, 5), list.TimeI(1)); Assert.AreEqual(RTime(0, 10), list.TimeI(2)); Assert.AreEqual(RTime(0, 15), list.TimeI(3)); Assert.AreEqual(RTime(0, 20), list.TimeI(4)); Assert.AreEqual(RTime(0, 25), list.TimeI(5)); Assert.AreEqual(RTime(0), list.DateI(0)); Assert.AreEqual(RTime(0, 30), list.DateI(1)); Assert.AreEqual(RTime(1), list.DateI(2)); Assert.AreEqual(RTime(1, 30), list.DateI(3)); Assert.AreEqual(RTime(2), list.DateI(4)); Assert.AreEqual(RTime(2, 30), list.DateI(5)); Assert.IsNull(list.ErrorI(0)); Assert.IsNull(list.ErrorI(1)); Assert.AreEqual(1, list.ErrorI(2).Number); Assert.AreEqual(1, list.ErrorI(3).Number); Assert.AreEqual(2, list.ErrorI(4).Number); Assert.AreEqual(2, list.ErrorI(5).Number); }
public void MomListString() { var pool = MakeErrPool(); var c = new ContextTest("Context"); var list = MFactory.NewList(DataType.String); Assert.AreEqual(0, list.Count); Assert.AreEqual(DataType.String, list.DataType); var err1 = pool.MakeError(1, c); var err2 = pool.MakeError(2, c); list.AddMom(RTime(0), "s0"); list.AddMom(RTime(0, 10), "s1", err1); list.AddMom(RTime(0, 20), "s2", err2); Assert.AreEqual(3, list.Count); Assert.AreEqual(RTime(0), list.TimeI(0)); Assert.AreEqual(RTime(0, 10), list.TimeI(1)); Assert.AreEqual(RTime(0, 20), list.TimeI(2)); Assert.AreEqual("s0", list.StringI(0)); Assert.AreEqual("s1", list.StringI(1)); Assert.AreEqual("s2", list.StringI(2)); Assert.IsNull(list.ErrorI(0)); Assert.AreEqual(1, list.ErrorI(1).Number); Assert.AreEqual("Error", list.ErrorI(2).Text); list.CurNum = 1; Assert.AreEqual("s1", list.String); Assert.AreEqual(1, list.Error.Number); Assert.AreEqual(RTime(0, 10), list.Time); var m = list.ToMom(RTime(1), err2); Assert.AreEqual("s1", m.String); Assert.AreEqual(1, m.Error.Number); Assert.AreEqual(RTime(1), m.Time); var me = new EditMom(DataType.Real); me.Time = RTime(0, 5); me.Real = 2; list.AddMom(me); me.Time = RTime(0, 15); me.Real = 2.1; list.AddMom(me, err1); me.Time = RTime(0, 25); me.Real = 2.2; list.AddMom(me, err2); Assert.AreEqual(6, list.Count); Assert.AreEqual(RTime(0), list.TimeI(0)); Assert.AreEqual(RTime(0, 5), list.TimeI(1)); Assert.AreEqual(RTime(0, 10), list.TimeI(2)); Assert.AreEqual(RTime(0, 15), list.TimeI(3)); Assert.AreEqual(RTime(0, 20), list.TimeI(4)); Assert.AreEqual(RTime(0, 25), list.TimeI(5)); Assert.AreEqual("s0", list.StringI(0)); Assert.AreEqual("2", list.StringI(1)); Assert.AreEqual("s1", list.StringI(2)); Assert.AreEqual("2,1", list.StringI(3)); Assert.AreEqual("s2", list.StringI(4)); Assert.AreEqual("2,2", list.StringI(5)); Assert.IsNull(list.ErrorI(0)); Assert.IsNull(list.ErrorI(1)); Assert.AreEqual(1, list.ErrorI(2).Number); Assert.AreEqual(1, list.ErrorI(3).Number); Assert.AreEqual(2, list.ErrorI(4).Number); Assert.AreEqual(2, list.ErrorI(5).Number); }
public void MomListInt() { var pool = MakeErrPool(); var c = new ContextTest("Context"); var list = new IntMomList(); Assert.AreEqual(0, list.Count); Assert.AreEqual(DataType.Integer, list.DataType); Assert.AreEqual(0, list.CurNum); Assert.AreEqual(Static.MaxDate, list.NextTime); var err1 = pool.MakeError(1, c); var err2 = pool.MakeError(2, c); list.AddMom(RTime(0), 10); list.AddMom(RTime(0, 10), 11, err1); list.AddMom(RTime(0, 20), 12, err2); Assert.AreEqual(3, list.Count); Assert.AreEqual(RTime(0), list.TimeI(0)); Assert.AreEqual(RTime(0, 10), list.TimeI(1)); Assert.AreEqual(RTime(0, 20), list.TimeI(2)); Assert.AreEqual(10, list.IntegerI(0)); Assert.AreEqual(11, list.IntegerI(1)); Assert.AreEqual(12, list.IntegerI(2)); Assert.AreEqual(10.0, list.RealI(0)); Assert.AreEqual("11", list.StringI(1)); Assert.AreEqual(true, list.BooleanI(2)); Assert.IsNull(list.ErrorI(0)); Assert.IsNotNull(list.ErrorI(1)); Assert.AreEqual(1, list.ErrorI(1).Number); Assert.AreEqual("Warning", list.ErrorI(1).Text); Assert.IsNotNull(list.ErrorI(2)); Assert.AreEqual(2, list.ErrorI(2).Number); Assert.AreEqual("Error", list.ErrorI(2).Text); list.CurNum = 1; Assert.AreEqual(11, list.Integer); Assert.AreEqual(11.0, list.Real); Assert.AreEqual(1, list.Error.Number); Assert.AreEqual(RTime(0, 10), list.Time); var m = list.ToMom(RTime(1), err2); Assert.AreEqual(11, m.Integer); Assert.AreEqual(11.0, m.Real); Assert.AreEqual(1, m.Error.Number); Assert.AreEqual(RTime(1), m.Time); var me = new EditMom(DataType.Integer); me.Time = RTime(0, 5); me.Integer = 20; list.AddMom(me); me.Time = RTime(0, 15); me.Integer = 21; list.AddMom(me, err1); me.Time = RTime(0, 25); me.Integer = 22; list.AddMom(me, err2); Assert.AreEqual(6, list.Count); Assert.AreEqual(RTime(0), list.TimeI(0)); Assert.AreEqual(RTime(0, 5), list.TimeI(1)); Assert.AreEqual(RTime(0, 10), list.TimeI(2)); Assert.AreEqual(RTime(0, 15), list.TimeI(3)); Assert.AreEqual(RTime(0, 20), list.TimeI(4)); Assert.AreEqual(RTime(0, 25), list.TimeI(5)); Assert.AreEqual(10, list.IntegerI(0)); Assert.AreEqual(20, list.IntegerI(1)); Assert.AreEqual(11, list.IntegerI(2)); Assert.AreEqual(21, list.IntegerI(3)); Assert.AreEqual(12, list.IntegerI(4)); Assert.AreEqual(22, list.IntegerI(5)); Assert.IsNull(list.ErrorI(0)); Assert.IsNull(list.ErrorI(1)); Assert.AreEqual(1, list.ErrorI(2).Number); Assert.AreEqual(1, list.ErrorI(3).Number); Assert.AreEqual(2, list.ErrorI(4).Number); Assert.AreEqual(2, list.ErrorI(5).Number); }
//Добавить обычную ошибку в заданный EditMom, номер ошибки задается для функции по умолчанию public void PutErr(EditMom mom) { mom.AddError(ErrPool.MakeError(CurFun.ErrorNumber, Contextable)); }
//Установить тип данных скалярного значения public void SetScalarDataType(DataType dtype) { ScalarRes = _scalarResTypes[dtype]; ScalarRes.MakeDefault(); }
public UniformCloneSignal(ClonerConnect connect, string code, DataType dataType, string contextOut, DicS <string> inf) : base(connect, code, dataType, contextOut, inf) { _prevMom = new EditMom(dataType); _beginMom = new EditMom(dataType); }
private void LastScalar(EditMom res, MomList mlist, int i, DateTime t) { res.CopyValueFrom(mlist, i); res.Error = mlist.ErrorI(i); }
private void FirstScalar(EditMom res, MomList mlist, int i, DateTime t) { }
private void AverageScalar(EditMom res, MomList mlist, int i, DateTime t) { DateTime time = (i >= mlist.Count - 1 || mlist.TimeI(i + 1) > t) ? t : mlist.TimeI(i + 1); res.Real += mlist.RealI(i) * (time.Subtract(mlist.TimeI(i)).TotalSeconds) / _pars[0].Real; }
public UniformSignal(SourceConnect connect, string code, DataType dataType, string contextOut, DicS <string> inf) : base(connect, code, dataType, contextOut, inf) { _beginMom = new EditMom(dataType); _endMom = new EditMom(dataType); }