using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Tango.DispenserAnalyzer.UI.Analysis; using Tango.DispenserAnalyzer.UI.Models; namespace Tango.DispenserAnalyzer.UI.Analyzers { [Analyzer("pressure build up")] public class PressureBuildUpAnalyser : IDispenserDispenserAnalyser { private IReader _reader; public IReader Reader { get { return _reader; } set { _reader = value; } } public PressureBuildUpAnalyser() { Reader = new DispenserReader(); } public Task> Process(List csvRows, bool backgroundMode) { return Task.Factory.StartNew>(() => { List results = new List(); List commands = csvRows.Where(x => x.Command != null && x.Command.ToLower().Contains("label")).ToList(); var pairs = commands.Select((x, i) => new { Index = i, Value = x }).GroupBy(x => x.Index / 2).Select(x => x.Select(v => v.Value).ToList()).ToList(); for (int index = 0; index < pairs.Count(); index++) { var pair = pairs[index]; List rangeTestValues = csvRows.Where(x => x.Index > pair[0].Index && x.Index < pair[1].Index).ToList(); //testing PBU { PrimingAnalyzerResult result = new PrimingAnalyzerResult(); int avgMinIndex = rangeTestValues.Select(x => x.Index).Min(); int avgMaxIndex = rangeTestValues.Select(x => x.Index).Max(); double totalsec = TimeSpan.FromMilliseconds((avgMaxIndex - avgMinIndex) * 100).TotalSeconds; result.Time = totalsec.ToString() + " sec"; result.Result = (totalsec < (double)Settings.GetValueByName(AnalyzerSettingsEnum.PBUPassFail)) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; results.Add(result); } } return results; }); } public void GetPoints(List samples, IList points) { samples.ForEach(x => { if (x.Pressure != 0.0) { points.Add(new OxyPlot.DataPoint(x.Index, x.Pressure)); } }); } public bool ShowChartAfterProcess { get { return true; } } public bool AvailableCompareResults { get { return false; } } } }