Ejemplo n.º 1
0
        private void PickUpFromSet(PsaParametersSet set, DateTime date)
        {
            if (!ParametersSetHasRequiredDataTypes(set))
            {
                return;
            }
            PsaParameterData rpmData = set.Parameters.FirstOrDefault(
                p => p.Type == PsaParameterType.EngineRpm);
            PsaParameterData inj1Data =
                set.Parameters.FirstOrDefault(
                    p => p.Type == PsaParameterType.Injector1Correction);
            PsaParameterData inj2Data =
                set.Parameters.FirstOrDefault(
                    p => p.Type == PsaParameterType.Injector2Correction);
            PsaParameterData inj3Data =
                set.Parameters.FirstOrDefault(
                    p => p.Type == PsaParameterType.Injector3Correction);
            PsaParameterData inj4Data =
                set.Parameters.FirstOrDefault(
                    p => p.Type == PsaParameterType.Injector4Correction);

            if (rpmData != null)
            {
                GenerateFromParameters(rpmData,
                                       inj1Data, inj2Data, inj3Data, inj4Data, date);
            }
        }
Ejemplo n.º 2
0
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet set)
        {
            IList <double> rpmData = set.GetParameterOfType(
                PsaParameterType.EngineRpm).GetDoubles();
            IList <double> injectionTimeData = set.GetParameterOfType(
                PsaParameterType.InjectionTime).GetDoubles();
            CorrelatedMedianExtractor extractor =
                new CorrelatedMedianExtractor(rpmData, injectionTimeData, 5);
            double value = extractor.GetForBaseValue((int)rpm);

            if (double.IsNaN(value))
            {
                return;
            }
            ISettingsAtomApplier applier = new SettingsAtomApplier(
                Settings.SettingsMolecule.GetPriorityAtom());
            double mark = applier.GetMarkForValue(value);

            if (double.IsNaN(mark))
            {
                return;
            }
            MarksHistory[date] = mark;
        }
Ejemplo n.º 3
0
        public AnalyticStatisticsItem Get(PsaParametersSet set,
                                          DateTime sourceDataCaptureDateTime)
        {
            AnalyticStatisticsItem result = new AnalyticStatisticsItem(Type,
                                                                       VehicleInfo.Engine.Family.Type, VehicleInfo.Engine.Type);
            PsaParameterData rpmData     = set.GetParameterOfType(PsaParameterType.EngineRpm);
            PsaParameterData voltageData = GetRequiredDependentData(set);

            if (rpmData == null || voltageData == null)
            {
                throw new Exception("set does not fit.");
            }
            CorrelatedMedianExtractor extractor = new CorrelatedMedianExtractor(
                rpmData.GetDoubles(), voltageData.GetDoubles(),
                RpmCorrelationThresholdPercentage);
            double doubleValue = extractor.GetForBaseValue(Convert.ToDouble(TargetRpm));

            if (!double.IsNaN(doubleValue))
            {
                AnalyticStatisticsValue value =
                    new AnalyticStatisticsValue(doubleValue, info.Vin, set.Id,
                                                sourceDataCaptureDateTime);
                result.Values.Add(value);
            }
            return(result);
        }
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet set)
        {
            IList <double>        rpmData      = set.GetParameterOfType(PsaParameterType.EngineRpm).GetDoubles();
            IList <double>        requiredData = set.GetParameterOfType(requiredParameter).GetDoubles();
            EngineStartupDetector detector     = new EngineStartupDetector(rpmData);

            if (!detector.EngineStartupDetected())
            {
                return;
            }
            IList <int> startupIndexes = detector.GetEngineStartupPointIndexes();

            foreach (int startupIndex in startupIndexes)
            {
                double peak = StartupRegionExtractor.Extract(startupIndex, requiredData).Max();
                if (double.IsNaN(peak))
                {
                    continue;
                }
                SettingsAtomApplier applier = new SettingsAtomApplier(
                    Settings.SettingsMolecule.GetPriorityAtom());
                double mark = applier.GetMarkForValue(peak);
                if (!double.IsNaN(mark))
                {
                    MarksHistory[date] = mark;
                }
            }
        }
Ejemplo n.º 5
0
        public AnalyticStatisticsItem Get(PsaParametersSet set,
                                          DateTime sourceDataCaptureDateTime)
        {
            AnalyticStatisticsItem result = new AnalyticStatisticsItem(
                AnalyticRuleType.EngineStartUndervoltage,
                info.Engine.Family.Type, info.Engine.Type);
            IList <double> rpmLine =
                set.GetParameterOfType(PsaParameterType.EngineRpm).GetDoubles();
            IList <double> voltagesLine =
                set.GetParameterOfType(PsaParameterType.BatteryVoltage).GetDoubles();
            EngineStartupDetector detector = new EngineStartupDetector(rpmLine);

            if (!detector.EngineStartupDetected())
            {
                return(result); // empty, will be assimilated and disappear
            }
            IList <int> startupPoints = detector.GetEngineStartupPointIndexes();

            // we will have as many statistical values as there is startup points
            foreach (int startupPointIndex in startupPoints)
            {
                StartupUndervoltageExtractor extractor =
                    new StartupUndervoltageExtractor(startupPointIndex, voltagesLine);
                double startupUndervoltage = extractor.Extract();
                if (!double.IsNaN(startupUndervoltage))
                {
                    result.Values.Add(new AnalyticStatisticsValue(
                                          startupUndervoltage, info.Vin, set.Id,
                                          sourceDataCaptureDateTime));
                }
            }
            return(result);
        }
Ejemplo n.º 6
0
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet set)
        {
            IList <double>        rpmData  = set.GetParameterOfType(PsaParameterType.EngineRpm).GetDoubles();
            IList <double>        timeData = set.GetParameterOfType(PsaParameterType.InjectionTime).GetDoubles();
            EngineStartupDetector detector = new EngineStartupDetector(rpmData);

            if (!detector.EngineStartupDetected())
            {
                return;
            }
            IList <int> indexes  = detector.GetEngineStartupPointIndexes();
            double      peakTime = 0;

            foreach (int i in indexes)
            {
                double newPeakTime = StartupRegionExtractor.Extract(i, timeData).Max();
                if (newPeakTime > peakTime)
                {
                    peakTime = newPeakTime;
                }
            }
            if (peakTime == 0)
            {
                return;
            }
            SettingsAtomApplier applier = new SettingsAtomApplier(
                Settings.SettingsMolecule.GetPriorityAtom());
            double mark = applier.GetMarkForValue(peakTime);

            MarksHistory[date] = mark;
        }
Ejemplo n.º 7
0
        public bool Fits(PsaParametersSet set)
        {
            bool hasRpm = set.HasParameterOfType(PsaParameterType.EngineRpm);
            bool hasInjectionTimeData = set.HasParameterOfType(PsaParameterType.InjectionTime);

            return(hasRpm && hasInjectionTimeData);
        }
        private void ExtractForInjector(PsaParametersSet set,
                                        AnalyticStatisticsItem result, int injectorNumber,
                                        DateTime sourceDataCaptureDateTime)
        {
            PsaParameterData forThisInjector =
                set.GetCertainInjectorCorrections(injectorNumber);

            if (forThisInjector == null)
            {
                return;
            }
            PsaParameterData rpmData =
                set.GetParameterOfType(PsaParameterType.EngineRpm);
            CorrelatedMedianExtractor extractor =
                new CorrelatedMedianExtractor(
                    rpmData.GetDoubles(), forThisInjector.GetDoubles(),
                    RpmCorrelationThresholdPercentage);
            double res = extractor.GetForBaseValue((int)RuleTypeToRpm.Map(type));

            if (double.IsNaN(res))
            {
                return;
            }
            // becuse we need correction's absolute value, it can be negative
            double abs = Math.Abs(res);

            result.Values.Add(new AnalyticStatisticsValue(
                                  abs, info.Vin, set.Id, sourceDataCaptureDateTime));
        }
Ejemplo n.º 9
0
        private PsaParametersSet GenerateParametersSet()
        {
            var result = new PsaParametersSet()
            {
                AdditionalSourceInfo = "SourceInfo",
                EcuLabel             = "ECU LABEL",
                EcuName        = "ESCU1",
                Id             = 21,
                OriginalName   = "Orig Name",
                OriginalTypeId = "@123-GG",
                PsaTraceId     = 23,
                Type           = PsaParametersSetType.Mixed
            };
            var rpmData = new PsaParameterData("Engine RPM")
            {
                AdditionalSourceInfo = "Add source info",
                HasTimestamps        = false,
                Id                 = 34,
                OriginalName       = "Engine RPM",
                OriginalTypeId     = "Eng RPMMM",
                PsaParametersSetId = 21,
                Type               = PsaParameterType.EngineRpm,
                Units              = Unit.Rpm
            };

            rpmData.Values.Clear();
            rpmData.Values.Add("720");
            rpmData.Values.Add("720");
            rpmData.Values.Add("1200");
            rpmData.Values.Add("1300");
            rpmData.Values.Add("1300");
            rpmData.Values.Add("1400");
            rpmData.Values.Add("1200");
            rpmData.Values.Add("720");
            result.Parameters.Add(rpmData);
            var otherData = new PsaParameterData("EngineRpm")
            {
                AdditionalSourceInfo = "Add source info",
                HasTimestamps        = false,
                Id                 = 34,
                OriginalName       = "Engine RPM",
                OriginalTypeId     = "Eng RPMMM",
                PsaParametersSetId = 21,
                Timestamps         = { },
                Type               = PsaParameterType.OilPressure,
                Units              = Unit.Bar
            };

            otherData.Values.Clear();
            otherData.Values.Add("72");
            otherData.Values.Add("72");
            otherData.Values.Add("120");
            otherData.Values.Add("130");
            otherData.Values.Add("130");
            otherData.Values.Add("140");
            otherData.Values.Add("120");
            otherData.Values.Add("72");
            result.Parameters.Add(otherData);
            return(result);
        }
Ejemplo n.º 10
0
        public bool Fits(PsaParametersSet set)
        {
            bool hasRpm          = set.HasParameterOfType(PsaParameterType.EngineRpm);
            bool hasRequiredType = set.HasParameterOfType(RequiredType);

            return(hasRpm && hasRequiredType);
        }
Ejemplo n.º 11
0
 private IEnumerable <PsaTrace> EnumerateSelectedTraces(
     IEnumerable <ExportablePsaTraceViewModel> unfiltered)
 {
     foreach (ExportablePsaTraceViewModel trace in unfiltered.Where(
                  t => t.IsSelectedForExport))
     {
         var res = new PsaTrace();
         trace.Model.CopyTo(res);
         foreach (ExportablePsaParametersSetViewModel vm in
                  trace.ParametersSets.Where(
                      ps => ps.IsSelectedForExport))
         {
             var set = new PsaParametersSet();
             vm.Model.CopyTo(set);
             foreach (PsaParameterDataViewModel pd in vm.Parameters)
             {
                 var data = new PsaParameterData(pd.Model.OriginalTypeId);
                 pd.Model.CopyTo(data);
                 set.Parameters.Add(data);
             }
             res.ParametersSets.Add(set);
         }
         yield return(res);
     }
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Deserialization
        /// </summary>
        /// <param name="traceElement"></param>
        /// <returns></returns>
        private PsaTrace ReadTraceElement(XElement traceElement)
        {
            PsaTrace result = new PsaTrace();

            // on resources
            XElement id           = traceElement.Element(IdName);
            XElement psaDatasetId = traceElement.
                                    Element(PsaDatasetIdName);

            // not on resources yet
            XElement date         = traceElement.Element(DateName);
            XElement application  = traceElement.Element(ApplicationName);
            XElement format       = traceElement.Element(FormatName);
            XElement phone        = traceElement.Element(PhoneName);
            XElement phoneChannel = traceElement.Element(PhoneChannelName);
            XElement vin          = traceElement.Element(VinName);
            XElement address      = traceElement.Element(AddressName);
            XElement toolSn       = traceElement.Element(ToolSerialNumberName);
            XElement toolName     = traceElement.Element(ToolNameName);
            XElement ssid         = traceElement.Element(SavesetIdName);
            XElement vehModelName = traceElement.Element(VehicleModelNameName);
            XElement mileage      = traceElement.Element(MileageName);
            XElement manufacturer = traceElement.Element(ManufacturerName);

            result.Id           = long.Parse(id.Value);
            result.PsaDatasetId = long.Parse(psaDatasetId.Value);
            DateTime dt;

            DateTime.TryParse(date.Value,
                              CultureInfo.InvariantCulture, DateTimeStyles.None, out dt);
            result.Date             = dt;
            result.Application      = application.Value;
            result.Format           = format.Value;
            result.Phone            = phone.Value;
            result.PhoneChannel     = phoneChannel.Value;
            result.Vin              = vin.Value;
            result.Address          = address.Value;
            result.ToolSerialNumber = toolSn.Value;
            result.ToolName         = toolName.Value;
            result.SavesetId        = ssid.Value;
            result.VehicleModelName = vehModelName.Value;
            result.Mileage          = int.Parse(mileage.Value);
            result.Manufacturer     = (Manufacturer)(Int32.
                                                     Parse(manufacturer.Value));

            XElement parameterSetsElement =
                traceElement.Element(ParameterSetsName);
            IEnumerable <XElement> parameterSetElements =
                parameterSetsElement.Elements(ParametersSetName);

            foreach (XElement paramSetElement in parameterSetElements)
            {
                PsaParametersSet set = new PsaParametersSet();
                DeserializeParametersSet(paramSetElement, set);
                result.ParametersSets.Add(set);
            }

            return(result);
        }
Ejemplo n.º 13
0
        public bool Fits(PsaParametersSet set)
        {
            PsaParameterType requiredType    = GetRequiredType();
            bool             hasRequiredType = set.HasParameterOfType(requiredType);
            bool             hasRpmData      = set.HasParameterOfType(PsaParameterType.EngineRpm);

            return(hasRequiredType && hasRpmData);
        }
Ejemplo n.º 14
0
 public PsaParametersSetViewModel(PsaParametersSet model)
 {
     this.model = model;
     foreach (PsaParameterData parameter in model.Parameters)
     {
         parameters.Add(new PsaParameterDataViewModel(parameter));
     }
 }
Ejemplo n.º 15
0
 private bool ParameterSetHasRequiredDataTypes(PsaParametersSet set)
 {
     return(set.Parameters.
            Any(p => p.Type == PsaParameterType.EngineRpm) &&
            set.Parameters.Any(p =>
                               p.Type == PsaParameterType.WaterTemperature || // Not in use actually!
                               p.Type == PsaParameterType.EngineCoolantTemperature));
 }
Ejemplo n.º 16
0
        public override bool Fits(PsaParametersSet set)
        {
            bool hasRpm = set.Parameters.Any(p =>
                                             p.Type == PsaParameterType.EngineRpm);
            bool hasHigherLambsaVoltageData = set.Parameters.Any(
                p => p.Type == PsaParameterType.UpperOxygenSensorVoltage);

            return(hasRpm && hasHigherLambsaVoltageData);
        }
Ejemplo n.º 17
0
        public bool Fits(PsaParametersSet set)
        {
            bool hasRpm = set.Parameters.Any(p =>
                                             p.Type == PsaParameterType.EngineRpm);
            bool hasBatteryVoltageData = set.Parameters.Any(
                p => p.Type == PsaParameterType.BatteryVoltage);

            return(hasRpm && hasBatteryVoltageData);
        }
Ejemplo n.º 18
0
 private void ExtractValues(
     PsaParametersSet set, AnalyticStatisticsItem result,
     DateTime sourceDataCaptureDateTime)
 {
     ExtractForInjector(set, result, 1, sourceDataCaptureDateTime);
     ExtractForInjector(set, result, 2, sourceDataCaptureDateTime);
     ExtractForInjector(set, result, 3, sourceDataCaptureDateTime);
     ExtractForInjector(set, result, 4, sourceDataCaptureDateTime);
 }
Ejemplo n.º 19
0
        public AnalyticStatisticsItem Get(PsaParametersSet set,
                                          DateTime sourceDataCaptureDateTime)
        {
            AnalyticStatisticsItem result = new AnalyticStatisticsItem(Type,
                                                                       VehicleInfo.Engine.Family.Type,
                                                                       VehicleInfo.Engine.Type);

            ExtractValues(set, result, sourceDataCaptureDateTime);
            return(result);
        }
 public AnalyticStatisticsItem Get(
     PsaParametersSet set, DateTime sourceDataCaptureDateTime)
 {
     AnalyticStatisticsItem result = new AnalyticStatisticsItem(Type,
         VehicleInfo.Engine.Family.Type,
         VehicleInfo.Engine.Type);
     int injectorNumber = GetInjectorNumber(Type);
     ExtractForInjector(set, result, 
         injectorNumber, sourceDataCaptureDateTime);
     return result;
 }
        private static PsaParametersSet GenerateParametersSet(
            List <LexiaChannelRawData> channels)
        {
            PsaParametersSet set = new PsaParametersSet();

            set.Type = PsaParametersSetType.Mixed; // Mixed for channel data
            foreach (LexiaChannelRawData channel in channels)
            {
                set.Parameters.Add(Convert(channel));
            }
            return(set);
        }
 private bool SetHasRequiredData(PsaParametersSet set)
 {
     if (set.Parameters.Any(
             p => p.Type == PsaParameterType.EngineRpm)
         &&
         set.Parameters.Any(
             p => p.Type == PsaParameterType.FuelSystemPressure))
     {
         return(true);
     }
     return(false);
 }
 public bool Fits(PsaParametersSet set)
 {
     bool hasRpm = set.Parameters.Any(p =>
         p.Type == PsaParameterType.EngineRpm);
     bool hasInjectorData = set.Parameters.Any(
         p =>
         p.Type == PsaParameterType.Injector1Correction ||
         p.Type == PsaParameterType.Injector2Correction ||
         p.Type == PsaParameterType.Injector3Correction ||
         p.Type == PsaParameterType.Injector4Correction);
     return hasRpm && hasInjectorData;
 }
 public PsaParametersSetViewModel(PsaParametersSet model)
 {
     if (model == null)
     {
         throw new ArgumentNullException("model");
     }
     this.model = model;
     type       = new PsaParametersSetTypeViewModel(model.Type);
     foreach (PsaParameterData param in model.Parameters)
     {
         Parameters.Add(new PsaParameterDataViewModel(param));
     }
 }
        public static PsaParametersSet FromDtoToDomainObject(PsaParametersSetDto source)
        {
            PsaParametersSet target = new PsaParametersSet();

            target.Id         = source.Id;
            target.PsaTraceId = source.PsaTraceId;
            target.Type       = (PsaParametersSetType)source.Type;
            foreach (PsaParameterDataDto parameter in source.Parameters)
            {
                target.Parameters.Add(PsaParameterDataAssembler.FromDtoToDomainObject(parameter));
            }
            return(target);
        }
        public static PsaParametersSetDto FromDomainObjectToDto(PsaParametersSet source)
        {
            PsaParametersSetDto target = new PsaParametersSetDto();

            target.Parameters = new ObservableCollection <PsaParameterDataDto>();
            target.Id         = source.Id;
            target.PsaTraceId = source.PsaTraceId;
            target.Type       = (int)source.Type;
            foreach (PsaParameterData parameter in source.Parameters)
            {
                target.Parameters.Add(PsaParameterDataAssembler.FromDomainObjectToDto(parameter));
            }
            return(target);
        }
Ejemplo n.º 27
0
 private bool ParametersSetHasRequiredDataTypes(PsaParametersSet set)
 {
     if (set.Parameters.Any(p =>
                            p.Type == PsaParameterType.Injector1Correction ||
                            p.Type == PsaParameterType.Injector2Correction ||
                            p.Type == PsaParameterType.Injector3Correction ||
                            p.Type == PsaParameterType.Injector4Correction) &&
         set.Parameters.Any(p =>
                            p.Type == PsaParameterType.EngineRpm))
     {
         return(true);
     }
     return(false);
 }
        private void PickDataFromSet(PsaParametersSet set, DateTime date)
        {
            PsaParameterData rpmData =
                set.GetParameterOfType(PsaParameterType.EngineRpm);
            PsaParameterData pressureData =
                set.GetParameterOfType(PsaParameterType.FuelSystemPressure);

            IList <int> idleIndexes = IdleRpmValueExtractor.
                                      ExtractIdleIndexes(rpmData.GetDoubles());

            if (idleIndexes.Count < idleRpmValuesCountLowerThreshold)
            {
                return;
            }
            IList <double> idlePressureValues =
                ExtractIdlePressureValues(idleIndexes, pressureData.GetDoubles());

            result.Values.Add(
                new KeyValuePair <DateTime, double>(
                    date, idlePressureValues.Average()));

            // Let's get OcrToIdleRpmRatio
            PsaParameterData ocrData =
                set.GetParameterOfType(PsaParameterType.
                                       DieselPressureRegulatorRatio);

            if (ocrData != null)
            {
                IList <double> ocrValues =
                    ocrData.ExtractByIndexes(idleIndexes).ToList();
                IList <double> rpmValues =
                    rpmData.ExtractByIndexes(idleIndexes).ToList();
                if (ocrValues.Count != rpmValues.Count)
                {
                    throw new Exception("Counts should be equal!");
                }
                IList <double> ratioValues = new List <double>();
                for (int i = 0; i < rpmValues.Count; i++)
                {
                    double ratio = ocrValues[i] / rpmValues[i];
                    if (double.IsInfinity(ratio))
                    {
                        continue;
                    }
                    ratioValues.Add(RatioMultiplier * ocrValues[i] / rpmValues[i]);
                }
                result.OcrToRpmRatio[date] = ratioValues.Average();
            }
        }
Ejemplo n.º 29
0
 private bool SetSuits(PsaParametersSet set)
 {
     if (requiredParametersInSet.Count == 0)
     {
         throw new Exception("required parameters not initialized");
     }
     foreach (PsaParameterType requiredType in requiredParametersInSet)
     {
         if (!set.Parameters.Any(p => p.Type == requiredType))
         {
             return(false);
         }
     }
     return(true);
 }
Ejemplo n.º 30
0
        public void TestRemoveBase()
        {
            Mock <IParametersSetSettingsSource> mock    = new Mock <IParametersSetSettingsSource>();
            PsaParametersSetAnalysisControl     control = new PsaParametersSetAnalysisControl(mock.Object);
            PsaParametersSet           set  = GenerateParametersSet();
            IPsaParametersSetViewModel psvm = new PsaParametersSetViewModel(set);
            Series s  = control.CreateSeries(psvm.Parameters[0], new Color(), new ChartScaleViewModel(new ChartScale()));
            Series sp = control.CreateSeries(psvm.Parameters[1], new Color(), new ChartScaleViewModel(new ChartScale()));

            control.AddSeries(s);
            Series baseS = control.FindSeries(psvm.Parameters[0]);

            Assert.IsNotNull(baseS);
            control.RemoveSeries(baseS);
            Assert.IsTrue(control.BaseParameter == null);
        }