コード例 #1
0
ファイル: HydrometInfoUtility.cs プロジェクト: ruo2012/Pisces
        public static Series Read(string cbtt, string pcode, DateTime t1, DateTime t2,
                                  TimeInterval interval, HydrometHost hydrometServer)
        {
            Series s = new Series();

            if (interval == TimeInterval.Daily)
            {
                s = HydrometDailySeries.Read(cbtt, pcode, t1, t2, hydrometServer);
            }
            else if (interval == TimeInterval.Irregular)
            {
                s = HydrometInstantSeries.Read(cbtt, pcode, t1, t2, hydrometServer);
            }
            else if (interval == TimeInterval.Monthly)
            {
                s = new HydrometMonthlySeries(cbtt, pcode, hydrometServer);
                s.Read(t1, t2);
            }
            else
            {
                throw new ArgumentException("Undefined TimeInterval", interval.ToString());
            }

            return(s);
        }
コード例 #2
0
ファイル: HydrometDailySeries.cs プロジェクト: woohn/Pisces
        public static HydrometDailySeries Read(string cbtt, string pcode,
                                               DateTime t1, DateTime t2, HydrometHost server)
        {
            HydrometDailySeries s = new HydrometDailySeries(cbtt, pcode, server);

            s.ReadCore(t1, t2);
            return(s);
        }
コード例 #3
0
ファイル: HydrometDailySeries.cs プロジェクト: woohn/Pisces
        protected override Series CreateFromConnectionString()
        {
            string       str = ConnectionStringToken("server");
            HydrometHost svr = (HydrometHost)Enum.Parse(typeof(HydrometHost), str);

            HydrometDailySeries s = new HydrometDailySeries(
                ConnectionStringToken("cbtt"), ConnectionStringToken("pcode"), svr);

            return(s);
        }
コード例 #4
0
        public void HydrometDailyFactory()
        {
            Series s = new Reclamation.TimeSeries.Hydromet.HydrometDailySeries("jck", "af", HydrometHost.PN);

            s.Read(DateTime.Now.AddDays(-365), DateTime.Now.Date);
            int sdi = db.AddSeries(s);

            Assert.AreEqual("acre-feet", s.Units);

            s = db.GetSeries(sdi);
            s.Read(DateTime.Now.AddDays(-365), DateTime.Now.Date);

            Assert.IsTrue(s.Count > 100, "count = " + s.Count);
            Assert.IsTrue(s.ConnectionString.Contains("jck"));
        }
コード例 #5
0
        public void HydrometAutoUpdate()
        {
            var    t1 = new DateTime(1980, 10, 1);
            var    t2 = new DateTime(1980, 10, 2);
            Series s1 = new Reclamation.TimeSeries.Hydromet.HydrometDailySeries("jck", "af");

            s1.Read(t1, t2);
            int sdi1 = db.AddSeries(s1);

            Series s2 = new Reclamation.TimeSeries.Hydromet.HydrometDailySeries("pal", "af");

            s2.Read(t1, t2);
            int sdi2 = db.AddSeries(s2);

            s1 = db.GetSeries(sdi1);
            s2 = db.GetSeries(sdi2);

            HydrometInfoUtility.AutoUpdate = true;
            t2 = t2.AddHours(24);// reservoir contents are stored at midnight
            Console.WriteLine(t2);
            s1.Read(t1, t2);
            s2.Read(t1, t2);

            s1.WriteToConsole();
            Assert.AreEqual(515150.0, s1[0].Value);
            Assert.AreEqual(817782.0, s2[0].Value);
            Assert.AreEqual(3, s1.Count);
            Assert.AreEqual(3, s2.Count);

            SeriesList sl = new SeriesList();

            sl.Add(s1);
            sl.Add(s2);
            SimpleMathSeries c1 = new SimpleMathSeries("", sl, new MathOperation[] { MathOperation.Add });
            SimpleMathSeries c2 = new SimpleMathSeries("", sl, new MathOperation[] { MathOperation.Subtract });

            int sdi3 = db.AddSeries(c1);
            int sdi4 = db.AddSeries(c2);

            Series s3 = db.GetSeries(sdi3);
            Series s4 = db.GetSeries(sdi4);

            s3.Read(t1, t2);
            s4.Read(t1, t2);

            Assert.AreEqual(515150.0 + 817782.0, s3[0].Value);
            Assert.AreEqual(515150.0 - 817782.0, s4[0].Value);
        }
コード例 #6
0
ファイル: HydrometDailySeries.cs プロジェクト: woohn/Pisces
        /// <summary>
        /// Reads one year of Daily (Arcive) data
        /// used to support Hydromet FORTRAN calls to  GETACFREC()
        /// </summary>
        public static void GetAcfRec(string cbtt, string pcode, string waterYear, double[,] values,
                                     int lagDays = 0)
        {
            YearRange           rng = new YearRange(int.Parse(waterYear), 10);
            HydrometDailySeries s   = new HydrometDailySeries(cbtt, pcode);

            s.Read(rng.DateTime1.AddDays(-lagDays), rng.DateTime2.AddDays(-lagDays));

            for (int i = 0; i < s.Count; i++)
            {
                var pt = s[i];
                pt.DateTime = pt.DateTime.AddDays(lagDays);
                int m = HydrometMonth[pt.DateTime.Month];
                int d = pt.DateTime.Day;
                values[m, d] = s[i].Value;
            }
        }
コード例 #7
0
ファイル: HydrometDailySeries.cs プロジェクト: woohn/Pisces
        ///// <summary>
        ///// Saves Series data to Archives. This will overwrite existing data
        ///// uses:
        /////    Series.SiteName as cbtt
        /////    Series.Parameter as pcode
        ///// </summary>
        ///// <param name="list"></param>
        ///// <param name="?"></param>
        //public static void SaveToArchives(SeriesList list, string username, string password)
        //{
        //    string hydrometScript = WriteToArcImportFile(list);

        //    string remoteFile = HydrometDataUtility.CreateRemoteFileName(username, HydrometDataBase.Archives);

        //    if (LinuxUtility.IsLinux())
        //    {
        //        // copy file to server using scp --


        //    }
        //    else
        //    {
        //        var rval = HydrometEdits.RunArcImport(username, password, hydrometScript, remoteFile, true, false, false);
        //        Logger.WriteLine(rval);
        //    }
        //}


        /// <summary>
        /// .A ARKI1 20121104 M DH2400/QRDRG 0.435
        /// .A LUCI1 20121026 M DH2400/QADRZ 0.802
        /// </summary>
        /// <param name="controlFileName"></param>
        /// <param name="t1"></param>
        /// <param name="t2"></param>
        /// <returns></returns>
        public static string[] CreateSHEFA(string controlFileName, DateTime t1, DateTime t2)
        {
            var rval = new List <string>();
            var tmp  = Cache;

            CsvFile csv = new CsvFile(controlFileName,
                                      new string[] { "String", "String", "String", "String", "String", "Double" });

            SetupCacheForShef(csv, t1, t2);

            foreach (DataRow row in csv.Rows)
            {
                // read hydromet
                var s = new HydrometDailySeries(row["cbtt"].ToString(),
                                                row["pcode"].ToString());
                s.Read(t1, t2);
                s.RemoveMissing();

                foreach (var pt in s)
                {
                    if (pt.IsMissing)
                    {
                        continue;
                    }

                    double d = pt.Value * Convert.ToDouble(row["scale"]);

                    string A = ".A " + row["shef_locid"].ToString()
                               + " " + pt.DateTime.ToString("yyyyMMdd")
                               + " " + row["time_zone"].ToString()
                               + " DH2400/" + row["shef_tag"].ToString()
                               + " " + d.ToString("F3");


                    rval.Add(A);
                }
            }


            Cache = tmp;
            return(rval.ToArray());
        }
コード例 #8
0
ファイル: HydrometDailySeries.cs プロジェクト: woohn/Pisces
        /// <summary>
        /// Calculates a multi year average for a Hydromet Series
        /// </summary>
        /// <param name="cbtt">Hydromet CBTT</param>
        /// <param name="pCode">Hydromet PCode</param>
        /// <returns></returns>
        public static Series GetMultiYearAverage(string cbtt, string pCode, HydrometHost svr, DateTime t1, DateTime t2)
        {
            // Define input and output series
            Series sOut = new Series();
            var    s    = new HydrometDailySeries(cbtt, pCode, svr);

            s.Read(t1, t2);
            // Get daily average, shift to the output date range, and label
            var sTemp = Reclamation.TimeSeries.Math.MultiYearDailyAverage(s, 10);

            sOut              = Reclamation.TimeSeries.Math.ShiftToYear(sTemp, 2000);
            sOut.Provider     = "Series";
            sOut.ScenarioName = "";

            var yrs = (t2 - t1).Days / 365;

            sOut.Name = cbtt + "_" + pCode + "_" + t1.Year + "to" + t2.Year + "_" + yrs + "YearDailyAverage";
            sOut.Appearance.LegendText = sOut.Name;
            return(sOut);
        }
コード例 #9
0
ファイル: TimeSeriesDatabaseTest.cs プロジェクト: usbr/Pisces
        public void HydrometDailyFactory()
        {
            Series s = new Reclamation.TimeSeries.Hydromet.HydrometDailySeries("jck", "af", HydrometHost.PN);
            s.Read(DateTime.Now.AddDays(-365), DateTime.Now.Date);
            int sdi = db.AddSeries(s);
            Assert.AreEqual("acre-feet", s.Units);

            s = db.GetSeries(sdi);
            s.Read(DateTime.Now.AddDays(-365),DateTime.Now.Date);

            Assert.IsTrue(s.Count> 100,"count = "+s.Count);
            Assert.IsTrue(s.ConnectionString.Contains("jck"));
        }
コード例 #10
0
ファイル: TimeSeriesDatabaseTest.cs プロジェクト: usbr/Pisces
        public void HydrometAutoUpdate()
        {
            var t1 = new DateTime(1980, 10, 1);
            var t2 = new DateTime(1980, 10, 2);
            Series s1 = new Reclamation.TimeSeries.Hydromet.HydrometDailySeries("jck", "af");
            s1.Read(t1, t2);
            int sdi1 = db.AddSeries(s1);

            Series s2 = new Reclamation.TimeSeries.Hydromet.HydrometDailySeries("pal", "af");
            s2.Read(t1, t2);
            int sdi2 = db.AddSeries(s2);

            s1 = db.GetSeries(sdi1);
            s2 = db.GetSeries(sdi2);

            HydrometInfoUtility.AutoUpdate = true;
            t2 = t2.AddHours(24);// reservoir contents are stored at midnight
            Console.WriteLine(t2);
            s1.Read(t1, t2);
            s2.Read(t1, t2);

            s1.WriteToConsole();
            Assert.AreEqual(515150.0, s1[0].Value);
            Assert.AreEqual(817782.0, s2[0].Value);
            Assert.AreEqual(3, s1.Count);
            Assert.AreEqual(3, s2.Count);

            SeriesList sl = new SeriesList();
            sl.Add(s1);
            sl.Add(s2);
            SimpleMathSeries c1 = new SimpleMathSeries("",sl,new MathOperation[]{ MathOperation.Add});
            SimpleMathSeries c2 = new SimpleMathSeries("",sl, new MathOperation[] {MathOperation.Subtract});

            int sdi3 = db.AddSeries(c1);
            int sdi4 = db.AddSeries(c2);

            Series s3 = db.GetSeries(sdi3);
            Series s4 = db.GetSeries(sdi4);

            s3.Read(t1, t2);
            s4.Read(t1, t2);

            Assert.AreEqual(515150.0 + 817782.0, s3[0].Value);
            Assert.AreEqual(515150.0 - 817782.0, s4[0].Value);
        }