package org.openlca.core.math;
import java.util.ArrayList;
import java.util.List;
import org.openlca.core.model.AllocationMethod;
import org.openlca.core.model.FlowPropertyFactor;
import org.openlca.core.model.ParameterRedef;
import org.openlca.core.model.ProductSystem;
import org.openlca.core.model.Unit;
import org.openlca.core.model.descriptors.ImpactMethodDescriptor;
import org.openlca.core.model.descriptors.NwSetDescriptor;
/**
* A setup for a product system calculation.
*/
public class CalculationSetup {
public final ProductSystem productSystem;
public ImpactMethodDescriptor impactMethod;
public boolean withCosts = false;
public NwSetDescriptor nwSet;
public AllocationMethod allocationMethod = AllocationMethod.NONE;
public final List<ParameterRedef> parameterRedefs = new ArrayList<>();
/** Only valid for Monte Carlo Simulations */
public int numberOfRuns = -1;
// properties with default values from the product system
private Unit unit;
private FlowPropertyFactor flowPropertyFactor;
private Double amount;
public CalculationSetup(ProductSystem productSystem) {
this.productSystem = productSystem;
}
/**
* Optionally set another unit for the calculation than the one defined in
* the product system.
*/
public void setUnit(Unit unit) {
this.unit = unit;
}
public Unit getUnit() {
if (unit != null)
return unit;
else
return productSystem.getTargetUnit();
}
/**
* Optionally set another flow property factor for the calculation than the
* one defined in the product system.
*/
public void setFlowPropertyFactor(FlowPropertyFactor flowPropertyFactor) {
this.flowPropertyFactor = flowPropertyFactor;
}
public FlowPropertyFactor getFlowPropertyFactor() {
if (flowPropertyFactor != null)
return flowPropertyFactor;
else
return productSystem.getTargetFlowPropertyFactor();
}
/**
* Optionally set another target amount for the calculation than the one
* defined in the product system.
*/
public void setAmount(double amount) {
this.amount = amount;
}
public double getAmount() {
if (amount != null)
return amount;
else
return productSystem.getTargetAmount();
}
}