public void HashTest() { TimeRegion tr = new TimeRegion(firstYear: 2000, lastYear: 2001).GetMonthlyTimeseries(); FetchRequest request = new FetchRequest( "airt", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr), new DateTime(2012, 11, 13), new string[] { "WorldClim 1.4" }); FetchRequest request2 = new FetchRequest( "temp", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr), new DateTime(2012, 11, 13), new string[] { "WorldClim 1.4" }); FetchRequest request3 = new FetchRequest( "temp", FetchDomain.CreateCellGrid( Enumerable.Range(0, 150).Select(i => 50.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 30.0 + i * 0.1).ToArray(), tr), new DateTime(2012, 11, 13), new string[] { "WorldClim 1.4" }); Assert.IsTrue(request.GetSHAHash() != request2.GetSHAHash()); Assert.IsTrue(request2.GetSHAHash() != request3.GetSHAHash()); }
public void PartsCountingTest() { var tr = new TimeRegion(firstYear: 2000, lastYear: 2001).GetMonthlyTimeseries(); var request2 = new FetchRequest( "pet", FetchDomain.CreateCellGrid( Enumerable.Range(0, 151).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 171).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); // 306000 pts in this request Assert.AreEqual(31, JobManager.GetPartitionsCount(request2, 1000, 10000)); Assert.AreEqual(170, JobManager.GetPartitionsCount(request2, 1000, 10000, 310)); Assert.AreEqual(100, JobManager.GetPartitionsCount(request2, 1000, 10000, 100)); var request3 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 50).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); //102000 pts Assert.AreEqual(102, JobManager.GetPartitionsCount(request3, 1000, 10000, 102)); }
public async Task 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); 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.GetStorageContext(TestConstants.UriGHCN); var reqContext = RequestContextStub.GetStub(ghcnStorage, request); DataSourceHandler handler = await GHCNv2DataSource.DataHandler.CreateAsync(ghcnStorage); var result = await handler.ProcessRequestAsync(reqContext); Assert.IsTrue(-70.0 < (double)result.GetValue(16, 2)); //manual data comparison. }
public IEnumerable <FetchRequest> GetRequestsForGrid(GeoGrid g) { foreach (var pair in variables) { yield return(new FetchRequest( pair.Key, FetchDomain.CreateCellGrid(g.Latitudes, g.Longitudes, tr), config.TimeStamp, pair.Value.ToArray())); } yield break; }
private FetchDomain CreateCellGridDomain(TimeRegion tr) { var eps = r.NextDouble() / 10.0; Trace.WriteLine(String.Format("Using eps={0}", eps)); double latDelta = InFranceLat - BayOfBiscaySELat; double lonDelta = InFranceLon - BayOfBiscaySELon; return(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)); }
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 SubrequestExtractionTest() { var tr = new TimeRegion(firstYear: 2000, lastYear: 2001).GetMonthlyTimeseries(); var request = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 170).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); //let's divide it into 31 part // 170 / 31 = 5 // 170 % 31 = 15 //so we gotta get 15 parts 6 points wide and 16 parts 5 points wide var answer1 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 6).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer15 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 6).Select(i => 78.4 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer16 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 5).Select(i => 79.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer31 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 5).Select(i => 86.5 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var guess1 = JobManager.EvaluateSubrequestData(request, 31, 0); var guess15 = JobManager.EvaluateSubrequestData(request, 31, 14); var guess16 = JobManager.EvaluateSubrequestData(request, 31, 15); var guess31 = JobManager.EvaluateSubrequestData(request, 31, 30); Assert.AreEqual(answer1.EnvironmentVariableName, guess1.Item1.EnvironmentVariableName); Assert.AreEqual(answer1.ParticularDataSource, guess1.Item1.ParticularDataSource); Assert.AreEqual(answer1.ReproducibilityTimestamp, guess1.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer1.Domain.SpatialRegionType, guess1.Item1.Domain.SpatialRegionType); Assert.AreEqual(answer15.EnvironmentVariableName, guess15.Item1.EnvironmentVariableName); Assert.AreEqual(answer15.ParticularDataSource, guess15.Item1.ParticularDataSource); Assert.AreEqual(answer15.ReproducibilityTimestamp, guess15.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer15.Domain.SpatialRegionType, guess15.Item1.Domain.SpatialRegionType); Assert.AreEqual(answer16.EnvironmentVariableName, guess16.Item1.EnvironmentVariableName); Assert.AreEqual(answer16.ParticularDataSource, guess16.Item1.ParticularDataSource); Assert.AreEqual(answer16.ReproducibilityTimestamp, guess16.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer16.Domain.SpatialRegionType, guess16.Item1.Domain.SpatialRegionType); Assert.AreEqual(answer31.EnvironmentVariableName, guess31.Item1.EnvironmentVariableName); Assert.AreEqual(answer31.ParticularDataSource, guess31.Item1.ParticularDataSource); Assert.AreEqual(answer31.ReproducibilityTimestamp, guess31.Item1.ReproducibilityTimestamp); Assert.AreEqual(answer31.Domain.SpatialRegionType, guess31.Item1.Domain.SpatialRegionType); for (int i = 0; i < answer1.Domain.Lats.Length; ++i) { Assert.AreEqual(answer1.Domain.Lats[i], guess1.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer1.Domain.Lons.Length; ++i) { Assert.AreEqual(answer1.Domain.Lons[i], guess1.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer15.Domain.Lats.Length; ++i) { Assert.AreEqual(answer15.Domain.Lats[i], guess15.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer15.Domain.Lons.Length; ++i) { Assert.AreEqual(answer15.Domain.Lons[i], guess15.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer16.Domain.Lats.Length; ++i) { Assert.AreEqual(answer16.Domain.Lats[i], guess16.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer16.Domain.Lons.Length; ++i) { Assert.AreEqual(answer16.Domain.Lons[i], guess16.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer31.Domain.Lats.Length; ++i) { Assert.AreEqual(answer31.Domain.Lats[i], guess31.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer31.Domain.Lons.Length; ++i) { Assert.AreEqual(answer31.Domain.Lons[i], guess31.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } Assert.AreEqual(0, guess1.Item2[0]); Assert.AreEqual(84, guess15.Item2[0]); Assert.AreEqual(90, guess16.Item2[0]); Assert.AreEqual(165, guess31.Item2[0]); var request2 = new FetchRequest( "pet", FetchDomain.CreateCellGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 171).Select(i => 70.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer115 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 7).Select(i => 78.4 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var answer116 = new FetchRequest( "pet", FetchDomain.CreatePointGrid( Enumerable.Range(0, 150).Select(i => 5.0 + i * 0.1).ToArray(), // 5.0 .. 20.0 Enumerable.Range(0, 6).Select(i => 79.0 + i * 0.1).ToArray(), tr), new DateTime(2013, 11, 17)); var guess115 = JobManager.EvaluateSubrequestData(request2, 31, 14); var guess116 = JobManager.EvaluateSubrequestData(request2, 31, 15); for (int i = 0; i < answer115.Domain.Lats.Length; ++i) { Assert.AreEqual(answer115.Domain.Lats[i], guess115.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer115.Domain.Lons.Length; ++i) { Assert.AreEqual(answer115.Domain.Lons[i], guess115.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer116.Domain.Lats.Length; ++i) { Assert.AreEqual(answer116.Domain.Lats[i], guess116.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < answer116.Domain.Lons.Length; ++i) { Assert.AreEqual(answer116.Domain.Lons[i], guess116.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } var tr2 = new TimeRegion(1990, 2000, 1, -1, 0, 24).GetYearlyTimeseries(1990, 2000); var request3 = new FetchRequest( "airt", FetchDomain.CreateCells( new double[] { 3.0 }, new double[] { 78.0 }, new double[] { 23.0 }, new double[] { 99.0 }, tr2)); var guess117 = JobManager.EvaluateSubrequestData(request3, 1, 0); for (int i = 0; i < request3.Domain.Lats.Length; ++i) { Assert.AreEqual(request3.Domain.Lats[i], guess117.Item1.Domain.Lats[i], TestConstants.DoublePrecision); } for (int i = 0; i < request3.Domain.Lons.Length; ++i) { Assert.AreEqual(request3.Domain.Lons[i], guess117.Item1.Domain.Lons[i], TestConstants.DoublePrecision); } for (int i = 0; i < request3.Domain.Lats2.Length; ++i) { Assert.AreEqual(request3.Domain.Lats2[i], guess117.Item1.Domain.Lats2[i], TestConstants.DoublePrecision); } for (int i = 0; i < request3.Domain.Lons2.Length; ++i) { Assert.AreEqual(request3.Domain.Lons2[i], guess117.Item1.Domain.Lons2[i], TestConstants.DoublePrecision); } }
public async Task CellGridDataLinearInterpolationTest() { 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.CreateCellGrid( //ocean region new double[] { 5.0, 7.5, 10.0 }, //indeces 34,33,32 new double[] { 40.0, 42.5, 45, 47.5 }, //indeces 16,17,18,19 tr); FetchRequest request = new FetchRequest("air", domain); bool[,, ] mask = new bool[3, 2, 2]; bool[] smask = System.Linq.Enumerable.Repeat(true, 12).ToArray(); Buffer.BlockCopy(smask, 0, mask, 0, 12 * 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)); //lon,lat,t double[, , ] t = (double[, , ])result; Assert.AreEqual(12, t.Length); Assert.AreEqual(3, t.GetLength(0)); Assert.AreEqual(2, t.GetLength(1)); //first time layer manual calculation //SDS fetched data //C:\Users\Dmitry>sds data "msds:az?name=ReanalysisRegular&DefaultEndpointsProl=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7ShM/q9K0ml49gQm+PE7G7i7zCvrpuT/vT1aHzEArutw==" air[32:34,16:19,46756] //[32,16,46756] -22521 //[32,17,46756] -22091 //[32,18,46756] -22221 //[32,19,46756] -22291 //[33,16,46756] -22391 //[33,17,46756] -21861 //[33,18,46756] -21921 //[33,19,46756] -22021 //[34,16,46756] -21811 //[34,17,46756] -21421 //[34,18,46756] -21461 //[34,19,46756] -21541 //excel calculated values x*0.01+239.66 mean //-22521 -22091 -22221 -22291 14.45 18.75 17.45 16.75 17.5 19.425 18.525 //-22391 -21861 -21921 -22021 15.75 21.05 20.45 19.45 20.95 23 22.3 //-21811 -21421 -21461 -21541 21.55 25.45 25.05 24.25 //checking first time layer //ATTENTION: notice the lat indexing. it is flaped! //lon,lat,t A(17.5, t[0, 1, 0]); A(19.425, t[1, 1, 0]); A(18.525, t[2, 1, 0]); A(20.95, t[0, 0, 0]); A(23, t[1, 0, 0]); A(22.3, t[2, 0, 0]); //second time layer asserting //SDS data fetching //lon,lat,t //C:\Users\Dmitry>sds data "msds:az?name=ReanalysisRegular&DefaultEndpointsProl=http&AccountName=fetch&AccountKey=1Y0EOrnCX6ULY8c3iMHg9rrul2BWbPHKsHUceZ7ShM/q9K0ml49gQm+PE7G7i7zCvrpuT/vT1aHzEArutw==" air[32:34,16:19,46760] //[32,16,46760] -22761 //[32,17,46760] -22071 //[32,18,46760] -22201 //[32,19,46760] -22391 //[33,16,46760] -22571 //[33,17,46760] -21911 //[33,18,46760] -21961 //[33,19,46760] -22111 //[34,16,46760] -21891 //[34,17,46760] -21601 //[34,18,46760] -21611 //[34,19,46760] -21631 //excel calculated values x*0.01+239.66 mean //-22761 -22071 -22201 -22391 12.05 18.95 17.65 15.75 16.375 19.3 18 //-22571 -21911 -21961 -22111 13.95 20.55 20.05 18.55 19.725 21.95 21.375 //-21891 -21601 -21611 -21631 20.75 23.65 23.55 23.35 //checking second time layer //ATTENTION: notice the lat indexing. it is flaped! //lon,lat,t A(16.375, t[0, 1, 1]); A(19.3, t[1, 1, 1]); A(18, t[2, 1, 1]); A(19.725, t[0, 0, 1]); A(21.95, t[1, 0, 1]); A(21.375, t[2, 0, 1]); } }
public void TestParameterIgnoringProvenance(ClimateParameter p, EnvironmentalDataSource ds) { ClimateService.ServiceUrl = "http://fetchclimate2.cloudapp.net/"; const double MoscowLat = 55.7; const double MoscowLon = 37.5; const double PacificLat = -20; const double PacificLon = 170; const double PacificLatA = -15; const double PacificLonA = 175; const double KrasnoyarskLat = 56.017; const double KrasnoyarskLon = 92.867; const double AroundKrasnoyarskLatMin = 55; const double AroundKrasnoyarskLonMin = 91; const double AroundKrasnoyarskLatMax = 60; const double AroundKrasnoyarskLonMax = 95; const double SriLankaLatMin = 5; const double SriLankaLonMin = 70; const double SriLankaLatMax = 20; const double SriLankaLonMax = 87; string varName = ClimateService.ClimateParameterToFC2VariableName(p); Assert.AreNotEqual("", varName, string.Format("Mapping for {0} does not exist.", p.ToString())); string[] sources = ClimateService.EnvironmentalDataSourceToArrayOfFC2DataSources(ds); //Single point fetch var tr1 = new TimeRegion(1961, 1990); var tr2 = new TimeRegion(1990, 2000); //Moscow var request1 = new FetchRequest( varName, FetchDomain.CreatePoints( new double[] { MoscowLat }, new double[] { MoscowLon }, tr1), sources); var result1 = ClimateService.FetchAsync(request1).Result; double sd1 = ((double[])result1["sd"].GetData())[0]; double value1 = ((double[])result1["values"].GetData())[0]; Assert.AreEqual(sd1, ClimateService.FetchClimateUncertainty(p, MoscowLat, MoscowLat, MoscowLon, MoscowLon, dataSource: ds)); Assert.AreEqual(value1, ClimateService.FetchClimate(p, MoscowLat, MoscowLat, MoscowLon, MoscowLon, dataSource: ds)); //somewhere in Pacific Ocean var request2 = new FetchRequest( varName, FetchDomain.CreatePoints( new double[] { PacificLat }, new double[] { PacificLon }, tr1), sources); var result2 = ClimateService.FetchAsync(request2).Result; double sd2 = ((double[])result2["sd"].GetData())[0]; double value2 = ((double[])result2["values"].GetData())[0]; Assert.AreEqual(sd2, ClimateService.FetchClimateUncertainty(p, PacificLat, PacificLat, PacificLon, PacificLon, dataSource: ds)); Assert.AreEqual(value2, ClimateService.FetchClimate(p, PacificLat, PacificLat, PacificLon, PacificLon, dataSource: ds)); //Cell around Krasnoyarsk var request3 = new FetchRequest( varName, FetchDomain.CreateCells( new double[] { AroundKrasnoyarskLatMin }, new double[] { AroundKrasnoyarskLonMin }, new double[] { AroundKrasnoyarskLatMax }, new double[] { AroundKrasnoyarskLonMax }, tr2), sources); var result3 = ClimateService.FetchAsync(request3).Result; double sd3 = ((double[])result3["sd"].GetData())[0]; double value3 = ((double[])result3["values"].GetData())[0]; Assert.AreEqual(sd3, ClimateService.FetchClimateUncertainty(p, AroundKrasnoyarskLatMin, AroundKrasnoyarskLatMax, AroundKrasnoyarskLonMin, AroundKrasnoyarskLonMax, startyear: 1990, stopyear: 2000, dataSource: ds)); Assert.AreEqual(value3, ClimateService.FetchClimate(p, AroundKrasnoyarskLatMin, AroundKrasnoyarskLatMax, AroundKrasnoyarskLonMin, AroundKrasnoyarskLonMax, startyear: 1990, stopyear: 2000, dataSource: ds)); //Cell somewhere in Pacific Ocean var request4 = new FetchRequest( varName, FetchDomain.CreateCells( new double[] { PacificLat }, new double[] { PacificLon }, new double[] { PacificLatA }, new double[] { PacificLonA }, tr2), sources); var result4 = ClimateService.FetchAsync(request4).Result; double sd4 = ((double[])result4["sd"].GetData())[0]; double value4 = ((double[])result4["values"].GetData())[0]; Assert.AreEqual(sd4, ClimateService.FetchClimateUncertainty(p, PacificLat, PacificLatA, PacificLon, PacificLonA, startyear: 1990, stopyear: 2000, dataSource: ds)); Assert.AreEqual(value4, ClimateService.FetchClimate(p, PacificLat, PacificLatA, PacificLon, PacificLonA, startyear: 1990, stopyear: 2000, dataSource: ds)); //batch request double[] batchLonMin = new double[] { PacificLon, AroundKrasnoyarskLonMin }; double[] batchLonMax = new double[] { PacificLon, AroundKrasnoyarskLonMax }; double[] batchLatMin = new double[] { PacificLat, AroundKrasnoyarskLatMin }; double[] batchLatMax = new double[] { PacificLat, AroundKrasnoyarskLatMax }; int[] batchStartYear = new int[] { 1961, 1990 }; int[] batchStopYear = new int[] { 1990, 2000 }; double[] sdGuess1 = ClimateService.FetchClimateUncertainty(p, batchLatMin, batchLatMax, batchLonMin, batchLonMax, null, null, null, null, batchStartYear, batchStopYear, ds); double[] valueGuess1 = ClimateService.FetchClimate(p, batchLatMin, batchLatMax, batchLonMin, batchLonMax, null, null, null, null, batchStartYear, batchStopYear, ds); Assert.AreEqual(sd2, sdGuess1[0]); Assert.AreEqual(sd3, sdGuess1[1]); Assert.AreEqual(value2, valueGuess1[0]); Assert.AreEqual(value3, valueGuess1[1]); //grid request var request5 = new FetchRequest( varName, FetchDomain.CreateCellGrid( Enumerable.Range(0, (int)Math.Round((SriLankaLatMax - SriLankaLatMin) / 1) + 1).Select(i => SriLankaLatMin + i).ToArray(), Enumerable.Range(0, (int)Math.Round((SriLankaLonMax - SriLankaLonMin) / 1) + 1).Select(i => SriLankaLonMin + i).ToArray(), tr2), sources); var result5 = ClimateService.FetchAsync(request5).Result; double[,] gridSds = (double[, ])result5["sd"].GetData(); double[,] gridValues = (double[, ])result5["values"].GetData(); int len0 = gridSds.GetLength(0), len1 = gridSds.GetLength(1); double[,] sdGuess2 = ClimateService.FetchUncertaintyGrid(p, SriLankaLatMin, SriLankaLatMax, SriLankaLonMin, SriLankaLonMax, 1, 1, yearmin: 1990, yearmax: 2000, dataSource: ds); double[,] valueGuess2 = ClimateService.FetchClimateGrid(p, SriLankaLatMin, SriLankaLatMax, SriLankaLonMin, SriLankaLonMax, 1, 1, yearmin: 1990, yearmax: 2000, dataSource: ds); //in FC2 grid is lon x lat while in FC1 it was lat x lon Assert.AreEqual(len0, sdGuess2.GetLength(1)); Assert.AreEqual(len1, sdGuess2.GetLength(0)); Assert.AreEqual(len0, valueGuess2.GetLength(1)); Assert.AreEqual(len1, valueGuess2.GetLength(0)); for (int i = 0; i < len0; ++i) { for (int j = 0; j < len1; ++j) { Assert.AreEqual(gridSds[i, j], sdGuess2[j, i]); Assert.AreEqual(gridValues[i, j], valueGuess2[j, i]); } } //Yearly TimeSeries for Krasnoyarsk var tr3 = new TimeRegion().GetYearlyTimeseries(1990, 2000); var request6 = new FetchRequest( varName, FetchDomain.CreatePoints( new double[] { KrasnoyarskLat }, new double[] { KrasnoyarskLon }, tr3), sources); var result6 = ClimateService.FetchAsync(request6).Result; double[,] seriesSds1 = (double[, ])result6["sd"].GetData(); double[,] seriesValues1 = (double[, ])result6["values"].GetData(); double[] seriesSdsGuess1 = ClimateService.FetchClimateYearlyUncertainty(p, KrasnoyarskLat, KrasnoyarskLat, KrasnoyarskLon, KrasnoyarskLon, yearmin: 1990, yearmax: 2000, dataSource: ds); double[] seriesValuesGuess1 = ClimateService.FetchClimateYearly(p, KrasnoyarskLat, KrasnoyarskLat, KrasnoyarskLon, KrasnoyarskLon, yearmin: 1990, yearmax: 2000, dataSource: ds); Assert.AreEqual(seriesSds1.Length, seriesSdsGuess1.Length); Assert.AreEqual(seriesValues1.Length, seriesValuesGuess1.Length); for (int i = 0; i < seriesValues1.Length; ++i) { Assert.AreEqual(seriesSds1[0, i], seriesSdsGuess1[i]); Assert.AreEqual(seriesValues1[0, i], seriesValuesGuess1[i]); } //Monthly TimeSeries for Krasnoyarsk var tr4 = new TimeRegion(1990, 1991).GetSeasonlyTimeseries(30, 40); var request7 = new FetchRequest( varName, FetchDomain.CreatePoints( new double[] { KrasnoyarskLat }, new double[] { KrasnoyarskLon }, tr4), sources); var result7 = ClimateService.FetchAsync(request7).Result; double[,] seriesSds2 = (double[, ])result7["sd"].GetData(); double[,] seriesValues2 = (double[, ])result7["values"].GetData(); double[] seriesSdsGuess2 = ClimateService.FetchClimateSeasonlyUncertainty(p, KrasnoyarskLat, KrasnoyarskLat, KrasnoyarskLon, KrasnoyarskLon, daymin: 30, daymax: 40, yearmin: 1990, yearmax: 1991, dataSource: ds); double[] seriesValuesGuess2 = ClimateService.FetchClimateSeasonly(p, KrasnoyarskLat, KrasnoyarskLat, KrasnoyarskLon, KrasnoyarskLon, daymin: 30, daymax: 40, yearmin: 1990, yearmax: 1991, dataSource: ds); Assert.AreEqual(seriesSds2.Length, seriesSdsGuess2.Length); Assert.AreEqual(seriesValues2.Length, seriesValuesGuess2.Length); for (int i = 0; i < seriesValues2.Length; ++i) { Assert.AreEqual(seriesSds2[0, i], seriesSdsGuess2[i]); Assert.AreEqual(seriesValues2[0, i], seriesValuesGuess2[i]); } //Hourly TimeSeries for Krasnoyarsk var tr5 = new TimeRegion(1990, 1991, 30, 31).GetHourlyTimeseries(isIntervalTimeseries: true); var request8 = new FetchRequest( varName, FetchDomain.CreatePoints( new double[] { KrasnoyarskLat }, new double[] { KrasnoyarskLon }, tr5), sources); var result8 = ClimateService.FetchAsync(request8).Result; double[,] seriesSds3 = (double[, ])result8["sd"].GetData(); double[,] seriesValues3 = (double[, ])result8["values"].GetData(); double[] seriesSdsGuess3 = ClimateService.FetchClimateHourlyUncertainty(p, KrasnoyarskLat, KrasnoyarskLat, KrasnoyarskLon, KrasnoyarskLon, daymin: 30, daymax: 31, yearmin: 1990, yearmax: 1991, dataSource: ds); double[] seriesValuesGuess3 = ClimateService.FetchClimateHourly(p, KrasnoyarskLat, KrasnoyarskLat, KrasnoyarskLon, KrasnoyarskLon, daymin: 30, daymax: 31, yearmin: 1990, yearmax: 1991, dataSource: ds); Assert.AreEqual(seriesSds3.Length, seriesSdsGuess3.Length); Assert.AreEqual(seriesValues3.Length, seriesValuesGuess3.Length); for (int i = 0; i < seriesValues3.Length; ++i) { Assert.AreEqual(seriesSds3[0, i], seriesSdsGuess3[i]); Assert.AreEqual(seriesValues3[0, i], seriesValuesGuess3[i]); } }