From b0e9aab2fc02d112d39867848d065b1d5112a11c Mon Sep 17 00:00:00 2001
From: R0slyn <roslyn.henry.08@aberdeen.ac.uk>
Date: Tue, 6 Aug 2019 12:07:19 +0100
Subject: [PATCH] Changes to yield shock generator file.

---
 scripts/CreateYieldShockMaps.R | 39 +++++++++++++++++++++++++---------
 1 file changed, 29 insertions(+), 10 deletions(-)

diff --git a/scripts/CreateYieldShockMaps.R b/scripts/CreateYieldShockMaps.R
index a9f12d9f..8df02505 100644
--- a/scripts/CreateYieldShockMaps.R
+++ b/scripts/CreateYieldShockMaps.R
@@ -1,7 +1,7 @@
 require(data.table)
 require(raster)
 
-generateShocksTable = function(dt, startYear, endYear, shockMultiplier,makeMapFiles){
+generateShocksTable = function(dt, startYear, endYear, shockFrequencyMultiplier,shockMagnitudeMultiplier, makeMapFiles){
   shockTable = NULL
   cotterellRegions =fread(file.path(baseDataDir,"cotterellRegions.csv"), header=TRUE)
   noCountriesTab = data.table(table(cotterellRegions[,list(Region)]))[,list(Region=V1,nCountries = N)]
@@ -11,7 +11,7 @@ generateShocksTable = function(dt, startYear, endYear, shockMultiplier,makeMapFi
   ratesTab[,shockRate := N/nCountries]
   
   #probability of getting a shock rate of value x in year y
-  shockProbs = data.table(table(ratesTab[N != 0,list(Region,Sector,shockRate)]))[,list(Region, Sector,shockRate, prob=N*shockMultiplier/53)] #53 as that is number of years in historic time period
+  shockProbs = data.table(table(ratesTab[N != 0,list(Region,Sector,shockRate)]))[,list(Region, Sector,shockRate, prob=N*shockFrequencyMultiplier/53)] #53 as that is number of years in historic time period
   shockProbs = rbind(shockProbs,shockProbs[,list(shockRate=0,prob=1-sum(prob)), by=c('Region','Sector')])[prob != 0]
   
   for(cropType in unique(dt$Sector)){
@@ -31,7 +31,7 @@ generateShocksTable = function(dt, startYear, endYear, shockMultiplier,makeMapFi
         for(year in va[,unique(Year)]){
           #randomly choose countries within the region to shock and by what magnitude
           bins=with(sectorHist,sample(length(mids),va[Year==year,numberOfCountriesToShock],p=density,replace=TRUE))
-          shockMagnitudes=runif(length(bins),sectorHist$breaks[bins],sectorHist$breaks[bins+1])
+          shockMagnitudes=runif(length(bins),sectorHist$breaks[bins],sectorHist$breaks[bins+1])*shockMagnitudeMultiplier
           countries = sample(cotterellRegions[Region==region, Country],va[Year==year,numberOfCountriesToShock])
           shockTable=rbind(shockTable, data.table(year,mapFilename=countries,crop=cropType,shockFactor=shockMagnitudes, region))	
         }
@@ -72,19 +72,38 @@ baseOutputDir="/exports/csce/eddie/geos/groups/LURG/models/PLUM/output"
 
 ensembleFile = commandArgs(trailingOnly = TRUE)[1]
 scenarioTable = fread(file.path(plumDirectory,ensembleFile))
+singleYieldShockFile = commandArgs(trailingOnly = TRUE)[2]
+print(singleYieldShockFile)
 
 if("YIELD_SHOCKS_MULTIPLIER" %in% colnames(scenarioTable)){
   
-  for(ensemble in unique(scenarioTable[,Ensemble])){
+  if (singleYieldShockFile == 1){
+  		shockFreqMultiplier = unique(scenarioTable[, SHOCKS_FREQUENCY_MULTIPLIER])
+  		shockMagMultiplier = unique(scenarioTable[, SHOCKS_MAGNITUDE_MULTIPLIER])
     
-    yieldShockMultiplier = unique(scenarioTable[Ensemble==ensemble, YIELD_SHOCKS_MULTIPLIER])
+		if(length(shockFreqMultiplier) > 1 | length(shockMagMultiplier) > 1){
+			print("A Yield shock multiplier is different in ensemble file, using only the first values")
+		}
+		
+		ensembleShockTable=generateShocksTable(dt=fread(file.path(baseDataDir,"historicShocks.csv")), startYear=2010, endYear=2100, 
+		                                       shockFrequencyMultiplier=shockFreqMultiplier, shockMagnitudeMultiplier=shockMagMultiplier,makeMapFiles=TRUE)
+  
+  }
+  
+  for(ensemble in unique(scenarioTable[,Ensemble])){
     
-    if(length(yieldShockMultiplier) > 1){
-      print("Yield shock multiplier different within ensemble, using only the first value")
-    }
+	if (singleYieldShockFile != 1){
+	  shockFreqMultiplier = unique(scenarioTable[Ensemble==ensemble, SHOCKS_FREQUENCY_MULTIPLIER])
+	  shockMagMultiplier = unique(scenarioTable[Ensemble==ensemble, SHOCKS_MAGNITUDE_MULTIPLIER])
     
-    ensembleShockTable=generateShocksTable(dt=fread(file.path(baseDataDir,"historicShocks.csv")), startYear=2010, endYear=2100, 
-                                           shockMultiplier=yieldShockMultiplier, makeMapFiles=TRUE)
+	  if(length(shockFreqMultiplier) > 1 | length(shockMagMultiplier) > 1){
+		  print("A Yield shock multiplier is different in ensemble file, using only the first values")
+		}
+	
+		ensembleShockTable=generateShocksTable(dt=fread(file.path(baseDataDir,"historicShocks.csv")), startYear=2010, endYear=2100, 
+		                                       shockFrequencyMultiplier=shockFreqMultiplier, shockMagnitudeMultiplier=shockMagMultiplier,makeMapFiles=TRUE)
+										   
+	}									   
     
     for(scenario in scenarioTable[Ensemble==ensemble, Scenario]){
       
-- 
GitLab