Skip to content

Commit 7d3f608

Browse files
authored
Merge pull request #2 from norwegian-geotechnical-institute/reclassification
updated Hazard.py with reclassification for rain hazard and landslide hazard
2 parents 0917a47 + d55070a commit 7d3f608

1 file changed

Lines changed: 26 additions & 13 deletions

File tree

Tool-HazardMap/Code/Hazard.py

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
## Define input parameters
4949
KWARGS = {
5050
"sclass": [1, 2, 3, 4, 5],
51-
"I_lim": [0.7, 2.0, 3.7, 5.0],
51+
"I_lim": [0.72, 2.0, 3.7, 5.0],
5252
"epsg_wgs84": 4326,
5353
'MULTIPROCESSING': False,
5454
'MAX_NUMBER_OF_PROCESSES': 10,
@@ -195,6 +195,9 @@ def ComputeRainCnt(self, MeanRain, StdRain, acum24):
195195
# Normalize
196196
I24norm_da = (acum24-MeanRain)/StdRain
197197

198+
# Set normalized value to -9999 where rainfall is <= 5 mm
199+
I24norm_da[acum24 <= 5] = -9999 #This is done to trat extremely small rainfall differently
200+
198201
return(I24norm_da)
199202

200203
def ComputeRainHazard(self, I24norm_da, I_lim, file_name1, ncols, nrows, kwds):
@@ -213,21 +216,18 @@ def ComputeRainHazard(self, I24norm_da, I_lim, file_name1, ncols, nrows, kwds):
213216

214217
RainHazard_aux = np.zeros_like(aux)
215218

216-
# Assign rain hazard
217-
for ii in range(len(I_lim)):
219+
# Assign rain hazard based on I_lim thresholds (Classes 1 to len(I_lim))
220+
for ii in range(len(I_lim)):
218221
if ii == 0:
219-
mask = (aux <= ii)
222+
mask = (aux > -9999) & (aux < I_lim[ii]) # First rainhazard class, all -9999 will remain as 0 in this case
220223
RainHazard_aux = np.where(mask, ii + 1, RainHazard_aux)
221224
else:
222-
if ii < 3:
223-
mask = (aux <= ii) & (aux > ii-1)
224-
RainHazard_aux = np.where(mask, ii + 1, RainHazard_aux)
225-
else:
226-
mask = (aux <= ii) & (aux > ii-1)
227-
RainHazard_aux = np.where(mask, ii + 1, RainHazard_aux)
228-
229-
mask = (aux > ii)
230-
RainHazard_aux = np.where(mask, ii + 2, RainHazard_aux)
225+
mask = (aux >= I_lim[ii - 1]) & (aux < I_lim[ii])
226+
RainHazard_aux = np.where(mask, ii + 1, RainHazard_aux)
227+
228+
# Handle values greater than or equal to the last threshold (Class len(I_lim)+1)
229+
mask = aux >= I_lim[-1]
230+
RainHazard_aux = np.where(mask, len(I_lim) + 1, RainHazard_aux)
231231

232232
# Save to file
233233
folder_out = self.path_out / self.mode
@@ -265,6 +265,13 @@ def ComputeHazard(self, susc_da, RainHazard_aux, file_name1, kwds):
265265

266266
# Check hazard by going through hazard matrix
267267
hazard_aux = np.where(np.isnan(susc_da), np.nan, hazard_aux)
268+
269+
mask = (susc_da == 1) & (RainHazard_aux == 3)
270+
hazard_aux = np.where(mask, 1, hazard_aux)
271+
mask = (susc_da == 1) & (RainHazard_aux == 4)
272+
hazard_aux = np.where(mask, 2, hazard_aux)
273+
mask = (susc_da == 1) & (RainHazard_aux == 5)
274+
hazard_aux = np.where(mask, 3, hazard_aux)
268275

269276
mask = (susc_da == 2) & (RainHazard_aux == 2)
270277
hazard_aux = np.where(mask, 1, hazard_aux)
@@ -275,6 +282,8 @@ def ComputeHazard(self, susc_da, RainHazard_aux, file_name1, kwds):
275282
mask = (susc_da == 2) & (RainHazard_aux == 5)
276283
hazard_aux = np.where(mask, 5, hazard_aux)
277284

285+
mask = (susc_da == 3) & (RainHazard_aux == 1)
286+
hazard_aux = np.where(mask, 1, hazard_aux)
278287
mask = (susc_da == 3) & (RainHazard_aux == 2)
279288
hazard_aux = np.where(mask, 2, hazard_aux)
280289
mask = (susc_da == 3) & (RainHazard_aux == 3)
@@ -284,6 +293,8 @@ def ComputeHazard(self, susc_da, RainHazard_aux, file_name1, kwds):
284293
mask = (susc_da == 3) & (RainHazard_aux == 5)
285294
hazard_aux = np.where(mask, 10, hazard_aux)
286295

296+
mask = (susc_da == 4) & (RainHazard_aux == 1)
297+
hazard_aux = np.where(mask, 2, hazard_aux)
287298
mask = (susc_da == 4) & (RainHazard_aux == 2)
288299
hazard_aux = np.where(mask, 3, hazard_aux)
289300
mask = (susc_da == 4) & (RainHazard_aux == 3)
@@ -293,6 +304,8 @@ def ComputeHazard(self, susc_da, RainHazard_aux, file_name1, kwds):
293304
mask = (susc_da == 4) & (RainHazard_aux == 5)
294305
hazard_aux = np.where(mask, 15, hazard_aux)
295306

307+
mask = (susc_da == 5) & (RainHazard_aux == 1)
308+
hazard_aux = np.where(mask, 3, hazard_aux)
296309
mask = (susc_da == 5) & (RainHazard_aux == 2)
297310
hazard_aux = np.where(mask, 5, hazard_aux)
298311
mask = (susc_da == 5) & (RainHazard_aux == 3)

0 commit comments

Comments
 (0)