@@ -309,7 +309,7 @@ def aod_analyse(model_data, aeronet_obs_cube, clim_seas, wavel):
309309 return figures , fig_scatter
310310
311311
312- def preprocess_aod_obs_dataset (obs_dataset ):
312+ def preprocess_aod_obs_dataset (obs_dataset , thresholds ):
313313 """Calculate a multiannual seasonal mean AOD climatology.
314314
315315 Observational AOD timeseries data from AeroNET are used to generate a
@@ -324,6 +324,11 @@ def preprocess_aod_obs_dataset(obs_dataset):
324324 ----------
325325 obs_dataset : ESMValTool dictionary. Holds meta data for the observational
326326 AOD dataset.
327+ thresholds : Minimum days,months, seasons and years threshold dictionary; with keys
328+ - min_days_per_mon
329+ - min_mon_per_seas
330+ - min_seas_per_year
331+ - min_seas_per_clim
327332
328333 Returns
329334 -------
@@ -332,12 +337,6 @@ def preprocess_aod_obs_dataset(obs_dataset):
332337 """
333338 obs_cube = iris .load_cube (obs_dataset [0 ]["filename" ])
334339
335- # Set up thresholds for generating the multi annual seasonal mean
336- min_days_per_mon = 1
337- min_mon_per_seas = 3
338- min_seas_per_year = 4
339- min_seas_per_clim = 5
340-
341340 # Add the clim_season and season_year coordinates.
342341 iris .coord_categorisation .add_year (obs_cube , "time" , name = "year" )
343342
@@ -352,7 +351,7 @@ def preprocess_aod_obs_dataset(obs_dataset):
352351 num_days_var = obs_cube .ancillary_variable ("Number of days" )
353352 masked_months_obs_cube = obs_cube .copy (
354353 data = ma .masked_where (
355- num_days_var .data < min_days_per_mon , obs_cube .data
354+ num_days_var .data < thresholds [ " min_days_per_mon" ] , obs_cube .data
356355 )
357356 )
358357
@@ -370,7 +369,7 @@ def preprocess_aod_obs_dataset(obs_dataset):
370369 function = lambda values : ~ ma .getmask (values ),
371370 )
372371 annual_seasonal_mean .data = ma .masked_where (
373- annual_seasonal_count .data < min_mon_per_seas ,
372+ annual_seasonal_count .data < thresholds [ " min_mon_per_seas" ] ,
374373 annual_seasonal_mean .data ,
375374 )
376375
@@ -389,7 +388,7 @@ def preprocess_aod_obs_dataset(obs_dataset):
389388 function = lambda values : ~ ma .getmask (values ),
390389 )
391390 multi_annual_seasonal_mean .data = ma .masked_where (
392- clim_season_agg_count .data < min_seas_per_clim ,
391+ clim_season_agg_count .data < thresholds [ " min_seas_per_clim" ] ,
393392 multi_annual_seasonal_mean .data ,
394393 )
395394 year_agg_count = multi_annual_seasonal_mean .aggregated_by (
@@ -403,7 +402,7 @@ def preprocess_aod_obs_dataset(obs_dataset):
403402 )
404403 for iseas in counter :
405404 multi_annual_seasonal_mean .data [iseas , :] = ma .masked_where (
406- year_agg_count .data [0 , :] < min_seas_per_year ,
405+ year_agg_count .data [0 , :] < thresholds [ " min_seas_per_year" ] ,
407406 multi_annual_seasonal_mean .data [iseas , :],
408407 )
409408
@@ -425,11 +424,17 @@ def main(config):
425424 datasets = group_metadata (input_data .values (), "dataset" )
426425
427426 # Default wavelength
428- wavel = "440"
427+ wavel = config .get ("wavel" , "440" )
428+ thresholds = {
429+ "min_days_per_mon" : int (config .get ("min_days_per_mon" , 1 )),
430+ "min_mon_per_seas" : int (config .get ("min_mon_per_seas" , 3 )),
431+ "min_seas_per_year" : int (config .get ("min_seas_per_year" , 4 )),
432+ "min_seas_per_clim" : int (config .get ("min_seas_per_clim" , 5 )),
433+ }
429434
430435 # Produce climatology for observational dataset
431436 obs_dataset = datasets .pop (config ["observational_dataset" ])
432- obs_cube = preprocess_aod_obs_dataset (obs_dataset )
437+ obs_cube = preprocess_aod_obs_dataset (obs_dataset , thresholds )
433438
434439 for model_dataset , group in datasets .items ():
435440 # 'model_dataset' is the name of the model dataset.
0 commit comments