/// /// Copyright (c) 2013-2015 Sensus Metering Systems /// Author: Milan Hanajik /// using System; using System.Collections.Generic; namespace TBF.Entities { /// /// Test, consisting of one or more repetitions of the test 'SingleTest'. /// public class Test : IHasItemNr { public virtual int Id { get; protected set; } public virtual int ItemNr { get; set; } public virtual string Name { get; set; } public virtual int Part { get; set; } /// Part=0 ... test of all WM-s /// Part>0 ... part of a set of tests with the same Name: subset of WM-s is given by MetersPath public virtual float Qfrom { get; set; } /// Water flow low limit in [m3/h] public virtual float Qto { get; set; } /// Water flow high limit in [m3/h] public virtual float Volume { get; set; } /// Test volume (target) in [l] public virtual float TstTime { get; set; } /// Test time (estimate) in [s] public virtual int Repeats { get; set; } public virtual bool Emptying { get; set; } public virtual bool Zeroing { get; set; } public virtual float PumpPower { get; set; } /// Power of the pump in [%] in the range 0 .. 100.0f, use values 0% and 100% for non-FM pumps public virtual int TimeBeforeFlow { get; set; } /// Delay time before the start of flow control in [s] public virtual int TimeFlow2Mass { get; set; } /// Delay time from the flow stable to the 1st mass measurement in [s] public virtual int TimeMass2Start { get; set; } /// Delay time from the 1st mass measurement to the test start in [s] public virtual int TimeStop2Mass { get; set; } /// Delay time from the test end (diverted) to the 2nd mass measuremen in [s] public virtual string Method { get; set; } public virtual float ErrLimLo { get; set; } /// in [%] (usually < 0) public virtual float ErrLimHi { get; set; } /// in [%] (usually > 0) public virtual float Uncertainty { get; set; } /// int [%] makes error limits tighter: 0 <= Uncertainty <= abs(ErrLimXx) public virtual double TolerRed { get; set; } /// = Filter public virtual TestRedType RedType { get; set; } public virtual string FeedingPath { get; set; } public virtual string BenchPath { get; set; } public virtual string OutputPath { get; set; } public virtual string MetersPath { get; set; } public virtual string RelTransBefore { get; set; } public virtual string RelTransBetween { get; set; } public virtual string RelTransAfter { get; set; } public virtual string TransitionAfter { get; set; } public virtual IList MoreParams { get; set; } public virtual Procedure Procedure { get; set; } /// ------------- Additional stuff not mapped into the database ------------- public Test() { MoreParams = new List(); /// /// Default values /// Repeats = 1; Emptying = false; Zeroing = false; PumpPower = 60.0f; /// [%] TimeBeforeFlow = 10; /// [s] time before the start of flow control in [s] TimeFlow2Mass = 5; /// [s] time from the flow stable to the 1st mass measurement in [s] TimeMass2Start = 1; /// [s] time from the 1st mass measurement to the test start in [s] TimeStop2Mass = 5; /// [s] between the test end and the final mass measurement ErrLimLo = -2.0f; /// [%] lower error limit ErrLimHi = 2.0f; /// [%] upper error limit Uncertainty = 0; TolerRed = 0; /// = Filter parameter } public Test(string name, int itemNr, Procedure procedure) : this() { Name = name; ItemNr = itemNr; Procedure = procedure; } // Makes a new copy of this object (not just a reference) public virtual Test Clone() { Test result = new Test(Name, ItemNr, Procedure); result.Part = Part; result.Qfrom = Qfrom; result.Qto = Qto; result.Volume = Volume; result.TstTime = TstTime; result.Repeats = Repeats; result.Emptying = Emptying; result.Zeroing = Zeroing; result.PumpPower = PumpPower; result.TimeBeforeFlow = TimeBeforeFlow; result.TimeFlow2Mass = TimeFlow2Mass; result.TimeMass2Start = TimeMass2Start; result.TimeStop2Mass = TimeStop2Mass; result.Method = Method; result.ErrLimLo = ErrLimLo; result.ErrLimHi = ErrLimHi; result.Uncertainty = Uncertainty; result.TolerRed = TolerRed; result.RedType = RedType; result.FeedingPath = FeedingPath; result.BenchPath = BenchPath; result.OutputPath = OutputPath; result.MetersPath = MetersPath; foreach (var prms in MoreParams) { result.MoreParams.Add(prms.Clone()); } return result; } } }