public void GhcnTempUncertaintyTest() { string etopoLocalUri = TestConstants.UriEtopo; var ghcnStorage = TestDataStorageFactory.GetStorage(TestConstants.UriGHCN); var etopoStorage = TestDataStorageFactory.GetStorage(etopoLocalUri); GHCNDataHandler handler = new GHCNDataHandler(ghcnStorage); ETOPO1DataSource.ETOPO1DataHandler elevationHandler = new ETOPO1DataSource.ETOPO1DataHandler(etopoStorage); TimeRegion tr = new TimeRegion(firstYear: 1921, lastYear: 1921).GetMonthlyTimeseries(firstMonth: 3, lastMonth: 3); //data index 2642 FetchDomain domain = FetchDomain.CreatePoints( new double[] { 36.27 }, //exact station. data index 3776 new double[] { -90.97 }, tr); FetchRequest tempRequest = new FetchRequest("temp", domain); Func <FetchRequest, Array> elevHandling = req => { var rewrittenReq = new FetchRequest("Elevation", req.Domain); return(elevationHandler.AggregateAsync(RequestContextStub.GetStub(etopoStorage, rewrittenReq), null).Result); }; var reqContext = RequestContextStub.GetStub(ghcnStorage, tempRequest, elevHandling); var compCont = new ComputationalContext(); Assert.AreEqual(0.0, (double)handler.EvaluateAsync(reqContext, compCont).Result.GetValue(0), 1e-6); //manual data comparison. }
public void GHCNtempInterpolationPointsTest() { FetchDomain fd = FetchDomain.CreatePoints(new double[] { 1.5 }, new double[] { 1.0 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 60, lastDay: 90)); //mar FetchRequest fr = new FetchRequest("temp", fd); GhcnStorageContext storage = new GhcnStorageContext(fr); GHCNDataHandler sotdh = new GHCNDataHandler(storage); var compCont = new ComputationalContext(); var evRes = sotdh.EvaluateAsync(storage, compCont).Result; var result = (double[])sotdh.AggregateAsync(storage, compCont).Result; //val = 3/5*lat-1 = 3/5*(1.5)-1 = -0.1 Assert.AreEqual(-0.1, result[0], TestConstants.DoublePrecision); fd = FetchDomain.CreatePoints(new double[] { -2.5 }, new double[] { 1.0 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 60, lastDay: 90)); //mar fr = new FetchRequest("temp", fd); storage = new GhcnStorageContext(fr); sotdh = new GHCNDataHandler(storage); compCont = new ComputationalContext(); evRes = sotdh.EvaluateAsync(storage, compCont).Result; result = (double[])sotdh.AggregateAsync(storage, compCont).Result; //val = 3/5*lat = 3/5*(-2.5) = -1.5 Assert.AreEqual(-1.5, result[0], TestConstants.DoublePrecision); }
public async Task ReanslysisUncertatintyTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriReanalysisRegular); NCEPReanalysisRegularGridDataHandler regularHandler = await NCEPReanalysisRegularGridDataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion(firstYear: 1961, lastYear: 1990); IFetchDomain dataDomain1 = FetchDomain.CreatePoints( new double[] { 37.5 }, new double[] { 30.0 }, tr); IFetchDomain dataDomain2 = FetchDomain.CreatePoints( new double[] { 37.5 }, new double[] { -30.0 }, tr); FetchRequest dataRequest1 = new FetchRequest("air", dataDomain1); FetchRequest dataRequest2 = new FetchRequest("air", dataDomain2); var handlerPrivate = new PrivateObject(regularHandler, new PrivateType(typeof(DataHandlerFacade))); var evaluatorPrivate = new PrivateObject(handlerPrivate, "uncertaintyEvaluator"); Array dataUncertainty1 = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, dataRequest1))); Array dataUncertainty2 = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, dataRequest2))); Assert.IsFalse(double.IsNaN((double)dataUncertainty1.GetValue(0))); Assert.IsFalse(double.IsNaN((double)dataUncertainty2.GetValue(0))); Assert.IsTrue(((double)dataUncertainty1.GetValue(0)) < double.MaxValue); Assert.IsTrue(((double)dataUncertainty2.GetValue(0)) < double.MaxValue); Assert.IsTrue(((double)dataUncertainty1.GetValue(0)) >= 0.0); Assert.IsTrue(((double)dataUncertainty2.GetValue(0)) >= 0.0); }
public void MarksRequestTest() { double[] latmin = null, latmax, lonmin, lonmax = null; int[] startday, stopday, startyear, stopyear, starthour, stophour; FetchRequest fr = null; using (DataSet ds = DataSet.Open(@"423b28bf6a4357f14b64f2b16ab759cb6b5961db.csv?openMode=readOnly")) { latmin = ((double[])ds.Variables["LatMin"].GetData()).Select(e => (double)e).ToArray(); latmax = ((double[])ds.Variables["LatMax"].GetData()).Select(e => (double)e).ToArray(); lonmin = ((double[])ds.Variables["LonMin"].GetData()).Select(e => (double)e).ToArray(); lonmax = ((double[])ds.Variables["LonMax"].GetData()).Select(e => (double)e).ToArray(); startday = ((int[])ds.Variables["StartDay"].GetData()); stopday = ((int[])ds.Variables["StopDay"].GetData()); starthour = ((int[])ds.Variables["StartHour"].GetData()); stophour = ((int[])ds.Variables["StartHour"].GetData()); startyear = ((int[])ds.Variables["StartYear"].GetData()); stopyear = ((int[])ds.Variables["StartYear"].GetData()); TimeRegion tr = new TimeRegion(startyear[0], stopyear[0]); fr = new FetchRequest("prate", FetchDomain.CreatePoints(latmin, lonmax, tr), new string[] { "CRU CL 2.0" }); } var request = JobManager.EvaluateSubrequestData(fr, 18, 16); }
public async Task CruAllVaraiblesValuesTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriCru); CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion().GetMonthlyTimeseries(firstMonth: 1, lastMonth: 1); IFetchDomain domain = FetchDomain.CreatePoints( new double[] { 48.25 }, // data index 679 new double[] { -100.25 }, //data index 478 tr); var handlerPrivate = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); FetchRequest tmpRequest = new FetchRequest("tmp", domain); FetchRequest preRequest = new FetchRequest("pre", domain); FetchRequest wndRequest = new FetchRequest("wnd", domain); FetchRequest sunpRequest = new FetchRequest("sunp", domain); FetchRequest rehRequest = new FetchRequest("reh", domain); FetchRequest rd0Request = new FetchRequest("rd0", domain); FetchRequest frsRequest = new FetchRequest("frs", domain); FetchRequest dtrRequest = new FetchRequest("dtr", domain); Assert.AreEqual(4.9, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, wndRequest), null))).GetValue(0), TestConstants.FloatPrecision); //manual data comparision Assert.AreEqual(-15.4, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, tmpRequest), null))).GetValue(0), TestConstants.FloatPrecision); Assert.AreEqual(48.1, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, sunpRequest), null))).GetValue(0), TestConstants.FloatPrecision); Assert.AreEqual(74.5, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, rehRequest), null))).GetValue(0), TestConstants.FloatPrecision); Assert.AreEqual(7.6, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, rd0Request), null))).GetValue(0), TestConstants.FloatPrecision); Assert.AreEqual(14.0, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, preRequest), null))).GetValue(0), TestConstants.FloatPrecision); Assert.AreEqual(30.7, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, frsRequest), null))).GetValue(0), TestConstants.FloatPrecision); Assert.AreEqual(11.8, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, dtrRequest), null))).GetValue(0), TestConstants.FloatPrecision); }
public void PartsCountingInSingleDimensionalRequestTest() { var tr = new TimeRegion(firstYear: 1990, lastYear: 2001); var request = new FetchRequest( "pet", FetchDomain.CreatePoints( Enumerable.Range(0, 1500).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 1500).Select(i => 70.0 + i * 0.1).ToArray(), tr)); // 1500 pts in this request Assert.AreEqual(3, JobManager.GetPartitionsCount(request, 0, 10000, 20)); Assert.AreEqual(1, JobManager.GetPartitionsCount(request, 1000, 10000, 310)); var request2 = new FetchRequest( "pet", FetchDomain.CreateCells( Enumerable.Range(0, 15000).Select(i => 5.0 + i * 0.1).ToArray(), Enumerable.Range(0, 15000).Select(i => 70.0 + i * 0.1).ToArray(), Enumerable.Range(0, 15000).Select(i => 6.0 + i * 0.1).ToArray(), Enumerable.Range(0, 15000).Select(i => 71.0 + i * 0.1).ToArray(), tr)); //15000 cells Assert.AreEqual(30, JobManager.GetPartitionsCount(request2, 0, 10000, 102)); Assert.AreEqual(15, JobManager.GetPartitionsCount(request2, 0, 10000, 20)); Assert.AreEqual(15, JobManager.GetPartitionsCount(request2, 1000, 10000, 102)); }
public async Task FederatedFetchingNanHandlingTest() { FederationTestConfigurationProvider provider = new FederationTestConfigurationProvider(); Dictionary <string, StaticValuesForRectDataHandler[]> federatedDsDict = new Dictionary <string, StaticValuesForRectDataHandler[]>(); federatedDsDict["http://1/"] = new StaticValuesForRectDataHandler[] { new Static_25_45_Handler(), new StaticNanYielding_30_50_Handler() }; federatedDsDict["http://2/"] = new StaticValuesForRectDataHandler[] { new Static_35_55_Handler() }; FederatedDsTestingFetchEngine fetchEngine = new FederatedDsTestingFetchEngine(provider, federatedDsDict); FetchDomain fd = FetchDomain.CreatePoints(new double[] { 5.0, 5.0, 5.0, 5.0 }, new double[] { 37.0, 42.0, 47.0, 52.0 }, new TimeRegion()); FetchRequest request = new FetchRequest("a", fd); FetchResponseWithProvenance result = await fetchEngine.PerformRequestAsync(request); Assert.AreEqual(-50.0, result.Values.GetValue(0)); Assert.AreEqual(50.0, result.Uncertainty.GetValue(0)); Assert.AreEqual((ushort)0, result.Provenance.GetValue(0)); Assert.AreEqual(-60.0, result.Values.GetValue(1)); //serve Assert.AreEqual(60.0, result.Uncertainty.GetValue(1)); Assert.AreEqual((ushort)1, result.Provenance.GetValue(1)); Assert.AreEqual(-80.0, result.Values.GetValue(2)); //here instead of StaticNanYielding_30_50_Handler, Static_35_55_Handler must provide results Assert.AreEqual(80.0, result.Uncertainty.GetValue(2)); Assert.AreEqual((ushort)3, result.Provenance.GetValue(2)); Assert.AreEqual(-80.0, result.Values.GetValue(3)); Assert.AreEqual(80.0, result.Uncertainty.GetValue(3)); Assert.AreEqual((ushort)3, result.Provenance.GetValue(3)); }
public void GHCNprateInterpolationPointsTest() { FetchDomain fd = FetchDomain.CreatePoints(new double[] { 0.5 }, new double[] { 1.0 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 91, lastDay: 120)); //april FetchRequest fr = new FetchRequest("prate", fd); GhcnStorageContext storage = new GhcnStorageContext(fr); GHCNDataHandler sotdh = new GHCNDataHandler(storage); var compCont = new ComputationalContext(); var evRes = sotdh.EvaluateAsync(storage, compCont).Result; var result = (double[])sotdh.AggregateAsync(storage, compCont).Result; //val = 6/5*lat = 6/5*(0.5) = -3 Assert.AreEqual(0.6, result[0], TestConstants.DoublePrecision); fd = FetchDomain.CreatePoints(new double[] { -5.0 }, new double[] { 1.0 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 91, lastDay: 120)); //april fr = new FetchRequest("prate", fd); storage = new GhcnStorageContext(fr); sotdh = new GHCNDataHandler(storage); compCont = new ComputationalContext(); evRes = sotdh.EvaluateAsync(storage, compCont).Result; result = (double[])sotdh.AggregateAsync(storage, compCont).Result; //val = 6/5*lat = 6/5*(-2.5) = -3 Assert.AreEqual(0.0, result[0], TestConstants.DoublePrecision); //as prate can't be negative, it is coerced to zero }
public async Task TwoFederatedDsOnSingleRemoteServiceTest() { FederationTestConfigurationProvider provider = new FederationTestConfigurationProvider(); Dictionary <string, StaticValuesForRectDataHandler[]> federatedDsDict = new Dictionary <string, StaticValuesForRectDataHandler[]>(); federatedDsDict["http://1/"] = new StaticValuesForRectDataHandler[] { new Static_25_45_Handler(), new Static_30_50_Handler() }; federatedDsDict["http://2/"] = new StaticValuesForRectDataHandler[] { new Static_35_55_Handler() }; FederatedDsTestingFetchEngine fetchEngine = new FederatedDsTestingFetchEngine(provider, federatedDsDict); FetchDomain fd = FetchDomain.CreatePoints(new double[] { 5.0, 5.0, 5.0, 5.0 }, new double[] { 37.0, 42.0, 47.0, 52.0 }, new TimeRegion()); FetchRequest request = new FetchRequest("a", fd, new string[] { "25_45", "30_50" }); FetchResponseWithProvenance result = await fetchEngine.PerformRequestAsync(request); Assert.AreEqual(-60.0, result.Values.GetValue(0)); Assert.AreEqual(60.0, result.Uncertainty.GetValue(0)); Assert.AreEqual((ushort)1, result.Provenance.GetValue(0)); Assert.AreEqual(-60.0, result.Values.GetValue(1)); Assert.AreEqual(60.0, result.Uncertainty.GetValue(1)); Assert.AreEqual((ushort)1, result.Provenance.GetValue(1)); Assert.AreEqual(-70.0, result.Values.GetValue(2)); Assert.AreEqual(70.0, result.Uncertainty.GetValue(2)); Assert.AreEqual((ushort)2, result.Provenance.GetValue(2)); Assert.AreEqual(-160.0, result.Values.GetValue(3)); Assert.AreEqual(160.0, result.Uncertainty.GetValue(3)); Assert.AreEqual((ushort)1, result.Provenance.GetValue(3)); }
public async Task MonthlyMeansMissingValueOnWaterTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriCru); CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion(); IFetchDomain domain = FetchDomain.CreatePoints( new double[] { 0.5 }, new double[] { 0.5 }, tr); FetchRequest request = new FetchRequest("tmp", domain); var handlerPrivate = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); for (int i = 0; i < 2; i++) { Array mask = i == 0 ? null : new bool[, ] { { true } }; var res = await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, request), null)); //lon,lat,t double[] temps = (double[])res; Assert.AreEqual(1, temps.Length); Assert.IsTrue(double.IsNaN(temps[0])); } }
public void CacheTest() { if (File.Exists("cache.csv")) { File.Delete("cache.csv"); } var result = ClimateService.FetchAsync(new FetchRequest("airt", FetchDomain.CreatePoints(new double[] { 57 }, new double[] { 0 }, new TimeRegion())), null, "cache.csv").Result; Assert.IsTrue(result.Variables.Contains("values")); try { ClimateService.ServiceUrl = "http://notexistentfetchclimateservice.localhost"; var result2 = ClimateService.FetchAsync(new FetchRequest("airt", FetchDomain.CreatePoints(new double[] { 57 }, new double[] { 0 }, new TimeRegion())), null, "cache.csv").Result; Assert.IsTrue(result2.Variables.Contains("values")); try { var result3 = ClimateService.FetchAsync(new FetchRequest("airt", FetchDomain.CreatePoints(new double[] { 57 }, new double[] { 0 }, new TimeRegion()))).Result; Assert.Fail(); } catch { // It is OK to be here } } finally { ClimateService.ServiceUrl = "http://fetchclimate2.cloudapp.net"; } }
public async Task ReanslysisNewYearCrossingSubDayTest() { var regularStorage = TestDataStorageFactory.GetStorageContext(TestConstants.UriReanalysisRegular); NCEPReanalysisRegularGridDataHandler regularHandler = await NCEPReanalysisRegularGridDataHandler.CreateAsync(regularStorage); ITimeRegion crossingTr = new TimeRegion(firstYear: 1950, lastYear: 1951, firstDay: 336, lastDay: 30, startHour: 0, stopHour: 12); IFetchDomain crossingDomain = FetchDomain.CreatePoints( new double[] { -37.5 }, // data index 51 new double[] { 137.5 }, //data index 55 crossingTr); ITimeRegion firstTr = new TimeRegion(firstYear: 1950, lastYear: 1950, firstDay: 336, lastDay: 365, startHour: 0, stopHour: 12); IFetchDomain firstDomain = FetchDomain.CreatePoints( new double[] { -37.5 }, // data index 51 new double[] { 137.5 }, //data index 55 firstTr); ITimeRegion secondTr = new TimeRegion(firstYear: 1951, lastYear: 1951, firstDay: 1, lastDay: 30, startHour: 0, stopHour: 12); IFetchDomain secondDomain = FetchDomain.CreatePoints( new double[] { -37.5 }, // data index 51 new double[] { 137.5 }, //data index 55 secondTr); var handlerPrivate = new PrivateObject(regularHandler, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); double crossing = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(regularStorage, new FetchRequest("air", crossingDomain)), null))).GetValue(0); double first = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(regularStorage, new FetchRequest("air", firstDomain)), null))).GetValue(0); double second = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(regularStorage, new FetchRequest("air", secondDomain)), null))).GetValue(0); Assert.AreEqual(crossing, (first + second) / 2.0, 1e-6); }
public async Task ReanalysisOutOfDataTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriReanalysisRegular); NCEPReanalysisRegularGridDataHandler regularHandler = await NCEPReanalysisRegularGridDataHandler.CreateAsync(storage); ITimeRegion firstDataYear = new TimeRegion(firstYear: 1245, lastYear: 1245); IFetchDomain dataDomain = FetchDomain.CreatePoints( new double[] { -37.5 }, // data index 51 new double[] { 137.5 }, //data index 55 firstDataYear); FetchRequest dataRequest = new FetchRequest("air", dataDomain); var handlerPrivate = new PrivateObject(regularHandler, new PrivateType(typeof(DataHandlerFacade))); var evaluatorPrivate = new PrivateObject(handlerPrivate, "uncertaintyEvaluator"); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); Array dataArray = await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, dataRequest), null));; Array dataUncertainty = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, dataRequest))); Assert.AreEqual(1, dataArray.Length); Assert.AreEqual(1, dataUncertainty.Length); Assert.IsTrue(double.IsNaN((double)dataArray.GetValue(0))); Assert.IsTrue(double.IsNaN((double)dataUncertainty.GetValue(0))); }
public async Task ReanalysisGrowingUncertainty() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriReanalysisRegular); NCEPReanalysisRegularGridDataHandler regularHandler = await NCEPReanalysisRegularGridDataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion(firstYear: 1961, lastYear: 1961, firstDay: 1, lastDay: 1, startHour: 0, stopHour: 0); IFetchDomain dataDenseDomain = FetchDomain.CreatePoints( new double[] { 76.25 }, new double[] { 31.25 }, tr);//more dense nodes IFetchDomain dataSparseDomain = FetchDomain.CreatePoints( new double[] { 1.25 }, new double[] { 31.25 }, tr);//more rare nodes FetchRequest dataDenseRequest = new FetchRequest("air", dataDenseDomain); FetchRequest dataSparseRequest = new FetchRequest("air", dataSparseDomain); var handlerPrivate = new PrivateObject(regularHandler, new PrivateType(typeof(DataHandlerFacade))); var evaluatorPrivate = new PrivateObject(handlerPrivate, "uncertaintyEvaluator"); Array dataDenseUncertainty = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, dataDenseRequest))); Array dataSparseUncertainty = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, dataSparseRequest))); Assert.IsFalse(double.IsNaN((double)dataDenseUncertainty.GetValue(0))); Assert.IsFalse(double.IsNaN((double)dataSparseUncertainty.GetValue(0))); Assert.IsTrue(((double)dataDenseUncertainty.GetValue(0)) < double.MaxValue); Assert.IsTrue(((double)dataSparseUncertainty.GetValue(0)) < double.MaxValue); Assert.IsTrue(((double)dataDenseUncertainty.GetValue(0)) >= 0.0); Assert.IsTrue(((double)dataSparseUncertainty.GetValue(0)) >= 0.0); //Assert.IsTrue(((double)dataDenseUncertainty.GetValue(0))<((double)dataSparseUncertainty.GetValue(0))); }
public async Task FetchingSingleDataSourceTest() { FederationTestConfigurationProvider provider = new FederationTestConfigurationProvider(); Dictionary <string, StaticValuesForRectDataHandler[]> federatedDsDict = new Dictionary <string, StaticValuesForRectDataHandler[]>(); federatedDsDict["http://1/"] = new StaticValuesForRectDataHandler[] { new Static_25_45_Handler(), new Static_30_50_Handler() }; federatedDsDict["http://2/"] = new StaticValuesForRectDataHandler[] { new Static_35_55_Handler() }; FederatedDsTestingFetchEngine fetchEngine = new FederatedDsTestingFetchEngine(provider, federatedDsDict); FetchDomain fd = FetchDomain.CreatePoints(new double[] { 5.0 }, new double[] { 37.0 }, new TimeRegion()); FetchRequest request = new FetchRequest("a", fd, new string[] { "20_40" }); //local FetchResponseWithProvenance result = await fetchEngine.PerformRequestAsync(request); Assert.AreEqual(-50.0, result.Values.GetValue(0)); Assert.AreEqual(50.0, result.Uncertainty.GetValue(0)); Assert.AreEqual((ushort)0, result.Provenance.GetValue(0)); request = new FetchRequest("a", fd, new string[] { "35_55" }); //federated result = await fetchEngine.PerformRequestAsync(request); Assert.AreEqual(-80.0, result.Values.GetValue(0)); Assert.AreEqual(80.0, result.Uncertainty.GetValue(0)); Assert.AreEqual((ushort)3, result.Provenance.GetValue(0)); }
public async Task TestLinearTransformDecorator() { var component = new ValAggStub(); var storage = TestDataStorageFactory.GetStorage("msds:memory"); storage.StorageDefinition.VariablesMetadata.Add("a", new MetaDataDictionary()); storage.StorageDefinition.VariablesMetadata["a"]["scale_factor"] = 13.0; storage.StorageDefinition.VariablesMetadata["a"]["add_offset"] = 17.0; var dec = new Microsoft.Research.Science.FetchClimate2.ValueAggregators.LinearTransformDecorator(storage, component); dec.SetAdditionalTranform("a", b => b * 3 + 7.0); FetchRequest fr = new FetchRequest("a", FetchDomain.CreatePoints(new double[] { 5.0 }, new double[] { -11.0 }, new TimeRegion())); IRequestContext rcs = RequestContextStub.GetStub(storage, fr); var res = await dec.AggregateCellsBatchAsync(rcs, new GeoCellTuple[] { new GeoCellTuple() { LatMax = 5.0, LatMin = 5.0, LonMax = -11.0, LonMin = -11.0, Time = new TimeSegment() } }); Assert.AreEqual(253.0, res[0]); }
public void MarksRequestsTest() { double[] latmin = null, latmax, lonmin, lonmax = null; int[] startday, stopday, startyear, stopyear, starthour, stophour; //ClimateService.ServiceUrl = serviceUri; ClimateService.ServiceUrl = serviceUri; using (DataSet ds = DataSet.Open(@"Data\423b28bf6a4357f14b64f2b16ab759cb6b5961db.csv?openMode=readOnly")) { using (DataSet resultDs = ds.Clone("msds:memory")) { latmin = ((double[])ds.Variables["LatMin"].GetData()).Select(e => (double)e).ToArray(); latmax = ((double[])ds.Variables["LatMax"].GetData()).Select(e => (double)e).ToArray(); lonmin = ((double[])ds.Variables["LonMin"].GetData()).Select(e => (double)e).ToArray(); lonmax = ((double[])ds.Variables["LonMax"].GetData()).Select(e => (double)e).ToArray(); startday = ((int[])ds.Variables["StartDay"].GetData()); stopday = ((int[])ds.Variables["StopDay"].GetData()); starthour = ((int[])ds.Variables["StartHour"].GetData()); stophour = ((int[])ds.Variables["StartHour"].GetData()); startyear = ((int[])ds.Variables["StartYear"].GetData()); stopyear = ((int[])ds.Variables["StartYear"].GetData()); TimeRegion tr = new TimeRegion(startyear[0], stopyear[0]); FetchRequest fr = new FetchRequest("prate", FetchDomain.CreatePoints(latmin, lonmax, tr), new string[] { "CRU CL 2.0" }); var result = ClimateService.FetchAsync(fr).Result; //resultDs.AddVariable<double>("result",result, "cells_dim"); ; } } }
private FetchDomain CreatePointsDomain(TimeRegion tr) { var eps = r.NextDouble() / 10.0; Trace.WriteLine(String.Format("Using eps={0}", eps)); return(FetchDomain.CreatePoints( new double[] { BayOfBiscaySELat + eps, InFranceLat + eps }, new double[] { BayOfBiscaySELon + eps, InFranceLon + eps }, tr)); }
public void PointRequestTest() { var tr = new TimeRegion(1990, 2000, 1, 358).GetYearlyTimeseries(1990, 2000, 1, true).GetSeasonlyTimeseries(1, 358, 1, true); var r = new FetchRequest( "airt", FetchDomain.CreatePoints( new double[] { 50, 52, 54 }, new double[] { 40, 42, 38 }, tr), new string[] { "CRU CL 2.0" }); RemoteFetchClient client = new RemoteFetchClient(new Uri(serviceUri)); var answer = client.FetchAsync(r).Result; }
public async Task SelectLowestUncertatintyAmongPermitedTest() { DsConstraintsTestConfigurationProvider provider = new DsConstraintsTestConfigurationProvider(); FetchClimate2.FetchEngine fetchEngine = new FetchClimate2.FetchEngine(provider); FetchDomain fd = FetchDomain.CreatePoints(new double[] { 5.0 }, new double[] { 35.0 }, new TimeRegion()); FetchRequest unconstraintRequest = new FetchRequest("a", fd); FetchRequest constraintRequest = new FetchRequest("a", fd, new string[] { "25_45", "30_50" }); Assert.AreEqual(-50.0, (await fetchEngine.PerformRequestAsync(unconstraintRequest)).Values.GetValue(0)); Assert.AreEqual(-60.0, (await fetchEngine.PerformRequestAsync(constraintRequest)).Values.GetValue(0)); }
public async Task GHCNOutOfDataTests() { IStorageContext storage = new GhcnStorageContextStub(); DataSourceHandler handler = await GHCNv2DataSource.DataHandler.CreateAsync(storage); IFetchDomain fd = FetchDomain.CreatePoints(new double[] { Math.Asin(1.0 / Math.Sqrt(3.0)) * 180.0 / Math.PI }, new double[] { 45.0 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 160, lastDay: 190)); //mar FetchRequest fr = new FetchRequest("temp", fd); IRequestContext requestContext = RequestContextStub.GetStub(storage, fr); var result = await handler.ProcessRequestAsync(requestContext); Assert.IsTrue(double.IsNaN((double)result.GetValue(0))); }
public IEnumerable <FetchRequest> GetRequestsForPoints() { foreach (var pair in variables) { yield return(new FetchRequest( pair.Key, FetchDomain.CreatePoints( points.Select(p => p.Latitude).ToArray(), points.Select(p => p.Longitude).ToArray(), tr), config.TimeStamp, pair.Value.ToArray())); } yield break; }
public void Bug1538() { var tr = new TimeRegion(1990, 2000, 1, 358).GetYearlyTimeseries(1990, 2000, 1, true).GetSeasonlyTimeseries(1, 358, 1, true); var r = new FetchRequest( "airt", FetchDomain.CreatePoints( new double[] { 50, 52, 54 }, new double[] { 40, 42, 38 }, tr), new string[] { "CRU CL 2.0" }); var request = JobManager.EvaluateSubrequestData(r, 3, 0); Assert.AreEqual(request.Item1.Domain.Lats.Length, request.Item1.Domain.Lons.Length); }
public void TestValidRequest() { TimeRegion tr = new TimeRegion(); FetchDomain fd = FetchDomain.CreatePointGrid(new double[] { 0, 1, 2 }, new double[] { 3, 4, 5 }, tr); string error; Assert.IsTrue(fd.IsContentValid(out error)); Assert.IsTrue(string.IsNullOrEmpty(error)); fd = FetchDomain.CreatePoints(new double[] { 0, 1, -2 }, new double[] { 3, 4, 5 }, tr); //points allow mixed axis Assert.IsTrue(fd.IsContentValid(out error)); Assert.IsTrue(string.IsNullOrEmpty(error)); }
public async Task FetchingUnregisteredDataSourceTest() { FederationTestConfigurationProvider provider = new FederationTestConfigurationProvider(); Dictionary <string, StaticValuesForRectDataHandler[]> federatedDsDict = new Dictionary <string, StaticValuesForRectDataHandler[]>(); federatedDsDict["http://1/"] = new StaticValuesForRectDataHandler[] { new Static_25_45_Handler(), new Static_30_50_Handler() }; federatedDsDict["http://2/"] = new StaticValuesForRectDataHandler[] { new Static_35_55_Handler() }; FederatedDsTestingFetchEngine fetchEngine = new FederatedDsTestingFetchEngine(provider, federatedDsDict); FetchDomain fd = FetchDomain.CreatePoints(new double[] { 5.0 }, new double[] { 37.0 }, new TimeRegion()); FetchRequest request = new FetchRequest("a", fd, new string[] { "20_40_unregistered" }); await fetchEngine.PerformRequestAsync(request); }
public void GHCNnanForOutOfObsConvexHullTest() { FetchDomain fd = FetchDomain.CreatePoints(new double[] { -10 }, new double[] { 1.0 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 60, lastDay: 90)); //mar FetchRequest fr = new FetchRequest("prate", fd); GhcnStorageContext storage = new GhcnStorageContext(fr); GHCNDataHandler sotdh = new GHCNDataHandler(storage); var compCont = new ComputationalContext(); var evRes = (double[])sotdh.EvaluateAsync(storage, compCont).Result; Assert.IsTrue(double.IsNaN(evRes[0])); var result = (double[])sotdh.AggregateAsync(storage, compCont).Result; //must be NAN as requested point out of observations convex hull Assert.IsTrue(double.IsNaN(result[0])); }
public async Task PointSetDataTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriReanalysisRegular); NCEPReanalysisRegularGridDataHandler reanalysis = await NCEPReanalysisRegularGridDataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion(firstYear: 1980, lastYear: 1980, firstDay: 2, lastDay: 3, startHour: 0, stopHour: 0). GetSeasonlyTimeseries(firstDay: 2, lastDay: 3, isIntervalTimeseries: false); //indeces 46756,46760; hours sice 1-1-1 00:00:00 = 17347560 , 17347524 IFetchDomain domain = FetchDomain.CreatePoints( //ocean region new double[] { 67.5, 7.5, 75.0, 0.0 }, //indeces 9,33,6,36 new double[] { 75.0, 7.5, 107.5, 52.5 }, //indeces 30,3,43,21 tr); FetchRequest request = new FetchRequest("air", domain); bool[, , ,] mask = new bool[4, 1, 2, 1]; bool[] smask = System.Linq.Enumerable.Repeat(true, 8).ToArray(); Buffer.BlockCopy(smask, 0, mask, 0, 8 * sizeof(bool)); var handlerPrivate = new PrivateObject(reanalysis, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); for (int i = 0; i < 2; i++) { bool[, , ,] effectiveMask = i == 0 ? null : mask; var result = await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, request), effectiveMask)); //i,t double[, ] temps = (double[, ])result; Assert.AreEqual(8, temps.Length); Assert.AreEqual(4, temps.GetLength(0)); Assert.AreEqual(2, temps.GetLength(1)); Assert.AreEqual(-18.05, temps[0, 0], TestConstants.FloatPrecision); //reference data value (unscaled) is -25771 Assert.AreEqual(26.95, temps[1, 0], TestConstants.FloatPrecision); //reference data value (unscaled) is -21271 Assert.AreEqual(-25.05, temps[2, 0], TestConstants.FloatPrecision); //reference data value (unscaled) is -26471 Assert.AreEqual(26.15, temps[3, 0], TestConstants.FloatPrecision); //reference data value (unscaled) is -21351 Assert.AreEqual(-19.25, temps[0, 1], TestConstants.FloatPrecision); //reference data value (unscaled) is -25891 Assert.AreEqual(25.05, temps[1, 1], TestConstants.FloatPrecision); //reference data value (unscaled) is -21461 Assert.AreEqual(-28.55, temps[2, 1], TestConstants.FloatPrecision); //reference data value (unscaled) is -26821 Assert.AreEqual(25.65, temps[3, 1], TestConstants.FloatPrecision); //reference data value (unscaled) is -21401 } }
public async Task Bug1523() { var storage = TestDataStorageFactory.GetStorage(TestConstants.UriEtopo); ETOPO1DataSource.ETOPO1DataHandler etopo = await ETOPO1DataSource.ETOPO1DataHandler.CreateAsync(storage); TimeRegion tr = new TimeRegion().GetMonthlyTimeseries(firstMonth: 1, lastMonth: 1); FetchDomain domain = FetchDomain.CreatePoints( new double[] { -90.0, 60.3 }, new double[] { 0.0, 40.9 }, tr); FetchRequest elevRequest = new FetchRequest("Elevation", domain); var handlerPrivate = new PrivateObject(etopo, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, elevRequest), null)); }
public async Task CpcValuesTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriCpc); CPCDataSource.CpcDataHandler handler = await CPCDataSource.CpcDataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion(firstYear: 1949, lastYear: 1949).GetMonthlyTimeseries(firstMonth: 4, lastMonth: 4); //data index 15 IFetchDomain domain = FetchDomain.CreatePoints( new double[] { 31.75 }, //data index 116 new double[] { 84.75 }, //data index 171 tr); FetchRequest soilRequest = new FetchRequest("soilw", domain); var handlerPrivate = new PrivateObject(handler, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); Assert.AreEqual(101.925401325, (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, soilRequest), null))).GetValue(0), TestConstants.DoublePrecision); //manual data comparision. data -22079 }
public async Task CpcMvTest() { var storage = TestDataStorageFactory.GetStorageContext(TestConstants.UriCpc); CPCDataSource.CpcDataHandler handler = await CPCDataSource.CpcDataHandler.CreateAsync(storage); ITimeRegion tr = new TimeRegion(firstYear: 1949, lastYear: 1949).GetMonthlyTimeseries(firstMonth: 4, lastMonth: 4);//data index 15 IFetchDomain domain = FetchDomain.CreatePoints( new double[] { 10.7 }, new double[] { -148.4 }, tr); FetchRequest soilRequest = new FetchRequest("soilw", domain); var handlerPrivate = new PrivateObject(handler, new PrivateType(typeof(DataHandlerFacade))); var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator"); Assert.IsTrue(double.IsNaN((double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, soilRequest), null))).GetValue(0))); }