using System; using System.Collections.Generic; using System.ComponentModel; 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("sealtest")] public class SealingAnalyzer : IDispenserDispenserAnalyser { private IReader _reader; public IReader Reader { get { return _reader; } set { _reader = value; } } public SealingAnalyzer() { 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< DispenserSample>(); SealingAnalyzerResult result = new SealingAnalyzerResult(); 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(); //start range of test if (pairs.Count > 0 && pairs[0].Count > 1) { List rangeTestValues = csvRows.Where(x => x.Index > pairs[0][0].Index && x.Index < pairs[0][1].Index).ToList(); result.AverageStartTestValue = rangeTestValues.Average(t => t.Pressure); } //end range of test if (pairs.Count > 1 && pairs[1].Count > 1) { List rangeTestValues = csvRows.Where(x => x.Index > pairs[1][0].Index && x.Index < pairs[1][1].Index).ToList(); result.AverageEndTestValue = rangeTestValues.Average(t => t.Pressure); ; } result.AbsoluteTestValue = Math.Abs(result.AverageEndTestValue - result.AverageStartTestValue); result.Result = result.AbsoluteTestValue < 8 ? 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; } } } public class SealingAnalyzerResult : AnalyzerResultBase { [Description("Average Start Test Value")] public double AverageStartTestValue { get; set; } [Description("Average End Test Value")] public double AverageEndTestValue { get; set; } [Description("Absolute Value")] public double AbsoluteTestValue { get; set; } public SealingAnalyzerResult() { AverageStartTestValue = 0.0; AverageEndTestValue = 0.0; AbsoluteTestValue = 0.0; Result = AnalyzerResultValue.Undetermined; } } }