コード例 #1
0
ファイル: HDBSeries.cs プロジェクト: usbr/Pisces
 public HDBSeries(TimeSeriesDatabase db, TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
     : base(db, sr)
 {
     string str = ConnectionStringUtility.GetToken(ConnectionString, "server", "");
     m_server = (HDBServer)Enum.Parse(typeof(HDBServer), str);
     m_sdi = ConnectionStringUtility.GetIntFromConnectionString(ConnectionString, "sdi");
 }
コード例 #2
0
ファイル: AddSite.cs プロジェクト: usbr/Pisces
        public AddSite(TimeSeriesDatabase db)
        {
            InitializeComponent();
            this.m_db = db;

            Setup();
        }
コード例 #3
0
ファイル: UsgsRealTimeSeries.cs プロジェクト: usbr/Pisces
 public UsgsRealTimeSeries(TimeSeriesDatabase db,Reclamation.TimeSeries.TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
     : base(db,sr)
 {
     var p = ConnectionStringUtility.GetToken(ConnectionString,"UsgsParameter","");
     m_parameter = (UsgsRealTimeParameter)Enum.Parse(typeof(UsgsRealTimeParameter), p);
     m_site_no = ConnectionStringToken( "site_no");
 }
コード例 #4
0
ファイル: ScenarioSelector.cs プロジェクト: usbr/Pisces
 public ScenarioSelector(TimeSeriesDatabase db)
 {
     InitializeComponent();
     m_db = db;
     ReloadGrid();
     LoadSeriesList();
     LoadMonthList();
     SetSortMetricColumnVisibility(tabControl1);
 }
コード例 #5
0
ファイル: ScenarioDataSet.cs プロジェクト: usbr/Pisces
        public void Import(string filename, TimeSeriesDatabase db)
        {
            xls = new NpoiExcel(filename);
             m_db = db;
            var siteMapping = xls.ReadDataTable("siteMapping",true,true);
            Merge(siteMapping,false, MissingSchemaAction.Ignore);
            var scenarioMapping = xls.ReadDataTable("scenarioMapping",true,true);
            Merge(scenarioMapping, false, MissingSchemaAction.Ignore);

            ImportToPisces();
        }
コード例 #6
0
        public ScenarioSelectorCCProjectionsForm(TimeSeriesDatabase db)
        {
            InitializeComponent();
            m_db = db;
            scenarioCCProjections1 = new ScenarioSelectorCCProjections(m_db);
            scenarioCCProjections1.Parent = tabPageProjections;
            scenarioCCProjections1.Dock = DockStyle.Fill;

            scenarioCCReference1 = new ScenarioSelectorCCProjections();
            scenarioCCReference1.Parent = tabPageReference;
            scenarioCCReference1.Dock = DockStyle.Fill;
        }
コード例 #7
0
ファイル: BasicMeasurement.cs プロジェクト: usbr/Pisces
        public BasicMeasurement(TimeSeriesDatabase db, 
            TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
            : base(sr)
        {
            this.m_db = db;
            this.m_sr = sr;
            int id = Convert.ToInt32(ConnectionStringToken("id", "-1"));
            Console.WriteLine("ctor BasicMeasurement  id ="+id);
            var tbl = m_db.Hydrography.GetMeasurements();

            m_measurementRow = tbl.FindByid(id);
        }
コード例 #8
0
ファイル: ScenarioDataSet.cs プロジェクト: usbr/Pisces
        private void AddSeries(TimeSeriesDatabase db, string scenarioName, string scenarioNumber)
        {
            DataTable scenarioSheet = xls.ReadDataTable(scenarioNumber,true,true);

            int count = 0;
            foreach (DataRow row in scenarioSheet.Rows)
            {
                var externalSiteID = row["ExternalSiteID"].ToString();
                var internalSiteID = LookupInternalSiteID(externalSiteID);
                string basin = LookupBasin(externalSiteID);
                var parent = db.GetOrCreateFolder(basin);
                string filename = row["FilePath"].ToString();
                if( !File.Exists(filename))
                {
                    if( filename!= "")
                       errors.Add("Missing File: " + filename);
                    continue;
                }

                Series s = ReadExternalSeriesData(scenarioName, filename, externalSiteID);
                s.Name = internalSiteID;
                if( row.Table.Columns.IndexOf("units")>=0)
                {
                    s.Units = row["units"].ToString();
                }
                s.ConnectionString = "ScenarioName=" + scenarioName;
                var id =-1;
                if (db.GetSeriesFromName(internalSiteID) == null)
                {
                    id = db.AddSeries(s, parent);
                    var sc = db.GetSeriesCatalog("id =" + id);
                  // alter entry in database to remove scenario postfix from table name
                    sc.Rows[0]["tablename"] = internalSiteID.ToLower();

                    db.Server.SaveTable(sc);
                }
                else
                { // if this series already exists (for another scenario)
                  // only save the TableData
                    s.Table.Columns[0].ColumnName = "datetime";
                    s.Table.Columns[1].ColumnName = "value";
                    db.CreateSeriesTable(s.Table.TableName, false);
                    db.Server.InsertTable(s.Table);
                }

                if (OnProgress != null)
                    OnProgress(this,
                        new ProgressEventArgs(
                         "saving " + internalSiteID + " " + scenarioName, count / scenarioSheet.Rows.Count * 100));
                count++;
            }
        }
コード例 #9
0
ファイル: SiteInfo.cs プロジェクト: usbr/Pisces
        public SiteInfo(TimeSeriesDatabase db, string siteID)
        {
            m_db = db;
            m_siteID = siteID;

            var a = db.GetSiteCatalog("siteid = '" + m_siteID + "'");
            if (a.Rows.Count == 0)
                m_siteRow = a.NewsitecatalogRow();
            else
            {
                m_siteRow = a[0];
            }
        }
コード例 #10
0
ファイル: SeriesProperties.cs プロジェクト: usbr/Pisces
 public SeriesProperties(Series  s, TimeSeriesDatabase db)
 {
     m_db = db;
     m_quality = new Quality(m_db);
     string[] DBunits = db.GetUniqueUnits();
     if (s == null)
     {
         throw new ArgumentNullException();
     }
     m_series = s;
     InitializeComponent();
     this.LoadList(comboBoxUnits, DBunits);
     ReadSeriesProperties();
     this.textBoxExpression.Enabled =  s is CalculationSeries;
     buttonBuildExpression.Enabled = s is CalculationSeries;
     LoadQualityLimits();
 }
コード例 #11
0
ファイル: TestScenarios.cs プロジェクト: usbr/Pisces
        public void ReadExcelScenario()
        {
            string fn = Path.Combine(TestData.DataPath, "Scenarios", "InputScenarioConfig.xlsx");

            var ds = new ScenarioManagement.ScenarioDataSet();
            var fn1 = FileUtility.GetTempFileName(".pdb");

            SQLiteServer svr = new SQLiteServer(fn1);
            var db = new TimeSeriesDatabase(svr,false);
            ds.Import(fn, db);

            Assert.IsTrue(ds.ScenarioMapping.Count > 0);

            // create Scenarios

            svr.CloseAllConnections();
            File.Delete(fn1);
        }
コード例 #12
0
ファイル: RBMSTextFile.cs プロジェクト: usbr/Pisces
 public static void ImportDirectory(string path,
     TimeSeriesDatabase db)
 {
     string[] files = FileUtility.GetFilesRecursive(path);
     for (int i = 0; i < files.Length; i++)
     {
         try
         {
             Logger.WriteLine("Parsing file " + files[i]);
             ImportFile(files[i], db,true);
         }
         catch (Exception e)
         {
             string msg = "Error reading " + files[i];
             Logger.WriteLine(msg + e.Message, "ui");
             // System.Windows.Forms.MessageBox.Show(msg);
         }
     }
     Logger.WriteLine("done importing directory ");
 }
コード例 #13
0
ファイル: SiteMetaData.cs プロジェクト: usbr/Pisces
        public SiteMetaData(TimeSeriesDatabase db)
        {
            m_db = db;
            InitializeComponent();
            comboBox1.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
            comboBox1.AutoCompleteSource = AutoCompleteSource.ListItems;
            m_props = db.GetSiteProperties();

            m_sites = db.GetSiteCatalog();

            var temp = m_sites.Copy(); // copy for the combo box (selection only)
            for (int i = 0; i < temp.Rows.Count; i++)
            {
                var r = temp.Rows[i];
                r["description"] = r["siteid"].ToString().ToUpper() + " " + r["description"].ToString();
            }

            comboBox1.DataSource = temp;
            comboBox1.ValueMember = "description";
            comboBox1.DisplayMember = "description";
        }
コード例 #14
0
 public HydrometInstantSeries(TimeSeriesDatabase db, TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
     : base(db, sr)
 {
     HydrometInfoUtility.ParseConnectionString(ConnectionString, out server, out cbtt, out pcode);
 }
コード例 #15
0
ファイル: HydrossSeries.cs プロジェクト: usbr/Pisces
 public HydrossSeries(TimeSeriesDatabase db, Reclamation.TimeSeries.TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
     : base(db,sr)
 {
     ExternalDataSource = true;
     Init(db);
 }
コード例 #16
0
ファイル: UsaceSeries.cs プロジェクト: usbr/Pisces
        string m_path; //   //CHJ/YT//IR-MONTH/IRVZZBZD/

        #endregion Fields

        #region Constructors

        public UsaceSeries(TimeSeriesDatabase db, TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
            : base(db, sr)
        {
            m_path = ConnectionStringUtility.GetToken(sr.ConnectionString, "DssPath", "");
            ExternalDataSource = true;
        }
コード例 #17
0
ファイル: PiscesForm.Add.cs プロジェクト: usbr/Pisces
 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;
     }
 }
コード例 #18
0
ファイル: SpreadsheetGearSeries.cs プロジェクト: usbr/Pisces
 public SpreadsheetGearSeries(TimeSeriesDatabase db, Reclamation.TimeSeries.TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
     : base(db, sr)
 {
 }
コード例 #19
0
        static void Main(string[] args)
        {
            if (args.Length < 4 || args.Length > 5)
            {
                Console.WriteLine("Usage:");
                Console.WriteLine("30_year_avg creates 30 year average pisces database");
                Console.WriteLine("Usage:  30_year_avg  config.csv group|all  output.db boise|yakima [hmet.txt]");
                Console.WriteLine("config.csv example below:\n");
                Console.WriteLine("group,station,daily_pcode,title,ylabel");
                Console.WriteLine("Boise Payette,plei,qd,\"Payette River near Letha, ID\",Discharge - cfs");
                Console.WriteLine(" Boise Payette,emm,qd,\"Payette River near Emmett, ID\",Discharge - cfs");
                Console.WriteLine("\ngroup is used to filter specific parts of config file.  enter all to disable filtering");
                Console.WriteLine("output.db is the name of a pisces database that will be created.");
                Console.WriteLine("boise|yakima specifiy which hydromet server to read data from");
                Console.WriteLine("hmet.txt is an optional output with hydromet daily format");
                return;
            }

            string fn = args[2];

            if (File.Exists(fn))
            {
                Console.WriteLine("Deleting existing database ");
                File.Delete(fn);
            }
            var svr = new SQLiteServer(fn);
            var db  = new TimeSeriesDatabase(svr);

            HydrometHost host = HydrometHost.PN;

            if (args[3] == "yakima")
            {
                host = HydrometHost.Yakima;
            }


            DataTable config = new CsvFile(args[0]);

            if (args[1] != "all")
            {      // filter out specific group
                config = DataTableUtility.Select(config, "group = '" + args[1] + "'", "");
            }

            if (args.Length == 5 && File.Exists(args[4]))
            {
                Console.WriteLine("deleting " + args[4]);
                File.Delete(args[4]);
            }

            var prevFolderName = Guid.NewGuid().ToString();

            PiscesFolder folder = null;

            for (int x = 0; x < config.Rows.Count; x++)
            {
                var    row        = config.Rows[x];
                string folderName = row["group"].ToString();

                if (prevFolderName != folderName)
                {
                    prevFolderName = folderName;
                    folder         = db.AddFolder(folderName);
                }
                string CBTT  = row["station"].ToString();
                string Pcode = row["daily_pcode"].ToString();
                Console.WriteLine(CBTT + " " + Pcode);
                Series s = new HydrometDailySeries(CBTT, Pcode, host);
                // Data ranges collected
                var t1 = new DateTime(1980, 10, 1);
                var t2 = new DateTime(2010, 9, 30);
                s.Read(t1, t2);
                var s7100 = LabelAndSave30Year(db, 7100, CBTT, Pcode, folder, host);
                var s8110 = LabelAndSave30Year(db, 8110, CBTT, Pcode, folder, host);
                var s6190 = LabelAndSave30Year(db, 6190, CBTT, Pcode, folder, host);

                //Creates thirty-year average from raw data and adds to database
                var avg = Reclamation.TimeSeries.Math.MultiYearDailyAverage(s, 10);
                avg.Name            = "avg 1981-2010 " + CBTT + " " + Pcode;
                avg.Table.TableName = "avg_1981_2010" + CBTT + "" + Pcode;
                db.AddSeries(avg, folder);
                avg = Reclamation.TimeSeries.Math.ShiftToYear(avg, 8109);
                if (args.Length == 5)
                {
                    HydrometDailySeries.WriteToArcImportFile(avg, CBTT, Pcode, args[4], true);
                }
            }
        }
コード例 #20
0
ファイル: EquationTemplates.cs プロジェクト: woohn/Pisces
 public EquationTemplates(TimeSeriesDatabase db, string outputFileName)
 {
     m_db    = db;
     m_sites = m_db.GetSiteCatalog();
     sw      = new StreamWriter(outputFileName);
 }
コード例 #21
0
ファイル: SiteCsvTable.cs プロジェクト: woohn/Pisces
 public SiteCsvTable(TimeSeriesDatabase db)
 {
     this.db = db;
 }
コード例 #22
0
 public DatabaseVariableResolver(TimeSeriesDatabase db, CalculationSeries s)
 {
     this.db = db;
     this.s  = s;
 }
コード例 #23
0
 public ProfileDesigner(TimeSeriesDatabase db)
 {
     InitializeComponent();
     wDB  = new WaterProfileDatabase(db);
     m_db = db;
 }
コード例 #24
0
        //static string ManualInstType = "M - manually read static water level";

        public static void ImportFile(string filename, TimeSeriesDatabase db, bool manual)
        {
            if (!manual)
            {
                throw new NotImplementedException("this method is for importing manually entered data");
            }
            DataTable rbmsDataTable = ReadRBMSFile(filename);

            if (rbmsDataTable.Rows.Count == 0)
            {
                Logger.WriteLine(filename + " has no valid data.  It will be skipped");
                return;
            }

            string sql = @"     select a.id,a.tablename,a.name, b.value as InstType , c.value as DrillHole, d.value as riser 
   from seriescatalog a   
   left join seriesproperties b on ( b.seriesid=a.id and b.name='InstType')
   left join seriesproperties c on ( c.seriesid=a.id and c.name='DrillHole')
   left join seriesproperties d on ( d.seriesid=a.id and d.name='Riser')

where b.value = 'M - manually read static water level' ";
            var    sc  = db.Server.Table("view_seriescatalog", sql);

            db.SuspendTreeUpdates();
            int skipcount = 0;
            int addCount  = 0;
            var tableList = new List <string>();

            for (int i = 0; i < rbmsDataTable.Rows.Count; i++)
            {
                string drillHole = rbmsDataTable.Rows[i]["DH"].ToString();
                string riser     = rbmsDataTable.Rows[i]["Riser"].ToString();
                var    strDate   = rbmsDataTable.Rows[i]["DateTime"].ToString();
                var    t         = DateTime.Now.Date;
                var    filter    = "DrillHole ='" + drillHole + "'" + " and  " + " riser = '" + riser + "'";

                if (!DateTime.TryParse(strDate, out t))
                {
                    Logger.WriteLine("Error: could not parse " + strDate);
                    Logger.WriteLine(filter);
                    continue;
                }

                var strVal = rbmsDataTable.Rows[i]["Measured"].ToString();


                double val = -999;
                if (!double.TryParse(strVal, out val))
                {
                    Logger.WriteLine("Error: could not parse " + strVal);
                    Logger.WriteLine(filter);
                    continue;
                }

                var rows = sc.Select(filter);

                if (rows.Length != 1)
                {
                    Logger.WriteLine("Warning:  Matched " + rows.Length + " records skipping: " + filter);
                    skipcount++;
                    continue;
                }
                //int id = Convert.ToInt32(sc.Rows[0]["id"]);
                int id = Convert.ToInt32(rows[0]["id"]);
                var s  = db.GetSeries(id);
                if (!tableList.Contains(s.Table.TableName))
                {
                    tableList.Add(s.Table.TableName);
                }
                string fn = Path.GetFileName(filename);
                if (fn.Length > 50)
                {
                    fn = fn.Substring(0, 50);
                }
                s.Add(t, val, fn);
                db.SaveTimeSeriesTable(id, s, DatabaseSaveOptions.UpdateExisting);
                addCount++;
            }
            db.ResumeTreeUpdates();
            Logger.WriteLine("finished importing " + filename);
            Logger.WriteLine("skipped " + skipcount + " records.");
            Logger.WriteLine("added/updated " + addCount + " records.");
            Logger.WriteLine(tableList.Count + " tables were modified");
            for (int i = 0; i < tableList.Count; i++)
            {
                Console.WriteLine(tableList[i]);
            }
        }
コード例 #25
0
 public static void ImportFile(string filename, TimeSeriesDatabase db)
 {
     ImportFile(filename, db, false);
 }
コード例 #26
0
 public CsvTimeSeriesWriter(TimeSeriesDatabase db)
 {
     this.db = db;
 }
コード例 #27
0
        /// <summary>
        /// Imports all files recursively
        /// </summary>
        /// <param name="path"></param>
        /// <param name="fileFilter">filter such as *.csv</param>
        public static void Import(TimeSeriesDatabase db, string path, string fileFilter, string scenarioRegex)
        {
            DirectoryScanner ds = new DirectoryScanner(path, fileFilter, scenarioRegex);
            var scenarios       = db.GetScenarios();

            int scenarioNumber = 1;

            foreach (var scenario in ds.UniqueScenarios())
            {
                scenarios.AddScenarioRow(scenario, false, scenarioNumber.ToString(), 0);
            }

            db.Server.SaveTable(scenarios);
            List <string> errorList = new List <string>();

            for (int i = 0; i < ds.Files.Length; i++)
            {
                try
                {
                    TextSeries s = new TextSeries(ds.Files[i]);
                    s.Read();

                    if (scenarioRegex != "" && ds.Scenario[i] != "")
                    {
                        s.Name             = ds.Siteid[i];
                        s.ConnectionString = "ScenarioName=" + ds.Scenario[i];
                        s.SiteID           = ds.Siteid[i];
                        s.Table.TableName  = (ds.Siteid[i] + "_" + ds.Scenario[i]).ToLower();
                    }
                    else
                    {
                        var name = TimeSeriesDatabase.SafeTableName(Path.GetFileNameWithoutExtension(ds.Files[i]));
                        s.Name            = name;
                        s.SiteID          = name;
                        s.Table.TableName = name;
                        ds.Siteid[i]      = name;
                    }

                    if (db.GetSeriesFromName(ds.Siteid[i]) == null)
                    {
                        int id = db.AddSeries(s);
                        var sc = db.GetSeriesCatalog("id =" + id);
                        // alter entry in database to remove scenario postfix from table name
                        sc.Rows[0]["tablename"] = ds.Siteid[i];
                        db.Server.SaveTable(sc);
                    }
                    else
                    { // if this series already exists (for another scenario)
                        // only save the TableData
                        s.Table.Columns[0].ColumnName = "datetime";
                        s.Table.Columns[1].ColumnName = "value";
                        db.CreateSeriesTable(s.Table.TableName, false);
                        db.Server.InsertTable(s.Table);
                    }

                    Logger.WriteLine("importing [" + i + "] --> " + ds.Files[i], "ui");
                }
                catch (Exception ex)
                {
                    errorList.Add(ex.Message);
                    Logger.WriteLine(ex.Message);
                }
            }


            if (errorList.Count > 0)
            {
                throw new Exception(String.Join("\n", errorList.ToArray()));
            }
        }
コード例 #28
0
ファイル: ScenarioDataSet.cs プロジェクト: ruo2012/Pisces
 /// <summary>
 /// Exports scenarios. One pisces database per scenario.
 ///
 /// </summary>
 /// <param name="excelFileName"></param>
 /// <param name="DB"></param>
 public void Export(string excelFileName, TimeSeriesDatabase DB)
 {
 }
コード例 #29
0
 public UsgsGroundWaterLevelSeries(TimeSeriesDatabase db, Reclamation.TimeSeries.TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
     : base(db, sr)
 {
     m_site_no = ConnectionStringUtility.GetToken(ConnectionString, "site_no", "");
 }
コード例 #30
0
ファイル: Program.cs プロジェクト: jmptrader/Pisces
        /// <summary>
        /// Examples:
        ///
        /// --cgi=sites --propertyFilter=program:agrimet --json_required_properties=json_extra
        /// </summary>
        /// <param name="args"></param>
        public static void Main(string[] args)
        {
            string propertyFilter      = "";
            var    cgi                 = "";
            var    json_property_stubs = "";
            var    payload             = "";
            var    p       = new OptionSet();
            var    format  = "json";
            var    verbose = false;

            p.Add("server");
            p.Add("cgi=", "required cgi to execute cgi=sites or cgi=series", x => cgi = x);
            p.Add("json_property_stubs=", "comma separated list of properties (i.e. 'region,url,') to created empty stubs if neeed ",
                  x => json_property_stubs = x);
            p.Add("propertyFilter=", "property filter like program:agrimet", x => propertyFilter = x);
            p.Add("payload=", "test query data for a CGI", x => payload = x);
            p.Add("format=", "format json(default) | csv ", x => format = x);
            p.Add("verbose", " get more details", x => verbose          = true);
            try
            {
                p.Parse(args);
            }
            catch (OptionException e)
            {
                Console.WriteLine(e.Message);
            }
            if (cgi == "")
            {
                ShowHelp(p);
                return;
            }

            if (verbose)
            {
                Logger.EnableLogger();
                Logger.WriteLine("verbose =true");
            }

            var db = TimeSeriesDatabase.InitDatabase(new Arguments(args));

            if (cgi == "inventory")
            {
                Console.Write("Content-Type: text/html\n\n");
                db.Inventory();
            }
            else
            if (cgi == "sites")
            {
                if (format == "json")
                {
                    JSONSites d = new JSONSites(db);
                    d.Execute(json_property_stubs.Split(','), propertyFilter);
                }
                else if (format == "csv")
                {
                    CsvTable c = new CsvTable(db);
                    c.Execute(propertyFilter);
                }
            }
            else
            if (cgi == "instant")
            {
                CsvTimeSeriesWriter c = new CsvTimeSeriesWriter(db);
                c.Run(TimeInterval.Hourly, payload);
            }
            else
            if (cgi == "site")
            {
                SiteInfo si = new SiteInfo(db);
                si.Run(payload);
            }
            else
            if (cgi == "test-perf-large")
            {
                TestCGI c = new TestCGI();
                c.PerfTestLarge();
            }
            else
            if (cgi == "test-perf-small")
            {
                TestCGI c = new TestCGI();
                c.PerfTestSmall();
            }
            else
            if (cgi == "dump")
            {
                TestCGI c = new TestCGI();
                c.DumpTest();
            }
            else
            {
                Console.WriteLine("invalid cgi: " + cgi);
            }
        }
コード例 #31
0
 public ScenarioSelectorCCProjections(TimeSeriesDatabase db)
 {
     InitializeComponent();
     SetupOperationsModelSelector();
     m_db = db;
 }
コード例 #32
0
ファイル: SiteInfoCGI.cs プロジェクト: woohn/Pisces
 public SiteInfoCGI(TimeSeriesDatabase db)
 {
     this.db = db;
 }
コード例 #33
0
 public PiscesCommandLine(TimeSeriesDatabase db)
 {
     m_db = db;
 }
コード例 #34
0
 public SpreadsheetGearSeries(TimeSeriesDatabase db, Reclamation.TimeSeries.TimeSeriesDatabaseDataSet.SeriesCatalogRow sr) : base(db, sr)
 {
 }
コード例 #35
0
 public WaterProfileDatabase(TimeSeriesDatabase db)
 {
     m_db = db;
 }
コード例 #36
0
ファイル: RBMSTextFile.cs プロジェクト: usbr/Pisces
 public static void ImportFile(string filename, TimeSeriesDatabase db)
 {
     ImportFile(filename, db, false);
 }
コード例 #37
0
ファイル: IdwrMonthy.cs プロジェクト: usbr/Pisces
 public static void Import(Reclamation.Core.Arguments args, TimeSeriesDatabase dbase)
 {
     //// Pisces /ImportIdwr /Data:data.dat /Index:index.dat /Filename:SnakeMonthly.sdf
     if (!args.Contains("Data") || !args.Contains("Filename"))
     {
         Console.WriteLine("Usage: Pisces /ImportIdwr /Data:datafile /Filename:databasename");
         Console.WriteLine("   or: Pisces /ImportIdwr /Data:datafile /Index:indexfile /Filename:databasename");
         return;
     }
     string dbname = args["Filename"];
     IdwrMonthy id;
     db = dbase;
     if (args.Count == 3)
     {
             id = new IdwrMonthy(args["Data"], "noIndex" , dbname);
     }
     else
     {
         if (args.Contains("Index"))
         {
             if (args[2] == "ValidityCheck")
                 id = new IdwrMonthy(args["Data"], "ValidityCheck", dbname);
             else
                 id = new IdwrMonthy(args["Data"], args["Index"], dbname);
         }
         else
             id = new IdwrMonthy(args["Data"], "noIndex", dbname);
     }
     id.Import();
 }
コード例 #38
0
ファイル: ScenarioDataSet.cs プロジェクト: usbr/Pisces
 /// <summary>
 /// Exports scenarios. One pisces database per scenario.
 /// 
 /// </summary>
 /// <param name="excelFileName"></param>
 /// <param name="DB"></param>
 public void Export(string excelFileName, TimeSeriesDatabase DB)
 {
 }
コード例 #39
0
ファイル: HydrossSeries.cs プロジェクト: usbr/Pisces
 private void Init(TimeSeriesDatabase db)
 {
     fileName = ConnectionStringUtility.GetFileName(ConnectionString, db.DataSource);
     ScenarioName = Path.GetFileNameWithoutExtension(fileName);
     stationID = ConnectionStringUtility.GetToken(ConnectionString, "stationID", "");
     varcode = ConnectionStringUtility.GetToken(ConnectionString, "varcode", "");
     extra1 = ConnectionStringUtility.GetToken(ConnectionString, "extra1", "");
     extra2 = ConnectionStringUtility.GetToken(ConnectionString, "extra2", "");
 }
コード例 #40
0
ファイル: HydrometInfoUtility.cs プロジェクト: dloney/Pisces
        /// <summary>
        /// Expand simplified query
        /// BOII MX,MN,MM
        /// is translated to
        /// BOII MX, BOII MN, BOII MM
        ///
        /// GREY
        /// is translated to
        /// GREY GH, GREY Q
        /// </summary>
        /// <param name="query"></param>
        /// <returns></returns>
        public static string ExpandQuery(string query, TimeInterval interval, TimeSeriesDatabase db = null)
        {
            var rval = new List <string>();


            string title = "";
            var    idx   = query.IndexOf("#");

            if (idx >= 0)
            {
                title = query.Substring(idx);
                query = query.Substring(0, idx);
            }
            query = query.Trim();

            if (CbttOnly(query))
            {
                string[] pcodes = GetParameters(query, interval, db);
                if (pcodes.Length > 0)
                {
                    query = query + " " + String.Join(",", pcodes);
                    //   return query;
                }
            }

            string[] pairs = query.Split(',');
            string   cbtt  = "";
            var      pc    = "";

            for (int i = 0; i < pairs.Length; i++)
            {
                string s = pairs[i];
                s = s.Replace(": ", ":");
                var tokens = s.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);

                if (i == 0 && tokens.Length != 2)
                {
                    Logger.WriteLine("query syntax Error: first pair must have cbtt and pcode");
                    return(query);
                }

                if (tokens.Length == 2)
                {
                    cbtt = tokens[0];
                    pc   = tokens[1];
                }
                else if (tokens.Length == 1)
                {
                    pc = tokens[0];
                }
                else if (tokens.Length == 0)
                {
                    continue;
                }

                rval.Add(cbtt + " " + pc);
            }
            string r = String.Join(",", rval.ToArray());

            if (r.Trim() != query.Trim())
            {
                Logger.WriteLine("query expanded to '" + r + "'");
            }
            return(r + title);
        }
コード例 #41
0
ファイル: RiverwareTree.cs プロジェクト: usbr/Pisces
        /**********************************
          *
          * Create a tree file that is usable by pisces
          *
          * input :  riverware rdf file
          * output : comma seperated tree file.
          *
          *
         // example portion of input file.
         (this input file is using snapshots in riverware)
         -----------------------------------
         object_type: SnapShotObj
         object_name: Most Likely 2
         slot_name: Andrews Gage 12447390 at RM 3_5_Gage Outflow
         END_SLOT_PREAMBLE
         units: cfs

         // example output.  There is no nesting of tree levels for now.
         RiverwareName,Description,RiverwareDataType,Level,Units
         Riverware Results,,,0,
         Yakima River at Parker PARW,Yakima River at Parker PARW,Gage Outflow,1,cfs
         Yakima River at Grandview,Yakima River at Grandview,Gage Inflow,1,cfs
         ...

          **********************************/
        public static void AddRiverWareFileToDatabase(string rdfFilename, PiscesFolder parent, 
            TimeSeriesDatabase db)
        {
            Reclamation.Core.TextFile tf = new Reclamation.Core.TextFile(rdfFilename);

            #region notes
            /*
            SnapShotStyle...
            -------------------------------------
              2001-9-29 24:00
              2001-9-30 24:00
              object_type: SnapShotObj
              object_name: Most Likely 2     ### scernario name
              slot_name: Andrews Gage 12447390 at RM 3_5_Gage Outflow   # object_name slotName are combined.
              END_SLOT_PREAMBLE
              units: cfs

              Regular Style ...
              ---------------------------------------
              END_COLUMN
              END_SLOT
              object_type: StreamGage
              object_name: Yakima 202_0 at Easton EASW
              slot_name: Gage Outflow
              END_SLOT_PREAMBLE
              units: cfs
              scale: 1

              */
            #endregion

            int number_of_runs = LookupNumberOfRuns(tf);
            PiscesFolder folder = parent;
            if (number_of_runs == 1)
                folder = db.AddFolder(parent, Path.GetFileNameWithoutExtension(rdfFilename));

            int sz = tf.Length;
            // object_type and object_name should occur on consecutive lines.
            int index = tf.IndexOfBoth("object_name:", "slot_name:", 0);
            var objectList = new List<string>(); //list to avoid duplicates in tree
            Performance p1 = new Performance();
            Performance p2 = new Performance();
            p2.Pause();
            int counter = 0;

            db.SuspendTreeUpdates();
            var sc = db.GetSeriesCatalog();
            Dictionary<string, int> objTypeID = new Dictionary<string, int>();
            Dictionary<string, int> objNameID = new Dictionary<string, int>();
            while (index < sz && index > 0)
            {
                //slot_name: Andrews Gage 12447390 at RM 3_5_Gage Outflow
                string slot_name = tf[index + 1].Substring(11); //Andrews Gage 12447390 at RM 3_5_Gage Outflow
                string object_type = tf[index - 1].Substring(13);
                string object_name = tf[index].Substring(13);
                string units = tf[index + 3].Substring(6).Trim();

                string tag = object_name + ":" + slot_name;
                if (!objectList.Contains(tag))
                {
                    int scenarioNumber = -1;
                    if (number_of_runs > 1)
                        scenarioNumber = 1;

                    RiverWareSeries s;
                    if (object_type == "SnapShotObj")
                        s = new RiverWareSeries(rdfFilename, "", slot_name, scenarioNumber, true, units);
                    else
                        s = new RiverWareSeries(rdfFilename, object_name, slot_name, scenarioNumber, false, units);
                    s.Units = units;
                    s.ConnectionString = ConnectionStringUtility.MakeFileNameRelative(s.ConnectionString, db.DataSource);
                    p2.Continue();

                    if (object_type.Contains("Reservoir"))
                    {
                        object_type = "Reservoir";
                    }
                    else if (object_type.Contains("Reach"))
                    {
                        object_type = "Reach";
                    }
                    else if (object_type.Contains("Diversion"))
                    {
                        object_type = "Diversion";
                    }
                    else if (object_type.Contains("Canal"))
                    {
                        object_type = "Canal";
                    }

                    int id = sc.NextID();
                    if (!sc.FolderExists(object_type, folder.ID))
                    {
                        objTypeID.Add(object_type, id);
                        sc.AddFolder(object_type, id, folder.ID);
                        id++;
                    }
                    if (!sc.FolderExists(object_name, objTypeID[object_type]))
                    {
                        objNameID.Add(object_name, id);
                        sc.AddFolder(object_name, id, objTypeID[object_type]);
                        id++;
                    }
                    sc.AddSeriesCatalogRow(s, id, objNameID[object_name], "");
                    objectList.Add(tag);
                }

                index = tf.IndexOfBoth( "object_name:", "slot_name:", index + 2);
                counter++;
            }
            p1.Report("total");
            p2.Report("db.add()");
            //398.7732813 seconds elapsed. total
            //384.6792607 seconds elapsed. db.add()

            // disable tree refresh (doubles perf)
            // 255.9736646 seconds elapsed. total
            // 241.7702669 seconds elapsed. db.add()

            // implemented member ExternalDataSource
            //34.8756696 seconds elapsed. total
            //20.3753912 seconds elapsed. db.add()

            var convention = Reclamation.TimeSeries.RiverWare.ImportRiverWare.ScenarioConvention.Default;
            if (number_of_runs > 1) // Multiple runs.
            {// show dialog to allow water year naming or traces
                var dlg = new Reclamation.TimeSeries.RiverWare.ImportRiverWare();
                if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    convention = dlg.NamingConvention;
                }

                // Add Scenarios.
                var tblScen = db.GetScenarios();
                for (int i = 0; i < number_of_runs; i++)
                {
                    string name = "Run" + i;
                    if (convention == RiverWare.ImportRiverWare.ScenarioConvention.ByYear)
                    {
                        name = (dlg.FirstYear + i ).ToString();
                    }
                    //string scenarioPath = ConnectionStringUtility.MakeFileNameRelative("FileName=" + item, DB.Filename);
                    tblScen.AddScenarioRow(name, true, "ScenarioNumber=" + (i + 1).ToString(), 0);
                }
                db.Server.SaveTable(tblScen);
            }
            db.Server.SaveTable(sc);
            db.ResumeTreeUpdates();
            db.RefreshFolder(parent);
        }
コード例 #42
0
 public HydrossSeries(TimeSeriesDatabase db, Reclamation.TimeSeries.TimeSeriesDatabaseDataSet.SeriesCatalogRow sr) : base(db, sr)
 {
     ExternalDataSource = true;
     Init(db);
 }
コード例 #43
0
 public InventoryReport(TimeSeriesDatabase db, string payload)
 {
     this.db    = db;
     this.query = payload;
 }
コード例 #44
0
 public ScenarioSelector(TimeSeriesDatabase db)
 {
     InitializeComponent();
     m_db = db;
     ReloadGrid();
 }
コード例 #45
0
ファイル: RBMSTextFile.cs プロジェクト: usbr/Pisces
        //static string ManualInstType = "M - manually read static water level";
        public static void ImportFile(string filename, TimeSeriesDatabase db, bool manual)
        {
            if( !manual)
                throw new NotImplementedException("this method is for importing manually entered data");
            DataTable rbmsDataTable = ReadRBMSFile(filename);

            if (rbmsDataTable.Rows.Count == 0)
            {
                Logger.WriteLine(filename + " has no valid data.  It will be skipped");
                return;
            }

            string sql = @"     select a.id,a.tablename,a.name, b.value as InstType , c.value as DrillHole, d.value as riser
               from seriescatalog a
               left join seriesproperties b on ( b.seriesid=a.id and b.name='InstType')
               left join seriesproperties c on ( c.seriesid=a.id and c.name='DrillHole')
               left join seriesproperties d on ( d.seriesid=a.id and d.name='Riser')

            where b.value = 'M - manually read static water level' ";
            var sc = db.Server.Table("view_seriescatalog",sql);
            db.SuspendTreeUpdates();
            int skipcount = 0;
            int addCount = 0;
            var tableList = new List<string>();
            for (int i = 0; i < rbmsDataTable.Rows.Count; i++)
            {
                string drillHole = rbmsDataTable.Rows[i]["DH"].ToString();
                string riser = rbmsDataTable.Rows[i]["Riser"].ToString();
                var strDate = rbmsDataTable.Rows[i]["DateTime"].ToString();
                var t = DateTime.Now.Date;
                var filter = "DrillHole ='" + drillHole + "'" + " and  " + " riser = '" + riser + "'";

                if (!DateTime.TryParse(strDate, out t))
                {
                    Logger.WriteLine("Error: could not parse " + strDate);
                    Logger.WriteLine(filter);
                    continue;
                }

                var strVal = rbmsDataTable.Rows[i]["Measured"].ToString();

                double val = -999;
                if( !double.TryParse(strVal,out val))
                {
                    Logger.WriteLine("Error: could not parse " + strVal);
                    Logger.WriteLine(filter);
                    continue;
                }

                var rows = sc.Select(filter);

                if (rows.Length != 1)
                {
                    Logger.WriteLine("Warning:  Matched "+rows.Length +" records skipping: "+filter);
                    skipcount++;
                    continue;
                }
                //int id = Convert.ToInt32(sc.Rows[0]["id"]);
                int id = Convert.ToInt32(rows[0]["id"]);
                var s = db.Factory.GetSeries(id);
                if( !tableList.Contains(s.Table.TableName))
                   tableList.Add(s.Table.TableName);
                string fn = Path.GetFileName(filename);
                if (fn.Length > 50)
                    fn = fn.Substring(0, 50);
            s.Add(t, val, fn);
                db.SaveTimeSeriesTable(id, s, DatabaseSaveOptions.UpdateExisting);
                addCount++;
            }
            db.ResumeTreeUpdates();
            Logger.WriteLine("finished importing " + filename);
            Logger.WriteLine("skipped " + skipcount + " records.");
            Logger.WriteLine("added/updated " + addCount + " records.");
            Logger.WriteLine(tableList.Count +" tables were modified");
            for (int i = 0; i < tableList.Count; i++)
            {
                Console.WriteLine(tableList[i]);
            }
        }
コード例 #46
0
        string m_path; //   //CHJ/YT//IR-MONTH/IRVZZBZD/

        public UsaceSeries(TimeSeriesDatabase db, TimeSeriesDatabaseDataSet.SeriesCatalogRow sr)
            : base(db, sr)
        {
            m_path             = ConnectionStringUtility.GetToken(sr.ConnectionString, "DssPath", "");
            ExternalDataSource = true;
        }
コード例 #47
0
        public void Interpolate2DWithDatabase()
        {
            Logger.EnableLogger();
            var fn = FileUtility.GetTempFileName(".pdb");

            File.Delete(fn);

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

            var c    = new CalculationSeries("rir_q");
            var path = Path.Combine(TestData.DataPath, "rating_tables");

            path = Path.Combine(path, "rir_q.txt");

            c.Expression = "FileLookupInterpolate2D(rir_fb, rir_ra, \"" + path + "\")" +
                           " + FileLookupInterpolate2D(rir_fb, rir_rb, \"" + path + "\")";
            c.TimeInterval = TimeInterval.Irregular;
            db.AddSeries(c);

            var fb = new Series("rir_fb");

            fb.TimeInterval = TimeInterval.Irregular;
            db.AddSeries(fb);
            fb.Add("6-1-2011", 5110.99);
            fb.Add("6-2-2011", 5111.31);
            fb.Add("6-3-2011", 5111.71);
            fb.Add("6-4-2011", 5112.09);

            var ra = new Series("rir_ra");

            ra.TimeInterval = TimeInterval.Irregular;
            ra.Add("6-1-2011", 2.1);
            ra.Add("6-2-2011", 1.29);
            ra.Add("6-3-2011", 1.29);
            ra.Add("6-4-2011", 1.29);
            db.AddSeries(ra);

            var rb = new Series("rir_rb");

            rb.TimeInterval = TimeInterval.Irregular;
            rb.Add("6-1-2011", 2.1);
            rb.Add("6-2-2011", 1.28);
            rb.Add("6-3-2011", 1.28);
            rb.Add("6-4-2011", 1.28);
            db.AddSeries(rb);

            TimeSeriesImporter ti = new TimeSeriesImporter(db);

            ti.Import(fb, computeDependencies: true);// this should force a calculation...

            var q = db.GetSeriesFromTableName("rir_q");

            Assert.NotNull(q, "Series not created");

            q.Read();

            /*
             * Flows from Hydromet
             * 6-1-2011, 1009.87
             * 6-2-2011, 602.24
             * 6-3-2011, 603.32
             * 6-4-2011, 604.34
             */

            Assert.AreEqual(4, q.Count);
            Assert.AreEqual(1009.87, System.Math.Round(q[0].Value, 2));
            Assert.AreEqual(603.32, System.Math.Round(q[2].Value, 2));
        }
コード例 #48
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, false);

            // 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);

            var csvFileName = FileUtility.GetTempFileName(".csv");

            File.WriteAllLines(csvFileName, new string[]
            {
                "Date,value",
                "1-1-2001, 12.34"
            });
            // Add Csv file data to March Folder.
            s = new TextSeries(csvFileName);
            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();
        }
コード例 #49
0
ファイル: HydrometInfoUtility.cs プロジェクト: usbr/Pisces
        private static string[] GetParametersFromPostgres(string cbtt, TimeInterval interval)
        {
            var rval = new List<string>();
            var svr = PostgreSQL.GetPostgresServer();
            TimeSeriesDatabase p = new TimeSeriesDatabase(svr,false);
            var sql = " lower(siteid) = '"+ svr.SafeSqlLiteral(cbtt.ToLower())+"' and TimeInterval = '"+interval.ToString()+"'";

            var sc = p.GetSeriesCatalog(sql);
            foreach (var item in sc)
            {
                TimeSeriesName tn = new TimeSeriesName(item.TableName);
                rval.Add(tn.pcode);
            }

            return rval.ToArray();
        }
コード例 #50
0
        static void Main(string[] args)
        {
            Logger.EnableLogger(true);
#if !PISCES_OPEN
            var x = HdbPoet.Hdb.Instance; // force this assembly to load.
#endif
            try
            {
                string fileName = "";
                if (args.Length == 1)
                {
                    fileName = args[0];
                    if (!File.Exists(fileName))
                    {
                        MessageBox.Show("Could not open file '" + fileName + "'");
                        return;
                    }
                }

                else if (UserPreference.Lookup("fileName") != "" &&
                         File.Exists(UserPreference.Lookup("fileName")) &&
                         Path.GetExtension(UserPreference.Lookup("fileName")) != ".sdf")
                {
                    fileName = UserPreference.Lookup("fileName");
                }
                else
                {// open default database
                    fileName = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments) + "\\tsdatabase.pdb";
                }

                if (!File.Exists(fileName))
                {
                    SQLiteServer.CreateNewDatabase(fileName);
                }

                HydrometInfoUtility.SetDefaultHydrometServer();


                Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.ThreadExit      += new EventHandler(Application_ThreadExit);
                Application.ApplicationExit += new EventHandler(Application_ApplicationExit);
                //Application.Idle += new EventHandler(Application_Idle);
                //Application.ThreadException += new System.Threading.ThreadExceptionEventHandler(Application_ThreadException);


                explorer = new PiscesSettings(new ExplorerView());
                // explorer.Database

                explorer.Open(fileName);
                db = explorer.Database;

                piscesForm1 = new PiscesForm(explorer);



                piscesForm1.FormClosed += new FormClosedEventHandler(explorerForm1_FormClosed);
                //Pisces2 p2 = new Pisces2(explorer);
                //p2.FormClosed += new FormClosedEventHandler(explorerForm1_FormClosed);

                Application.Run(piscesForm1);
                explorer.Database.SaveSettingsToDatabase(explorer.TimeWindow);
                //db.SaveSettingsToDatabase(explorer.TimeWindow);

                PostgreSQL.ClearAllPools();

                FileUtility.CleanTempPath();
            }
            catch (Exception exc)
            {
                MessageBox.Show(exc.ToString());
            }
        }
コード例 #51
0
 public Hydrography(TimeSeriesDatabase db)
 {
     m_db = db;
 }
コード例 #52
0
ファイル: WebData.cs プロジェクト: woohn/Pisces
 public WebData(TimeSeriesDatabase db)
 {
     m_db = db;
 }