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));
        }
        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);
        }
예제 #3
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;
        }
예제 #4
0
        public AnalyticStatisticsItem Get(
            PsaParametersSet set, DateTime sourceCaptureTime)
        {
            AnalyticStatisticsItem result = new AnalyticStatisticsItem(
                ruleType, info.Engine.Family.Type, info.Engine.Type);
            IList <double>            rpmData        = set.GetParameterOfType(PsaParameterType.EngineRpm).GetDoubles();
            IList <double>            chargeTimeData = set.GetParameterOfType(GetRequiredType()).GetDoubles();
            CorrelatedMedianExtractor extractor      = new CorrelatedMedianExtractor(rpmData, chargeTimeData, 5);
            double value = extractor.GetForBaseValue(Rpm);

            if (!double.IsNaN(value))
            {
                result.Values.Add(new AnalyticStatisticsValue(
                                      value, info.Vin, set.Id, sourceCaptureTime));
            }
            return(result);
        }
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet set)
        {
            IList <double>            rpmData           = set.GetParameterOfType(PsaParameterType.EngineRpm).GetDoubles();
            IList <double>            pressureDeltaData = set.GetParameterOfType(PsaParameterType.FuelSystemPressureDelta).GetDoubles();
            CorrelatedMedianExtractor medianExtractor   =
                new CorrelatedMedianExtractor(rpmData, pressureDeltaData, 5);
            double value = medianExtractor.GetForBaseValue(Convert.ToDouble((int)Rpm));

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

            MarksHistory[date] = applier.GetMarkForValue(value);
        }
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet set)
        {
            IList <double>            rpmLine        = set.GetParameterOfType(PsaParameterType.EngineRpm).GetDoubles();
            IList <double>            chargeTimeLine = set.GetParameterOfType(requiredParameter).GetDoubles();
            CorrelatedMedianExtractor exractor       = new CorrelatedMedianExtractor(
                rpmLine, chargeTimeLine, 5);
            double value = exractor.GetForBaseValue((int)Rpm);

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

            MarksHistory[date] = applier.GetMarkForValue(value);
        }
예제 #7
0
        public AnalyticStatisticsItem Get(PsaParametersSet set,
                                          DateTime sourceDataCaptureDateTime)
        {
            AnalyticStatisticsItem result = new AnalyticStatisticsItem(ruleType,
                                                                       info.Engine.Family.Type, info.Engine.Type);
            IList <double> baseValues =
                set.GetParameterOfType(baseParameter).GetDoubles();
            IList <double> dependantValues =
                set.GetParameterOfType(dependentParameter).GetDoubles();
            CorrelatedMedianExtractor extractor =
                new CorrelatedMedianExtractor(baseValues,
                                              dependantValues, baseParamDiffTresholdPercentage);
            double targetRpm = (int)RuleTypeToRpm.Map(ruleType);
            double value     = extractor.GetForBaseValue(targetRpm);

            if (!double.IsNaN(value))
            {
                result.Values.Add(new AnalyticStatisticsValue(
                                      value, info.Vin, set.Id, sourceDataCaptureDateTime));
            }
            return(result);
        }
예제 #8
0
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet set)
        {
            // 1. get our target rpm from settings
            PsaParameterData rpmParameter =
                set.GetParameterOfType(PsaParameterType.EngineRpm);

            // 2. find data in the dataset
            PsaParameterData oxygenSensorVoltageParameter =
                set.GetParameterOfType(GetOxygenSensorParameter());

            // 3. get base line (rpm)
            IList <double> baseLine = rpmParameter.GetDoubles();

            // 4. get dependant line (probe voltage)
            IList <double> dependantLine = oxygenSensorVoltageParameter.GetDoubles();

            // 5. extract correlated median for base RPM value
            CorrelatedMedianExtractor extractor =
                new CorrelatedMedianExtractor(baseLine, dependantLine,
                                              BaseValuesDifferencePercentageThreshold);
            CheckpointRpm rpm = GetTargetRpm();
            double        corellatedMedian = extractor.GetForBaseValue(Convert.ToDouble(rpm));

            if (double.IsNaN(corellatedMedian))
            {
                return;
            }

            // 6. apply atom settings
            SettingsAtomApplier applier = new SettingsAtomApplier(
                Settings.SettingsMolecule.GetPriorityAtom());
            double mark =
                Math.Round(applier.GetMarkForValue(corellatedMedian), 1);

            // 7. save to marks history
            MarksHistory[date] = mark;
        }
예제 #9
0
        protected override void PickFromPsaParametersSet(
            DateTime date, PsaParametersSet source)
        {
            IList <double> baseLine = source.GetParameterOfType(
                PsaParameterType.EngineRpm).GetDoubles();
            IList <double> dependantLine = source.
                                           GetCertainInjectorCorrections(injectorNumber).GetDoubles();
            CorrelatedMedianExtractor correlatedMedianExtractor =
                new CorrelatedMedianExtractor(baseLine, dependantLine,
                                              BaseValuesDifferencePercentageThreshold);
            CheckpointRpm targetRpm   = RuleTypeToRpm.Map(settings.RuleType);
            double        resultValue = correlatedMedianExtractor.GetForBaseValue(
                Convert.ToDouble(targetRpm));

            if (double.IsNaN(resultValue))
            {
                return;
            }
            SettingsAtomApplierByAbsoluteValue applier =
                new SettingsAtomApplierByAbsoluteValue(
                    settings.SettingsMolecule.GetPriorityAtom());

            MarksHistory[date] = applier.GetMarkForValue(resultValue);
        }