aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Utilities/Tango.DispenserAnalyzer.UI/Analyzers/PrimingAnalyzer.cs
blob: 0756d8ccf65e22a182cd4ed3123d2beade20fb05 (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
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 : IAnalyzer
    {
        public Task<List<IAnalyzerResult>> Process(List<DispenserSample> csvRows)
        {
            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 <= 11 && totalsec >= 8) ? AnalyzerResultValue.Passed : AnalyzerResultValue.Failed;
                }
                results.Add(result);
                return results;
            });
        }
    }
    public class PrimingAnalyzerResult : AnalyzerResultBase
    {
        [Description("PBU Time")]
        public String Time { get; set; }
       

        public PrimingAnalyzerResult()
        {
            Time = "";
            Result = AnalyzerResultValue.Undetermined;
        }
    }
}