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; } 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(); else gdpPcYear= sd.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); 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); } }