private FetchClimateBatchResponce FetchClimateTimeSeries(ClimateParameter p, double latmin, double latmax, double lonmin, double lonmax, int hourmin, int hourmax, int daymin, int daymax, int yearmin, int yearmax, int divider, IntervalToSplit intervalToSplit, FetchingOptions options) { int n; if (hourmax == GlobalConsts.DefaultValue) hourmax = 24; if (hourmin == GlobalConsts.DefaultValue) hourmin = 0; bool isReplaceDayMaxWithDefVal = (yearmax!=yearmin && (daymax==GlobalConsts.DefaultValue || daymax==365)); if (daymin == GlobalConsts.DefaultValue) daymin = 1; int effDayMax = daymax; if (effDayMax == GlobalConsts.DefaultValue) effDayMax = (yearmin == yearmax) ? (DateTime.IsLeapYear(yearmin) ? 366 : 365) : 365; ResearchVariationType rvt = ResearchVariationType.Auto; switch (intervalToSplit) { case IntervalToSplit.Years: n = (int)Math.Ceiling((yearmax - yearmin + 1) / (double)divider); rvt = ResearchVariationType.Yearly; break; case IntervalToSplit.Days: n = (int)Math.Ceiling((effDayMax - daymin + 1) / (double)divider); rvt = ResearchVariationType.Seasonly; break; case IntervalToSplit.Hours: n = (int)Math.Ceiling((hourmax - hourmin + 1) / (double)divider); rvt = ResearchVariationType.Hourly; break; default: throw new NotImplementedException(); } double[] latmaxs = new double[n]; double[] latmins = new double[n]; double[] lonmaxs = new double[n]; double[] lonmins = new double[n]; int[] hourmins = new int[n]; int[] hourmaxs = new int[n]; int[] daymins = new int[n]; int[] daymaxs = new int[n]; int[] yearmins = new int[n]; int[] yearmaxs = new int[n]; int yi = (intervalToSplit == IntervalToSplit.Years) ? 1 : 0; int di = (intervalToSplit == IntervalToSplit.Days) ? 1 : 0; int hi = (intervalToSplit == IntervalToSplit.Hours) ? 1 : 0; for (int i = 0; i < n; i++) { latmaxs[i] = latmax; latmins[i] = latmin; lonmaxs[i] = lonmax; lonmins[i] = lonmin; hourmins[i] = Math.Min((hi==0)?hourmin:(hourmin + hi * i * divider),24); hourmaxs[i] = Math.Min((hi == 0) ? hourmax : (hourmin + hi * ((i + 1) * divider-1)), 24); yearmins[i] = (yi == 0) ? yearmin : (yearmin + yi * i * divider); yearmaxs[i] = (yi == 0) ? yearmax:(yearmin + yi * ((i + 1) * divider-1)); daymins[i] = Math.Min((di==0)?daymin:(daymin + di *(i * divider)),(yearmins[i]==yearmaxs[i] && DateTime.IsLeapYear(yearmins[i]))?366:365); if (isReplaceDayMaxWithDefVal && intervalToSplit!=IntervalToSplit.Days) daymaxs[i] = GlobalConsts.DefaultValue; else daymaxs[i] = Math.Min((di == 0) ? daymax : (daymin + di * ((i + 1) * divider - 1)), (yearmins[i] == yearmaxs[i] && DateTime.IsLeapYear(yearmins[i])) ? 366 : 365); } return FetchClimate(p, latmins, latmaxs, lonmins, lonmaxs, hourmins, hourmaxs, daymins, daymaxs, yearmins, yearmaxs, options,rvt); }
private FetchClimateBatchResponce FetchClimateTimeSeries(ClimateParameter p, double latmin, double latmax, double lonmin, double lonmax, int hourmin, int hourmax, int daymin, int daymax, int yearmin, int yearmax, int divider, IntervalToSplit intervalToSplit, FetchingOptions options) { int n; if (hourmax == GlobalConsts.DefaultValue) { hourmax = 24; } if (hourmin == GlobalConsts.DefaultValue) { hourmin = 0; } bool isReplaceDayMaxWithDefVal = (yearmax != yearmin && (daymax == GlobalConsts.DefaultValue || daymax == 365)); if (daymin == GlobalConsts.DefaultValue) { daymin = 1; } int effDayMax = daymax; if (effDayMax == GlobalConsts.DefaultValue) { effDayMax = (yearmin == yearmax) ? (DateTime.IsLeapYear(yearmin) ? 366 : 365) : 365; } ResearchVariationType rvt = ResearchVariationType.Auto; switch (intervalToSplit) { case IntervalToSplit.Years: n = (int)Math.Ceiling((yearmax - yearmin + 1) / (double)divider); rvt = ResearchVariationType.Yearly; break; case IntervalToSplit.Days: n = (int)Math.Ceiling((effDayMax - daymin + 1) / (double)divider); rvt = ResearchVariationType.Seasonly; break; case IntervalToSplit.Hours: n = (int)Math.Ceiling((hourmax - hourmin + 1) / (double)divider); rvt = ResearchVariationType.Hourly; break; default: throw new NotImplementedException(); } double[] latmaxs = new double[n]; double[] latmins = new double[n]; double[] lonmaxs = new double[n]; double[] lonmins = new double[n]; int[] hourmins = new int[n]; int[] hourmaxs = new int[n]; int[] daymins = new int[n]; int[] daymaxs = new int[n]; int[] yearmins = new int[n]; int[] yearmaxs = new int[n]; int yi = (intervalToSplit == IntervalToSplit.Years) ? 1 : 0; int di = (intervalToSplit == IntervalToSplit.Days) ? 1 : 0; int hi = (intervalToSplit == IntervalToSplit.Hours) ? 1 : 0; for (int i = 0; i < n; i++) { latmaxs[i] = latmax; latmins[i] = latmin; lonmaxs[i] = lonmax; lonmins[i] = lonmin; hourmins[i] = Math.Min((hi == 0)?hourmin:(hourmin + hi * i * divider), 24); hourmaxs[i] = Math.Min((hi == 0) ? hourmax : (hourmin + hi * ((i + 1) * divider - 1)), 24); yearmins[i] = (yi == 0) ? yearmin : (yearmin + yi * i * divider); yearmaxs[i] = (yi == 0) ? yearmax:(yearmin + yi * ((i + 1) * divider - 1)); daymins[i] = Math.Min((di == 0)?daymin:(daymin + di * (i * divider)), (yearmins[i] == yearmaxs[i] && DateTime.IsLeapYear(yearmins[i]))?366:365); if (isReplaceDayMaxWithDefVal && intervalToSplit != IntervalToSplit.Days) { daymaxs[i] = GlobalConsts.DefaultValue; } else { daymaxs[i] = Math.Min((di == 0) ? daymax : (daymin + di * ((i + 1) * divider - 1)), (yearmins[i] == yearmaxs[i] && DateTime.IsLeapYear(yearmins[i])) ? 366 : 365); } } return(FetchClimate(p, latmins, latmaxs, lonmins, lonmaxs, hourmins, hourmaxs, daymins, daymaxs, yearmins, yearmaxs, options, rvt)); }