public void Load(RatingModelDescription ratingModelDescription) { RatingModelDescription = ratingModelDescription; var allParameters = Client.Provisioning.Get(new GetParameters()).Results; InputParameter = allParameters.Single(p => p.Identifier == ratingModelDescription.InputParameter); OutputParameter = allParameters.Single(p => p.Identifier == ratingModelDescription.OutputParameter); using (SoapClient = CreateConnectedClient()) { var ratingModelInfo = GetRatingModelInfo(); AopBytes = GetRatingModelAop(ratingModelInfo.RatingModelId); HydroMlXml = GetHydroMlXml(); HydroModel = new CHydroModel(AopBytes); CsvMetaHeader = "LocationId,InParameter,OutParameter"; CsvMetadata = $"UNKNOWN,{ratingModelDescription.InputParameter},{ratingModelDescription.OutputParameter}"; LoadFieldVisitReadings(); } }
public RatingCurveResult LoadEffectiveRatingCurve(RatingModelDescription ratingModelDescription, double stepSize, DateTimeOffset curveEffectiveTime) { var result = new RatingCurveResult(); var expandedRatingCurve = GetExpandedRatingCurve(ratingModelDescription, stepSize, curveEffectiveTime); if (expandedRatingCurve == null) { return(result); } if (expandedRatingCurve.BaseRatingTable.Count != expandedRatingCurve.AdjustedRatingTable.Count) { throw new ExpectedException($"Expanded rating curve for '{ratingModelDescription.Identifier}:{expandedRatingCurve.Id}' has a mis-matched point count. {nameof(expandedRatingCurve.BaseRatingTable)}.Count = {expandedRatingCurve.BaseRatingTable.Count} points but {nameof(expandedRatingCurve.AdjustedRatingTable)}.Count = {expandedRatingCurve.AdjustedRatingTable.Count} points."); } for (var i = 0; i < expandedRatingCurve.BaseRatingTable.Count; ++i) { result.ExpandedPoints.Add(new ExpandedPoint { Stage = expandedRatingCurve.BaseRatingTable[i].InputValue ?? double.NaN, Discharge = expandedRatingCurve.BaseRatingTable[i].OutputValue ?? double.NaN, ShiftedStage = expandedRatingCurve.AdjustedRatingTable[i].InputValue ?? double.NaN, ShiftedDischarge = expandedRatingCurve.AdjustedRatingTable[i].OutputValue ?? double.NaN }); } var curveStartTime = expandedRatingCurve.PeriodsOfApplicability.First().StartTime; var curveEndTime = expandedRatingCurve.PeriodsOfApplicability.Last().EndTime; var exceptions = GetRatingExceptions(expandedRatingCurve.Id); var fieldVisitReadings = FieldVisitReadings.Where(r => { var time = new DateTimeOffset(DateTime.SpecifyKind(r.MeasurementTime, DateTimeKind.Unspecified), TimeSpan.FromHours(r.UtcOffset)); return(exceptions.IncludeIds.Contains(r.DiscreteMeasurementId) || !exceptions.ExcludeIds.Contains(r.DiscreteMeasurementId) && curveStartTime <= time && time < curveEndTime); }).ToList(); var measurementIds = fieldVisitReadings .Select(f => f.DiscreteMeasurementId) .Distinct(); result.RatingMeasurements = measurementIds .Select(id => CreateRatingMeasurement(fieldVisitReadings.Where(f => f.DiscreteMeasurementId == id).ToList())) .Where(r => r != null) .ToList(); return(result); }
public AllTablesResult LoadAllTables(RatingModelDescription ratingModelDescription, RatingCurveListServiceResponse ratingCurves, double stepSize) { var result = new AllTablesResult(); var validTableNumbers = new HashSet <double>( ratingCurves .RatingCurves .Select(c => double.TryParse(c.Id, out var number) ? (double?)number : null) .Where(d => d.HasValue) .Select(d => d.Value)); for (var i = 0; i < ratingCurves.RatingCurves.Count; ++i) { var ratingCurve = ratingCurves.RatingCurves[i]; if (!double.TryParse(ratingCurve.Id, out var tableNumber)) { tableNumber = 1.0 + i; while (validTableNumbers.Contains(tableNumber)) { tableNumber += ratingCurves.RatingCurves.Count; } } result.Tables.Add(new Table { TableNumber = tableNumber, TableName = ratingCurve.Id, NumPeriods = ratingCurve.PeriodsOfApplicability.Count, NumPoints = ratingCurve.BaseRatingTable.Count }); result.TableDates.AddRange(ratingCurve.PeriodsOfApplicability.Select(p => new TableDate { TableNumber = tableNumber, StartDate = p.StartTime, EndDate = p.EndTime })); result.TableValues.AddRange(ratingCurve.BaseRatingTable.Select(p => new TableValue { TableNumber = tableNumber, Input = p.InputValue ?? double.NaN, Output = p.OutputValue ?? double.NaN })); } return(result); }
public void Load(RatingModelDescription ratingModelDescription) { RatingModelDescription = ratingModelDescription; var allParameters = Client.Provisioning.Get(new GetParameters()).Results; InputParameter = allParameters.Single(p => p.Identifier == ratingModelDescription.InputParameter); OutputParameter = allParameters.Single(p => p.Identifier == ratingModelDescription.OutputParameter); CreateConnectedClient(); var ratingModelInfo = GetRatingModelInfo(); AopBytes = GetRatingModelAop(ratingModelInfo.RatingModelId); HydroMlXml = GetHydroMlXml(); LoadFieldVisitReadings(); }
private ExpandedRatingCurve GetExpandedRatingCurve(RatingModelDescription ratingModelDescription, double stepSize, DateTimeOffset curveEffectiveTime) { try { return(Client.Publish.Get(new EffectiveRatingCurveServiceRequest { RatingModelIdentifier = ratingModelDescription.Identifier, EffectiveTime = curveEffectiveTime, StepSize = stepSize }).ExpandedRatingCurve); } catch (WebServiceException exception) { if (exception.StatusCode == (int)HttpStatusCode.BadRequest && exception.ErrorMessage.Contains(" has no active Rating Curves")) { return(null); } throw; } }
public DataTable RatingModelTable(string tableName, string inputOutputParameters, string ratingModelLabel, string locationIdentifier) { DataTable ratingModelTable = new DataTable(tableName); ratingModelTable.Columns.Add("Identifier", typeof(string)); ratingModelTable.Columns.Add("InputParameter", typeof(string)); ratingModelTable.Columns.Add("InputUnitId", typeof(string)); ratingModelTable.Columns.Add("InputUnitSymbol", typeof(string)); ratingModelTable.Columns.Add("InputParameterRoundingSpec", typeof(string)); ratingModelTable.Columns.Add("OutputParameter", typeof(string)); ratingModelTable.Columns.Add("OutputUnitId", typeof(string)); ratingModelTable.Columns.Add("OutputUnitSymbol", typeof(string)); ratingModelTable.Columns.Add("OutputParameterRoundingSpec", typeof(string)); ratingModelTable.Columns.Add("Description", typeof(string)); ratingModelTable.Columns.Add("Comment", typeof(string)); ratingModelTable.Columns.Add("TimeRange", typeof(string)); ratingModelTable.Columns.Add("RatingModelInfo", typeof(string)); ratingModelTable.Columns.Add("RatingModelDescriptionObject", typeof(object)); string ratingModelIdentifier = string.Format("{0}.{1}@{2}", inputOutputParameters, ratingModelLabel, locationIdentifier); DataRow ratingModelRow = ratingModelTable.NewRow(); ratingModelRow["Identifier"] = ratingModelIdentifier; ratingModelTable.Rows.Add(ratingModelRow); RatingModelDescription ratingModelDescription = _Common.GetRatingModelDescription(ratingModelIdentifier, locationIdentifier); ratingModelRow["RatingModelDescriptionObject"] = ratingModelDescription; string locationName = _Common.GetLocationDescriptionByIdentifier(locationIdentifier).Name; if (ratingModelDescription == null) { if (string.IsNullOrEmpty(ratingModelLabel) && string.IsNullOrEmpty(inputOutputParameters)) { ratingModelRow["RatingModelInfo"] = Resources.RatingModelUnspecified; } else { ratingModelRow["RatingModelInfo"] = string.Format(Resources.NoRatingModelFoundWithXYZZ, inputOutputParameters, ratingModelLabel, locationIdentifier, locationName); } } else { string inputParameterDisplayId = ratingModelDescription.InputParameter; string inputUnitId = ratingModelDescription.InputUnit; string outputParameterDisplayId = ratingModelDescription.OutputParameter; string outputUnitId = ratingModelDescription.OutputUnit; string rmDescription = ratingModelDescription.Description; ratingModelRow["InputParameter"] = inputParameterDisplayId; ratingModelRow["InputUnitId"] = inputUnitId; ratingModelRow["InputUnitSymbol"] = _Common.GetUnitSymbol(inputUnitId); ratingModelRow["InputParameterRoundingSpec"] = _Common.GetParameterRoundingSpec(inputParameterDisplayId); ratingModelRow["OutputParameter"] = outputParameterDisplayId; ratingModelRow["OutputUnitId"] = outputUnitId; ratingModelRow["OutputUnitSymbol"] = _Common.GetUnitSymbol(outputUnitId); ratingModelRow["OutputParameterRoundingSpec"] = _Common.GetParameterRoundingSpec(outputParameterDisplayId); ratingModelRow["Description"] = rmDescription; ratingModelRow["Comment"] = ratingModelDescription.Comment; ratingModelRow["RatingModelInfo"] = string.Format(Resources.NoRatingCurvesFoundWithXY, ratingModelIdentifier, locationName); RatingCurveListServiceResponse ratingCurveListResponse = _Common.GetRatingCurveList(ratingModelIdentifier); if (ratingCurveListResponse != null) { ratingModelRow["RatingModelInfo"] = string.Format(Resources.RatingModelInformation, ratingModelIdentifier, locationName, inputParameterDisplayId, _Common.GetUnitSymbol(inputUnitId), outputParameterDisplayId, _Common.GetUnitSymbol(outputUnitId), ratingCurveListResponse.RatingCurves.Count); } } return(ratingModelTable); }