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); } }
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; }
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; } } }
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); }
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; }
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)); }
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); }
public bool Fits(PsaParametersSet set) { bool hasRpm = set.HasParameterOfType(PsaParameterType.EngineRpm); bool hasRequiredType = set.HasParameterOfType(RequiredType); return(hasRpm && hasRequiredType); }
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); } }
/// <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); }
public bool Fits(PsaParametersSet set) { PsaParameterType requiredType = GetRequiredType(); bool hasRequiredType = set.HasParameterOfType(requiredType); bool hasRpmData = set.HasParameterOfType(PsaParameterType.EngineRpm); return(hasRequiredType && hasRpmData); }
public PsaParametersSetViewModel(PsaParametersSet model) { this.model = model; foreach (PsaParameterData parameter in model.Parameters) { parameters.Add(new PsaParameterDataViewModel(parameter)); } }
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)); }
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); }
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); }
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); }
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); }
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(); } }
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); }
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); }