using System.Linq; namespace AsbCloudInfrastructure.Services.DetectOperations.Detectors { #nullable enable class DetectorDrillingRotor : DetectorAbstract { public DetectorDrillingRotor() : base(10_002, "Бурение в роторе") { FragmentLength = 15; StepLength = 10; } protected override bool DetectStart(DetectableTelemetry[] telemetry, int position) { var fragment = telemetry[position .. (position + FragmentLength)]; const double minRop = 5; //м/час const double minRotorSpeed = 5; //об/мин const double ticksPerHour = 60 * 60 * 10_000_000d; var lineBlockPosition = new InterpolationLine(fragment.Select(d => (d.BlockPosition ?? 0d, d.DateTime.Ticks / ticksPerHour))); if (!lineBlockPosition.IsYDecreases(minRop)) return false; var lineWellDepth = new InterpolationLine(fragment.Select(d => (d.WellDepth ?? 0d, d.DateTime.Ticks / ticksPerHour))); if(!lineWellDepth.IsYIncreases(minRop)) return false; var lineRotorSpeed = new InterpolationLine(fragment.Select(d => (d.RotorSpeed ?? 0d, d.DateTime.Ticks / ticksPerHour))); if (!lineRotorSpeed.IsAverageYLessThanBound(minRotorSpeed)) return false; return true; } protected override bool DetectEnd(DetectableTelemetry[] telemetry, int position) => !DetectStart(telemetry, position); } #nullable disable }