Exemplo n.º 1
0
        public void Conditionals()
        {
            SeriesExpressionParser.Debug = true;
            var tiew_qj = new Series("tiew_qj");
            var nscw_qj = new Series("nscw_qj");

            tiew_qj.TimeInterval = TimeInterval.Daily;
            nscw_qj.TimeInterval = TimeInterval.Daily;

            DateTime t1 = DateTime.Parse("1/1/2015");
            DateTime t2 = DateTime.Parse("1/10/2015");

            tiew_qj.AfterRead += new EventHandler(delegate(object o, EventArgs a)
            {
                tiew_qj.AddRange(t1, new double[] { 10, 10, 1, 1 });
            });
            nscw_qj.AfterRead += new EventHandler(delegate(object o, EventArgs a)
            {
                nscw_qj.AddRange(t1, new double[] { 11, 10, 1, 100 });
            });
            var expected  = new double[]  { 35, 0, 0, 35 };
            var expected2 = new double[] { 0, 0, 35, 0 };

            var qu = new CalculationSeries();

            qu.Expression   = "If( tiew_qj + nscw_qj > 20.0 , 35.0, 0.0)";
            qu.TimeInterval = TimeInterval.Daily;
            qu.Parser.VariableResolver.Add("tiew_qj", tiew_qj);
            qu.Parser.VariableResolver.Add("nscw_qj", nscw_qj);
            qu.Calculate(t1, t2);
            qu.WriteToConsole();
            Assert.AreEqual(4, qu.Count, " expected 4 QU values");


            for (int i = 0; i < expected.Length; i++)
            {
                Assert.AreEqual(expected[i], qu[i].Value, 0.001);
            }
            expected      = null;
            qu.Expression = "If( tiew_qj + nscw_qj < 20.0 , 35.0, 0.0)";
            qu.Calculate(t1, t2);
            qu.WriteToConsole();
            Assert.AreEqual(4, qu.Count, " expected 4 QU values");

            for (int i = 0; i < expected2.Length; i++)
            {
                Assert.AreEqual(expected2[i], qu[i].Value, 0.001);
            }
        }
Exemplo n.º 2
0
        public void MathInDatabase()
        {
            _svr.CreateDataBase(_fn);

            Series one = new Series();

            one.Name = "o";
            one.Add(DateTime.Parse("2001-01-01"), 1);
            one.Add(DateTime.Parse("2001-01-02"), 1);

            Series two = new Series();

            two.Name = "two";
            two.Add(DateTime.Parse("2001-01-01"), 2);
            two.Add(DateTime.Parse("2001-01-02"), 2);


            CalculationSeries onePlusTwo = new CalculationSeries();

            onePlusTwo.Name       = "one+two"; // this name will match 'one%' in SQL
            onePlusTwo.Expression = "o+two";
            _db.AddSeries(one);
            _db.AddSeries(two);
            _db.AddSeries(onePlusTwo);

            onePlusTwo.Calculate();
            Assert.AreEqual(2, onePlusTwo.Count);
            Assert.AreEqual(3, onePlusTwo[0].Value);
            Assert.AreEqual(3, onePlusTwo[1].Value);
            onePlusTwo.WriteToConsole();
        }
Exemplo n.º 3
0
        public void MpollQU()
        {
            var qu = new CalculationSeries();

            qu.Expression              = "WOD_AF-WOD_AF[t-1]+WOD_OM";
            qu.TimeInterval            = TimeInterval.Monthly;
            qu.Parser.VariableResolver = new HydrometVariableResolver();
            DateTime t1 = DateTime.Parse("9/1/1957");
            DateTime t2 = DateTime.Parse("12/23/1957");

            qu.Calculate(t1, t2);
            Assert.AreEqual(4120, qu["10/1/1957"].Value);
            qu.WriteToConsole();
        }
Exemplo n.º 4
0
        public void SimpleDailyAverageNoPrefix()
        {
            var mm = new CalculationSeries();

            mm.SiteID                  = "pici";
            mm.Expression              = "DailyAverage(%site%_ob)";
            mm.TimeInterval            = TimeInterval.Irregular;
            mm.Parser.VariableResolver = new HydrometVariableResolver();
            DateTime t1 = DateTime.Parse("5/2/2013");
            DateTime t2 = DateTime.Parse("5/2/2013");

            mm.Calculate(t1, t2);
            Assert.AreEqual(44.56, mm["5/2/2013"].Value, 0.01);
            mm.WriteToConsole();
        }
Exemplo n.º 5
0
        public void SimpleDailyAverageWithInterval()
        {
            var mm = new CalculationSeries();

            mm.SiteID                  = "pici"; // test feautre that replaces %site% with SiteID
            mm.Expression              = "DailyAverage(instant_%site%_ob)";
            mm.TimeInterval            = TimeInterval.Daily;
            mm.Parser.VariableResolver = new HydrometVariableResolver();
            DateTime t1 = DateTime.Parse("5/2/2013");
            DateTime t2 = DateTime.Parse("5/2/2013");

            mm.Calculate(t1, t2);
            Assert.AreEqual(44.56, mm["5/2/2013"].Value, 0.01);
            mm.WriteToConsole();
        }
Exemplo n.º 6
0
        public void FunctionNames()
        {
            _svr.CreateDataBase(_fn);

            ParserFunction f;
            string         subExpr = "";
            bool           ok      = ParserUtility.TryGetFunctionCall("Merge(series1,'series 2')+'Series 5'", out subExpr, out f);

            Assert.IsTrue(ok);
            Assert.AreEqual("Merge", f.Name);
            Assert.AreEqual(2, f.Parameters.Length);

            Series observed = new Series();

            observed.Name = "observed";
            observed.Add(DateTime.Parse("2001-01-01"), 1);
            observed.AddMissing(DateTime.Parse("2001-1-02"));
            observed.Add(DateTime.Parse("2001-01-04"), 1);
            observed.TimeInterval = TimeInterval.Daily;
            Series estimated = new Series();

            estimated.Name = "estimated";
            estimated.Add(DateTime.Parse("2001-1-02"), 2);
            estimated.Add(DateTime.Parse("2001-1-03"), 2);
            estimated.Add(DateTime.Parse("2000-12-25"), 2);
            estimated.Add(DateTime.Parse("2001-12-26"), 2);
            estimated.TimeInterval = TimeInterval.Daily;

            CalculationSeries c = new CalculationSeries();

            //c.SetMissingDataToZero = true;
            c.TimeInterval = TimeInterval.Daily;
            c.Name         = "merged";
            c.Expression   = "Merge(observed, estimated)";
            _db.AddSeries(observed);
            _db.AddSeries(estimated);
            _db.AddSeries(c);

            c.Calculate();

            Assert.AreEqual(2, c["2001-1-03"].Value, 0.0001);

            c.WriteToConsole();
        }
Exemplo n.º 7
0
        public void MathMax()
        {
            //DailyCalculator.
            DateTime       t  = new DateTime(2012, 12, 6);
            ConstantSeries s1 = new ConstantSeries("s1", "aa", -1, TimeInterval.Daily);

            s1.TimeInterval = TimeInterval.Daily;
            Reclamation.TimeSeries.Parser.SeriesExpressionParser.Debug = true;
            var s = new CalculationSeries();

            s.Expression              = "Max(s1,0)";
            s.TimeInterval            = TimeInterval.Daily;
            s.Parser.VariableResolver = new VariableResolver();
            s.Parser.VariableResolver.Add("s1", s1);

            s.Calculate(t, t.AddDays(2));
            s.WriteToConsole();
            Assert.AreEqual(3, s.Count);
        }
Exemplo n.º 8
0
        public void ConvertToCelcius()
        {
            var    fn = Path.Combine(TestData.DataPath, "CalculationTests.xlsx");
            Series s  = new ExcelDataReaderSeries(fn, "ConvertToCelcius", "Date", "value");

            s.Units = "degrees C";
            s.Name  = "series1";

            CalculationSeries c = new CalculationSeries();

            c.Parser.VariableResolver.Add("series1", s);
            c.Expression = "5/9*(series1-32)";
            c.Read();

            // c.WriteToConsole();
            c.Clear();
            c.Calculate(); //t,t.AddDays(3));
            c.WriteToConsole();
            Assert.AreEqual(0, c[0].Value, 0.01);
            Assert.AreEqual(100, c[1].Value, 0.01);
        }
Exemplo n.º 9
0
        public void UnregulatedFlow()
        {
            var    fn  = Path.Combine(TestData.DataPath, "calculationtests_jck_qu.csv");
            var    csv = new CsvFile(fn);
            Series af  = new DataTableSeries(csv, TimeInterval.Daily, "Date", "jck af");
            Series qd  = new DataTableSeries(csv, TimeInterval.Daily, "Date", "jck qd");

            var qu = new CalculationSeries();

            qu.Parser.VariableResolver.Add("jck_af", af);
            qu.Parser.VariableResolver.Add("jck_qd", qd);

            qu.Expression = "(jck_af[t]-jck_af[t-1])/1.98347+jck_qd";

            DateTime t1 = DateTime.Parse("12/25/2010");
            DateTime t2 = DateTime.Parse("12/27/2010");

            qu.Calculate(t1, t2);

            qu.WriteToConsole();
            Assert.AreEqual(674.39, qu["12/26/2010"].Value, .01);
        }
Exemplo n.º 10
0
        public void ConvertToCelcius()
        {
            var    fn  = Path.Combine(TestData.DataPath, "calculationtests_convert.csv");
            var    csv = new CsvFile(fn);
            Series s   = new DataTableSeries(csv, TimeInterval.Daily, "Date", "value");

            s.Units = "degrees C";
            s.Name  = "series1";

            CalculationSeries c = new CalculationSeries();

            c.Parser.VariableResolver.Add("series1", s);
            c.Expression = "5/9*(series1-32)";
            c.Read();

            // c.WriteToConsole();
            c.Clear();
            c.Calculate(); //t,t.AddDays(3));
            c.WriteToConsole();
            Assert.AreEqual(0, c[0].Value, 0.01);
            Assert.AreEqual(100, c[1].Value, 0.01);
        }
Exemplo n.º 11
0
        public void UnregulatedFlow()
        {
            var fn = Path.Combine(TestData.DataPath, "CalculationTests.xlsx");

            Series af = new ExcelDataReaderSeries(fn, "jck_qu", "Date", "jck af");
            Series qd = new ExcelDataReaderSeries(fn, "jck_qu", "Date", "jck qd");

            var qu = new CalculationSeries();

            qu.Parser.VariableResolver.Add("jck_af", af);
            qu.Parser.VariableResolver.Add("jck_qd", qd);

            qu.Expression = "(jck_af[t]-jck_af[t-1])/1.98347+jck_qd";

            DateTime t1 = DateTime.Parse("12/25/2010");
            DateTime t2 = DateTime.Parse("12/27/2010");

            qu.Calculate(t1, t2);

            qu.WriteToConsole();
            Assert.AreEqual(674.39, qu["12/26/2010"].Value, .01);
        }