aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs')
-rw-r--r--Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/ProcessAnalyser.cs139
1 files changed, 0 insertions, 139 deletions
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();
- }
- }
-
- }
-}