Beispiel #1
0
        public DateRange(MonthDayRange range, int year, int beginningMonth)
        {
            this.beginningMonth = beginningMonth;
            if (!range.ValidBeginningMonth(beginningMonth))
            {
                throw new ArgumentOutOfRangeException(
                    "Please check the date range you entered. It needs to be consistent\n"
                    +"with the type of year: i.e. 'water year', 'calendar year', or custom year\n"
                    +"your range is "
                    +range.ToString()+ " and your beginning month is "+beginningMonth);
            }

            YearRange yearRng = new YearRange(year, beginningMonth);

            int idx = yearRng.Months.IndexOf(range.Month1);
            if (idx < 0)
            {
                throw new Exception();
            }
            date1 = LeapSafeDate(yearRng.Years[idx], range.Month1, range.Day1);

            idx = yearRng.Months.IndexOf(range.Month2);
            if (idx < 0)
            {
                throw new Exception();
            }
            date2 = LeapSafeDate(yearRng.Years[idx], range.Month2, range.Day2);
            date2 =date2.AddHours(23).AddMinutes(59).AddSeconds(59);

            if (date2 < date1)
            {
                throw new ArgumentOutOfRangeException("The range " + range.ToString() +
                     " is not valid ");
            }
        }
Beispiel #2
0
        public void YearRangeTest()
        {
            // Case 1
            var y1 = new YearRange(2017);

            Assert.AreEqual(2017, y1.Value);
            Assert.AreEqual(Month.April, y1.BeginningMonth);
            Assert.AreEqual(1, y1.BeginningDay);
            Assert.AreEqual(new DateTime(2017, 4, 1), y1.RangeFrom);
            Assert.AreEqual(new DateTime(2018, 3, 31), y1.RangeTo);

            // Case 2
            var y2 = new YearRange(2017, Month.October, 21);

            Assert.AreEqual(2017, y2.Value);
            Assert.AreEqual(Month.October, y2.BeginningMonth);
            Assert.AreEqual(21, y2.BeginningDay);
            Assert.AreEqual(new DateTime(2017, 10, 21), y2.RangeFrom);
            Assert.AreEqual(new DateTime(2018, 10, 20), y2.RangeTo);

            // Case 3
            var y3 = new YearRange(2016, Month.January);

            Assert.AreEqual(new DateTime(2016, 1, 1), y3.RangeFrom);
            Assert.AreEqual(new DateTime(2016, 12, 31), y3.RangeTo);
            Assert.AreEqual(366, y3.Count());

            // Case 4
            try
            {
                var invalidYear = new YearRange(2017, Month.February, 29);
                Assert.Fail("例外が発生しななかった。");
            }
            catch { }
        }
Beispiel #3
0
        private void AddStatistics(SeriesList wyList)
        {
            bool anyStats = checkBoxMax.Checked || checkBoxMin.Checked || checkBoxAvg.Checked;

            if (!anyStats)
            {
                return;
            }

            int y1 = 1990;
            int y2 = 2011;

            int.TryParse(this.textBoxWY1.Text, out y1);
            int.TryParse(this.textBoxWY2.Text, out y2);

            DateTime t1 = new DateTime(y1 - 1, 10, 1);
            DateTime t2 = new DateTime(y2, 9, 30);

            var    server = HydrometInfoUtility.HydrometServerFromPreferences();
            Series s      = new HydrometDailySeries(comboBoxCbtt.Text.Trim(), DeterminePcode(), server);

            s.Read(t1, t2);
            s.RemoveMissing();
            s.Appearance.LegendText = "";

            YearRange yr   = new YearRange(2000, 10);
            var       list = Math.SummaryHydrograph(s, new int[] { }, yr.DateTime1, checkBoxMax.Checked, checkBoxMin.Checked, checkBoxAvg.Checked, false); //, false);


            wyList.Add(list);
        }
Beispiel #4
0
        /// <summary>
        /// Creates a list of water year based data all aligned to year 2000
        /// to allow comparison.
        /// </summary>
        /// <param name="list">intput series</param>
        /// <param name="years">water years</param>
        /// <param name="avg30yr">when true also includes 30 year average. If only 5 years are avaliable a 5 year average is created</param>
        /// <param name="beginningMonth">series starting month number</param>
        /// <returns></returns>
        public static SeriesList WaterYears(SeriesList list, int[] years, bool avg30yr, int beginningMonth, bool alwaysShiftTo2000 = false)
        {
            SeriesList wySeries = new SeriesList();

            for (int j = 0; j < list.Count; j++)
            {
                for (int i = 0; i < years.Length; i++)
                {
                    YearRange yr = new YearRange(years[i], beginningMonth);
                    Series    s  = list[j];
                    s.Clear();
                    s.Read(yr.DateTime1, yr.DateTime2);

                    Logger.WriteLine("Read() " + yr.ToString() + " count = " + s.Count);

                    foreach (string msg in s.Messages)
                    {
                        Logger.WriteLine(msg);
                    }
                    if (s.Count > 0 && s.CountMissing() != s.Count)
                    {
                        Series s2 = TimeSeries.Math.ShiftToYear(s, 2000);
                        if (years.Length == 1 && !alwaysShiftTo2000 && !avg30yr)
                        {
                            s2 = s;
                        }
                        if (list.HasMultipleSites)
                        {
                            s2.Appearance.LegendText = years[i].ToString() + "   " + list[j].Name;
                        }
                        else
                        {
                            s2.Appearance.LegendText = years[i].ToString();
                        }
                        wySeries.Add(s2);
                    }
                    else
                    {
                        Logger.WriteLine("year :" + years[i] + "skipping series with no data " + s.Name + " " + s.Parameter);
                    }
                }
                if (avg30yr)
                {
                    list[j].Read(DateTime.Now.Date.AddYears(-30), DateTime.Now.Date);
                    Series s30 = Math.MultiYearDailyAverage(list[j], beginningMonth);
                    if (s30.Count > 0)
                    {
                        wySeries.Add(s30);
                    }
                }
            }
            wySeries.Type = SeriesListType.WaterYears;
            if (wySeries.Count > 1)
            {
                wySeries.DateFormat = "MM/dd";
            }

            return(wySeries);
        }
        public ActionResult DeleteConfirmed(int id)
        {
            YearRange yearrange = db.YearRanges.Find(id);

            db.YearRanges.Remove(yearrange);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
Beispiel #6
0
        //protected virtual bool OnVisitMinute(MinuteRange minute, TContext context)
        //{
        //    return true;
        //}

        protected virtual bool IsMatchingYear(YearRange year, TContext context)
        {
            if (Filter.Years.Count > 0 && Filter.Years.Contains(year.YearValue) == false)
            {
                return(false);
            }

            return(CheckExcludePeriods(year));
        }
 public ActionResult Edit([Bind(Include = "YearRangeId,Range")] YearRange yearrange)
 {
     if (ModelState.IsValid)
     {
         db.Entry(yearrange).State = EntityState.Modified;
         db.SaveChanges();
         return(RedirectToAction("Index"));
     }
     return(View(yearrange));
 }
Beispiel #8
0
        public override IExplorerView Run()
        {
            Logger.WriteLine("SummaryHydrographAnalysis.Run()");
            SeriesList list = Explorer.CreateSelectedSeries();

            ReadSeriesList(list);


            if (Explorer.SelectedSeries.Length == 1 && Explorer.MergeSelected)
            { // merge single Year Traces.
                list.RemoveMissing();
                var s = list.MergeYearlyScenarios();
                list = new SeriesList();
                list.Add(s);
            }

            view.Messages.Add(list.MissingRecordsMessage);

            string title    = list.Text.TitleText();
            string subTitle = list.MissingRecordsMessage;



            SeriesList myList = new SeriesList();

            list.RemoveMissing();

            if (Explorer.AlsoPlotYear && list.Count == 1)
            {
                YearRange yearRng = new YearRange(Explorer.PlotYear, Explorer.BeginningMonth);
                DateTime  t1      = yearRng.DateTime1;
                DateTime  t2      = yearRng.DateTime2;

                Series s = Math.Subset(list[0], t1, t2);
                s.Appearance.LegendText = yearRng.Year.ToString();
                view.Messages.Add(yearRng.Year.ToString() + " included as separate series ");
                myList.Add(s);
                myList.Add(list.SummaryHydrograph(Explorer.ExceedanceLevels, t1,
                                                  Explorer.PlotMax, Explorer.PlotMin, Explorer.PlotAvg, true));//,true));
            }
            else
            {
                DateTime t = new DateTime(DateTime.Now.Year, Explorer.BeginningMonth, 1);
                myList = list.SummaryHydrograph(Explorer.ExceedanceLevels, t,
                                                Explorer.PlotMax, Explorer.PlotMin, Explorer.PlotAvg, true);//,true);
            }

            Explorer.WriteProgressMessage("drawing graph", 80);
            view.Title      = title;
            view.SubTitle   = subTitle;
            view.SeriesList = myList;
            view.DataTable  = myList.ToDataTable(true);
            //view.Draw();
            return(view);
        }
        public ActionResult Create([Bind(Include = "YearRangeId,Range")] YearRange yearrange)
        {
            if (ModelState.IsValid)
            {
                db.YearRanges.Add(yearrange);
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            return(View(yearrange));
        }
Beispiel #10
0
        public void Basic()
        {
            YearRange wy1 = new YearRange(DateTime.Parse("2006-10-1"), 10);
            YearRange wy2 = new YearRange(DateTime.Parse("2006-10-1"), 1);
            YearRange wy3 = new YearRange(DateTime.Parse("2006-10-1"), 11);

            Assert.AreEqual(2007, wy1.Year);

            Assert.AreEqual(2006, wy2.Year);
            Assert.AreEqual(2006, wy3.Year);
        }
Beispiel #11
0
        /// <summary>
        /// Creates a list of water year based data all aligned to year 2000
        /// to allow comparison.
        /// </summary>
        /// <param name="list">intput series</param>
        /// <param name="years">water years</param>
        /// <param name="avg30yr">when true also includes 30 year average. If only 5 years are avaliable a 5 year average is created</param>
        /// <param name="beginningMonth">series starting month number</param>
        /// <returns></returns>
        public static SeriesList WaterYears(SeriesList list, int[] years, bool avg30yr, int beginningMonth, bool alwaysShiftTo2000 = false)
        {
            SeriesList wySeries = new SeriesList();
            for (int j = 0; j < list.Count; j++)
            {
                for (int i = 0; i < years.Length; i++)
                {
                    YearRange yr = new YearRange(years[i], beginningMonth);
                    Series s = list[j];
                    s.Clear();
                    s.Read(yr.DateTime1, yr.DateTime2);

                    Logger.WriteLine("Read() " + yr.ToString() + " count = " + s.Count);

                    foreach (string msg in s.Messages)
                    {
                        Logger.WriteLine(msg);
                    }
                    if (s.Count > 0 && s.CountMissing() != s.Count)
                    {
                        Series s2 = TimeSeries.Math.ShiftToYear(s, 2000);
                        if (years.Length == 1 && !alwaysShiftTo2000 && !avg30yr)
                        {
                            s2 = s;
                        }
                        if (list.HasMultipleSites)
                            s2.Appearance.LegendText = years[i].ToString() + "   " + list[j].Name;
                        else
                            s2.Appearance.LegendText = years[i].ToString();
                        wySeries.Add(s2);
                    }
                    else
                    {
                        Logger.WriteLine("year :" + years[i] + "skipping series with no data " + s.Name + " " + s.Parameter);
                    }

                }
                if (avg30yr)
                {
                     list[j].Read(DateTime.Now.Date.AddYears(-30), DateTime.Now.Date);
                    Series s30 = Math.MultiYearDailyAverage( list[j], beginningMonth);
                    if (s30.Count > 0)
                        wySeries.Add(s30);
                }
            }
            wySeries.Type = SeriesListType.WaterYears;
            if (wySeries.Count > 1)
            {
                wySeries.DateFormat = "MM/dd";
            }

            return wySeries;
        }
Beispiel #12
0
        protected override bool OnVisitYear(YearRange year, CalendarPeriodCollectorContext context)
        {
            if (IsDebugEnabled)
            {
                log.Debug("Visit Year... year=[{0}]", year);
            }

            if (context.Scope != CalendarPeriodCollectorContext.CollectKind.Month)
            {
                return(true); // continue
            }

            // all month
            if (Filter.CollectingMonths.Count == 0)
            {
                var months = year.GetMonths().Where(m => IsMatchingMonth(m, context) && CheckLimits(m));

                _periods.AddAll(months.Cast <ITimePeriod>().AsEnumerable());
            }
            else
            {
                var months =
                    Filter.CollectingMonths
                    .Select(m => {
                    if (m.IsSingleMonth)
                    {
                        var month = new MonthRange(year.YearValue, m.Min, year.TimeCalendar);
                        if (IsMatchingMonth(month, context) && CheckLimits(month))
                        {
                            return((ITimePeriod)month);
                        }
                    }
                    else
                    {
                        var monthRanges = new MonthRangeCollection(year.YearValue, m.Min, m.Max - m.Min,
                                                                   year.TimeCalendar);
                        var isMatching = monthRanges.GetMonths().All(month => IsMatchingMonth(month, context));

                        if (isMatching && CheckLimits(monthRanges))
                        {
                            return((ITimePeriod)monthRanges);
                        }
                    }
                    return((ITimePeriod)null);
                })
                    .Where(m => m != null);

                _periods.AddAll(months.Cast <ITimePeriod>().AsEnumerable());
            }

            return(false); // abort
        }
        public override IExplorerView Run()
        {
            Logger.WriteLine("SummaryHydrographAnalysis.Run()");
            SeriesList list = Explorer.CreateSelectedSeries();

            ReadSeriesList(list);

            if (Explorer.SelectedSeries.Length == 1 && Explorer.MergeSelected)
            { // merge single Year Traces.
                list.RemoveMissing();
                var s = list.MergeYearlyScenarios();
                list = new SeriesList();
                list.Add(s);
            }

            view.Messages.Add(list.MissingRecordsMessage);

            string title = list.Text.TitleText();
            string subTitle = list.MissingRecordsMessage;

            SeriesList myList = new SeriesList();
            list.RemoveMissing();

            if (Explorer.AlsoPlotYear && list.Count == 1)
            {
                YearRange yearRng = new YearRange(Explorer.PlotYear, Explorer.BeginningMonth);
                DateTime t1 = yearRng.DateTime1;
                DateTime t2 = yearRng.DateTime2;

                Series s = Math.Subset(list[0], t1, t2);
                s.Appearance.LegendText = yearRng.Year.ToString();
                view.Messages.Add(yearRng.Year.ToString() + " included as separate series ");
                myList.Add(s);
                myList.Add(list.SummaryHydrograph(Explorer.ExceedanceLevels, t1,
                    Explorer.PlotMax, Explorer.PlotMin, Explorer.PlotAvg,true));//,true));
            }
            else
            {
                DateTime t = new DateTime(DateTime.Now.Year, Explorer.BeginningMonth, 1);
                myList = list.SummaryHydrograph(Explorer.ExceedanceLevels, t,
                    Explorer.PlotMax, Explorer.PlotMin, Explorer.PlotAvg,true);//,true);
            }

            Explorer.WriteProgressMessage("drawing graph", 80);
            view.Title = title;
            view.SubTitle = subTitle;
            view.SeriesList = myList;
            view.DataTable = myList.ToDataTable(true);
            //view.Draw();
            return view;
        }
        /// <inheritdoc />
        protected override void OnInitialized()
        {
            base.OnInitialized();

            months = Enumerable.Range(1, 12).Select(i => new NameValue()
            {
                Name = Culture.DateTimeFormat.GetMonthName(i), Value = i
            }).ToList();
            years = Enumerable.Range(int.Parse(YearRange.Split(':').First()), int.Parse(YearRange.Split(':').Last()) - int.Parse(YearRange.Split(':').First()) + 1)
                    .Select(i => new NameValue()
            {
                Name = $"{i}", Value = i
            }).ToList();
        }
Beispiel #15
0
        public static void ReadMpoll(string cbtt, string pcode,
                                     string waterYear, double[] values, string[] mark)
        {
            HydrometMonthlySeries s   = new HydrometMonthlySeries(cbtt, pcode);
            YearRange             rng = new YearRange(int.Parse(waterYear), 10);

            s.Read(rng.DateTime1, rng.DateTime2);

            for (int i = 0; i < s.Count; i++)
            {
                values[i + 1] = s[i].Value;
                mark[i + 1]   = s[i].Flag;
            }
        }
        // GET: /BrowseYearRanges/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            YearRange yearrange = db.YearRanges.Find(id);

            if (yearrange == null)
            {
                return(HttpNotFound());
            }
            return(View(yearrange));
        }
Beispiel #17
0
        public void QuartersTest()
        {
            var year     = new YearRange(2017);
            var quaters  = year.Quarters().Select(q => q.RangeFrom).ToList();
            var expected = new List <DateTime?>
            {
                new DateTime(2017, 4, 1),
                new DateTime(2017, 7, 1),
                new DateTime(2017, 10, 1),
                new DateTime(2018, 1, 1)
            };

            Assert.IsTrue(expected.SequenceEqual(quaters));
        }
        public void CalendarQuarterOfYearTest()
        {
            var currentYear = ClockProxy.Clock.Now.Year;

            var timeCalendar = TimeCalendar.New(October);
            var calendarYear = new YearRange(currentYear, timeCalendar);

            calendarYear.YearBaseMonth.Should().Be(October);
            calendarYear.BaseYear.Should().Be(currentYear);
            calendarYear.Start.Should().Be(new DateTime(currentYear, October, 1));
            calendarYear.End.Should().Be(calendarYear.TimeCalendar.MapEnd(calendarYear.Start.AddYears(1)));
            calendarYear.UnmappedEnd.Should().Be(calendarYear.Start.AddYears(1));

            // Q1
            var q1 = new QuarterRange(calendarYear.BaseYear, QuarterKind.First, timeCalendar);

            q1.YearBaseMonth.Should().Be(calendarYear.YearBaseMonth);
            q1.BaseYear.Should().Be(calendarYear.BaseYear);
            q1.Start.Should().Be(new DateTime(currentYear, October, 1));
            q1.End.Should().Be(q1.TimeCalendar.MapEnd(q1.Start.AddMonths(TimeSpec.MonthsPerQuarter)));
            q1.UnmappedEnd.Should().Be(q1.Start.AddMonths(TimeSpec.MonthsPerQuarter));

            // Q2
            var q2 = new QuarterRange(calendarYear.BaseYear, QuarterKind.Second, timeCalendar);

            q2.YearBaseMonth.Should().Be(calendarYear.YearBaseMonth);
            q2.BaseYear.Should().Be(calendarYear.BaseYear);
            q2.Start.Should().Be(new DateTime(currentYear + 1, 1, 1));
            q2.End.Should().Be(q2.TimeCalendar.MapEnd(q2.Start.AddMonths(TimeSpec.MonthsPerQuarter)));
            q2.UnmappedEnd.Should().Be(q2.Start.AddMonths(TimeSpec.MonthsPerQuarter));

            // Q3
            var q3 = new QuarterRange(calendarYear.BaseYear, QuarterKind.Third, timeCalendar);

            q3.YearBaseMonth.Should().Be(calendarYear.YearBaseMonth);
            q3.BaseYear.Should().Be(calendarYear.BaseYear);
            q3.Start.Should().Be(new DateTime(currentYear + 1, 4, 1));
            q3.End.Should().Be(q3.TimeCalendar.MapEnd(q3.Start.AddMonths(TimeSpec.MonthsPerQuarter)));
            q3.UnmappedEnd.Should().Be(q3.Start.AddMonths(TimeSpec.MonthsPerQuarter));

            // Q4
            var q4 = new QuarterRange(calendarYear.BaseYear, QuarterKind.Fourth, timeCalendar);

            q4.YearBaseMonth.Should().Be(calendarYear.YearBaseMonth);
            q4.BaseYear.Should().Be(calendarYear.BaseYear);
            q4.Start.Should().Be(new DateTime(currentYear + 1, 7, 1));
            q4.End.Should().Be(q4.TimeCalendar.MapEnd(q4.Start.AddMonths(TimeSpec.MonthsPerQuarter)));
            q4.UnmappedEnd.Should().Be(q4.Start.AddMonths(TimeSpec.MonthsPerQuarter));
        }
Beispiel #19
0
        public void WaterYear2000()
        {
            YearRange wy = new YearRange(2000, 10);

            Assert.AreEqual(2000, wy.Year, "water year");
            Assert.AreEqual(wy.BeginningMonth, 10, " should be october");

            Assert.AreEqual(1999,wy.DateTime1.Year);
            Assert.AreEqual(10,wy.DateTime1.Month);
            Assert.AreEqual(1,wy.DateTime1.Day);

            Assert.AreEqual(2000,wy.DateTime2.Year);
            Assert.AreEqual(9,wy.DateTime2.Month);
            Assert.AreEqual(30,wy.DateTime2.Day);
        }
Beispiel #20
0
        public void CalendarYear2000()
        {
            YearRange wy = new YearRange(2000, 1);

            Assert.AreEqual(2000, wy.Year, "water year");
            Assert.AreEqual(wy.BeginningMonth, 1, " should be january");

            Assert.AreEqual(2000, wy.DateTime1.Year);
            Assert.AreEqual(1, wy.DateTime1.Month);
            Assert.AreEqual(1, wy.DateTime1.Day);

            Assert.AreEqual(2000, wy.DateTime2.Year);
            Assert.AreEqual(12, wy.DateTime2.Month);
            Assert.AreEqual(31, wy.DateTime2.Day);
        }
Beispiel #21
0
        public void WaterYear2000()
        {
            YearRange wy = new YearRange(2000, 10);

            Assert.AreEqual(2000, wy.Year, "water year");
            Assert.AreEqual(wy.BeginningMonth, 10, " should be october");

            Assert.AreEqual(1999, wy.DateTime1.Year);
            Assert.AreEqual(10, wy.DateTime1.Month);
            Assert.AreEqual(1, wy.DateTime1.Day);

            Assert.AreEqual(2000, wy.DateTime2.Year);
            Assert.AreEqual(9, wy.DateTime2.Month);
            Assert.AreEqual(30, wy.DateTime2.Day);
        }
Beispiel #22
0
        public void CalendarYear2000()
        {
            YearRange wy = new YearRange(2000, 1);

            Assert.AreEqual(2000, wy.Year, "water year");
            Assert.AreEqual(wy.BeginningMonth, 1, " should be january");

            Assert.AreEqual(2000, wy.DateTime1.Year);
            Assert.AreEqual(1, wy.DateTime1.Month);
            Assert.AreEqual(1, wy.DateTime1.Day);

            Assert.AreEqual(2000, wy.DateTime2.Year);
            Assert.AreEqual(12, wy.DateTime2.Month);
            Assert.AreEqual(31, wy.DateTime2.Day);
        }
Beispiel #23
0
        private void AddStatistics(SeriesList wyList)
        {
            bool anyStats = checkBoxMax.Checked || checkBoxMin.Checked || checkBoxAvg.Checked || checkBoxPctls.Checked;

            if (!anyStats)
            {
                return;
            }

            int y1 = 1990;
            int y2 = 2011;

            int[] pctls = new int[] { };

            int.TryParse(this.textBoxWY1.Text, out y1);
            int.TryParse(this.textBoxWY2.Text, out y2);

            if (checkBoxPctls.Checked)
            {
                try
                {
                    string   values = textBoxPctls.Text;
                    string[] tokens = values.Split(',');
                    pctls = Array.ConvertAll <string, int>(tokens, int.Parse);
                }
                catch
                {
                    pctls = new int[] { 10, 50, 90 };
                }
            }

            DateTime t1 = new DateTime(y1 - 1, 10, 1);
            DateTime t2 = new DateTime(y2, 9, 30);

            var    server = HydrometInfoUtility.HydrometServerFromPreferences();
            Series s      = new HydrometDailySeries(comboBoxCbtt.Text.Trim(), DeterminePcode(), server);

            s.Read(t1, t2);
            s.RemoveMissing();
            s.Appearance.LegendText = "";

            YearRange yr   = new YearRange(2000, 10);
            var       list = Math.SummaryHydrograph(s, pctls, yr.DateTime1, checkBoxMax.Checked, checkBoxMin.Checked, checkBoxAvg.Checked, false); //, false);


            wyList.Add(list);
        }
Beispiel #24
0
        /// <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;
            }
        }
Beispiel #25
0
        public void GetQuarterTest()
        {
            // Case 1
            var year1 = new YearRange(2017);
            var q1    = year1.GetQuarter(Quarter.First);

            Assert.AreEqual(Quarter.First, q1.Value);
            Assert.AreEqual(new DateTime(2017, 4, 1), q1.RangeFrom);
            Assert.AreEqual(new DateTime(2017, 6, 30), q1.RangeTo);

            // Case 2
            var year2 = new YearRange(2017, Month.October, 21);
            var q4    = year2.GetQuarter(Quarter.Fourth);

            Assert.AreEqual(Quarter.Fourth, q4.Value);
            Assert.AreEqual(new DateTime(2018, 7, 21), q4.RangeFrom);
            Assert.AreEqual(new DateTime(2018, 10, 20), q4.RangeTo);
        }
Beispiel #26
0
        public void GetMonthTest()
        {
            // Case 1
            var year1 = new YearRange(2017);
            var aug   = year1.GetMonth(Month.August);

            Assert.AreEqual(Month.August, aug.Value);
            Assert.AreEqual(new DateTime(2017, 8, 1), aug.RangeFrom);
            Assert.AreEqual(new DateTime(2017, 8, 31), aug.RangeTo);

            // Case 2
            var year2 = new YearRange(2017, Month.October, 21);
            var feb   = year2.GetMonth(Month.February);

            Assert.AreEqual(Month.February, feb.Value);
            Assert.AreEqual(new DateTime(2018, 2, 21), feb.RangeFrom);
            Assert.AreEqual(new DateTime(2018, 3, 20), feb.RangeTo);
        }
Beispiel #27
0
        public void IndexerTest()
        {
            // Case 1
            var year1 = new YearRange(2017);
            var aug   = year1[Month.August];

            Assert.AreEqual(Month.August, aug.Value);
            Assert.AreEqual(new DateTime(2017, 8, 1), aug.RangeFrom);
            Assert.AreEqual(new DateTime(2017, 8, 31), aug.RangeTo);

            // Case 2
            var year2 = new YearRange(2017, Month.October, 21);
            var q4    = year2[Quarter.Fourth];

            Assert.AreEqual(Quarter.Fourth, q4.Value);
            Assert.AreEqual(new DateTime(2018, 7, 21), q4.RangeFrom);
            Assert.AreEqual(new DateTime(2018, 10, 20), q4.RangeTo);
        }
        public void CollectExcludePeriodTest()
        {
            const int workingDays2011      = 365 - 2 - (51 * 2) - 1;
            const int workingDaysMarch2011 = 31 - 8; // total days - weekend days

            var year2011 = new YearRange(2011);

            var filter1 = new CalendarPeriodCollectorFilter();

            filter1.AddWorkingWeekDays();

            var collector1 = new CalendarPeriodCollector(filter1, year2011);

            collector1.CollectDays();
            collector1.Periods.Count.Should().Be(workingDays2011);

            // 3월 제외
            var filter2 = new CalendarPeriodCollectorFilter();

            filter2.AddWorkingWeekDays();
            filter2.ExcludePeriods.Add(new MonthRange(2011, March));

            var collector2 = new CalendarPeriodCollector(filter2, year2011);

            collector2.CollectDays();
            collector2.Periods.Count.Should().Be(workingDays2011 - workingDaysMarch2011);


            // 2011년 26주차~27주차 (여름휴가가 2주야!!!)
            //
            var filter3 = new CalendarPeriodCollectorFilter();

            filter3.AddWorkingWeekDays();
            filter3.ExcludePeriods.Add(new MonthRange(2011, March));
            filter3.ExcludePeriods.Add(new WeekRangeCollection(2011, 26, 2));

            var collector3 = new CalendarPeriodCollector(filter3, year2011);

            collector3.CollectDays();
            collector3.Periods.Count.Should().Be(workingDays2011 - workingDaysMarch2011 - 2 * TimeSpec.WeekDaysPerWeek);
        }
Beispiel #29
0
            public static bool TryParse(string value, out YearRange result)
            {
                if (value.Contains('-'))
                {
                    var years = value.Split(new[] { '-' }, StringSplitOptions.RemoveEmptyEntries);
                    if (years.Length == 2 && Year.TryParse(years[0], out var s) && Year.TryParse(years[1], out var e))
                    {
                        result = new YearRange(s, e);
                        return(true);
                    }

                    if (years.Length == 1 && Year.TryParse(years[0], out var s1))
                    {
                        result = new YearRange(s1);
                        return(true);
                    }
                }

                result = null;
                return(false);
            }
Beispiel #30
0
        public void MonthsTest()
        {
            var year     = new YearRange(2017);
            var months   = year.Months().Select(r => r.RangeFrom).ToList();
            var expected = new List <DateTime?>
            {
                new DateTime(2017, 4, 1),
                new DateTime(2017, 5, 1),
                new DateTime(2017, 6, 1),
                new DateTime(2017, 7, 1),
                new DateTime(2017, 8, 1),
                new DateTime(2017, 9, 1),
                new DateTime(2017, 10, 1),
                new DateTime(2017, 11, 1),
                new DateTime(2017, 12, 1),
                new DateTime(2018, 1, 1),
                new DateTime(2018, 2, 1),
                new DateTime(2018, 3, 1)
            };

            Assert.IsTrue(expected.SequenceEqual(months));
        }
Beispiel #31
0
        private void buttonRefresh_Click(object sender, EventArgs e)
        {
            try
            {
                Cursor = Cursors.WaitCursor;
                Application.DoEvents();
                timeSeriesGraph1.Clear();
                string   data  = graphProperties1.SelectedItem.Trim();
                string   title = "";
                int[]    wy    = null;
                string[] cbtt;
                string[] pcode;
                ParseInput(data, out title, out wy, out cbtt, out pcode);

                var list = new SeriesList();
                for (int i = 0; i < cbtt.Length; i++)
                {
                    YearRange yr = new YearRange(wy[i], this.monthDayRangePicker1.BeginningMonth);
                    var       s  = new HydrometDailySeries(cbtt[i], pcode[i]);
                    DateTime  t1 = new DateTime(yr.DateTime1.Year, monthDayRangePicker1.MonthDayRange.Month1, monthDayRangePicker1.MonthDayRange.Day1);
                    DateTime  t2 = new DateTime(yr.DateTime2.Year, monthDayRangePicker1.MonthDayRange.Month2, monthDayRangePicker1.MonthDayRange.Day2);

                    s.Read(t1, t2);
                    Series s2 = Reclamation.TimeSeries.Math.ShiftToYear(s, 2000);
                    s2.Appearance.LegendText = cbtt[i] + " " + pcode[i] + " " + wy[i];
                    list.Add(s2);
                }

                this.timeSeriesGraph1.AnalysisType = AnalysisType.WaterYears;
                this.timeSeriesGraph1.Series       = list;
                timeSeriesGraph1.MultiLeftAxis     = UserPreference.Lookup("MultipleYAxis") == "True";
                this.timeSeriesGraph1.Title        = title;
                this.timeSeriesGraph1.Draw(true);
            }
            finally
            {
                Cursor = Cursors.Default;
            }
        }
Beispiel #32
0
        protected YearRange StartYearVisit(YearRange year, TContext context, SeekDirection?visitDirection = null)
        {
            year.ShouldNotBeNull("year");
            var direction = visitDirection ?? SeekDirection;

            if (IsDebugEnabled)
            {
                log.Debug("Year 단위로 탐색합니다. year=[{0}], context=[{1}], direction=[{2}]", year, context, direction);
            }

            YearRange lastVisited = null;

            OnVisitStart();

            var minStart = DateTime.MinValue;
            var maxEnd   = DateTime.MaxValue.AddYears(-1);
            var offset   = (direction == SeekDirection.Forward) ? 1 : -1;

            while (year.Start > minStart && year.End < maxEnd)
            {
                if (OnVisitYear(year, context) == false)
                {
                    lastVisited = year;
                    break;
                }

                year = year.AddYears(offset);
            }

            OnVisitEnd();

            if (IsDebugEnabled)
            {
                log.Debug("마지막 탐색 Year. lastVisited=[{0}]", lastVisited);
            }

            return(lastVisited);
        }
Beispiel #33
0
        public static Date ParseOne(string value)
        {
            var v = value.Trim(' ', '[', ']')
                    .Replace(".", " ")
                    .Replace("  ", " ")
                    .Replace("Sept", "Sep")
                    .Replace("Apl", "Apr")
                    .Replace("Aprl", "Apr");

            if (Undated.TryParse(v, out var u))
            {
                return(u);
            }

            if (DateRange.TryParse(v, out var dr))
            {
                return(dr);
            }

            if (YearRange.TryParse(v, out var yrr))
            {
                return(yrr);
            }

            if (Year.TryParse(v, out var yr))
            {
                return(yr);
            }

            if (Day.TryParse(v, out var dt))
            {
                return(dt);
            }


            return(new Unparsed(value));
        }
Beispiel #34
0
        private void linkLabelSortOrder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            FormSumRange sr = new FormSumRange();

            if (sr.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                var s = m_db.GetSeriesFromName(sr.SeriesName);
                if (s == null)
                {
                    MessageBox.Show("Error: The Series '" + sr.SeriesName + "' could not be found. Please check the spelling.  A short name without spaces works best.");
                    return;
                }

                s.Read();

                Series sum = Reclamation.TimeSeries.Math.AnnualSum(s, sr.MonthDayRange, 10);
                for (int i = 0; i < scenarioTable.Rows.Count; i++)
                {
                    int yr;
                    if (!Int32.TryParse(scenarioTable[i].Name, out yr))
                    {
                        MessageBox.Show("Error: The scenario name must be a year (integer) ");
                    }

                    YearRange yRange = new YearRange(yr, 10);
                    Series    sYear  = Reclamation.TimeSeries.Math.Subset(sum, yRange.DateTime1, yRange.DateTime2);

                    if (sYear.Count > 0)
                    {
                        scenarioTable[i].SortOrder = Convert.ToInt32(sYear[0].Value);
                        //scenarioTable[i].Path+=.Rows[i]["Note"] = sYear[0].Flag;
                    }
                }
                dataGridView.Columns["SortOrder"].Visible = true;
            }
        }
Beispiel #35
0
 protected virtual bool OnVisitYear(YearRange year, TContext context)
 {
     return(true);
 }
Beispiel #36
0
        private void linkLabelSortOrder_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            FormSumRange sr = new FormSumRange();
            if (sr.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                var s = m_db.GetSeriesFromName(sr.SeriesName);
                if (s == null)
                {
                    MessageBox.Show("Error: The Series '"+sr.SeriesName +"' could not be found. Please check the spelling.  A short name without spaces works best.");
                    return;
                }

                s.Read();

                Series sum = Reclamation.TimeSeries.Math.AnnualSum(s, sr.MonthDayRange, 10);
                for (int i = 0; i < scenarioTable.Rows.Count; i++)
                {
                    int yr;
                    if (!Int32.TryParse(scenarioTable[i].Name, out yr))
                    {
                        MessageBox.Show("Error: The scenario name must be a year (integer) ");
                    }

                    YearRange yRange = new YearRange(yr, 10);
                    Series sYear = Reclamation.TimeSeries.Math.Subset(sum, yRange.DateTime1, yRange.DateTime2);

                    if (sYear.Count > 0)
                    {
                        scenarioTable[i].SortOrder = Convert.ToInt32(sYear[0].Value);
                        //scenarioTable[i].Path+=.Rows[i]["Note"] = sYear[0].Flag;
                    }
                }
                dataGridView.Columns["SortOrder"].Visible = true;

            }
        }