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 GHCNplaneInterpolationCellTest() { //with lapse rate correction FetchDomain fd = FetchDomain.CreateCells(new double[] { 1.5 }, new double[] { 1.0 }, new double[] { 1.6 }, new double[] { 1.1 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 91, lastDay: 120)); //april FetchRequest fr = new FetchRequest("temp", fd); GhcnPlaneStorageContext storage = new GhcnPlaneStorageContext(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; Assert.AreEqual(-7.0, result[0], TestConstants.DoublePrecision); //without lapse rate correction fd = FetchDomain.CreateCells(new double[] { -2.5 }, new double[] { 1.0 }, new double[] { -2.4 }, new double[] { 1.1 }, new TimeRegion(firstYear: 1970, lastYear: 1970, firstDay: 91, lastDay: 120)); //april fr = new FetchRequest("temp", fd); storage = new GhcnPlaneStorageContext(fr); sotdh = new GHCNDataHandler(storage); compCont = new ComputationalContext(); evRes = sotdh.EvaluateAsync(storage, compCont).Result; result = (double[])sotdh.AggregateAsync(storage, compCont).Result; Assert.AreEqual(-6.0, result[0], TestConstants.DoublePrecision); }
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 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 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 void Bug1691() { double BayOfBiscaySELat = 44.5; double BayOfBiscaySELon = -3.5; double InFranceLat = 47; double InFranceLon = 1; Random r = new Random(1); var eps = r.NextDouble() / 10.0; double latDelta = InFranceLat - BayOfBiscaySELat; double lonDelta = InFranceLon - BayOfBiscaySELon; var tr = new TimeRegion(1990, 2001, 1, -1, 0, 24, true, false, true); var request = new FetchRequest( "temp", FetchDomain.CreateCellGrid( Enumerable.Range(0, 31).Select(i => eps + BayOfBiscaySELat + i * latDelta / 31.0).ToArray(), Enumerable.Range(0, 21).Select(i => eps + BayOfBiscaySELon + i * lonDelta / 21.0).ToArray(), tr)); 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); 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, request, elevHandling); var compCont = new ComputationalContext(); var evRes = handler.EvaluateAsync(reqContext, compCont).Result; Assert.IsTrue(-70.0 < (double)handler.AggregateAsync(reqContext, compCont).Result.GetValue(16, 2, 0)); //manual data comparison. }
public void GhcnPrateUncertaintyTest() { System.Diagnostics.Trace.WriteLine(TestConstants.UriGHCN); var storage = TestDataStorageFactory.GetStorage(TestConstants.UriGHCN); GHCNDataHandler handler = new GHCNDataHandler(storage); TimeRegion tr = new TimeRegion(firstYear: 1914, lastYear: 1914).GetMonthlyTimeseries(firstMonth: 12, lastMonth: 12); //data index 2567 FetchDomain domain = FetchDomain.CreatePoints( new double[] { -25.18 }, //exact station. data index 18398 new double[] { 151.65 }, tr); FetchRequest prateRequest = new FetchRequest("prate", domain); var compCont = new ComputationalContext(); var reqContext = RequestContextStub.GetStub(storage, prateRequest); Assert.AreEqual(0.0, (double)handler.EvaluateAsync(reqContext, compCont).Result.GetValue(0), 1e-6); //manual data comparison. }