public async Task LinearWeightsContextFactoryFacadeTest()
        {
            var lwcff = new LinearWeightsContextFactoryFacade <RealValueNodesStub>(new Stub4(), new Stub3());

            var cells = new GeoCellTuple[] { new GeoCellTuple()
                                             {
                                                 LatMax = 11.0, LonMin = 13.0, LatMin = 17.0, LonMax = 19.0
                                             } };

            var request = new FetchRequest("dummy", FetchDomain.CreateCells(new double[] { 17.0 }, new double[] { 13.0 }, new double[] { 11.0 }, new double[] { 19.0 }, new TimeRegion()));

            var storage        = TestDataStorageFactory.GetStorage("msds:memory");
            var requestContext = RequestContextStub.GetStub(storage, request);


            var lwc = await lwcff.CreateAsync(requestContext, cells);

            var combs = lwc.Combinations.ToArray();

            Assert.AreEqual(1, combs.Length);
            Assert.AreEqual(cells[0], combs[0].Item1);

            RealValueNodes             nodes   = combs[0].Item2;
            IEnumerable <LinearWeight> weights = combs[0].Item3;

            var result = weights.Sum(w => w.Weight * nodes.Values[w.DataIndex]);

            Assert.AreEqual(847.0, result);
        }
        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));
        }
示例#3
0
        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);
        }
示例#4
0
        private FetchDomain CreateCellsDomain(TimeRegion tr)
        {
            var eps = r.NextDouble() / 10.0;

            Trace.WriteLine(String.Format("Using eps={0}", eps));
            return(FetchDomain.CreateCells(
                       new double[] { BayOfBiscaySELat + eps, InFranceLat + eps },
                       new double[] { BayOfBiscaySELon + eps, InFranceLon + eps },
                       new double[] { BayOfBiscaySELat + 1.0 + eps, InFranceLat + 1.0 + eps },
                       new double[] { BayOfBiscaySELon + 1.0 + eps, InFranceLon + 1.0 + eps },
                       tr));
        }
示例#5
0
        public async Task MonthlyMeansLandOnlyVariablesTest()
        {
            var storage            = TestDataStorageFactory.GetStorage(TestConstants.UriCru);
            CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage);

            TimeRegion  tr          = new TimeRegion().GetMonthlyTimeseries(firstMonth: 1, lastMonth: 1);
            FetchDomain oceanDomain = FetchDomain.CreateCells(
                new double[] { 22.0 },
                new double[] { -25.0 },
                new double[] { 23.0 },
                new double[] { -24.0 },
                tr);

            FetchDomain landDomain = FetchDomain.CreateCells(
                new double[] { 24.0 },
                new double[] { -10.0 },
                new double[] { 25.0 },
                new double[] { -9.0 },
                tr);

            FetchDomain landOceanMixDomain = FetchDomain.CreateCells(
                new double[] { 24.0 },
                new double[] { -16.0 },
                new double[] { 25.0 },
                new double[] { -14.0 },
                tr);

            FetchRequest oceanPrecRequest = new FetchRequest("pre", oceanDomain);
            FetchRequest landPrecRequest  = new FetchRequest("pre", landDomain);
            FetchRequest mixPrecRequest   = new FetchRequest("pre", landOceanMixDomain);

            var handlerPrivate    = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade)));
            var evaluatorPrivate  = new PrivateObject(handlerPrivate, "uncertaintyEvaluator");
            var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator");

            double oceanUnc = (double)(await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, oceanPrecRequest)))).GetValue(0);
            double landUnc  = (double)(await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, landPrecRequest)))).GetValue(0);
            double mixUnc   = (double)(await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, mixPrecRequest)))).GetValue(0);

            Assert.IsTrue(double.IsNaN(oceanUnc));
            Assert.AreEqual(double.MaxValue, mixUnc);
            Assert.IsTrue(!double.IsNaN(landUnc));
            Assert.IsTrue(landUnc < double.MaxValue); //check variogram presence if this fails

            double oceanVal = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, oceanPrecRequest), null))).GetValue(0);
            double landVal  = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, landPrecRequest), null))).GetValue(0);
            double mixVal   = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, mixPrecRequest), null))).GetValue(0);

            Assert.IsTrue(double.IsNaN(oceanVal));
            Assert.IsTrue(!double.IsNaN(landVal));
            Assert.IsTrue(!double.IsNaN(mixVal));
            Assert.AreEqual(mixVal, landVal, TestConstants.DoublePrecision);
        }
示例#6
0
        public async Task CellSetDataTest()
        {
            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.CreateCells(
                //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
                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, 2];
            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
            }
        }
示例#7
0
        public async Task CruUncertaintyLandAndWaterTest()
        {
            var storage            = TestDataStorageFactory.GetStorageContext(TestConstants.UriCru);
            CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage);

            ITimeRegion  tr     = new TimeRegion(firstYear: 1950, lastYear: 2010);
            IFetchDomain domain = FetchDomain.CreateCells(
                //ocean region
                new double[] { 0.0 },
                new double[] { 0.0 },
                new double[] { 1.0 },
                new double[] { 1.0 },
                tr);
            FetchRequest request = new FetchRequest("pre", domain);

            var handlerPrivate   = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade)));
            var evaluatorPrivate = new PrivateObject(handlerPrivate, "uncertaintyEvaluator");

            var res = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, request)));

            //i,t
            double[] prec = (double[])res;

            Assert.AreEqual(1, prec.Length);
            Assert.IsTrue(double.IsNaN(prec[0]));



            domain = FetchDomain.CreateCells(
                //land region
                new double[] { 10.0 },
                new double[] { 10.0 },
                new double[] { 11.0 },
                new double[] { 11.0 },
                tr);
            request = new FetchRequest("pre", domain);
            res     = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, request)));

            //i,t
            prec = (double[])res;

            Assert.AreEqual(1, prec.Length);
            Assert.IsTrue(!double.IsNaN(prec[0]));
        }
示例#8
0
        public async Task MonthlyMeansUnknownVarEvaluationRejectingTest()
        {
            var storage            = TestDataStorageFactory.GetStorageContext(TestConstants.UriCru);
            CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage);

            ITimeRegion  tr = new TimeRegion().GetMonthlyTimeseries(firstMonth: 1, lastMonth: 1);
            IFetchDomain d  = FetchDomain.CreateCells( //below the data
                new double[] { -10.0 },
                new double[] { -15.0 },
                new double[] { -8.0 },
                new double[] { -14.0 },
                tr);

            FetchRequest r = new FetchRequest("fasdf342f34", d);

            var handlerPrivate   = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade)));
            var evaluatorPrivate = new PrivateObject(handlerPrivate, "uncertaintyEvaluator");

            var et = await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, r)));
        }
示例#9
0
        public async Task MonthlyMeansOutOfDataTest()
        {
            var storage            = TestDataStorageFactory.GetStorageContext(TestConstants.UriCru);
            CruCl20DataHandler cru = await CruCl20DataHandler.CreateAsync(storage);

            ITimeRegion tr = new TimeRegion().GetMonthlyTimeseries(firstMonth: 1, lastMonth: 1);

            IFetchDomain[] outOfDataDomain = new FetchDomain[2];

            outOfDataDomain[0] = FetchDomain.CreateCells( //below the data
                new double[] { -70.0 },
                new double[] { -25.0 },
                new double[] { -68.0 },
                new double[] { -24.0 },
                tr);

            outOfDataDomain[1] = FetchDomain.CreateCells( //above the data
                new double[] { 85.0 },
                new double[] { -25.0 },
                new double[] { 87.0 },
                new double[] { -24.0 },
                tr);

            var handlerPrivate    = new PrivateObject(cru, new PrivateType(typeof(DataHandlerFacade)));
            var evaluatorPrivate  = new PrivateObject(handlerPrivate, "uncertaintyEvaluator");
            var aggregatorPrivate = new PrivateObject(handlerPrivate, "valuesAggregator");

            for (int i = 0; i < 2; i++)
            {
                FetchRequest outOfDataRequest = new FetchRequest("pre", outOfDataDomain[i]);

                double unc = (double)(await(Task <Array>)(evaluatorPrivate.Invoke("EvaluateAsync", RequestContextStub.GetStub(storage, outOfDataRequest)))).GetValue(0);
                double val = (double)(await(Task <Array>)(aggregatorPrivate.Invoke("AggregateAsync", RequestContextStub.GetStub(storage, outOfDataRequest), null))).GetValue(0);
                Assert.IsTrue(double.IsNaN(val));
                Assert.IsTrue(double.IsNaN(unc));
            }
        }
        public void SingleDimensionalRequestPartitioningTest()
        {
            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));

            var guess0 = JobManager.EvaluateSubrequestData(request, 3, 0);
            var guess1 = JobManager.EvaluateSubrequestData(request, 3, 1);
            var guess2 = JobManager.EvaluateSubrequestData(request, 3, 2);

            Assert.AreEqual(512, guess0.Item1.Domain.Lats.Length);
            Assert.AreEqual(512, guess1.Item1.Domain.Lats.Length);
            Assert.AreEqual(476, guess2.Item1.Domain.Lats.Length);
            Assert.AreEqual(512, guess0.Item1.Domain.Lons.Length);
            Assert.AreEqual(512, guess1.Item1.Domain.Lons.Length);
            Assert.AreEqual(476, guess2.Item1.Domain.Lons.Length);
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request.Domain.Lats[i], guess0.Item1.Domain.Lats[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request.Domain.Lats[i + 512], guess1.Item1.Domain.Lats[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 476; ++i)
            {
                Assert.AreEqual(request.Domain.Lats[i + 1024], guess2.Item1.Domain.Lats[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request.Domain.Lons[i], guess0.Item1.Domain.Lons[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request.Domain.Lons[i + 512], guess1.Item1.Domain.Lons[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 476; ++i)
            {
                Assert.AreEqual(request.Domain.Lons[i + 1024], guess2.Item1.Domain.Lons[i], TestConstants.DoublePrecision);
            }

            var request2 = new FetchRequest(
                "pet",
                FetchDomain.CreateCells(
                    Enumerable.Range(0, 1500).Select(i => 5.0 + i * 0.1).ToArray(),
                    Enumerable.Range(0, 1500).Select(i => 70.0 + i * 0.1).ToArray(),
                    Enumerable.Range(0, 1500).Select(i => 6.0 + i * 0.1).ToArray(),
                    Enumerable.Range(0, 1500).Select(i => 71.0 + i * 0.1).ToArray(),
                    tr));

            var guess10 = JobManager.EvaluateSubrequestData(request, 3, 0);
            var guess11 = JobManager.EvaluateSubrequestData(request, 3, 1);
            var guess12 = JobManager.EvaluateSubrequestData(request, 3, 2);

            Assert.AreEqual(512, guess10.Item1.Domain.Lats.Length);
            Assert.AreEqual(512, guess11.Item1.Domain.Lats.Length);
            Assert.AreEqual(476, guess12.Item1.Domain.Lats.Length);
            Assert.AreEqual(512, guess10.Item1.Domain.Lons.Length);
            Assert.AreEqual(512, guess11.Item1.Domain.Lons.Length);
            Assert.AreEqual(476, guess12.Item1.Domain.Lons.Length);
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request2.Domain.Lats[i], guess10.Item1.Domain.Lats[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request2.Domain.Lats[i + 512], guess11.Item1.Domain.Lats[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 476; ++i)
            {
                Assert.AreEqual(request2.Domain.Lats[i + 1024], guess12.Item1.Domain.Lats[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request2.Domain.Lons[i], guess10.Item1.Domain.Lons[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 512; ++i)
            {
                Assert.AreEqual(request2.Domain.Lons[i + 512], guess11.Item1.Domain.Lons[i], TestConstants.DoublePrecision);
            }
            for (int i = 0; i < 476; ++i)
            {
                Assert.AreEqual(request2.Domain.Lons[i + 1024], guess12.Item1.Domain.Lons[i], TestConstants.DoublePrecision);
            }
        }
        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);
            }
        }
示例#12
0
        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]);
            }
        }
示例#13
0
        public void WebService_UseSampleFetchRequest_CanProperlySerializeAndDeSerializeFetchRequest()
        {
            // Arrange
            var request1 = new Microsoft.Research.Science.FetchClimate2.Serializable.FetchRequest(new FetchRequest(
                                                                                                      "evn_var_name",
                                                                                                      FetchDomain.CreateCells(
                                                                                                          new double[] { 1.0, 3.4 },
                                                                                                          new double[] { 2.0, 4.5 },
                                                                                                          new double[] { 1.0, 3.4 },
                                                                                                          new double[] { 2.0, 4.5 },
                                                                                                          new TimeRegion()
                                                                                                          )
                                                                                                      , new DateTime(2012, 11, 15, 0, 0, 0, DateTimeKind.Utc))
                                                                                                  );

            // Act
            var json     = JsonConvert.SerializeObject(request1);
            var request2 = JsonConvert.DeserializeObject <Microsoft.Research.Science.FetchClimate2.Serializable.FetchRequest>(json).ConvertFromSerializable();

            // Assert
            Assert.IsNotNull(request2, "Error: Deserilized object is null");
            Assert.AreEqual <string>(request1.EnvironmentVariableName, request2.EnvironmentVariableName);
            Assert.IsNotNull(request2.Domain);
            Assert.IsNotNull(request2.Domain.Lats);
            Assert.AreEqual <int>(request1.Domain.Lats.Length, request2.Domain.Lats.Length);
            Assert.IsNotNull(request2.Domain.Lats[0]);
            Assert.AreEqual <double>(request1.Domain.Lats[0], request2.Domain.Lats[0]);
            Assert.IsNotNull(request2.Domain.Lons);
            Assert.AreEqual <int>(request1.Domain.Lons.Length, request2.Domain.Lons.Length);
            Assert.IsNotNull(request2.Domain.Lons[0]);
            Assert.AreEqual <double>(request1.Domain.Lons[0], request2.Domain.Lons[0]);
            Assert.IsNotNull(request2.Domain.Lats2);
            Assert.AreEqual <int>(request1.Domain.Lats2.Length, request2.Domain.Lats2.Length);
            Assert.IsNotNull(request2.Domain.Lats2[0]);
            Assert.AreEqual <double>(request1.Domain.Lats2[0], request2.Domain.Lats2[0]);
            Assert.IsNotNull(request2.Domain.Lons2);
            Assert.AreEqual <int>(request1.Domain.Lons2.Length, request2.Domain.Lons2.Length);
            Assert.IsNotNull(request2.Domain.Lons2[0]);
            Assert.AreEqual <double>(request1.Domain.Lons2[0], request2.Domain.Lons2[0]);
            Assert.IsNotNull(request2.Domain.TimeRegion);
            Assert.AreEqual <int>(request1.Domain.TimeRegion.Years[0], request2.Domain.TimeRegion.Years[0]);
            Assert.AreEqual <int>(request1.Domain.TimeRegion.Years[1], request2.Domain.TimeRegion.Years[1]);
            Assert.AreEqual <int>(request1.Domain.TimeRegion.Days[0], request2.Domain.TimeRegion.Days[0]);
            Assert.AreEqual <int>(request1.Domain.TimeRegion.Days[1], request2.Domain.TimeRegion.Days[1]);
            Assert.AreEqual <int>(request1.Domain.TimeRegion.Hours[0], request2.Domain.TimeRegion.Hours[0]);
            Assert.AreEqual <int>(request1.Domain.TimeRegion.Hours[1], request2.Domain.TimeRegion.Hours[1]);
            Assert.AreEqual <SpatialRegionSpecification>(SpatialRegionSpecification.Cells, request2.Domain.SpatialRegionType);
            Assert.AreEqual <DateTime>(request1.ReproducibilityTimestamp, request2.ReproducibilityTimestamp);
        }