Пример #1
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);
            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);
        }
Пример #2
0
        public void UofIDisaggregation()
        {
            SQLiteServer       pDB = new SQLiteServer(path);
            TimeSeriesDatabase DB  = new TimeSeriesDatabase(pDB);

            // Reads input data required by the calculation
            Series daily = DB.GetSeriesFromName("SS_Day_Mean");

            daily.Read();// Source Station Daily data
            Series monthly = DB.GetSeriesFromName("TS_Mon_Mean");

            monthly.Read();// Target Station Monthly data
            Series known = DB.GetSeriesFromName("C#Disaggregated");

            known.Read(t1, t2);

            Series infilled = Reclamation.TimeSeries.Math.RMSEInterp(daily, monthly);
            var    s        = infilled.Subset(t1, t2);

            s.TimeInterval = TimeInterval.Daily;

            var diff = Math.Sum(known - s);

            Assert.IsTrue(System.Math.Abs(diff) < 0.01, "Error");
        }
Пример #3
0
        private void ReadFromPisces()
        {
            Logger.WriteLine("opening " + m_dbName);
            SQLiteServer       svr = new SQLiteServer(m_dbName);
            TimeSeriesDatabase db  = new TimeSeriesDatabase(svr);

            SeriesList list = new SeriesList();

            for (int i = 0; i < m_seriesName.Count; i++)
            {
                Logger.WriteLine("looking for series '" + m_seriesName[i] + "'");
                var s = db.GetSeriesFromName(m_seriesName[i]);
                if (s != null)
                {
                    s.Read(m_t1, m_t2);
                    list.Add(s);
                }
                else
                {
                    throw new Exception("unable to find series '" + m_seriesName[i] + "' in pisces database '" + m_dbName + "'");
                }
            }

            WriteToRiverwareFiles(list);
        }
Пример #4
0
 private void addPiscesDatabase_Click(object sender, EventArgs e)
 {
     try
     {
         Cursor = Cursors.WaitCursor;
         Performance    p  = new Performance();
         OpenFileDialog fd = new OpenFileDialog();
         fd.DefaultExt = "*.pdb";
         fd.Filter     = "Pisces database (*.pdb)|*.pdb";
         if (fd.ShowDialog() == DialogResult.OK)
         {
             SQLiteServer       svr = new SQLiteServer(fd.FileName);
             TimeSeriesDatabase db  = new TimeSeriesDatabase(svr, false);
             DB.InsertDatabase(CurrentFolder, db);
             DatabaseChanged();
         }
         UserPreference.Save("fileName", fd.FileName);
         p.Report("done reading " + fd.FileName);
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
     finally
     {
         Cursor = Cursors.Default;
     }
 }
Пример #5
0
        public void TestSQLite()
        {
            var fn = FileUtility.GetTempFileName(".pdb");

            SQLiteServer svr = new SQLiteServer(fn);
            var          db  = new TimeSeriesDatabase(svr, false);

            var sql = "insert into quality_limit values ('*_OB',120,-50,null); ";

            svr.RunSqlCommand(sql);

            var s = new Series();

            s.Table.TableName = "karl_ob";
            s.Add("1-1-2013", 100);
            s.Add("1-2-2013", -51);
            s.Add("1-3-2013", 100);
            s.Add("1-4-2013", 150);

            //db.TimeSeriesImporter.Process(s);
            TimeSeriesImporter ti = new TimeSeriesImporter(db);

            ti.Import(s);

            //db.ImportSeriesUsingTableName(s, true, setQualityFlags: true);
            s = db.GetSeriesFromTableName("karl_ob");
            s.Read();
            Console.WriteLine("has flags = " + s.HasFlags);
            s.WriteToConsole(true);

            Assert.AreEqual("", s["1-1-2013"].Flag);
            Assert.AreEqual("-", s["1-2-2013"].Flag);
            Assert.AreEqual("", s["1-3-2013"].Flag);
            Assert.AreEqual("+", s["1-4-2013"].Flag);
        }
Пример #6
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");
        }
Пример #7
0
        public void SiteInfoDesignTest()
        {
            var fn = FileUtility.GetTempFileName(".pdb");

            SQLiteServer svr         = new SQLiteServer(fn);
            var          db          = new TimeSeriesDatabase(svr, false);
            var          siteCatalog = db.GetSiteCatalog();

            siteCatalog.AddsitecatalogRow("BOII", "Boise station", "ID");
            svr.SaveTable(siteCatalog);
            var sc = db.GetSeriesCatalog();

            var s = new Series();

            s.SiteID = "BOII";
            sc.AddSeriesCatalogRow(s, sc.NextID(), db.GetRootObjects()[0].ID);
            sc.Save();

            var  si       = db.SiteInfo("BOII");
            bool idaho    = si.state == "ID"; //idaho
            var  timezone = si.timezone;

            TimeSeriesDatabaseDataSet.SeriesCatalogDataTable d = si.SeriesList();

            TimeSeriesDatabaseDataSet.SeriesCatalogRow row = d[0];
            row.Parameter = "Asce ET #5";

            d.Save();

            Console.WriteLine(si.SeriesList()[0].Parameter);

            //var goodStats = (si.Parameters()[0].statistic == "Avg");
        }
Пример #8
0
        public TestAlarms()
        {
            var fn = FileUtility.GetTempFileName(".pdb");

            this.svr = new SQLiteServer(fn);
            this.db  = new TimeSeriesDatabase(svr);
        }
Пример #9
0
        public TestDeleteDatabaseProperties()
        {
            string path;

            if (LinuxUtility.IsLinux())
            {
                path = "/tmp";
            }
            else
            {
                path = "C:\\Temp\\";
            }

            string fn = Path.Combine(path, "factory.pdb");

            FileUtility.GetTempFileNameInDirectory(path, ".pdb");

            SQLiteServer.CreateNewDatabase(fn);
            SQLiteServer svr = new SQLiteServer(fn);

            db = new TimeSeriesDatabase(svr, false);

            string dataPath = TestData.DataPath;
            Series s        = new Series("Glomma River");

            db.AddSeries(s);

            s = db.GetSeriesFromName("Glomma River");
            s.TimeSeriesDatabase = db;
            s.Properties.Set("elevation", " 690 m");
            s.Properties.Save();
        }
Пример #10
0
        public void TestRMSEMassBalance()
        {
            SQLiteServer       pDB = new SQLiteServer(path);
            TimeSeriesDatabase DB  = new TimeSeriesDatabase(pDB);

            // Reads input data required by the calculation
            Series daily   = DB.GetSeriesFromName("CHEI_QD");
            Series monthly = DB.GetSeriesFromName("CHEI_QM");

            daily.Read();
            monthly.Read();

            // disaggregated daily summed to monthly acre-feet
            Series infilled = Math.RMSEInterp(daily, monthly);
            Series infilledMonthlySumAcreFeet = Math.MonthlySum(infilled) * 1.98347;

            infilledMonthlySumAcreFeet.TimeInterval = TimeInterval.Monthly;

            // get equal time period for infilled data to original monthly data
            Series s = infilledMonthlySumAcreFeet.Subset(monthly.MinDateTime, monthly.MaxDateTime);

            var diff = System.Math.Abs(Math.Sum(monthly - s));

            Assert.IsTrue(diff < 0.01, "UofI RMSEInterp mass balance failed by: " + diff);
        }
Пример #11
0
        public void UofIInterpolation()
        {
            SQLiteServer       pDB = new SQLiteServer(path);
            TimeSeriesDatabase DB  = new TimeSeriesDatabase(pDB);

            // Reads input data required by the calculation
            Series daily   = DB.GetSeriesFromName("SS_Day_Mean");
            Series monthly = DB.GetSeriesFromName("TS_Mon_Mean");
            Series known   = DB.GetSeriesFromName("C#Disaggregated-Interpolated");

            daily.Read();
            monthly.Read();
            known.Read(t1, t2);

            Series infilled = Math.UofIStreamflowDisaggregation(daily, monthly);
            var    s        = infilled.Subset(t1, t2);
            double diff     = 0.0;

            for (int i = 0; i < known.Count; i++)
            {
                diff += (known[i].Value - s[i].Value);
            }

            Assert.AreEqual(0.00, diff, 0.01);
        }
Пример #12
0
        public void ManageSeriesCatalogDirectly()
        {
            Logger.EnableLogger();

            var filename = @"c:\temp\test.pdb";

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }

            Console.WriteLine(filename);
            var server = new SQLiteServer(filename);
            var db     = new TimeSeriesDatabase(server, false);

            var seriesCatalog = db.GetSeriesCatalog();
            var siteCatalog   = db.GetSiteCatalog();

            // create a folder for each month
            for (int i = 1; i <= 12; i++)
            {
                var t = new DateTime(2015, i, 1);
                seriesCatalog.GetOrCreateFolder("Months", t.ToString("MMMM"));
            }

            // Add USGS series (Boise River) to the January Folder
            Series s = new UsgsDailyValueSeries("13206000", UsgsDailyParameter.DailyMeanDischarge);

            s.SiteID = "usgs_13206000";
            var januaryIndex = seriesCatalog.GetOrCreateFolder("Months", "January");

            seriesCatalog.AddSeriesCatalogRow(s, seriesCatalog.NextID(), januaryIndex, "usgs_boiseriver_flow");

            // Add Hydromet series to the February Folder
            s        = new HydrometDailySeries("bhr", "af", HydrometHost.GreatPlains);
            s.Name   = "gphyd_bhr_af";
            s.SiteID = "gphyd_bhr";
            var feb = seriesCatalog.GetOrCreateFolder("Months", "February");

            seriesCatalog.AddSeriesCatalogRow(s, seriesCatalog.NextID(), feb, "usgs_boiseriver_flow");


            // Add Site information

            siteCatalog.AddsitecatalogRow("usgs_13206000", "BOISE RIVER AT GLENWOOD BRIDGE NR BOISE ID", "ID");
            siteCatalog.AddsitecatalogRow("gphyd_bhr", "Big Horn Reservoir", "MT");

            server.SaveTable(seriesCatalog);


            s = db.GetSeriesFromName("gphyd_bhr_af");
            s.Read();
            Console.WriteLine(s.Count);

            // Add CSV file


            db.Inventory();
        }
Пример #13
0
        public TestParserWithDatabase()
        {
            _fn = FileUtility.GetTempFileName(".pdb");
            SQLiteServer.CreateNewDatabase(_fn);
            _svr = new SQLiteServer(_fn);

            _db = new TimeSeriesDatabase(_svr, false);
        }
Пример #14
0
        private static TimeSeriesDatabase DB()
        {
            var                cs  = "Data Source=" + FileName + ";Read Only=True;";
            SQLiteServer       svr = new SQLiteServer(FileName);
            TimeSeriesDatabase db  = new TimeSeriesDatabase(svr);

            return(db);
        }
        static SQLiteServer GetServer(string filename)
        {
            string       connectionString = "Data Source=" + filename + ";Synchronous=Off;Pooling=True;Journal Mode=Off";
            SQLiteServer server           = new SQLiteServer(connectionString);

            server.CloseAllConnections();
            return(server);
        }
Пример #16
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;
        }
Пример #17
0
        public TestParserWithDatabase()
        {
            string fn = FileUtility.GetTempFileName(".pdb");

            SQLiteServer.CreateNewDatabase(fn);
            var svr = new SQLiteServer(fn);

            db = new TimeSeriesDatabase(svr, false);
        }
Пример #18
0
        public void AddSeriesDirectly()
        {
            Logger.EnableLogger();

            var filename = FileUtility.GetTempFileNameInDirectory(@"c:\temp\", ".pdb");

            if (File.Exists(filename))
            {
                File.Delete(filename);
            }

            Console.WriteLine(filename);
            var server = new SQLiteServer(filename);
            var db     = new TimeSeriesDatabase(server);

            // create a folder for each month
            for (int i = 1; i <= 12; i++)
            {
                var t = new DateTime(2015, i, 1);
                db.AddFolder("Months", t.ToString("MMMM"));
            }

            // Add USGS series (Boise River) to the January Folder
            Series s = new UsgsDailyValueSeries("13206000", UsgsDailyParameter.DailyMeanDischarge);

            s.SiteID = "13206000";
            var folder = db.GetOrCreateFolder("Months", "January");

            s.Read(DateTime.Parse("2015-01-01"), DateTime.Parse("2015-01-10"));
            db.AddSeries(s, folder);
            // Add Hydromet series to the February Folder
            s        = new HydrometDailySeries("bhr", "af", HydrometHost.GreatPlains);
            s.Name   = "gphyd_bhr_af";
            s.SiteID = "gphyd_bhr";
            var feb = db.GetOrCreateFolder("Months", "February");

            db.AddSeries(s, feb);


            // Add Csv file data to March Folder.
            s = new TextSeries(@"c:\temp\test_river.csv");
            s.Read();// read data.  Use Read(t1,t2) to limit by dates
            s.SiteID          = "test";
            s.Units           = "cfs";
            s.Table.TableName = "test_river"; // table name needs to be unique
            db.AddSeries(s, db.GetOrCreateFolder("Months", "March"));

            s = db.GetSeriesFromName("gphyd_bhr_af");
            s.Read();
            Console.WriteLine(s.Count);

            // Add CSV file


            db.Inventory();
        }
Пример #19
0
        public TestMidnightCalculation()
        {
            FileUtility.CleanTempPath();
            string fn = FileUtility.GetTempFileName(".pdb");

            Console.WriteLine(fn);
            var svr = new SQLiteServer(fn);

            db = new TimeSeriesDatabase(svr, Reclamation.TimeSeries.Parser.LookupOption.TableName, false);
        }
Пример #20
0
        public TestImportInstantDependency()
        {
            // FileUtility.CleanTempPath();
            string fn = FileUtility.GetTempFileName(".pdbaga");

            Console.WriteLine(fn);
            var svr = new SQLiteServer(fn);

            db = new TimeSeriesDatabase(svr, Reclamation.TimeSeries.Parser.LookupOption.TableName, false);
        }
Пример #21
0
        private static TimeSeriesDatabase GetNewDatabase()
        {
            var fn  = FileUtility.GetSimpleTempFileName(".pdb");
            var svr = new SQLiteServer(fn);
            var db  = new TimeSeriesDatabase(svr);

            Logger.EnableLogger();
            Console.WriteLine("Created Database: " + fn);
            return(db);
        }
Пример #22
0
        public void Draw()
        {
            var f   = @"C:\Users\KTarbet\Documents\project\Pisces\PiscesTestData\data\rating_tables\yak.pdb";
            var svr = new SQLiteServer(f);
            var db  = new TimeSeriesDatabase(svr);

            var m = db.Hydrography.GetMeasurements("YRWW");

            ratingTableZedGraph1.Draw(m.ToArray());
        }
Пример #23
0
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public bool Del(int id)
        {
            StringBuilder sql = new StringBuilder();

            sql.Append("delete from Dat_Info where id = @id ");
            SQLiteServer server = new SQLiteServer();

            SQLiteParameter[] parameters = { new SQLiteParameter("@Id", DbType.Int32, 4) };
            parameters[0].Value = id;
            return(server.ExecuteNonQuery(sql.ToString(), parameters) > 0);
        }
Пример #24
0
        public TestRecursive()
        {
            string fn = FileUtility.GetTempFileName(".pdb");

            Console.WriteLine(fn);
            var svr = new SQLiteServer(fn);

            db  = new TimeSeriesDatabase(svr, Reclamation.TimeSeries.Parser.LookupOption.TableName, false);
            dir = FileUtility.GetTempPath();
            CreateInputFiles();
        }
Пример #25
0
        public void TestSQLite()
        {
            var fn = FileUtility.GetTempFileName(".pdb");

            System.IO.File.Delete(fn);

            SQLiteServer svr = new SQLiteServer(fn);

            var db = new TimeSeriesDatabase(svr, false);

            BasicDatabaseTest(db);
        }
Пример #26
0
        /// <summary>
        /// 获得数据列表
        /// </summary>
        public DataTable GetAllType()
        {
            StringBuilder sql = new StringBuilder();

            sql.Append("select TypeId,Name Type ");
            sql.Append(" FROM Dat_Type order by Name");

            SQLiteParameter[] parameters = {};
            SQLiteServer      server     = new SQLiteServer();

            return(server.ExecuteQuery(sql.ToString(), parameters));
        }
Пример #27
0
        public static void CreatePiscesTree(string filename, PiscesFolder CurrentFolder, TimeSeries.TimeSeriesDatabase db)
        {
            var sqlite = new SQLiteServer(filename);

            /*insert into seriescatalog (id,parentid,name,isfolder) values (1,1,"database name",1);
             * insert into seriescatalog (id,parentid,name,units,tablename)
             *
             */
            Logger.WriteLine("reading " + filename, "ui");
            var variables = sqlite.Table("variables", "select a.var_name,b.value AS units from variables a "
                                         + "left join attributes b on a.var_name = b.var_name and b.attribute_name = 'units' order by a.var_name DESC");

            Logger.WriteLine("variable count = " + variables.Rows.Count, "ui");
            var sc = db.GetSeriesCatalog();

            string rootFolderName = Path.GetFileNameWithoutExtension(filename);
            var    rootID         = sc.AddFolder(rootFolderName);

            var prev_FolderName = rootFolderName;
            int folderID        = rootID;
            int id = sc.NextID();
            var cs = ConnectionStringUtility.MakeFileNameRelative("FileName=" + filename + ";", db.DataSource);

            foreach (DataRow row in variables.Rows)
            {
                var var_name = row["var_name"].ToString();

                if (var_name.IndexOf("_") > 0)
                {
                    var tokens = var_name.Split('_');
                    if (tokens[0] != prev_FolderName)
                    {
                        folderID = sc.AddFolder(tokens[0], rootID);
                        id++;
                        prev_FolderName = tokens[0];
                    }
                }

                var newRow = sc.NewSeriesCatalogRow();
                newRow.id               = id++;
                newRow.ParentID         = folderID;
                newRow.Provider         = "SQLiteSeries";
                newRow.ConnectionString = cs;
                newRow.IsFolder         = false;
                newRow.TableName        = var_name;
                newRow.Units            = row["units"].ToString();
                newRow.Name             = var_name;
                newRow.Parameter        = row["var_name"].ToString();
                sc.AddSeriesCatalogRow(newRow);
            }

            db.Server.SaveTable(sc);
        }
        /// <summary>
        /// Organizing VIC climate unregulated data from one large  VIC Pisces database
        /// into 20 Monthly MODSIM compatible *.PDB.
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            if (args.Length != 2)
            {
                PrintUsage();
                return;
            }

            var fileNamePdb = args[0];

            if (!File.Exists(fileNamePdb) || !fileNamePdb.EndsWith(".pdb"))
            {
                PrintUsage();
                return;
            }

            var fileNameExcel = args[1];

            if (!File.Exists(fileNameExcel) || (!fileNameExcel.EndsWith(".xls") &&
                                                !fileNameExcel.EndsWith(".xlsx")))
            {
                PrintUsage();
                return;
            }

            //inputs should be good, get to work
            SQLiteServer svrVic = new SQLiteServer(fileNamePdb);

            Console.WriteLine("opening " + fileNamePdb);
            TimeSeriesDatabase dbVic = new TimeSeriesDatabase(svrVic);

            var xls = new NpoiExcel(fileNameExcel);

            Console.WriteLine("reading " + fileNameExcel);
            var correlation = xls.ReadDataTable("Locals");
            var forecasts   = xls.ReadDataTable("Forecasts");

            var period   = new string[] { "2020", "2040", "2060", "2080" };
            var scenario = new string[] { "Median", "MoreWarmingDry", "MoreWarmingWet", "LessWarmingDry", "LessWarmingWet" };

            CreatePiscesDatabaseWithModsimNodeNames(dbVic, correlation, "", "Baseline");
            AddForecastsToPiscesDatabase(dbVic, forecasts, "", "Baseline");
            for (int i = 0; i < period.Length; i++)
            {
                for (int j = 0; j < scenario.Length; j++)
                {
                    CreatePiscesDatabaseWithModsimNodeNames(dbVic, correlation, period[i],
                                                            scenario[j]);
                    AddForecastsToPiscesDatabase(dbVic, forecasts, period[i], scenario[j]);
                }
            }
        }
Пример #29
0
        static void Main(string[] args)
        {
            var fn = @"C:\temp\pn.pdb";
            //var svr_vm = MySqlServer.GetMySqlServer("vm", "timeseries");
            var svr_vm = new SQLiteServer(fn);

            if (svr_vm.TableExists("seriescatalog"))
            {
                svr_vm.RunSqlCommand("truncate seriescatalog");
            }
            if (svr_vm.TableExists("sitescatalog"))
            {
                svr_vm.RunSqlCommand("truncate sitecatalog");
            }

            var db_vm    = new TimeSeriesDatabase(svr_vm, Reclamation.TimeSeries.Parser.LookupOption.TableName);
            var sites_vm = db_vm.GetSiteCatalog();

            var svr   = PostgreSQL.GetPostgresServer("timeseries", "lrgs1");
            var db    = new TimeSeriesDatabase(svr, Reclamation.TimeSeries.Parser.LookupOption.TableName);
            var sites = db.GetSiteCatalog();

            string program = "agrimet";
            var    sc      = db.GetSeriesCatalog("timeinterval='Daily'", "program:" + program);
            var    sc_vm   = db_vm.GetSeriesCatalog();

            LoadDailyUsbrCatalog(sc, sc_vm, program);
            //db_vm.Server.SaveTable(sc_vm);

            LoadUpperSnakeHydromet(sc_vm);

            db_vm.Server.SaveTable(sc_vm);
            // install all sites that are referenced in series catalog

            var tmp = db_vm.Server.Table("tmp", "select distinct siteid from seriescatalog");

            for (int i = 0; i < tmp.Rows.Count; i++)
            {
                string siteid = tmp.Rows[i]["siteid"].ToString();
                var    rows   = sites.Select("siteid='" + siteid + "'");
                if (rows.Length > 0)
                {
                    var newRow = sites_vm.NewsitecatalogRow();
                    newRow.ItemArray = rows[0].ItemArray;
                    sites_vm.Rows.Add(newRow);
                }
            }

            db_vm.Server.SaveTable(sites_vm);
        }
Пример #30
0
        public void TestMergeMassBalance()
        {
            SQLiteServer       pDB = new SQLiteServer(path);
            TimeSeriesDatabase DB  = new TimeSeriesDatabase(pDB, false);

            // Reads input data required by the calculation
            Series daily   = DB.GetSeriesFromName("CHEI_QD");
            Series monthly = DB.GetSeriesFromName("CHEI_QM");

            daily.Read();
            monthly.Read();

            // disaggregate and merge
            Series infilled = Disaggregation.RMSEInterp(daily, monthly);

            Disaggregation.MergeCheckMassBalance(daily, infilled);

            // generate series of monthly volumes only for months with a computed value,
            // these will be compared to the observed monthly
            Series partialMonthlyEstimated = new Series();

            for (int i = 0; i < infilled.Count; i++)
            {
                Point p = infilled[i];

                // Gets the data for the month
                int      numDays = DateTime.DaysInMonth(p.DateTime.Year, p.DateTime.Month);
                DateTime t1      = new DateTime(p.DateTime.Year, p.DateTime.Month, 1);
                DateTime t2      = new DateTime(p.DateTime.Year, p.DateTime.Month, numDays);

                if (p.Flag == PointFlag.Computed && partialMonthlyEstimated.IndexOf(t1) < 0)
                {
                    partialMonthlyEstimated.Add(t1, Math.Sum(infilled.Subset(t1, t2)) * 1.98347);
                }
            }

            // check observed against infilled for months where data was infilled
            double diff = 0.0;

            for (int i = 0; i < partialMonthlyEstimated.Count; i++)
            {
                DateTime estDate = partialMonthlyEstimated[i].DateTime;
                if (monthly.IndexOf(estDate) > 0)
                {
                    diff += (monthly[estDate].Value - partialMonthlyEstimated[estDate].Value);
                }
            }

            Assert.IsTrue(diff < 0.01, "UofI merge mass balance failed by: " + diff);
        }