示例#1
0
        public void TestRectangularContractedWeir()
        {
            // bully creek feder canal
            Series   ch = new Series("bul_ch");
            DateTime t1 = DateTime.Parse("2015-2-8 8:15");
            DateTime t2 = DateTime.Parse("2015-2-12 7:15");

            ch.AfterRead += new EventHandler(delegate(object o, EventArgs a)
            {
                ch.Add(t1, 2);
                ch.Add(t2, 1.69);
            });


            Logger.EnableLogger();
            SeriesExpressionParser.Debug = true;
            var c = new CalculationSeries("bul_qc");

            c.Parser.VariableResolver.Add("bul_ch", new ParserResult(ch));
            c.TimeInterval = TimeInterval.Irregular;
            c.Expression   = "RectangularContractedWeir(bul_ch,10)";
            c.Calculate();


            Assert.AreEqual(2, c.Count, " expected two flow calculations");
            Assert.AreEqual(90.42, c[t1].Value, 0.01);
            Assert.AreEqual(70.69, c[t2].Value, 0.01);

            ch.Read();
            var x = Reclamation.TimeSeries.Math.RectangularContractedWeir(ch, 10);

            Assert.AreEqual(90.42, c[0].Value, 0.01);
        }
示例#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();
        }
示例#3
0
        public void AddBug()
        {
            DateTime           t1  = new DateTime(2013, 1, 1);
            var                t2  = t1.AddDays(365);
            var                fn  = FileUtility.GetTempFileNameInDirectory(@"c:\temp\", ".pdb");
            SQLiteServer       svr = new SQLiteServer(fn);
            TimeSeriesDatabase db  = new Reclamation.TimeSeries.TimeSeriesDatabase(svr, false);
            var                s   = new HydrometDailySeries("pal", "af");

            s.Name = "pal_af";
            s.Read(t1, t2);
            db.AddSeries(s);

            var cs = new CalculationSeries("add_test");

            cs.Expression = "pal_af + pal_af";
            db.AddSeries(cs);


            cs = db.GetSeriesFromName("add_test") as CalculationSeries;
            cs.Calculate(t1, t2);


            cs = db.GetSeriesFromName("add_test") as CalculationSeries;
            cs.Read();

            Assert.IsTrue(cs.Count > 0);
        }
示例#4
0
        public void SpaceInVariableName()
        {
            _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);


            SeriesExpressionParser.Debug = true;
            one.Name = "jck af"; // put a space in the name
            _db.AddSeries(one);

            CalculationSeries onePlusTwo = new CalculationSeries();

            onePlusTwo.Name       = "space_in_expression";
            onePlusTwo.Expression = "'jck af'+2"; // using single quotes '
            _db.AddSeries(onePlusTwo);

            onePlusTwo.Calculate();
            Assert.AreEqual(2, onePlusTwo.Count);
            Assert.AreEqual(3, onePlusTwo[0].Value);
            Assert.AreEqual(3, onePlusTwo[1].Value);
        }
示例#5
0
        public void ImportDecodesWithMissingGageHeight()
        {
            FileUtility.CleanTempPath();
            var fn1 = FileUtility.GetTempFileName(".pdb");

            Console.WriteLine(fn1);
            var svr = new SQLiteServer(fn1);
            var db  = new TimeSeriesDatabase(svr, Reclamation.TimeSeries.Parser.LookupOption.TableName);

            Logger.EnableLogger();

            var tmpDir = CopyTestDecodesFileToTempDirectory("decodes_mabo_missing_gh.txt");
            var ratingTableFileName = CreateTempRatingTable("mabo.csv", 2.37, 2.8, x => (x * 10));
            var c = new CalculationSeries("instant_mabo_q");

            c.Expression = "FileRatingTable(mabo_gh,\"" + ratingTableFileName + "\")";
            db.AddSeries(c);

            FileImporter import = new FileImporter(db);

            import.Import(tmpDir, RouteOptions.Outgoing, computeDependencies: true, searchPattern: "*.txt");
            db.Inventory();

            var s = db.GetSeriesFromTableName("instant_mabo_q");

            s.Read();
            Assert.IsTrue(s.CountMissing() == 0);
            Assert.IsTrue(s.Count > 0, "No flow data computed");
        }
示例#6
0
        public void StringParameter()
        {
            string expression = "HydrometRuleCurve(\"c:\\temp\\prvo\",fc))";

            string         subExpression;
            ParserFunction f;

            ParserUtility.TryGetFunctionCall(expression, out subExpression, out f);

            Assert.AreEqual("HydrometRuleCurve", f.Name);
            Assert.AreEqual(2, f.Parameters.Length);

            Assert.AreEqual("\"c:\\temp\\prvo\"", f.Parameters[0]);
            Assert.AreEqual("fc", f.Parameters[1]);

            CalculationSeries cs = new CalculationSeries("test");

            cs.Expression = expression;
            var vars = cs.GetDependentVariables();

            // "prvo"  is a string NOT a variable.
            foreach (var item in vars)
            {
                System.Console.WriteLine("'" + item + "'");
            }

            Assert.IsTrue(vars.Count == 1, "string parameter is not a variable");

            Assert.IsTrue(vars[0] == "fc");
        }
示例#7
0
        public AlterIssueForm(Issue item)
        {
            InitializeComponent();
            this.item    = item;
            nameTB.Text  = item.name;
            descrTB.Text = item.description;
            // Add choice to add null to calculation series
            var emptySeries = new CalculationSeries();

            emptySeries.id   = -1;
            emptySeries.name = "Без серiї";

            //seriesCB.Items.Add(emptySeries);
            //seriesCB.SelectedIndex = 0; //Bugged


            // Add all series from db to combo box
            db.Connect();
            var obj          = db.GetRows("calculations_description", "*", "");
            var calculations = new List <CalculationSeries>();

            foreach (var row in obj)
            {
                calculations.Add(CalculatoinSeriesMapper.Map(row));
            }

            //seriesCB.Items.AddRange(calculations.ToArray());
            db.Disconnect();

            //seriesCB.SelectedIndex = item.seriesId.Length == 0 ? 0 : Int32.Parse(item.seriesId); // TODO
        }
示例#8
0
        public void ImportDecodesAndProcessWithFlagLimits()
        {
            Logger.EnableLogger();
            FileUtility.CleanTempPath();
            var fn1 = FileUtility.GetTempFileName(".pdb");

            Console.WriteLine(fn1);
            var svr = new SQLiteServer(fn1);
            var db  = new TimeSeriesDatabase(svr, Reclamation.TimeSeries.Parser.LookupOption.TableName);

            var tmpDir = CopyTestDecodesFileToTempDirectory("decodes_lapo.txt");

            var rtlapo = CreateTempRatingTable("lapo.csv", new double[] { 3.50, 3.54, 3.55, 5.54 },
                                               new double[] { 1, 2, 3, 10 });
            // set limits  gh: low=3.53, high 3.6,  rate of change/hour 1
            Quality q = new Quality(db);

            q.SaveLimits("instant_lapo_gh", 3.6, 3.53, 1.0);
            q.SaveLimits("instant_lapo_q", 5, 1.1, 0);

            var site = db.GetSiteCatalog();

            site.AddsitecatalogRow("lapo", "", "OR");
            db.Server.SaveTable(site);
            var c = new CalculationSeries("instant_lapo_q");

            c.SiteID     = "lapo";
            c.Expression = "FileRatingTable(%site%_gh,\"" + rtlapo + "\")";
            db.AddSeries(c);

            //SeriesExpressionParser.Debug = true;
            FileImporter import = new FileImporter(db);

            import.Import(tmpDir, RouteOptions.None, computeDependencies: true, searchPattern: "*.txt");
            db.Inventory();


            var s             = db.GetSeriesFromTableName("instant_lapo_gh");
            var expectedFlags = new string[] { "", "", "", "+", "", "", "", "-" };

            for (int i = 0; i < s.Count; i++)
            {
                Assert.AreEqual(expectedFlags[i], s[i].Flag, " flag not expected ");
            }

            s = db.GetSeriesFromTableName("instant_lapo_q");
            s.Read();
            Assert.IsTrue(s.Count > 0, "No flow data computed lapo");
            s.WriteToConsole(true);
            // computed flows should be: 2 2 2 10 2 2 1
            expectedFlags = new string[] { "", "", "", "+", "", "", "", "-" }; //q>=1 and q<= 5
            for (int i = 0; i < s.Count; i++)
            {
                Assert.AreEqual(expectedFlags[i], s[i].Flag.Trim(), " Flag check on Flow (Q) ");
            }

            SeriesExpressionParser.Debug = false;
        }
示例#9
0
        private void AddDailyCalculation(string name, string exp)
        {
            var            c  = new CalculationSeries(name);
            TimeSeriesName tn = new TimeSeriesName(name);

            c.Expression   = exp;
            c.SiteID       = tn.siteid;
            c.TimeInterval = TimeInterval.Daily;
            db.AddSeries(c);
        }
示例#10
0
        public void SimpleRecursive_wafi()
        {
            var c = new CalculationSeries("instant_wafi_ch");

            c.Expression = "GenericWeir(wafi_ch,0,16.835,1.5)";
            db.AddSeries(c);

            FileImporter fi = new FileImporter(db);

            fi.Import(dir, true, true, "*.wafi");
        }
示例#11
0
文件: Program.cs 项目: woohn/Pisces
        static void Main(string[] args)
        {
            if (args.Length != 3)
            {
                Console.WriteLine("Usage: ImportCsv site_list.csv instant|daily daysBack");
                return;
            }
            FileUtility.CleanTempPath();
            Logger.EnableLogger();

            CsvFile csv      = new CsvFile(args[0]);
            int     daysBack = int.Parse(args[2]);

/*
 *
 * interval,filename,date_column,value_column,cbtt,pcode
 * instant,kid.csv,Time,MB1.Hw_FlowMeter,ACHO,QC1
 * instant,kid.csv,Time,MB1.Hw_FlowCalc,ACHO,QC2
 * instant,kid.csv,Time,MB1.MillerHill_FlowPump1,HMPO,QP1
 * instant,kid.csv,Time,MB1.MillerHill_FlowPump2,HMPO,QP2
 * instant,kid.csv,Time,MB1.MillerHill_FlowPump3,HMPO,QP3
 *
 */
            var rows     = csv.Select("interval = '" + args[1] + "'");
            var interval = TimeInterval.Daily;

            if (args[1] == "instant")
            {
                interval = TimeInterval.Irregular;
            }

            Console.WriteLine("Processing " + rows.Length + " parameters");
            for (int i = 0; i < rows.Length; i++)
            {
                var filename    = rows[i]["filename"].ToString();
                var dateColumn  = rows[i]["date_column"].ToString();
                var valueColumn = rows[i]["value_column"].ToString();
                var cbtt        = rows[i]["cbtt"].ToString();
                var pcode       = rows[i]["pcode"].ToString();

                DataTable tbl = new CsvFile(filename);

                CalculationSeries s = new CalculationSeries();
                s.TimeInterval            = interval;
                s.Expression              = valueColumn;
                s.Parser.VariableResolver = new DataTableVariableResolver(tbl, dateColumn);
                s.Calculate(DateTime.Now.AddDays(-daysBack), DateTime.Now);

                Console.WriteLine("Processing " + cbtt + "_" + pcode + " " + s.Count + " records");

                TimeSeriesTransfer.Import(s, cbtt, pcode);
            }
        }
示例#12
0
        public void AddEquationSeries(string name, string equation, string interval = "instant")
        {
            var            f  = db.GetOrCreateFolder("hydromet", "aga", interval);
            TimeSeriesName tn = new TimeSeriesName(name, interval);

            var c = new CalculationSeries(name);

            c.Table.TableName = tn.GetTableName();
            c.Expression      = equation;
            c.TimeInterval    = tn.GetTimeInterval();
            db.AddSeries(c, f);
        }
示例#13
0
        public void JacksonQU()
        { // daily data based on other daily data
            //DailyCalculator.
            Reclamation.TimeSeries.Parser.SeriesExpressionParser.Debug = true;
            var s = new CalculationSeries();

            s.Expression              = "(jck_af-jck_af[t-1])/1.98347+jck_qd";
            s.TimeInterval            = TimeInterval.Daily;
            s.Parser.VariableResolver = new HydrometVariableResolver();

            s.Calculate(new DateTime(2012, 11, 1), new DateTime(2012, 11, 15));

            Assert.AreEqual(298, s["2012-11-15"].Value, 0.01);
        }
示例#14
0
        /// <summary>
        /// Adds new Calculation Series
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void AddCalculationClick(object sender, EventArgs e)
        {
            CalculationSeries     s = new CalculationSeries(DB);
            CalculationProperties p = new CalculationProperties(s, new TimeSeriesTreeModel(DB), DB.GetUniqueUnits());

            if (p.ShowDialog() == DialogResult.OK)
            {
                DB.AddSeries(s, CurrentFolder);
                // tree refresh.. Add node.
                s.Calculate(); // save again
                // refresh.
                DB.RefreshFolder(CurrentFolder);
            }
        }
示例#15
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();
        }
示例#16
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);
            }
        }
示例#17
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();
        }
示例#18
0
        private CalculationSeries CreateCalcSeries(TimeSeriesDatabaseDataSet.SeriesCatalogRow r, string name, TimeSeriesName tn, string expression)
        {
            var s = new CalculationSeries(name)
            {
                Parameter  = tn.pcode,
                SiteID     = r.siteid,
                Expression = expression
            };

            s.Table.TableName = tn.GetTableName();
            s.TimeInterval    = tn.GetTimeInterval();

            sw.WriteLine("Created: " + tn.GetTableName() + " = " + expression);
            return(s);
        }
示例#19
0
        private void buttonAdd_Click(object sender, EventArgs e)
        {
            var db = Database.DB();
            var s  = new CalculationSeries(db);
            var m  = new TimeSeriesTreeModel(db);
            var p  = new CalculationProperties(s, m, db);


            if (p.ShowDialog() == DialogResult.OK)
            {
                db.SuspendTreeUpdates();
                db.AddSeries(s);
            }
            LoadTable();
        }
示例#20
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();
        }
示例#21
0
        public CalculationProperties(CalculationSeries s, ITreeModel model, TimeSeriesDatabase db)
        {
            string[] DBunits = db.GetUniqueUnits();
            m_db = db;
            InitializeComponent();
            tree1 = new PiscesTree(model);
            tree1.ExpandRootNodes();

            tree1.AllowDrop = false;
            tree1.Parent    = this.splitContainer1.Panel1;
            tree1.Dock      = DockStyle.Fill;
            tree1.RemoveCommandLine();

            m_series = s;
            basicEquation1.SeriesExpression = m_series.Expression;
            basicEquation1.SiteID           = m_series.SiteID;
        }
示例#22
0
        public CalculationProperties(CalculationSeries s, ITreeModel model, string[] DBunits)
        {
            InitializeComponent();
            tree1 = new PiscesTree(model);
            tree1.ExpandRootNodes();

            tree1.AllowDrop = false;
            tree1.Parent    = this.splitContainer1.Panel1;
            tree1.Dock      = DockStyle.Fill;
            tree1.RemoveCommandLine();

            m_series = s;
            basicEquation1.SeriesExpression = m_series.Expression;
            basicEquation1.Units            = m_series.Units;
            basicEquation1.SeriesName       = m_series.Table.TableName;
            this.LoadList(basicEquation1.ComboBoxUnits, DBunits);
        }
示例#23
0
        public void ValeQU()
        { // daily data based on other daily data
            //DailyCalculator.
            Reclamation.TimeSeries.Parser.SeriesExpressionParser.Debug = true;
            var s = new CalculationSeries();

            s.Expression              = "(WAR_AF[t-2]-WAR_AF[t-3]+BEU_AF[t-2]-BEU_AF[t-3]+BUL_AF-BUL_AF[t-1])/1.98347+VALO_QD";
            s.TimeInterval            = TimeInterval.Daily;
            s.Parser.VariableResolver = new HydrometVariableResolver();

            DateTime t = new DateTime(2012, 12, 6);

            s.Calculate(t, t);

            Assert.AreEqual(1, s.Count);
            Assert.AreEqual(573.75, s[t].Value, 0.01);
        }
示例#24
0
        public void ConstantInteger()
        {
            CalculationSeries c = new CalculationSeries();

            c.TimeInterval = TimeInterval.Daily;
            c.Name         = "constant_series";
            c.Expression   = "14";
            db.AddSeries(c);

            DateTime t1 = new DateTime(2014, 10, 1);
            DateTime t2 = new DateTime(2014, 10, 5);

            c.Calculate(t1, t2);

            Assert.AreEqual(5, c.Count);
            Assert.AreEqual(14, c[0].Value, 0.001);
        }
示例#25
0
        static void Main(string[] args)
        {
            Logger.EnableLogger();
            //var svr = new SQLiteServer(@"C:\temp\snowcourse.pdb");
            var svr = PostgreSQL.GetPostgresServer("timeseries", "lrgs1.pn.usbr.gov");
            var db  = new TimeSeriesDatabase(svr);


            var sc    = db.GetSeriesCatalog();
            var sites = db.GetSiteCatalog();

            CsvFile csv = new CsvFile(@"C:\Users\KTarbet\Documents\project\Hydromet\ConfigurationData\su_cbtt.csv");

            for (int i = 0; i < csv.Rows.Count; i++)
            {
                var    row     = csv.Rows[i];
                string triplet = "16F02:ID:SNOW";
                triplet = row["nrcs code"].ToString();

                if (triplet.Trim() == "")
                {
                    continue;
                }
                triplet += ":" + row["state"].ToString();
                triplet += ":SNOW";

                string cbtt = row["cbtt"].ToString().ToLower();
                if (!sites.Exists(cbtt))
                {
                    sites.AddsitecatalogRow(cbtt, row["name"].ToString(), row["state"].ToString());
                }
                var monthlyFolder = db.GetOrCreateFolder("hydromet", cbtt, "monthly");
                var m             = new CalculationSeries(db);
                m.Name            = row["name"].ToString() + "  " + cbtt + "_su";
                m.Table.TableName = "monthly_" + cbtt + "_" + row["type"].ToString();
                m.TimeInterval    = TimeInterval.Monthly;
                m.Expression      = "DailySnowCourseToMonthly(\"" + triplet + "\")";
                var id = db.AddSeries(m, monthlyFolder);
                m.Properties.Set("program", "hydromet");
                m.Properties.Set("agency", "nrcs");
                m.Properties.Set("nrcs_type", "SNOW");
                m.Properties.Save();
            }
            svr.SaveTable(sc);
        }
示例#26
0
        /// <summary>
        /// Adds new Calculation Series
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void AddCalculationClick(object sender, EventArgs e)
        {
            CalculationSeries     s = new CalculationSeries(DB);
            CalculationProperties p = new CalculationProperties(s, new TimeSeriesTreeModel(DB), DB);

            if (p.ShowDialog() == DialogResult.OK)
            {
                DB.AddSeries(s, CurrentFolder);
                // tree refresh.. Add node.
                if (p.Calculate)
                {
                    s.Calculate();     // save again
                }
                // refresh.
                //DB.RefreshFolder(CurrentFolder);
                DatabaseChanged();;
            }
        }
示例#27
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();
        }
示例#28
0
        public void Constant()
        {
            _svr.CreateDataBase(_fn);

            CalculationSeries c = new CalculationSeries();

            c.TimeInterval = TimeInterval.Daily;
            c.Name         = "constant_series";
            c.Expression   = "15.0";
            _db.AddSeries(c);

            DateTime t1 = new DateTime(2014, 10, 1);
            DateTime t2 = new DateTime(2014, 10, 5);

            c.Calculate(t1, t2);

            Assert.AreEqual(5, c.Count);
            Assert.AreEqual(15, c[0].Value, 0.001);
        }
示例#29
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);
        }
示例#30
0
        private static void MonthlyCalculation(SpreadsheetRange ssRng, string cbtt, string pcode)
        {
            var db = Database.DB();

            CalculationSeries series = db.GetCalculationSeries(cbtt, pcode, TimeInterval.Monthly);

            if (series == null)
            {
                return;
            }

            var rng = ssRng.SelectedDateRange;

            series.Calculate(rng.DateTime1.FirstOfMonth(), rng.DateTime2.EndOfMonth());

            series.Name = "new";
            var old = ssRng.SelectionToMonthlySeries(false);

            old.Name = "old";

            var diff = series - old;

            diff.Name = "Difference";

            var list = new SeriesList();

            list.Add(series);
            list.Add(old);
            list.Add(diff);

            var dlg = new MonthlyCalculationPreview();

            dlg.DataSource = list.ToDataTable(true);


            if (dlg.ShowDialog() == DialogResult.OK)
            {
                // insert into range..
                ssRng.InsertSeriesValues(series, dlg.SelectedFlag);
            }
        }
示例#31
0
        /// <summary>
        /// Adds new Calculation Series
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        void AddCalculationClick(object sender, EventArgs e)
        {
            CalculationSeries s = new CalculationSeries(DB);
            CalculationProperties p = new CalculationProperties(s, new TimeSeriesTreeModel( DB), DB.GetUniqueUnits());

            if (p.ShowDialog() == DialogResult.OK)
            {
                DB.AddSeries(s, CurrentFolder);
                // tree refresh.. Add node.
                if( p.Calculate)
                        s.Calculate(); // save again
                // refresh.
                DB.RefreshFolder(CurrentFolder);

            }
        }