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); }
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); }
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); }
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); }
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); }
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); }
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); }