public void AddReading(DepthReadingModel reading) { var index = DrillSiteModel.DepthReadings.Count(); DrillSiteModel.AddReading(reading); // todo - change to List for guaranteed ordering var depthReadings = DrillSiteModel.DepthReadings.ToList(); UpdateReadingsTrustworthiness(depthReadings, index); }
private void TrickleDownTrustWorthiness(DrillSiteModel drillSite, DepthReadingModel currentReading, int nRecordsRequired) { var index = drillSite.DepthReadings.OrderBy(x => x.Id).IndexOf(currentReading); // starting index is the current index - the number of records necessary for the query // e.g. if we need to query 3 records and current index is 35, then start index would be 32 var indexOfFirstRequiredReading = Math.Max(0, index - nRecordsRequired); var indexToUpdate = index - indexOfFirstRequiredReading; var affectedReadings = drillSite.DepthReadings.OrderBy(x => x.Id).Skip(indexOfFirstRequiredReading).Take(nRecordsRequired * 2 + 1).ToList(); DrillSiteService.UpdateReadingsTrustworthiness(affectedReadings, indexToUpdate); }
private static void CalculateTrustWorthiness(DrillConfigModel config, DepthReadingModel reading, List <DepthReadingModel> dipRecordsToQuery, List <DepthReadingModel> azimuthRecordsToQuery) { // take averages var azimuthAverage = azimuthRecordsToQuery.Any() ? azimuthRecordsToQuery.Sum(x => x.Azimuth) / azimuthRecordsToQuery.Count() : (double?)null; var dipAverage = dipRecordsToQuery.Any() ? dipRecordsToQuery.Sum(x => x.Dip) / dipRecordsToQuery.Count() : (double?)null; if (!dipAverage.HasValue || !azimuthAverage.HasValue) { // assume trustworthy, likely no records exist before this node reading.TrustWorthiness = 100f; return; } // calculate trustworthiness reading.TrustWorthiness = Math.Abs(reading.Azimuth - azimuthAverage.Value) < config.AzimuthMarginOfError && Math.Abs(reading.Dip - dipAverage.Value) < config.DipMarginOfError ? 100 : 0; }
public DepthReadingService(DepthReadingModel depthReadingModel) { DepthReadingModel = depthReadingModel; }