コード例 #1
0
        private WeppResponseV3_1 ParseParameterElement(
            JsonProperty parameterElement)
        {
            WeppResponseV3_1 results = new WeppResponseV3_1();

            foreach (var element in parameterElement.Value.EnumerateArray())
            {
                string propName = element.GetProperty("name").GetString();
                switch (propName)
                {
                case "latitude":
                    results.Latitude = Convert.ToDouble(
                        element.GetProperty("value").GetString());
                    break;

                case "longitude":
                    results.Longitude = Convert.ToDouble(
                        element.GetProperty("value").GetString());
                    break;

                case "crlmod":
                    results.RotationName = element
                                           .GetProperty("value")
                                           .GetProperty("rotationFiles")
                                           .EnumerateArray().First()
                                           .GetProperty("rotation")
                                           .GetProperty("name").GetString();
                    break;
                }
            }

            return(results);
        }
コード例 #2
0
        private ErosionParameters GetErosionParameters(
            WepsResponseV5_2 wepsResponse,
            WeppResponseV3_1 weppResponse,
            Rusle2ResponseV5_0 rusle2Response)
        {
            double null_flag = -9999.99;

            ErosionParameters result = new ErosionParameters()
            {
                Latitude           = wepsResponse.Latitude,
                Longitude          = wepsResponse.Longitude,
                RotationName       = wepsResponse.RotationName,
                WepsOM             = wepsResponse.OM,
                WeppOM             = weppResponse?.OM ?? null_flag,
                Rusle2OM           = rusle2Response?.OM ?? null_flag,
                WepsFO             = wepsResponse.FO,
                WeppFO             = weppResponse?.FO ?? null_flag,
                Rusle2FO           = rusle2Response?.FO ?? null_flag,
                WepsER             = wepsResponse.ER,
                WeppER             = weppResponse?.ER ?? null_flag,
                Rusle2ER           = rusle2Response?.ER ?? null_flag,
                WepsStir           = wepsResponse.Stir,
                WeppStir           = weppResponse?.Stir ?? null_flag,
                Rusle2Stir         = rusle2Response?.Stir ?? null_flag,
                WepsWindErosion    = wepsResponse.WindErosion,
                WeppSoilLoss       = weppResponse?.SoilLoss ?? null_flag,
                Rusle2SoilLoss     = rusle2Response?.SoilLoss ?? null_flag,
                Rusle2Sci          = rusle2Response?.SCI ?? null_flag,
                WepsAverageBiomass = wepsResponse?.AverageBiomass ?? null_flag
            };

            return(result);
        }
コード例 #3
0
        public bool Run(
            string inputWeppPath,
            string inputWepsPath,
            string inputRusle2Path,
            string outputFilePath)
        {
            // Read json files with simulation results
            List <WeppResponseV3_1> weppResponses =
                jsonHandler.ReadWeppResponseV3_1Files(
                    inputWeppPath, weppV3_1Service);
            List <WepsResponseV5_2> wepsResponses =
                jsonHandler.ReadWepsResponseV5_2Files(
                    inputWepsPath, wepsV5_2Service);
            List <Rusle2ResponseV5_0> rusle2Responses =
                jsonHandler.ReadRusle2ResponseV5_0Files(
                    inputRusle2Path, rusle2V5_0Service);

            /* I should allow for failed runs - SciBuilder should check for missing values and skip those
             * if ((weppResponses.Count != wepsResponses.Count) ||
             *  (weppResponses.Count != rusle2Responses.Count))
             *  throw new ArgumentException("Input paths do not contain the same number of files");
             */

            // Merge simulation results into erosion parameters
            // Using WEPS results to merge because when calc "SCI" both "old" and "new" versions require WEPS
            List <ErosionParameters> erosionParametersList =
                new List <ErosionParameters>();

            foreach (WepsResponseV5_2 wepsResponse in wepsResponses)
            {
                WeppResponseV3_1 weppResponse =
                    weppResponses.First(
                        x => x.Latitude == wepsResponse.Latitude &&
                        x.Longitude == wepsResponse.Longitude &&
                        x.RotationName == wepsResponse.RotationName);
                Rusle2ResponseV5_0 rusle2Response =
                    rusle2Responses.First(
                        x => x.Latitude == wepsResponse.Latitude &&
                        x.Longitude == wepsResponse.Longitude &&
                        x.RotationName == wepsResponse.RotationName);

                ErosionParameters erosionParameters = GetErosionParameters(
                    wepsResponse,
                    weppResponse,
                    rusle2Response);

                erosionParametersList.Add(erosionParameters);
            }

            // Write file
            csvHandler.WriteErosionParameters(
                outputFilePath,
                erosionParametersList);

            return(true);
        }
        public void ParseResults_ValidJson_ExpectedResults()
        {
            // Arrange
            var    sut  = new WeppV3_1();
            string json = File.ReadAllText(
                @"Assets\exampleWeppResultV3_1.json");

            // Act
            WeppResponseV3_1 actual = sut.ParseResultsJson(json);

            // Assert
            Assert.Equal(0.002899999963119626, actual.SoilLoss);
            Assert.Equal("Transition_NoTill", actual.RotationName);
            Assert.Equal("8af8f7ab-064a-11ea-a464-7b605541b058", actual.Suid);
        }
コード例 #5
0
        private WeppResponseV3_1 ParseResultElement(
            JsonProperty resultElement)
        {
            WeppResponseV3_1 results = new WeppResponseV3_1();

            foreach (var element in resultElement.Value.EnumerateArray())
            {
                string propName = element.GetProperty("name").GetString();
                switch (propName)
                {
                case "Precipitation":
                    results.Precipitation = element.GetProperty("value").GetDouble();
                    break;

                case "SoilLoss":
                    results.SoilLoss = element.GetProperty("value").GetDouble();
                    break;

                case "Runoff":
                    results.Runoff = element.GetProperty("value").GetDouble();
                    break;

                case "SedimentYield":
                    results.SedimentYield = element.GetProperty("value").GetDouble();
                    break;

                case "STIR":
                    results.Stir = element.GetProperty("value").GetDouble();
                    break;

                case "OM":
                    results.OM = element.GetProperty("value").GetDouble();
                    break;

                case "FO":
                    results.FO = element.GetProperty("value").GetDouble();
                    break;

                case "ER":
                    results.ER = element.GetProperty("value").GetDouble();
                    break;
                }
            }

            return(results);
        }
        public List <WeppResponseV3_1> ReadWeppResponseV3_1Files(
            string filePath,
            WeppV3_1 service)
        {
            string[] files = Directory.GetFiles(filePath, "*.json");

            List <WeppResponseV3_1> results = new List <WeppResponseV3_1>();

            foreach (var file in files)
            {
                string           json   = File.ReadAllText(file);
                WeppResponseV3_1 result = service.ParseResultsJson(json);

                results.Add(result);
            }

            return(results);
        }
コード例 #7
0
        public WeppResponseV3_1 ParseResultsJson(string jsonResult)
        {
            WeppResponseV3_1 metainfo   = new WeppResponseV3_1();
            WeppResponseV3_1 parameters = new WeppResponseV3_1();
            WeppResponseV3_1 result     = new WeppResponseV3_1();

            var options = new JsonDocumentOptions
            {
                AllowTrailingCommas = true
            };

            using (JsonDocument document = JsonDocument.Parse(jsonResult, options))
            {
                foreach (JsonProperty element in document.RootElement.EnumerateObject())
                {
                    string elementName = element.Name;
                    switch (elementName)
                    {
                    case "metainfo":
                        metainfo = ParseMetainfoElement(element);
                        break;

                    case "parameter":
                        parameters = ParseParameterElement(element);
                        break;

                    case "result":
                        result = ParseResultElement(element);
                        break;
                    }
                }
            }

            WeppResponseV3_1 results = MergeResults(
                metainfo,
                parameters,
                result);

            return(results);
        }
コード例 #8
0
        private WeppResponseV3_1 ParseMetainfoElement(
            JsonProperty metainfoElement)
        {
            WeppResponseV3_1 results = new WeppResponseV3_1();

            foreach (var element in metainfoElement.Value.EnumerateObject())
            {
                string propName = element.Name;
                switch (propName)
                {
                case "suid":
                    results.Suid = element.Value.GetString();
                    break;

                case "status":
                    results.Status = element.Value.GetString();
                    break;
                }
            }

            return(results);
        }
コード例 #9
0
        private WeppResponseV3_1 MergeResults(
            WeppResponseV3_1 metainfo,
            WeppResponseV3_1 parameters,
            WeppResponseV3_1 result)
        {
            WeppResponseV3_1 results = new WeppResponseV3_1()
            {
                Suid          = metainfo.Suid,
                Status        = metainfo.Status,
                Latitude      = parameters.Latitude,
                Longitude     = parameters.Longitude,
                RotationName  = parameters.RotationName,
                Precipitation = result.Precipitation,
                SoilLoss      = result.SoilLoss,
                Runoff        = result.Runoff,
                SedimentYield = result.SedimentYield,
                Stir          = result.Stir,
                OM            = result.OM,
                FO            = result.FO,
                ER            = result.ER
            };

            return(results);
        }