package org.openlca.core.math.data_quality; import java.util.HashMap; import java.util.Map; import org.openlca.core.database.IDatabase; import org.openlca.core.matrix.LongPair; import org.openlca.core.model.descriptors.FlowDescriptor; import org.openlca.core.model.descriptors.ImpactCategoryDescriptor; import org.openlca.core.model.descriptors.ProcessDescriptor; import org.openlca.core.results.ContributionResult; public class DQResult { public final DQCalculationSetup setup; public final DQStatistics statistics; private Map<Long, double[]> processValues = new HashMap<>(); private Map<Long, double[]> flowValues = new HashMap<>(); private Map<Long, double[]> impactValues = new HashMap<>(); private Map<LongPair, double[]> flowValuesPerProcess = new HashMap<>(); private Map<LongPair, double[]> impactValuesPerFlow = new HashMap<>(); private Map<LongPair, double[]> impactValuesPerProcess = new HashMap<>(); public double[] get(ProcessDescriptor process) { return processValues.get(process.getId()); } public double[] get(FlowDescriptor flow) { return flowValues.get(flow.getId()); } public double[] get(ImpactCategoryDescriptor impact) { return impactValues.get(impact.getId()); } public double[] get(ProcessDescriptor process, FlowDescriptor flow) { return flowValuesPerProcess.get(new LongPair(process.getId(), flow.getId())); } public double[] get(ProcessDescriptor process, ImpactCategoryDescriptor impact) { return impactValuesPerProcess.get(new LongPair(process.getId(), impact.getId())); } public double[] get(FlowDescriptor flow, ImpactCategoryDescriptor impact) { return impactValuesPerFlow.get(new LongPair(flow.getId(), impact.getId())); } public static DQResult calculate(IDatabase db, ContributionResult result, DQCalculationSetup setup) { if (db == null || result == null || setup == null) return null; if (setup.processDqSystem == null && setup.exchangeDqSystem == null || setup.aggregationType == null || setup.productSystemId == 0l) return null; DQData data = DQData.load(db, setup, result.flowIndex.getFlowIds()); DQResult dqResult = new DQResult(setup, data.statistics); if (setup.processDqSystem != null) { dqResult.processValues = data.processData; } if (setup.exchangeDqSystem == null) return dqResult; dqResult.flowValuesPerProcess = data.exchangeData; if (setup.aggregationType == AggregationType.NONE) return dqResult; DQCalculator calculator = new DQCalculator(result, data, setup); calculator.calculate(); dqResult.flowValues = calculator.getFlowValues(); dqResult.impactValuesPerFlow = calculator.getImpactPerFlowValues(); dqResult.impactValues = calculator.getImpactValues(); dqResult.impactValuesPerProcess = calculator.getImpactPerProcessValues(); return dqResult; } private DQResult(DQCalculationSetup setup, DQStatistics statistics) { this.setup = setup; this.statistics = statistics; } }