blob: 5b7cb74f589e7f7fdc2c5081d86099818b8fff96 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
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 bool ShowChartAfterProcess { get { return true; } }
public bool AvailableCompareResults { get { return false; } }
}
public class PrimingAnalyzerResult : AnalyzerResultBase
{
[Description("PBU Time")]
public String Time { get; set; }
public String OnlyTime { get; set; }
public PrimingAnalyzerResult()
{
Time = "";
OnlyTime = "";
Result = AnalyzerResultValue.Undetermined;
}
}
}
|