Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package ac.ed.lurg.demand;
import java.util.HashMap;
import java.util.Map;
import ac.ed.lurg.ModelConfig;
import ac.ed.lurg.country.CompositeCountryManager;
import ac.ed.lurg.country.SingleCountry;
import ac.ed.lurg.types.CommodityType;
import ac.ed.lurg.types.ModelFitType;
import ac.ed.lurg.utils.LogWriter;
public class DemandManagerSSP extends AbstractDemandManager {
private DemandCurveManager demandCurveManager;
private SspManager sspManager;
private BaseConsumpManager baseConsumpManager;
private String ssp_scenario;
public DemandManagerSSP(String ssp_scenario, BaseConsumpManager baseConsumpManager, CompositeCountryManager compositeCountryManager) {
super(compositeCountryManager);
this.ssp_scenario = ssp_scenario;
this.baseConsumpManager = baseConsumpManager;
demandCurveManager = new DemandCurveManager();
sspManager = new SspManager();
}
@Override
Map<CommodityType, Double> getFoodDemand(SingleCountry c, int year) {
SspData baseSspData = sspManager.get(ssp_scenario, ModelConfig.BASE_YEAR, c);
SspData sd = sspManager.get(ssp_scenario, year, c);
Map<CommodityType, Double> foodDemandMap = new HashMap<CommodityType, Double>();
if (baseSspData == null || sd == null) {
LogWriter.printlnError(String.format("No baseSspData or ssp for %s, baseYr:%d, year:%d, %s, base:%s, sd:%s. Skipping", ssp_scenario, ModelConfig.BASE_YEAR, year, c.getCountryName(), baseSspData, sd));
return foodDemandMap;
}
R0slyn
committed
double gdpPcYear;
if((ModelConfig.CONSTANT_DIET_HIGH_INCOME & c.getIncomeGroup().toLowerCase().contains("high")) ||
(ModelConfig.CONSTANT_DIET_LOW_INCOME & !c.getIncomeGroup().toLowerCase().contains("high")))
gdpPcYear = baseSspData.getGdpPc();
LogWriter.println("Got ssp data for " + c.getCountryName() + " of " + sd);
for (CommodityType commodity : CommodityType.getAllItems()) {
ModelFitType fitType = commodity.isAnimalProduct() ? ModelConfig.DEMAND_ANIMAL_PROD_FIT : ModelConfig.DEMAND_NON_ANIMAL_PROD_FIT;
DemandCurve dc = demandCurveManager.get(commodity, fitType);
R0slyn
committed
double cpc = dc.getConsumptionPc(baseSspData.getGdpPc(), baseConsumpManager.get(c, commodity), gdpPcYear * ModelConfig.SSP_GDP_PC_FACTOR);
double d = cpc * sd.getPopulation() * ModelConfig.SSP_POPULATION_FACTOR;
foodDemandMap.put(commodity, d);
}
if(!ModelConfig.ACTIVE_DIETARY_SHIFT){
return foodDemandMap;
}
return dietaryAdjustment(foodDemandMap, year);