diff options
Diffstat (limited to 'Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers')
7 files changed, 0 insertions, 754 deletions
diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/DynamicSealingAnalyzer.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/DynamicSealingAnalyzer.cs deleted file mode 100644 index d440f42c3..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/DynamicSealingAnalyzer.cs +++ /dev/null @@ -1,97 +0,0 @@ -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("dynamic")] - public class DynamicSealingAnalzyer : IDispenserDispenserAnalyser - { - private IReader<DispenserSample> _reader; - public IReader<DispenserSample> Reader - { - get { return _reader; } - set { _reader = value; } - } - public DynamicSealingAnalzyer() - { - Reader = new DispenserReader(); - } - - public Task<List<IAnalyzerResult>> Process(List<DispenserSample> csvRows, bool backgroundMode) - { - return Task.Factory.StartNew<List<IAnalyzerResult>>(() => - { - List<IAnalyzerResult> results = new List<IAnalyzerResult>(); - List<DispenserSample> commands = csvRows.Where(x => x.Command != null && x.Command.ToLower().Contains("label")).ToList<DispenserSample>(); - - 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(); - - //dynamic test - if (pairs.Count > 0 && pairs[0].Count > 1) - { - DynamicSealingAnalyzerResult result = new DynamicSealingAnalyzerResult(); - List<DispenserSample> rangeTestValues = csvRows.Where(x => x.Index > pairs[0][0].Index && x.Index < pairs[0][1].Index).ToList(); - int period = 10; - result.Result = AnalyzerResultValue.Passed; - //var sum_average = Enumerable.Range(0, rangeTestValues.Count - period).Select(n => rangeTestValues.Select(x=>x.Pressure).Skip(n).Take(periodLength).Average()).ToList(); - for (int counter = 0; counter <= rangeTestValues.Count - period; ) - { - var sum1 = rangeTestValues.Skip(counter++).Take(period).Average(t => t.Pressure); - var sum2 = rangeTestValues.Skip(counter++).Take(period).Average(t => t.Pressure); - if(sum1 > sum2 && sum1 - sum2 > 8) - { - result.DynamicSealingResult = "test failed"; - result.Result = AnalyzerResultValue.Failed; - break; - } - } - results.Add(result); - } - SealingAnalyzerResult sealingAnalyzerResult = new SealingAnalyzerResult(); - //start sealing test - if (pairs.Count > 1 && pairs[1].Count > 1) - { - List<DispenserSample> rangeStartTestValues = csvRows.Where(x => x.Index > pairs[1][0].Index && x.Index < pairs[1][1].Index).ToList(); - sealingAnalyzerResult.AverageStartTestValue = rangeStartTestValues.Average(t => t.Pressure); - } - //end sealing of test - if (pairs.Count > 2 && pairs[2].Count > 1) - { - List<DispenserSample> rangeEndTestValues = csvRows.Where(x => x.Index > pairs[2][0].Index && x.Index < pairs[2][1].Index).ToList(); - sealingAnalyzerResult.AverageEndTestValue = rangeEndTestValues.Average(t => t.Pressure); - } - sealingAnalyzerResult.AbsoluteTestValue = Math.Abs(sealingAnalyzerResult.AverageEndTestValue - sealingAnalyzerResult.AverageStartTestValue); - sealingAnalyzerResult.Result = sealingAnalyzerResult.AbsoluteTestValue < 8 ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; - results.Add(sealingAnalyzerResult); - return results; - }); - } - - public void GetPoints(List<DispenserSample> samples, IList<OxyPlot.DataPoint> points) - { - samples.ForEach(x => - { - if (x.Pressure != 0.0) - { points.Add(new OxyPlot.DataPoint(x.Index, x.Pressure)); } - }); - } - - public class DynamicSealingAnalyzerResult : AnalyzerResultBase - { - [Description("Dynamic sealing result")] - public string DynamicSealingResult { get; set; } - - public DynamicSealingAnalyzerResult() - { - DynamicSealingResult = "test succeed"; - Result = AnalyzerResultValue.Undetermined; - } - } - } -} diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs deleted file mode 100644 index 213f4e4f0..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs +++ /dev/null @@ -1,292 +0,0 @@ -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; -using MathNet.Numerics.LinearAlgebra; -using System.Linq.Expressions; -using System.Diagnostics; -using OxyPlot; -using System.Collections.ObjectModel; -using Tango.Documents; -using System.IO; -using Tango.Core.Helpers; - -namespace Tango.DispenserAnalyzer.UI.Analyzers -{ - [Analyzer("flow")] - - public class FlowAnalyser : IDispenserDispenserAnalyser - { - private IReader<DispenserSample> _reader; - public IReader<DispenserSample> Reader - { - get { return _reader; } - set { _reader = value; } - } - - - public FlowAnalyser() - { - Reader = new DispenserReader(); - } - - public Task<List<IAnalyzerResult>> Process(List<DispenserSample> csvRows, bool backgroundMode) - { - return Task.Factory.StartNew<List<IAnalyzerResult>>(() => - { - List<IAnalyzerResult> results = new List<IAnalyzerResult>(); - List<DispenserSample> commands = csvRows.Where(x => x.Command != null && x.Command.ToLower().Contains("label")).ToList<DispenserSample>(); - 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(); - MovingAverageFilter filter = new MovingAverageFilter(); - int flowtestNumber = 0; - for (int index = 0; index < pairs.Count(); index++) - { - var pair = pairs[index]; - if (pair.Count != 2) - continue; - - List<DispenserSample> rangeTestValues = csvRows.Where(x => x.Index > pair[0].Index && x.Index < pair[1].Index).ToList(); - - if (index % 2 == 1)//testing Flow-error - { - - List<DispenserSample> filteredValues = rangeTestValues.Skip((int)Settings.GetValueByName(AnalyzerSettingsEnum.ExcludeAnalysis)).ToList(); - - //Move Average data - List<Task> tasks = new List<Task>(); - int calc_count = (int)filteredValues.Count() / 4; - int start_index = 0; - while (start_index < filteredValues.Count()) - { - int calc_amount = (start_index + calc_count) >= (filteredValues.Count() - 4) ? filteredValues.Count() - start_index : calc_count; - var source_filter = filteredValues.Skip(start_index).Take(calc_amount).ToList(); - tasks.Add(Task.Run(() => - { - filter.Filtering(source_filter); - })); - start_index += calc_amount; - } - Task.WaitAll(tasks.ToArray()); - - //calculate difference Max Min values for each 300 values - int periodCalcMaxMin = (int)Settings.GetValueByName(AnalyzerSettingsEnum.MaxMinRange); - int intervalCalcMaxMin = (int)Settings.GetValueByName(AnalyzerSettingsEnum.MaxMinIntervals); - List<int> differenceMaxMin = new List<int>(); - List<int> differenceMaxMinToLocationArr = new List<int>(); - int location_index = 0; - for (int i = 0; i < (filteredValues.Count - periodCalcMaxMin); i+= intervalCalcMaxMin) - { - var rangeItems =(filteredValues.Skip(i).Take(periodCalcMaxMin).ToList()); - int range = (int)(rangeItems.Max(t => t.Pressure) - rangeItems.Min(t => t.Pressure)); - differenceMaxMin.Add(range); - - differenceMaxMinToLocationArr.Add(++location_index); - } - FlowAverageAnalyzerResult averageResult = new FlowAverageAnalyzerResult(); - averageResult.BackgroundMode = backgroundMode; - averageResult.AverageValue = filteredValues.Average(t => t.Pressure); - averageResult.Result = (averageResult.AverageValue <= Settings.GetValueByName(AnalyzerSettingsEnum.AvgMaxValue) && averageResult.AverageValue >= Settings.GetValueByName(AnalyzerSettingsEnum.AvgMinValue)) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; - results.Add(averageResult); - - FlowAnalyzerResult result = new FlowAnalyzerResult(++flowtestNumber); - result.BackgroundMode = backgroundMode; - result.AverageValue = averageResult.AverageValue; - result.SetLocalErrors(differenceMaxMin, differenceMaxMinToLocationArr); - results.Add(result); - } - else//testing PBU - { - PrimingAnalyzerResult result = new PrimingAnalyzerResult(); - result.BackgroundMode = backgroundMode; - 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 (succeed for period < {AnalyzerSettingsEnum.FlowPBUPassFail})"; ; - result.Result = (totalsec < Settings.GetValueByName(AnalyzerSettingsEnum.FlowPBUPassFail)) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; - results.Add(result); - } - } - - return results; - }); - } - - public void GetPoints(List<DispenserSample> samples, IList<OxyPlot.DataPoint> points) - { - samples.ForEach(x => - { - if (x.Pressure != 0.0) - { points.Add(new OxyPlot.DataPoint(x.Index, x.Pressure)); } - }); - } - - public class FlowAverageAnalyzerResult : AnalyzerResultBase - { - [Description("Average Value")] - public double AverageValue { get; set; } - public FlowAverageAnalyzerResult() : base() - { - AverageValue = 0.0; - Result = AnalyzerResultValue.Undetermined; - } - } - - - public class FlowAnalyzerResult : AnalyzerResultBase - { - #region Properties - - [Description("Max Error")] - public string LocalErrors { get; set; } - - public double AverageValue { get; set; } - - public int TestNumber { get; set; } - - #endregion Properties - - public FlowAnalyzerResult(int testNumber) :base() - { - AverageValue = 0.0; - Result = AnalyzerResultValue.Undetermined; - TestNumber = testNumber; - } - - /// <summary> - /// Calculate result, max error. Set oxy plot column chart. - /// </summary> - /// <param name="differenceMaxMin">The difference maximum minimum.</param> - public void SetLocalErrors(List<int> differenceMaxMin, List<int> differenceMaxMinToLocationArr) - { - // int count = differenceMaxMin.Where(x => x > 25 ).Count(); - int max_key = FindMaxErrorObject(differenceMaxMin); - if (!BackgroundMode) - { - var points = RangeToCountChart.Points; - points.Clear(); - for (int i = 0; i <= max_key; i++) - { - int val = differenceMaxMin.Count(x => x == i); - if(val > 0 || points.Count > 0) - { - points.Add(new DataPoint(i, val)); - } - } - this.IsShowPlotResult = true; - RangeToCountChart.Title = $"Local error histogram {TestNumber}"; - RangeToCountChart.UpdateData(); - } - var rangeToTimePoints = RangeToTimeChart.Points; - rangeToTimePoints.Clear(); - for(int y = 0; y < differenceMaxMinToLocationArr.Count && y < differenceMaxMin.Count; y++) - { - rangeToTimePoints.Add(new DataPoint(differenceMaxMinToLocationArr.ElementAt(y), differenceMaxMin.ElementAt(y))); - } - if (!BackgroundMode) - { - RangeToTimeChart.Title = $"Local error vs position {TestNumber}"; - RangeToTimeChart.UpdateData(); - } - - string filename = FileHelper.GetFileToSaveFlowRangeToTimeData(TestNumber); - if(filename.IsNotNullOrEmpty() && rangeToTimePoints.Count > 0) - { - ExportnDataToExcel(rangeToTimePoints.ToList(), filename); - } - } - - private double BuildMeasurementError(List<int> range_values) - { - int count = range_values.Count(); - return (count - (int)Settings.GetValueByName(AnalyzerSettingsEnum.TakeOffMaxMin)); - } - - /// <summary> - /// Finds the maximum error object. Init LocalErrors message. Return max range value. - /// </summary> - private int FindMaxErrorObject(List<int> range_values) - { - var countValArr = range_values.GroupBy(x => x).Select(t => new { Key = t.Key, Value = t.Count() }).OrderBy(x=>x.Key).ToArray(); - double merror = Settings.GetValueByName(AnalyzerSettingsEnum.TakeOffMaxMin);// BuildMeasurementError(range_values); - double sum = 0; - int max_key = 0; - int range = 0; - for (int i = countValArr.Count() - 1; i >= 0; i--) - { - sum += countValArr[i].Value; - if (max_key == 0) - max_key = (int)countValArr[i].Key; - if (sum > merror) - { - double persentageOfError = countValArr[i].Key / AverageValue * 100; - range = (int)countValArr[i].Key; - int occurrence = countValArr[i].Value; - LocalErrors = $" {persentageOfError.ToString("F2")}% where max local error = {range.ToString()} and occurrence = {occurrence.ToString()}"; - break; - } - } - - var res = range / AverageValue * 100; - Result = res <= Settings.GetValueByName(AnalyzerSettingsEnum.MaxError) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; - return max_key; - } - - /// <summary> - /// Exports the calibration data to excel. - /// </summary> - /// <param name="calibrationPoints">The calibration points.</param> - /// <param name="fileName">Name of the file.</param> - public static void ExportnDataToExcel(List<DataPoint> dataPoints, String fileName) - { - try - { - CreateDataExcelTemplate(fileName); - - using (ExcelWriter writer = new ExcelWriter(fileName)) - { - writer.UpdateTableSize("RangeToTimeData", "A1:B" + (dataPoints.Count + 2).ToString()); - writer.WriteData(dataPoints, "RangeToTimeData"); - } - } - catch (Exception ex) - { - Debug.WriteLine("Error: ", ex.Message); - } - } - - /// <summary> - /// Creates the calibration data excel template. - /// </summary> - /// <param name="fileName">Name of the file.</param> - public static void CreateDataExcelTemplate(String fileName) - { - var stream = EmbeddedResourceHelper.GetEmbeddedResourceStream("Tango.DispenserAnalyzer.UI.Models.FlowRangeToTimeResults.xlsx"); - - using (FileStream fs = new FileStream(fileName, FileMode.Create)) - { - stream.Seek(0, SeekOrigin.Begin); - stream.CopyTo(fs); - } - } - } - - public class MovingAverageFilter - { - public MovingAverageFilter() - { - } - public void Filtering(List<DispenserSample> source) - { - int periodAverage = 5; - for (int i = 0; i < (source.Count - 5); i++) - { - source[i].Pressure = source.Skip(i).Take(periodAverage).Average(x => x.Pressure); - } - } - } - } -} diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PressureBuildUpAnalyser.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PressureBuildUpAnalyser.cs deleted file mode 100644 index 9288eb2ad..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PressureBuildUpAnalyser.cs +++ /dev/null @@ -1,61 +0,0 @@ -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<DispenserSample> _reader; - public IReader<DispenserSample> Reader - { - get { return _reader; } - set { _reader = value; } - } - - public PressureBuildUpAnalyser() - { - Reader = new DispenserReader(); - } - public Task<List<IAnalyzerResult>> Process(List<DispenserSample> csvRows, bool backgroundMode) - { - return Task.Factory.StartNew<List<IAnalyzerResult>>(() => - { - List<IAnalyzerResult> results = new List<IAnalyzerResult>(); - List<DispenserSample> commands = csvRows.Where(x => x.Command != null && x.Command.ToLower().Contains("label")).ToList<DispenserSample>(); - 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<DispenserSample> 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 < Settings.GetValueByName(AnalyzerSettingsEnum.PBUPassFail)) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; - results.Add(result); - } - } - return results; - }); - } - - public void GetPoints(List<DispenserSample> samples, IList<OxyPlot.DataPoint> points) - { - samples.ForEach(x => - { - if (x.Pressure != 0.0) - { points.Add(new OxyPlot.DataPoint(x.Index, x.Pressure)); } - }); - } - } - -} diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PrimingAnalyzer.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PrimingAnalyzer.cs deleted file mode 100644 index 315c384d6..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PrimingAnalyzer.cs +++ /dev/null @@ -1,71 +0,0 @@ -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("priming")] - public class PrimingAnalyzer : IDispenserDispenserAnalyser - { - private IReader<DispenserSample> _reader; - public IReader<DispenserSample> Reader - { - get { return _reader; } - set { _reader = value; } - } - - public PrimingAnalyzer() - { - Reader = new DispenserReader(); - } - public Task<List<IAnalyzerResult>> Process(List<DispenserSample> csvRows, bool backgroundMode) - { - return Task.Factory.StartNew<List<IAnalyzerResult>>(() => - { - List<IAnalyzerResult> results = new List<IAnalyzerResult>(); - List<DispenserSample> commands = csvRows.Where(x => x.Command == "Label").ToList<DispenserSample>(); - PrimingAnalyzerResult result = new PrimingAnalyzerResult(); - 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<DispenserSample> rangeTestValues = csvRows.Where(x => x.Index > pairs[0][0].Index && x.Index < pairs[0][1].Index).ToList(); - 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 <= 12 && totalsec >= 7) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed; - } - results.Add(result); - return results; - }); - } - - public void GetPoints(List<DispenserSample> samples, IList<OxyPlot.DataPoint> points) - { - samples.ForEach(x => - { - if (x.Pressure != 0.0) - { points.Add(new OxyPlot.DataPoint(x.Index, x.Pressure)); } - }); - } - } - public class PrimingAnalyzerResult : AnalyzerResultBase - { - [Description("PBU Time")] - public String Time { get; set; } - - - public PrimingAnalyzerResult() - { - Time = ""; - Result = AnalyzerResultValue.Undetermined; - } - } -} diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs deleted file mode 100644 index 663b72228..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs +++ /dev/null @@ -1,139 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.CSV; -using Tango.DispenserAnalyzer.UI.Analysis; -using Tango.DispenserAnalyzer.UI.Models; - -namespace Tango.DispenserAnalyzer.UI.Analyzers -{ - [Analyzer("process")] - public class ProcessAnalyser : IProcessAnalyzer - { - private IReader<ProcessSample> _reader; - public IReader<ProcessSample> Reader { - get { return _reader; } - set { _reader = value; } - } - - public ProcessAnalyser() - { - Reader = new ProcessReader(); - } - - public Task<List<IAnalyzerResult>> Process(List<ProcessSample> csvRows, bool backgroundMode) - { - return Task.Factory.StartNew<List<IAnalyzerResult>>(() => - { - List<IAnalyzerResult> results = new List<IAnalyzerResult>(); - ProcessAnalyzerResult result = new ProcessAnalyzerResult(); - result.BackgroundMode = backgroundMode; - double delta = Settings.GetValueByName(AnalyzerSettingsEnum.TimeInterval); - int startPoint = delta == 0? 0 : (int)(Settings.GetValueByName(AnalyzerSettingsEnum.StartCalculation) / delta); - int endPoint = delta == 0 ? (csvRows.Count -1) : (int)(Settings.GetValueByName(AnalyzerSettingsEnum.EndCalculation) / delta); - int takePoints = endPoint > startPoint ? (endPoint - startPoint) : (csvRows.Count - 1 - startPoint); - - List<ProcessSample> rangeValues = csvRows.Skip(startPoint).Take(takePoints).ToList(); - - result.MinValue = rangeValues.Min(x => x.Value); - result.MaxValue = rangeValues.Max(x => x.Value); - result.AverageValue = rangeValues.Average(x => x.Value); - result.StandardDeviation = ProcessAnalyser.StdDev(rangeValues.Select(x => x.Value)); - - result.Result = AnalyzerResultValue.Passed; - - //Move Average data - List<Task> tasks = new List<Task>(); - int calc_count = (int)csvRows.Count() / 4; - int start_index = 0; - while (start_index < csvRows.Count()) - { - int calc_amount = (start_index + calc_count) >= (csvRows.Count() - 4) ? csvRows.Count() - start_index : calc_count; - var source_filter = csvRows.Skip(start_index).Take(calc_amount).ToList(); - tasks.Add(Task.Run(() => - { - ProcessAnalyser.Filtering(source_filter); - })); - start_index += calc_amount; - } - Task.WaitAll(tasks.ToArray()); - - result.CreateMovingAvgGraph(csvRows); - results.Add(result); - return results; - }); - } - - public static double StdDev(IEnumerable<double> values) - { - double avg = values.Average(); - double sum = values.Sum(v => (v - avg) * (v - avg)); - double denominator = values.Count() - 1; - return denominator > 0.0 ? Math.Sqrt(sum / denominator) : -1; - } - public static void Filtering(List<ProcessSample> source) - { - int periodAverage = (int)Settings.GetValueByName(AnalyzerSettingsEnum.MovingAvg); - int count = (source.Count < periodAverage) ? source.Count : source.Count - periodAverage; - for (int i = 0; i < count; i++) - { - source[i].Value = source.Skip(i).Take(periodAverage).Average(x => x.Value); - } - } - - public void GetPoints(List<ProcessSample> samples, IList<OxyPlot.DataPoint> points) - { - samples.ForEach(x => - { - points.Add(new OxyPlot.DataPoint(x.TimeIntervalSec, x.Value)); - }); - } - - } - - public class ProcessAnalyzerResult : AnalyzerResultBase - { - [Description("Selected Area")] - public string Header { get; set; } - - [Description("Average Value")] - public double AverageValue { get; set; } - [Description("Max value")] - public double MaxValue { get; set; } - [Description("Min value")] - public double MinValue { get; set; } - [Description("Standard deviation value")] - public double StandardDeviation { get; set; } - - - public ProcessAnalyzerResult() - { - double from = Settings.GetValueByName(AnalyzerSettingsEnum.StartCalculation); - double to = Settings.GetValueByName(AnalyzerSettingsEnum.EndCalculation); - Header = $"from {from} to {to} seconds"; - AverageValue = MaxValue = MinValue = 0.0; - Result = AnalyzerResultValue.Undetermined; - IsShowLineChartResult = true; - } - - public void CreateMovingAvgGraph(List<ProcessSample> avgValues) - { - if (!BackgroundMode) - { - var points = LineChart.Points; - points.Clear(); - avgValues.ForEach(x => - { - points.Add(new OxyPlot.DataPoint(x.TimeIntervalSec, x.Value)); - }); - - LineChart.Title = $"Moving Average Values"; - LineChart.UpdateData(); - } - } - - } -} diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ReliabilityTestAnalyser.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ReliabilityTestAnalyser.cs deleted file mode 100644 index 05a0aa32c..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ReliabilityTestAnalyser.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System; -using System.Collections.Generic; -using System.ComponentModel; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Tango.DispenserAnalyzer.UI.Analysis; - -namespace Tango.DispenserAnalyzer.UI.Analyzers -{ - [Analyzer("Reliability")] - public class ReliabilityTestAnalyser: FlowAnalyser - { - } -} diff --git a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/SealingAnalyzer.cs b/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/SealingAnalyzer.cs deleted file mode 100644 index 841101b10..000000000 --- a/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/SealingAnalyzer.cs +++ /dev/null @@ -1,79 +0,0 @@ -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<DispenserSample> _reader; - public IReader<DispenserSample> Reader - { - get { return _reader; } - set { _reader = value; } - } - - public SealingAnalyzer() - { - Reader = new DispenserReader(); - } - public Task<List<IAnalyzerResult>> Process(List<DispenserSample> csvRows, bool backgroundMode) - { - return Task.Factory.StartNew<List<IAnalyzerResult>>(() => - { - List<IAnalyzerResult> results = new List<IAnalyzerResult>(); - List<DispenserSample> 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<DispenserSample> 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<DispenserSample> 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<DispenserSample> samples, IList<OxyPlot.DataPoint> points) - { - samples.ForEach(x => - { - if (x.Pressure != 0.0) - { points.Add(new OxyPlot.DataPoint(x.Index, x.Pressure)); } - }); - } - } - - 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; - } - } -} |
