aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers
diff options
context:
space:
mode:
authorMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
committerMirta <mirta@twine-s.com>2020-12-30 16:39:52 +0200
commit00a491d93733d4625ad329b2ba8237f445364b3f (patch)
tree4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers
parent124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff)
downloadTango-00a491d9.tar.gz
Tango-00a491d9.zip
merge
Diffstat (limited to 'Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers')
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/DynamicSealingAnalyzer.cs97
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/FlowAnalyser.cs292
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PressureBuildUpAnalyser.cs61
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PrimingAnalyzer.cs71
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs139
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ReliabilityTestAnalyser.cs15
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/SealingAnalyzer.cs79
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;
- }
- }
-}