@@ -50,6 +50,7 @@ def parse_arguments(arguments):
5050def reader_data (model , exp , source ,
5151 catalog = None , regrid = 'r100' ,
5252 keep_vars = None , loglevel = 'WARNING' ,
53+ startdate = None , enddate = None ,
5354 reader_kwargs : dict = {}):
5455 """
5556 Simple function to retrieve and do some operation on reader data
@@ -60,6 +61,8 @@ def reader_data(model, exp, source,
6061 source (str): source of the data
6162 catalog (str, optional): catalog to be used, defaults to None
6263 regrid (str, optional): regrid method, defaults to 'r100'
64+ startdate (str, optional): start date in the format YYYY-MM-DD, defaults to None
65+ enddate (str, optional): end date in the format YYYY-MM-DD, defaults to None
6366 keep_vars (list, optional): list of variables to keep, defaults to None
6467 loglevel (str, optional): logging level, defaults to 'WARNING'
6568 reader_kwargs (dict, optional): list of reader_kwargs. Defaults to {}.
@@ -77,21 +80,22 @@ def reader_data(model, exp, source,
7780 # Try to read the data, if dataset is not available return None
7881 try :
7982 reader = Reader (
80- model = model , exp = exp , source = source , catalog = catalog ,
83+ model = model , exp = exp , source = source , catalog = catalog ,
8184 regrid = regrid , ** reader_kwargs
8285 )
83- xfield = reader .retrieve ()
84- if regrid is not None :
85- xfield = reader .regrid (xfield )
86-
86+ xfield = reader .retrieve (startdate = startdate , enddate = enddate , var = keep_vars )
8787 except Exception as err :
8888 reader_logger .error ('Error while reading model %s: %s' , model , err )
8989 return None
90+
91+ # regrid after variable selection
92+ if regrid is not None :
93+ try :
94+ return reader .regrid (xfield )
95+ except Exception as err :
96+ reader_logger .error ('Error while regridding model %s: %s' , model , err )
97+ return None
9098
91- # return only vars that are available: slower but avoid reader failures
92- if keep_vars is None :
93- return xfield
94- return xfield [[value for value in keep_vars if value in xfield .data_vars ]]
9599
96100def data_check (data_atm , data_oce , logger = None ):
97101 """
@@ -289,11 +293,13 @@ def set_description(diagnostic, model, exp, year1, year2, config):
289293 logger .info ('Loading atmospheric data %s' , model )
290294 data_atm = reader_data (model = model , exp = exp , source = source_atm ,
291295 catalog = catalog , keep_vars = atm_vars , regrid = regrid ,
296+ startdate = startdate , enddate = enddate ,
292297 reader_kwargs = reader_kwargs )
293298
294299 logger .info ('Loading oceanic data from %s' , model )
295300 data_oce = reader_data (model = model , exp = exp , source = source_oce ,
296301 catalog = catalog , keep_vars = oce_vars , regrid = regrid ,
302+ startdate = startdate , enddate = enddate ,
297303 reader_kwargs = reader_kwargs )
298304
299305 # check the data
@@ -329,6 +335,7 @@ def set_description(diagnostic, model, exp, year1, year2, config):
329335 elif diagnostic == 'global_mean' :
330336 ecmean .store (yamlfile = filename_dict ['yml' ], tablefile = filename_dict ['txt' ])
331337 ecmean_fig = ecmean .plot (diagname = diagnostic , returnfig = True , storefig = False )
338+
332339 if save_pdf :
333340 logger .info ('Saving PDF %s plot...' , diagnostic )
334341 outputsaver .save_pdf (fig = ecmean_fig , diagnostic_product = diagnostic ,
0 commit comments