From a7ae93e8426de94ec9dd3aa01abe350454074613 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Tue, 22 Nov 2016 15:51:57 +0100 Subject: [PATCH 01/14] Added filters for ocean files --- earthdiagnostics/cmorizer.py | 18 ++++++++++++++---- earthdiagnostics/config.py | 1 + 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index 88c9746b..8090c8cd 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -66,16 +66,29 @@ class Cmorizer(object): def _cmorize_ocean_files(self, prefix): tar_folder = os.path.join(self.original_files_path, '{0}*'.format(prefix)) tar_files = glob.glob(tar_folder) + tar_files = self._filter_ocean_files(tar_files) tar_files.sort() + count = 1 for tarfile in tar_files: Log.info('Unpacking oceanic file {0}/{1}'.format(count, len(tar_files))) - self._check_cmorization_required() self._unpack_tar_file(tarfile) self._cmorize_nc_files() Log.result('Oceanic file {0}/{1} finished'.format(count, len(tar_files))) count += 1 + def _filter_ocean_files(self, tar_files): + if not self.cmor.filter_ocean_files: + return tar_files + filtered = list() + filters = self.cmor.filter_ocean_files.split(' ') + for tar_file in tar_files: + if any(filter in tar_file for filter in filters): + filtered.append(tar_file) + if len(filtered) == 0: + Log.warning('Filters {0} do not match any of the files', filters) + return filtered + def _cmorize_nc_files(self): for filename in glob.glob(os.path.join(self.cmor_scratch, '*.nc')): self._cmorize_nc_file(filename) @@ -532,9 +545,6 @@ class Cmorizer(object): gribfiles = glob.glob(grb_path) return len(gribfiles) > 0 - def _check_cmorization_required(self, tarfile): - pass - class CMORException(Exception): pass diff --git a/earthdiagnostics/config.py b/earthdiagnostics/config.py index 152fbce4..c3c7e7e7 100644 --- a/earthdiagnostics/config.py +++ b/earthdiagnostics/config.py @@ -87,6 +87,7 @@ class CMORConfig(object): def __init__(self, parser): self.force = parser.get_bool_option('CMOR', 'FORCE', False) self.force_untar = parser.get_bool_option('CMOR', 'FORCE_UNTAR', False) + self.filter_ocean_files = parser.get_option('CMOR', 'FILTER_OCEAN_FILES') self.ocean = parser.get_bool_option('CMOR', 'OCEAN_FILES', True) self.atmosphere = parser.get_bool_option('CMOR', 'ATMOSPHERE_FILES', True) self.use_grib = parser.get_bool_option('CMOR', 'USE_GRIB', True) -- GitLab From 13989247ddf8964bc6391bbeac4f22f77c4bece2 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Tue, 22 Nov 2016 16:20:48 +0100 Subject: [PATCH 02/14] Changed filter to allow it to work on all nc files. Added some options to cmormanager to simplify data folder definition --- diags.conf | 23 ++++++++++++----------- earthdiagnostics/cmorizer.py | 19 ++++++++++++------- earthdiagnostics/cmormanager.py | 4 ++++ earthdiagnostics/config.py | 2 +- 4 files changed, 29 insertions(+), 19 deletions(-) diff --git a/diags.conf b/diags.conf index 1b3cae91..d1326094 100644 --- a/diags.conf +++ b/diags.conf @@ -1,6 +1,6 @@ [DIAGNOSTICS] # Data adaptor type: CMOR (for our experiments), THREDDS (for other experiments) -DATA_ADAPTOR = THREDDS +DATA_ADAPTOR = CMOR # Path to the folder where you want to create the temporary files SCRATCH_DIR = /scratch/Earth/$USER # Root path for the cmorized data to use @@ -11,7 +11,7 @@ CON_FILES = /esnas/autosubmit/con_files/ # Diagnostics to run, space separated. You must provide for each one the name and the parameters (comma separated) or # an alias defined in the ALIAS section (see more below). If you are using the diagnpostics just to CMORize, leave it # empty -DIAGS = monpercent,atmos,sfcWind,90 monpercent,atmos,sfcWind,10 +DIAGS = # DIAGS = OHC # Frequency of the data you want to use by default. Some diagnostics do not use this value: i.e. monmean always stores # its results at monthly frequency (obvious) and has a parameter to specify input's frequency. @@ -28,10 +28,11 @@ MAX_CORES = 1 FORCE = True # If true, CMORizes ocean files. Default = True OCEAN_FILES = True +FILTER_OCEAN_FILES = _PISC _dia # If true, CMORizes atmosphere files. Default = True -ATMOSPHERE_FILES = True +ATMOSPHERE_FILES = False # You can specify the variable to cmorize, in the way domain:var domain:var2 domain2:var -VARIABLE_LIST = ocean:tos +VARIABLE_LIST = # Variables to be CMORized from the grib atmospheric files, separated by comma. # You can also specify the levels to extract using the following syntax @@ -63,10 +64,10 @@ SERVER_URL = http://earth.bsc.es/thredds [EXPERIMENT] # Experiments parameters as defined in CMOR standard -INSTITUTE = meteofrance -MODEL = system4_m1 +INSTITUTE = BSC +MODEL = EC-EARTH # Model version: Available versions -MODEL_VERSION =Ec2.3_O1L46 +MODEL_VERSION =Ec3.2_O1L75 # Atmospheric output timestep in hours ATMOS_TIMESTEP = 6 # Ocean output timestep in hours @@ -80,12 +81,12 @@ OCEAN_TIMESTEP = 6 # if 2, fc00 # CHUNK_SIZE is the size of each data file, given in months # CHUNKS is the number of chunks. You can specify less chunks than present on the experiment -EXPID = resilience -STARTDATES = 19911101 +EXPID = a0c2 +STARTDATES = 19900101 MEMBERS = 0 MEMBER_DIGITS = 1 -CHUNK_SIZE = 7 -CHUNKS = 1 +CHUNK_SIZE = 12 +CHUNKS = 2 # CHUNKS = 1 diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index 8090c8cd..ef4aff85 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -66,7 +66,6 @@ class Cmorizer(object): def _cmorize_ocean_files(self, prefix): tar_folder = os.path.join(self.original_files_path, '{0}*'.format(prefix)) tar_files = glob.glob(tar_folder) - tar_files = self._filter_ocean_files(tar_files) tar_files.sort() count = 1 @@ -77,11 +76,11 @@ class Cmorizer(object): Log.result('Oceanic file {0}/{1} finished'.format(count, len(tar_files))) count += 1 - def _filter_ocean_files(self, tar_files): - if not self.cmor.filter_ocean_files: + def _filter_nc_files(self, tar_files): + if not self.cmor.filter_files: return tar_files filtered = list() - filters = self.cmor.filter_ocean_files.split(' ') + filters = self.cmor.filter_files.split(' ') for tar_file in tar_files: if any(filter in tar_file for filter in filters): filtered.append(tar_file) @@ -90,8 +89,11 @@ class Cmorizer(object): return filtered def _cmorize_nc_files(self): - for filename in glob.glob(os.path.join(self.cmor_scratch, '*.nc')): + nc_files = glob.glob(os.path.join(self.cmor_scratch, '*.nc')) + nc_files = self._filter_nc_files(nc_files) + for filename in nc_files: self._cmorize_nc_file(filename) + self._clean_CMOR_scratch() def _correct_fluxes(self): fluxes_vars = ("prsn", "rss", "rls", "rsscs", "rsds", "rlds") @@ -105,12 +107,15 @@ class Cmorizer(object): handler.close() def _unpack_tar_file(self, tarfile): - if os.path.exists(self.cmor_scratch): - shutil.rmtree(self.cmor_scratch) + self._clean_CMOR_scratch() os.makedirs(self.cmor_scratch) Utils.untar((tarfile,), self.cmor_scratch) Utils.unzip(glob.glob(os.path.join(self.cmor_scratch, '*.gz'))) + def _clean_CMOR_scratch(self): + if os.path.exists(self.cmor_scratch): + shutil.rmtree(self.cmor_scratch) + def _merge_mma_files(self, tarfile): temp = TempFile.get() for filename in glob.glob(os.path.join(self.cmor_scratch, 'MMA_*_SH_*.nc')): diff --git a/earthdiagnostics/cmormanager.py b/earthdiagnostics/cmormanager.py index 785b515e..7abc4db5 100644 --- a/earthdiagnostics/cmormanager.py +++ b/earthdiagnostics/cmormanager.py @@ -24,6 +24,10 @@ class CMORManager(DataManager): if os.path.isdir(os.path.join(data_folder, self.experiment.expid)): self.config.data_dir = data_folder break + data_folder = os.path.join(data_folder, self.experiment.model.lower().replace('-', '')) + if os.path.isdir(os.path.join(data_folder, self.experiment.expid)): + self.config.data_dir = data_folder + break if not self.config.data_dir: raise Exception('Can not find model data') diff --git a/earthdiagnostics/config.py b/earthdiagnostics/config.py index c3c7e7e7..e5abdebe 100644 --- a/earthdiagnostics/config.py +++ b/earthdiagnostics/config.py @@ -87,7 +87,7 @@ class CMORConfig(object): def __init__(self, parser): self.force = parser.get_bool_option('CMOR', 'FORCE', False) self.force_untar = parser.get_bool_option('CMOR', 'FORCE_UNTAR', False) - self.filter_ocean_files = parser.get_option('CMOR', 'FILTER_OCEAN_FILES') + self.filter_files = parser.get_option('CMOR', 'FILTER_FILES') self.ocean = parser.get_bool_option('CMOR', 'OCEAN_FILES', True) self.atmosphere = parser.get_bool_option('CMOR', 'ATMOSPHERE_FILES', True) self.use_grib = parser.get_bool_option('CMOR', 'USE_GRIB', True) -- GitLab From 68236f4f1cb543ad92cc695b853b168f75e9e91e Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Tue, 22 Nov 2016 17:45:33 +0100 Subject: [PATCH 03/14] filter now enters before unzipping to improve performance --- diags.conf | 2 +- earthdiagnostics/cmorizer.py | 24 ++++++++++++++---------- 2 files changed, 15 insertions(+), 11 deletions(-) diff --git a/diags.conf b/diags.conf index d1326094..3e5e34e2 100644 --- a/diags.conf +++ b/diags.conf @@ -28,7 +28,7 @@ MAX_CORES = 1 FORCE = True # If true, CMORizes ocean files. Default = True OCEAN_FILES = True -FILTER_OCEAN_FILES = _PISC _dia +FILTER_FILES = _PISC _dia # If true, CMORizes atmosphere files. Default = True ATMOSPHERE_FILES = False # You can specify the variable to cmorize, in the way domain:var domain:var2 domain2:var diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index ef4aff85..c1cea645 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -76,21 +76,22 @@ class Cmorizer(object): Log.result('Oceanic file {0}/{1} finished'.format(count, len(tar_files))) count += 1 - def _filter_nc_files(self, tar_files): + def _filter_files(self, file_list): if not self.cmor.filter_files: - return tar_files + return file_list filtered = list() filters = self.cmor.filter_files.split(' ') - for tar_file in tar_files: - if any(filter in tar_file for filter in filters): - filtered.append(tar_file) + for filename in file_list: + if any(filter in filename for filter in filters): + filtered.append(filename) + else: + os.remove(filename) if len(filtered) == 0: Log.warning('Filters {0} do not match any of the files', filters) return filtered def _cmorize_nc_files(self): nc_files = glob.glob(os.path.join(self.cmor_scratch, '*.nc')) - nc_files = self._filter_nc_files(nc_files) for filename in nc_files: self._cmorize_nc_file(filename) self._clean_CMOR_scratch() @@ -110,7 +111,9 @@ class Cmorizer(object): self._clean_CMOR_scratch() os.makedirs(self.cmor_scratch) Utils.untar((tarfile,), self.cmor_scratch) - Utils.unzip(glob.glob(os.path.join(self.cmor_scratch, '*.gz'))) + zip_files = glob.glob(os.path.join(self.cmor_scratch, '*.gz')) + zip_files = self._filter_files(zip_files) + Utils.unzip(zip_files) def _clean_CMOR_scratch(self): if os.path.exists(self.cmor_scratch): @@ -309,15 +312,16 @@ class Cmorizer(object): :param frequency: variable's frequency :type frequency: str :param variable: variable's name - :type variable: str - """ - temp = TempFile.get() + :type variable: str """ + var_cmor = Variable.get_variable(variable) if var_cmor is None: return if not self.cmor.cmorize(var_cmor): return frequency = self.translate_frequency(frequency) + + temp = TempFile.get() Utils.nco.ncks(input=file_path, output=temp, options='-v {0}'.format(variable)) self._rename_level_variables(temp, var_cmor) -- GitLab From 104b1d4e8651dc20bf84eb414c07f9d944d7f363 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Wed, 23 Nov 2016 10:34:15 +0100 Subject: [PATCH 04/14] Added some variables to table (not finished) --- earthdiagnostics/cmor_table.csv | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/earthdiagnostics/cmor_table.csv b/earthdiagnostics/cmor_table.csv index 5c403f0d..0cf9121b 100644 --- a/earthdiagnostics/cmor_table.csv +++ b/earthdiagnostics/cmor_table.csv @@ -300,3 +300,18 @@ w2o,wosq,square_of_sea_water_upward_velocity,Square of Sea Water Upward Velocity difvho,difvho,ocean_vertical_heat_diffusivity,Ocean Vertical Heat Diffusivity,ocean,,,,, vovematr,wmo,upward_ocean_mass_transport,Upward Ocean Mass Transport ,ocean,,,,, qtr_ice,qtr,shortwave_flux_transmitted_through_ice,Shortwave Flux Transmitted Through The Ice,seaIce,,,,, +inttpp,inttpp,Total Primary production of phyto,,,,,,, +inttppnew,inttppnew,New Primary production of phyto,,,,,,, +inttpbfe,inttpbfe,Total biogenic iron production,,,,,,, +intdic,intdic,DIC content,,,,,,, +o2min,o2min,Oxygen minimum concentration,,,,,,, +zo2min,zo2min,Depth of Oxygen minimum concentration,,,,,,, +intnfix,intnfix,Nitrogen fixation rate : vert. integrated,,,,,,, +intppphy,intppphy,Vertically integrated primary production by nanophy,,,,,,, +intppphy2,intppphy2,Vertically integrated primary production by diatom,,,,,,, +intpp,intpp,Vertically integrated primary production by diatom,,,,,,, +intppnew,intppnew,Vertically integrated new primary production,,,,,,, +intpbfe,intpbfe,Vertically integrated of biogenic iron production,,,,,,, +intpbsi,intpbsi,Vertically integrated of biogenic Si production,,,,,,, +intpbcal,intpbcal,Vertically integrated of calcite production,,,,,,, +cflx,cflx,DIC flux,,,,,,, -- GitLab From 6434a134001b758e17761d5b43b609837e56672a Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Thu, 19 Jan 2017 13:11:04 +0100 Subject: [PATCH 05/14] Added suport for PISCES variables --- diags.conf | 2 +- earthdiagnostics/cmor_tables/default.csv | 54 +++++++++++----- earthdiagnostics/cmormanager.py | 12 ++-- earthdiagnostics/variable.py | 14 ++-- earthdiagnostics/variable_alias/default.csv | 71 +++++++++++++++++++++ 5 files changed, 125 insertions(+), 28 deletions(-) diff --git a/diags.conf b/diags.conf index 809557d0..0b3c4f4f 100644 --- a/diags.conf +++ b/diags.conf @@ -9,7 +9,7 @@ DATA_DIR = /esnas:/esarchive DATA_TYPE = exp # CMORization type to use. Important also for THREDDS as it affects variable name conventions. # Options: SPECS (default), PRIMAVERA, CMIP6 -DATA_CONVENTION = SPECS +DATA_CONVENTION = CMIP6 # Path to NEMO's mask and grid files needed for CDFTools CON_FILES = /esnas/autosubmit/con_files/ diff --git a/earthdiagnostics/cmor_tables/default.csv b/earthdiagnostics/cmor_tables/default.csv index 19d5b123..bf92abd7 100644 --- a/earthdiagnostics/cmor_tables/default.csv +++ b/earthdiagnostics/cmor_tables/default.csv @@ -297,18 +297,42 @@ w2o,wosq,square_of_sea_water_upward_velocity,Square of Sea Water Upward Velocity difvho,difvho,ocean_vertical_heat_diffusivity,Ocean Vertical Heat Diffusivity,ocean,,,,,, vovematr,wmo,upward_ocean_mass_transport,Upward Ocean Mass Transport ,ocean,,,,,, qtr_ice,qtr,shortwave_flux_transmitted_through_ice,Shortwave Flux Transmitted Through The Ice,seaIce,,,,,, -inttpp,inttpp,Total Primary production of phyto,,,,,,, -inttppnew,inttppnew,New Primary production of phyto,,,,,,, -inttpbfe,inttpbfe,Total biogenic iron production,,,,,,, -intdic,intdic,DIC content,,,,,,, -o2min,o2min,Oxygen minimum concentration,,,,,,, -zo2min,zo2min,Depth of Oxygen minimum concentration,,,,,,, -intnfix,intnfix,Nitrogen fixation rate : vert. integrated,,,,,,, -intppphy,intppphy,Vertically integrated primary production by nanophy,,,,,,, -intppphy2,intppphy2,Vertically integrated primary production by diatom,,,,,,, -intpp,intpp,Vertically integrated primary production by diatom,,,,,,, -intppnew,intppnew,Vertically integrated new primary production,,,,,,, -intpbfe,intpbfe,Vertically integrated of biogenic iron production,,,,,,, -intpbsi,intpbsi,Vertically integrated of biogenic Si production,,,,,,, -intpbcal,intpbcal,Vertically integrated of calcite production,,,,,,, -cflx,cflx,DIC flux,,,,,,, \ No newline at end of file +poc,poc,small_organic_carbon_concentration,Small organic carbon Concentration ,ocnBgchem,,,,,, +nanophy,nanophy,nanopthyoplankton_concentration,(Nano)Phytoplankton Concentration ,ocnBgchem,,,,,, +dsi,dsi,diatoms_silicate_concentration,Diatoms Silicate Concentration ,ocnBgchem,,,,,, +goc,goc,big_organic_carbon_concentration,Big organic carbon Concentration ,ocnBgchem,,,,,, +sfe,sfe,small_iron_particles_concentration,Small iron particles Concentration ,ocnBgchem,,,,,, +nfe,nfe,nano_iron_concentration,Nano iron Concentration ,ocnBgchem,,,,,, +nchl,nchl,nano_chlorophyl_concentration,Nano chlorophyl Concentration ,ocnBgchem,,,,,, +pno3tot,pno3tot,global_mean_nitrate_concentration,Global mean nitrate concentration ,ocnBgchem,,,,,, +psiltot,psiltot,global_mean_silicate_concentration,Global mean silicate concentration ,ocnBgchem,,,,,, +palktot,palktot,global_mean_alkalinity_concentration,Global mean alkalinity concentration ,ocnBgchem,,,,,, +pfertot,pfertot,global_mean_iron_concentration,Global mean iron concentration ,ocnBgchem,,,,,, +tcflx,tcflx,total_flux_carbon_out_of_the_ocean,total Flux of Carbon out of the ocean ,ocnBgchem,,,,,, +tcflxcum,tcflxcum,cumulative_total_flux_of_carbon_out_of_the_ocean,cumulative total Flux of Carbon out of the ocean ,ocnBgchem,,,,,, +c-export,c-export,total_carbon_export_at_100m,total Carbon export at 100m ,ocnBgchem,,,,,, +tintpp,tintpp,global_total_integrated_primary_production,global total integrated primary production ,ocnBgchem,,,,,, +tnfix,tnfix,global_total_nitrogen_fixation,global total nitrogen fixation ,ocnBgchem,,,,,, +tdenit,tdenit,total_denitrification,Total denitrification ,ocnBgchem,,,,,, +intppnew,intppnew,new_primary_production_of_phyto,New Primary production of phyto ,ocnBgchem,,,,,, +intppphy,intppphy,vertically_integrated_primary_production_by_nanophy,Vertically integrated primary production by nanophy ,ocnBgchem,,,,,, +ppphy,ppphy,primary_production_of_nanooplakton,Primary production of nanooplakton,ocnBgchem,,,,,, +intpbcal,intpbcal,vertically_integrated_of_calcite_productdic_fluxion,Vertically integrated of calcite productDIC fluxion,ocnBgchem,,,,,, +cflx,cflx,dic_flux,DIC flux,ocnBgchem,,,,,, +remin,remin,oxic_remineralization_of_om,Oxic remineralization of OM ,ocnBgchem,,,,,, +denit,denit,anoxic_remineralization_of_om,Anoxic remineralization of OM ,ocnBgchem,,,,,, +nfix,nfix,nitrogen_fixation,Nitrogen fixation ,ocnBgchem,,,,,, +sdenit,sdenit,nitrate_reduction_in_the_sediments,Nitrate reduction in the sediments ,ocnBgchem,,,,,, +par,par,photosynthetically_available_radiation,photosynthetically Available Radiation ,ocnBgchem,,,,,, +lnnut,lnnut,nutrient_limitation_term_in_nanophyto,Nutrient limitation term in Nanophyto ,ocnBgchem,,,,,, +ldnut,ldnut,nutrient_limitation_term_in_diatoms,Nutrient limitation term in Diatoms ,ocnBgchem,,,,,, +lnfe,lnfe,iron_limitation_term_in_nanophyoto,Iron limitation term in Nanophyoto ,ocnBgchem,,,,,, +lnlight,lnlight,light_limitation_term_in_nanophyto,Light limitation term in Nanophyto ,ocnBgchem,,,,,, +ldlight,ldlight,light_limitation_term_in_diatoms,Light limitation term in Diatoms ,ocnBgchem,,,,,, +graz1,graz1,grazing_by_microzooplankton,Grazing by microzooplankton ,ocnBgchem,,,,,, +graz2,graz2,grazing_by_mesozooplankto_,Grazing by mesozooplankton ,ocnBgchem,,,,,, +mumax,mumax,maximum_growth_rate,Maximum growth rate ,ocnBgchem,,,,,, +mun,mun,realized_growth_rate_for_nanophyto,Realized growth rate for nanophyto ,ocnBgchem,,,,,, +mud,mud,realized_growth_rate_for_diatomes,Realized growth rate for diatomes ,ocnBgchem,,,,,, +ppnewn,ppnewn,new_primary_production_of_nanophyto,New Primary production of nanophyto ,ocnBgchem,,,,,, +ppnewd,ppnewd,new_primary_production_of_diatoms,New Primary production of diatoms ,ocnBgchem,,,,,, diff --git a/earthdiagnostics/cmormanager.py b/earthdiagnostics/cmormanager.py index eba04af2..675eaa7a 100644 --- a/earthdiagnostics/cmormanager.py +++ b/earthdiagnostics/cmormanager.py @@ -32,14 +32,14 @@ class CMORManager(DataManager): if os.path.isdir(os.path.join(data_folder, self.experiment.expid)): self.config.data_dir = data_folder break - data_folder = os.path.join(data_folder, self.experiment.model.lower().replace('-', '')) - if os.path.isdir(os.path.join(data_folder, self.experiment.expid)): - self.config.data_dir = data_folder + test_folder = os.path.join(data_folder, self.experiment.model.lower().replace('-', '')) + if os.path.isdir(os.path.join(test_folder, self.experiment.expid)): + self.config.data_dir = test_folder break - data_folder = os.path.join(data_folder, self.config.data_type, experiment_folder) - if os.path.isdir(os.path.join(data_folder, self.experiment.expid)): - self.config.data_dir = data_folder + test_folder = os.path.join(data_folder, self.config.data_type, experiment_folder) + if os.path.isdir(os.path.join(test_folder, self.experiment.expid)): + self.config.data_dir = test_folder break if not self.config.data_dir: diff --git a/earthdiagnostics/variable.py b/earthdiagnostics/variable.py index 5b334886..96dc3792 100644 --- a/earthdiagnostics/variable.py +++ b/earthdiagnostics/variable.py @@ -144,6 +144,7 @@ class VariableManager(object): def _load_json_variables(self, json_data, table): for short_name in json_data.keys(): + short_name = str.strip(str(short_name)) if short_name.lower() in self._dict_variables: self._dict_variables[short_name.lower()].tables.append(table) continue @@ -176,6 +177,7 @@ class VariableManager(object): cmor_vars = [] for alias in aliases: + alias = str.strip(alias) if alias.lower() in self._dict_variables: cmor_vars.append(self._dict_variables[alias.lower()]) if len(cmor_vars) == 0: @@ -295,18 +297,18 @@ class Variable(object): def parse_json(self, json_var, key): if 'out_name' in json_var: - self.short_name = json_var['out_name'] + self.short_name = json_var['out_name'].strip() else: raise VariableJsonException('Variable has no out name defined'.format(key)) - self.standard_name = json_var['standard_name'] - self.long_name = json_var['long_name'] + self.standard_name = json_var['standard_name'].strip() + self.long_name = json_var['long_name'].strip() domain = json_var['modeling_realm'].split(' ') self.domain = self.get_modelling_realm(domain) - self.valid_min = json_var['valid_min'] - self.valid_max = json_var['valid_max'] - self.units = json_var['units'] + self.valid_min = json_var['valid_min'].strip() + self.valid_max = json_var['valid_max'].strip() + self.units = json_var['units'].strip() def get_modelling_realm(self, domains): if len(domains) > 1: diff --git a/earthdiagnostics/variable_alias/default.csv b/earthdiagnostics/variable_alias/default.csv index 24683fe3..8e1179d7 100644 --- a/earthdiagnostics/variable_alias/default.csv +++ b/earthdiagnostics/variable_alias/default.csv @@ -292,3 +292,74 @@ w2o,wosq,, difvho,difvho,, vovematr,wmo,, qtr_ice,qtr,, +alk,talk,, +oxygen,o2,, +calcite,calc,, +po4,po4,, +poc,poc,, +silicate,si,, +nanophy,nanophy,, +microzoo,zmicro,, +doc,dissoc,, +diaphy,phydiat,, +mesozoo,zmeso,, +dsi,dsi,, +dissfe,dfe,, +bfe,bfe,, +goc,goc,, +sfe,sfe,, +dfe,dfe,, +micrzoo,zmicro,, +nfe,nfe,, +nchl,nchl,, +dchl,chldiat,, +nitrate,no3,, +ammonium,nh4,, +pno3tot,pno3tot,, +psiltot,psiltot,, +palktot,palktot,, +pfertot,pfertot,, +tcflx,tcflx,, +tcflxcum,tcflxcum,, +c-export,c-export,, +tintpp,tintpp,, +tnfix,tnfix,, +tdenit,tdenit,, +intpp,intpp,, +intppnew,intppnew,, +inttpbfe,pbfe,, +intdic,intdic,, +o2min,o2min,, +zo2min,zo2min,, +intnfix,intpn2,, +intppphy,intppphy,, +intppphy2,intppdiat,, +ppphy ,ppphy ,, +ppphy2 ,pdi,, +intpp,intpp,, +intppnew,intppnew,, +intpbfe,intpbfe,, +intpbsi,intpbsi,, +intpbcal,intpbcal,, +cflx,cflx,, +remin,remin,, +denit,denit,, +nfix,nfix,, +sdenit,sdenit,, +dpco2,dpco2,, +epc100,epc100,, +expc,expc,, +par,par,, +lnnut,lnnut,, +ldnut,ldnut,, +lnfe,lnfe,, +ldfe,limfediat,, +lnlight,lnlight,, +ldlight,ldlight,, +graz1,graz1,, +graz2,graz2,, +mumax,mumax,, +mun,mun,, +mud,mud,, +ppnewn,ppnewn,, +ppnewd,ppnewd,, -- GitLab From cd17d6b7cf181b85615ebb60077749d50fbc8f12 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Thu, 19 Jan 2017 15:12:03 +0100 Subject: [PATCH 06/14] Fixed errors in cmorization --- earthdiagnostics/cmorizer.py | 25 +++++++++---------------- earthdiagnostics/cmormanager.py | 4 +++- earthdiagnostics/datamanager.py | 4 +--- earthdiagnostics/diagnostic.py | 4 ++-- earthdiagnostics/earthdiags.py | 2 +- earthdiagnostics/general/relinkall.py | 3 +-- earthdiagnostics/modelingrealm.py | 4 ++-- earthdiagnostics/threddsmanager.py | 10 +++++----- earthdiagnostics/utils.py | 1 + earthdiagnostics/variable.py | 5 +---- 10 files changed, 26 insertions(+), 36 deletions(-) diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index 4efc70d3..7121ec8d 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -13,6 +13,7 @@ from autosubmit.date.chunk_date_lib import parse_date, chunk_end_date, previous_ from earthdiagnostics.frequency import Frequency, Frequencies from earthdiagnostics.modelingrealm import ModelingRealms from earthdiagnostics.utils import TempFile, Utils +from earthdiagnostics.variable import VariableManager class Cmorizer(object): @@ -93,7 +94,7 @@ class Cmorizer(object): filtered = list() filters = self.cmor.filter_files.split(' ') for filename in file_list: - if any(filter in filename for filter in filters): + if any(f in filename for f in filters): filtered.append(filename) else: os.remove(filename) @@ -105,7 +106,7 @@ class Cmorizer(object): nc_files = glob.glob(os.path.join(self.cmor_scratch, '*.nc')) for filename in nc_files: self._cmorize_nc_file(filename) - self._clean_CMOR_scratch() + self._clean_cmor_scratch() def _correct_fluxes(self): fluxes_vars = ("prsn", "rss", "rls", "rsscs", "rsds", "rlds", "hfss", 'hfls') @@ -119,14 +120,14 @@ class Cmorizer(object): handler.close() def _unpack_tar_file(self, tarfile): - self._clean_CMOR_scratch() + self._clean_cmor_scratch() os.makedirs(self.cmor_scratch) Utils.untar((tarfile,), self.cmor_scratch) zip_files = glob.glob(os.path.join(self.cmor_scratch, '*.gz')) zip_files = self._filter_files(zip_files) Utils.unzip(zip_files) - def _clean_CMOR_scratch(self): + def _clean_cmor_scratch(self): if os.path.exists(self.cmor_scratch): shutil.rmtree(self.cmor_scratch) @@ -356,13 +357,11 @@ class Cmorizer(object): :param variable: variable's name :type variable: str """ - temp = TempFile.get() - var_cmor = Variable.get_variable(variable) + var_cmor = VariableManager().get_variable(variable) if var_cmor is None: return if not self.cmor.cmorize(var_cmor): return - frequency = self.translate_frequency(frequency) temp = TempFile.get() Utils.nco.ncks(input=file_path, output=temp, options='-v {0}'.format(variable)) @@ -370,10 +369,10 @@ class Cmorizer(object): self._add_coordinate_variables(handler, temp) - if alias.basin is None: + if var_cmor.basin is None: region = None else: - region = alias.basin.fullname + region = var_cmor.basin.fullname date_str = self.get_date_str(file_path) if date_str is None: @@ -384,7 +383,7 @@ class Cmorizer(object): self.data_manager.send_file(temp, var_cmor.domain, var_cmor.short_name, self.startdate, self.member, frequency=frequency, rename_var=variable, date_str=date_str, region=region, - move_old=True, grid=alias.grid, cmorized=True) + move_old=True, grid=var_cmor.grid, cmorized=True) def get_date_str(self, file_path): file_parts = os.path.basename(file_path).split('_') @@ -433,12 +432,6 @@ class Cmorizer(object): if var_cmor.domain == ModelingRealms.atmos: Utils.rename_variables(temp, {'depth': 'plev'}, False, True) - @staticmethod - def translate_frequency(frequency): - if frequency == 'h': - frequency = '6hr' - return Frequency(frequency) - @staticmethod def _merge_grib_files(current_month, prev_gribfile, gribfile): Log.info('Merging data from different files...') diff --git a/earthdiagnostics/cmormanager.py b/earthdiagnostics/cmormanager.py index 675eaa7a..d7c60bba 100644 --- a/earthdiagnostics/cmormanager.py +++ b/earthdiagnostics/cmormanager.py @@ -188,6 +188,7 @@ class CMORManager(DataManager): def link_file(self, domain, var, cmor_var, startdate, member, chunk=None, grid=None, frequency=None, year=None, date_str=None, move_old=False, vartype=VariableType.MEAN): + """ Creates the link of a given file from the CMOR repository. @@ -279,7 +280,8 @@ class CMORManager(DataManager): if not frequency: frequency = self.config.frequency - filepath = self.get_file_path(startdate, member, domain, final_name, cmor_var, chunk, frequency, grid, year, date_str) + filepath = self.get_file_path(startdate, member, domain, final_name, cmor_var, chunk, frequency, grid, year, + date_str) netcdf_file = NetCDFFile(filepath, filetosend, domain, final_name, cmor_var, self.config.data_convention, region) netcdf_file.frequency = frequency diff --git a/earthdiagnostics/datamanager.py b/earthdiagnostics/datamanager.py index 73994fba..e9e775b6 100644 --- a/earthdiagnostics/datamanager.py +++ b/earthdiagnostics/datamanager.py @@ -223,7 +223,7 @@ class DataManager(object): self.lock.release() # Overridable methods (not mandatory) - def link_file(self, domain, var, cmor_var, startdate, member, chunk=None, grid=None, box=None, + def link_file(self, domain, var, cmor_var, startdate, member, chunk=None, grid=None, frequency=None, year=None, date_str=None, move_old=False, vartype=VariableType.MEAN): """ Creates the link of a given file from the CMOR repository. @@ -244,8 +244,6 @@ class DataManager(object): :type chunk: int :param grid: file's grid (only needed if it is not the original) :type grid: str - :param box: file's box (only needed to retrieve sections or averages) - :type box: Box :param frequency: file's frequency (only needed if it is different from the default) :type frequency: str :param vartype: Variable type (mean, statistic) diff --git a/earthdiagnostics/diagnostic.py b/earthdiagnostics/diagnostic.py index 86787556..02c7f51e 100644 --- a/earthdiagnostics/diagnostic.py +++ b/earthdiagnostics/diagnostic.py @@ -2,7 +2,7 @@ from earthdiagnostics.constants import Basins from earthdiagnostics.frequency import Frequency from earthdiagnostics.variable_type import VariableType -from earthdiagnostics.modelingrealm import ModelingRealm +from earthdiagnostics.modelingrealm import ModelingRealms class Diagnostic(object): @@ -183,7 +183,7 @@ class DiagnosticListIntOption(DiagnosticOption): class DiagnosticDomainOption(DiagnosticOption): def parse(self, option_value): - return ModelingRealm.parse(self.check_default(option_value)) + return ModelingRealms.parse(self.check_default(option_value)) class DiagnosticFrequencyOption(DiagnosticOption): diff --git a/earthdiagnostics/earthdiags.py b/earthdiagnostics/earthdiags.py index 55adabe9..b0d6011e 100755 --- a/earthdiagnostics/earthdiags.py +++ b/earthdiagnostics/earthdiags.py @@ -101,7 +101,7 @@ class EarthDiags(object): if Log.console_handler.level <= Log.DEBUG: Utils.cdo.debug = True - Utils.nco.debug = False # This is due to a bug in nco. Must change when it's solved + Utils.nco.debug = False # This is due to a bug in nco. Must change when it's solved if args.logfilepath: Log.set_file(Utils.expand_path(args.logfilepath)) diff --git a/earthdiagnostics/general/relinkall.py b/earthdiagnostics/general/relinkall.py index f65809a9..6ee2d226 100644 --- a/earthdiagnostics/general/relinkall.py +++ b/earthdiagnostics/general/relinkall.py @@ -1,6 +1,5 @@ # coding=utf-8 -from earthdiagnostics.diagnostic import Diagnostic, DiagnosticOption, DiagnosticDomainOption, DiagnosticBoolOption -from earthdiagnostics.modelingrealm import ModelingRealm +from earthdiagnostics.diagnostic import Diagnostic class RelinkAll(Diagnostic): diff --git a/earthdiagnostics/modelingrealm.py b/earthdiagnostics/modelingrealm.py index ffe252cc..acc5646c 100644 --- a/earthdiagnostics/modelingrealm.py +++ b/earthdiagnostics/modelingrealm.py @@ -17,7 +17,7 @@ class ModelingRealm(object): elif domain_name in ['ocean', 'atmos', 'land', 'aerosol']: self.name = domain_name else: - raise ValueError('Domain {0} not recognized!'.format(domain_name)) + raise ValueError('Modelling realm {0} not recognized!'.format(domain_name)) def __eq__(self, other): return other.__class__ == ModelingRealm and self.name == other.name @@ -90,5 +90,5 @@ class ModelingRealms(object): if isinstance(value, ModelingRealm): if modelling_realm.lower() in [value.name.lower()]: return value - return None + raise ValueError('Modelling realm {0} not recognized!'.format(modelling_realm)) diff --git a/earthdiagnostics/threddsmanager.py b/earthdiagnostics/threddsmanager.py index ba0dce80..f2395a90 100644 --- a/earthdiagnostics/threddsmanager.py +++ b/earthdiagnostics/threddsmanager.py @@ -79,7 +79,8 @@ class THREDDSManager(DataManager): """ aggregation_path = self.get_var_url(var, startdate, frequency, box, vartype) - start_chunk = chunk_start_date(parse_date(startdate), chunk, self.experiment.chunk_size, 'month', self.experiment.calendar) + start_chunk = chunk_start_date(parse_date(startdate), chunk, self.experiment.chunk_size, 'month', + self.experiment.calendar) end_chunk = chunk_end_date(start_chunk, self.experiment.chunk_size, 'month', self.experiment.calendar) thredds_subset = THREDDSSubset(aggregation_path, var, start_chunk, end_chunk) @@ -113,7 +114,8 @@ class THREDDSManager(DataManager): """ aggregation_path = self.get_var_url(var, startdate, frequency, box, vartype) - start_chunk = chunk_start_date(parse_date(startdate), chunk, self.experiment.chunk_size, 'month', self.experiment.calendar) + start_chunk = chunk_start_date(parse_date(startdate), chunk, self.experiment.chunk_size, 'month', + self.experiment.calendar) end_chunk = chunk_end_date(start_chunk, self.experiment.chunk_size, 'month', self.experiment.calendar) thredds_subset = THREDDSSubset(aggregation_path, var, start_chunk, end_chunk) @@ -288,7 +290,7 @@ class THREDDSManager(DataManager): else: return '{0}.nc'.format(var) - def link_file(self, domain, var, startdate, member, chunk=None, grid=None, box=None, + def link_file(self, domain, var, cmor_var, startdate, member, chunk=None, grid=None, frequency=None, year=None, date_str=None, move_old=False, vartype=VariableType.MEAN): """ Creates the link of a given file from the CMOR repository. @@ -309,8 +311,6 @@ class THREDDSManager(DataManager): :type chunk: int :param grid: file's grid (only needed if it is not the original) :type grid: str - :param box: file's box (only needed to retrieve sections or averages) - :type box: Box :param frequency: file's frequency (only needed if it is different from the default) :type frequency: str :param vartype: Variable type (mean, statistic) diff --git a/earthdiagnostics/utils.py b/earthdiagnostics/utils.py index 4c5d6317..7b19d1d5 100644 --- a/earthdiagnostics/utils.py +++ b/earthdiagnostics/utils.py @@ -546,6 +546,7 @@ class Utils(object): :type path: str """ if not os.path.exists(path): + # noinspection PyBroadException try: os.makedirs(path) except: diff --git a/earthdiagnostics/variable.py b/earthdiagnostics/variable.py index 96dc3792..1507fa5f 100644 --- a/earthdiagnostics/variable.py +++ b/earthdiagnostics/variable.py @@ -8,7 +8,7 @@ from autosubmit.config.log import Log from earthdiagnostics.constants import Basins from earthdiagnostics.frequency import Frequency -from earthdiagnostics.modelingrealm import ModelingRealm, ModelingRealms +from earthdiagnostics.modelingrealm import ModelingRealms class VariableJsonException(Exception): @@ -370,9 +370,6 @@ class Variable(object): return None - - - class VariableAlias(object): """ Class to characterize a CMOR variable. It also contains the static method to make the match between thje original -- GitLab From 35ea641051b5485fc03e5f5f6c5e2d3ab4a764a4 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Thu, 19 Jan 2017 15:47:59 +0100 Subject: [PATCH 07/14] Improved tests --- test/unit/__init__.py | 1 + test/unit/test_constants.py | 3 ++ test/unit/test_modelling_realm.py | 52 +++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+) create mode 100644 test/unit/test_modelling_realm.py diff --git a/test/unit/__init__.py b/test/unit/__init__.py index 3c07e901..80b2d991 100644 --- a/test/unit/__init__.py +++ b/test/unit/__init__.py @@ -19,6 +19,7 @@ from test_maxmoc import TestMaxMoc from test_mixedlayerheatcontent import TestMixedLayerHeatContent from test_mixedlayersaltcontent import TestMixedLayerSaltContent from test_moc import TestMoc +from test_modelling_realm import TestModellingRealms, TestModellingRealm from test_siasiesiv import TestSiasiesiv from test_verticalmean import TestVerticalMean from test_verticalmeanmeters import TestVerticalMeanMeters diff --git a/test/unit/test_constants.py b/test/unit/test_constants.py index f8010d53..72047818 100644 --- a/test/unit/test_constants.py +++ b/test/unit/test_constants.py @@ -29,3 +29,6 @@ class TestBasin(TestCase): self.assertFalse(Basin('bas', 'OtherBasin') == self.basin) self.assertFalse(Basin('otbas', 'Basin') == self.basin) self.assertFalse(Basin('otbas', 'OtherBasin') == self.basin) + + def test__str__(self): + self.assertEquals(str(self.basin), 'Basin') diff --git a/test/unit/test_modelling_realm.py b/test/unit/test_modelling_realm.py new file mode 100644 index 00000000..2d44e6a6 --- /dev/null +++ b/test/unit/test_modelling_realm.py @@ -0,0 +1,52 @@ +# coding=utf-8 +from unittest import TestCase + +from earthdiagnostics.frequency import Frequencies +from earthdiagnostics.modelingrealm import ModelingRealm, ModelingRealms + + +class TestModellingRealms(TestCase): + + def test_parse(self): + self.assertEquals(ModelingRealms.parse('atmos'), ModelingRealms.atmos) + self.assertEquals(ModelingRealms.parse('atmoschem'), ModelingRealms.atmosChem) + self.assertEquals(ModelingRealms.parse('atmoSChem'), ModelingRealms.atmosChem) + with self.assertRaises(ValueError): + ModelingRealms.parse('badrealm') + + +class TestModellingRealm(TestCase): + + def setUp(self): + self.basin = ModelingRealm('ocean') + + def test_constructor_fail_on_bad_realm(self): + with self.assertRaises(ValueError): + ModelingRealm('badrealm') + + def test_comparison(self): + self.assertEqual(ModelingRealm('ocean'), self.basin) + self.assertNotEqual(ModelingRealm('OCEAN'), self.basin) + self.assertNotEqual(ModelingRealm('atmos'), self.basin) + + def test_get_omon(self): + self.assertEqual(self.basin.get_table_name(Frequencies.monthly, 'specs'), 'Omon') + + def test_get_oimon(self): + self.assertEqual(ModelingRealm('seaIce').get_table_name(Frequencies.monthly, 'specs'), 'OImon') + + def test_get_simon(self): + self.assertEqual(ModelingRealm('seaIce').get_table_name(Frequencies.monthly, 'cmip6'), 'SImon') + + def test_get_limon(self): + self.assertEqual(ModelingRealm('landIce').get_table_name(Frequencies.monthly, 'specs'), 'LImon') + + def test_get_day(self): + self.assertEqual(ModelingRealm('atmos').get_table_name(Frequencies.daily, 'specs'), 'day') + + def test_get_6hrplev(self): + self.assertEqual(ModelingRealm('atmos').get_table_name(Frequencies.six_hourly, 'specs'), '6hrPlev') + + + + -- GitLab From c0adcbe4a65861ca64002314655a58a9778191a6 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Thu, 19 Jan 2017 17:12:17 +0100 Subject: [PATCH 08/14] Fixed cmorization --- earthdiagnostics/cmorizer.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index 7121ec8d..3769caf1 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -357,7 +357,7 @@ class Cmorizer(object): :param variable: variable's name :type variable: str """ - var_cmor = VariableManager().get_variable(variable) + alias, var_cmor = VariableManager().get_variable_and_alias(variable) if var_cmor is None: return if not self.cmor.cmorize(var_cmor): @@ -369,10 +369,10 @@ class Cmorizer(object): self._add_coordinate_variables(handler, temp) - if var_cmor.basin is None: + if alias.basin is None: region = None else: - region = var_cmor.basin.fullname + region = alias.basin.fullname date_str = self.get_date_str(file_path) if date_str is None: -- GitLab From 6c60635fc515c2370e7b17432de546a6e2f6ed2a Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Thu, 19 Jan 2017 17:13:36 +0100 Subject: [PATCH 09/14] Added tests --- earthdiagnostics/diagnostic.py | 15 ++++++- earthdiagnostics/frequency.py | 2 +- earthdiagnostics/ocean/psi.py | 2 +- .../statistics/climatologicalpercentile.py | 4 +- .../statistics/monthlypercentile.py | 32 ++++++++------- test/unit/__init__.py | 4 ++ test/unit/test_areamoc.py | 8 ++-- test/unit/test_averagesection.py | 8 ++-- test/unit/test_climatologicalpercentile.py | 35 ++++++++++++++++ test/unit/test_convectionsites.py | 4 +- test/unit/test_cutsection.py | 8 ++-- test/unit/test_frequency.py | 32 +++++++++++++++ test/unit/test_gyres.py | 4 +- test/unit/test_heatcontent.py | 6 +-- test/unit/test_maxmoc.py | 10 ++--- test/unit/test_mixedlayerheatcontent.py | 4 +- test/unit/test_mixedlayersaltcontent.py | 4 +- test/unit/test_moc.py | 4 +- test/unit/test_monthlymean.py | 10 ++--- test/unit/test_monthlypercentile.py | 41 +++++++++++++++++++ test/unit/test_psi.py | 4 +- test/unit/test_rewrite.py | 8 ++-- test/unit/test_variable_type.py | 20 +++++++++ test/unit/test_verticalmean.py | 10 ++--- test/unit/test_verticalmeanmeters.py | 10 ++--- 25 files changed, 218 insertions(+), 71 deletions(-) create mode 100644 test/unit/test_climatologicalpercentile.py create mode 100644 test/unit/test_frequency.py create mode 100644 test/unit/test_monthlypercentile.py create mode 100644 test/unit/test_variable_type.py diff --git a/earthdiagnostics/diagnostic.py b/earthdiagnostics/diagnostic.py index 02c7f51e..83b1e44e 100644 --- a/earthdiagnostics/diagnostic.py +++ b/earthdiagnostics/diagnostic.py @@ -174,11 +174,24 @@ class DiagnosticIntOption(DiagnosticOption): class DiagnosticListIntOption(DiagnosticOption): + + def __init__(self, name, default_value=None, min_limit=None, max_limit=None): + super(DiagnosticListIntOption, self).__init__(name, default_value) + self.min_limit = min_limit + self.max_limit = max_limit + def parse(self, option_value): option_value = self.check_default(option_value) if isinstance(option_value, tuple) or isinstance(option_value, list): return option_value - return [int(i) for i in option_value.split('-')] + values = [int(i) for i in option_value.split('-')] + for value in values: + if self.min_limit is not None and value < self.min_limit: + raise DiagnosticOptionError('Value {0} is lower than minimum ({1})'.format(value, self.min_limit)) + if self.max_limit is not None and value > self.max_limit: + raise DiagnosticOptionError('Value {0} is higher than maximum ({1})'.format(value, self.max_limit)) + + return values class DiagnosticDomainOption(DiagnosticOption): diff --git a/earthdiagnostics/frequency.py b/earthdiagnostics/frequency.py index 45101726..da40398f 100644 --- a/earthdiagnostics/frequency.py +++ b/earthdiagnostics/frequency.py @@ -20,7 +20,7 @@ class Frequency(object): try: self.frequency = Frequency._recognized[freq] except KeyError: - raise Exception('Frequency {0} not supported'.format(freq)) + raise ValueError('Frequency {0} not supported'.format(freq)) def __eq__(self, other): return self.frequency == other.frequency diff --git a/earthdiagnostics/ocean/psi.py b/earthdiagnostics/ocean/psi.py index 072bfb87..2c7ff046 100644 --- a/earthdiagnostics/ocean/psi.py +++ b/earthdiagnostics/ocean/psi.py @@ -25,7 +25,7 @@ class Psi(Diagnostic): :type chunk: int """ - alias = 'psi' + alias = 'diagnostic' "Diagnostic alias for the configuration file" def __init__(self, data_manager, startdate, member, chunk): diff --git a/earthdiagnostics/statistics/climatologicalpercentile.py b/earthdiagnostics/statistics/climatologicalpercentile.py index 33fe83d9..8831bca6 100644 --- a/earthdiagnostics/statistics/climatologicalpercentile.py +++ b/earthdiagnostics/statistics/climatologicalpercentile.py @@ -51,8 +51,8 @@ class ClimatologicalPercentile(Diagnostic): return self.domain == other.domain and self.variable == other.variable and self.leadtimes == other.leadtimes def __str__(self): - return 'Climatological percentile Variable: {0}:{1} Leadtimes: {2}'.format(self.domain, self.variable, - self.leadtimes) + return 'Climatological percentile Variable: {0}:{1} Leadtimes: {2} ' \ + 'Bins: {3}'.format(self.domain, self.variable, self.leadtimes, self.num_bins) @classmethod def generate_jobs(cls, diags, options): diff --git a/earthdiagnostics/statistics/monthlypercentile.py b/earthdiagnostics/statistics/monthlypercentile.py index 45b7652c..f609d2d5 100644 --- a/earthdiagnostics/statistics/monthlypercentile.py +++ b/earthdiagnostics/statistics/monthlypercentile.py @@ -3,7 +3,7 @@ import shutil from autosubmit.config.log import Log -from earthdiagnostics.diagnostic import Diagnostic, DiagnosticOption, DiagnosticDomainOption, DiagnosticIntOption +from earthdiagnostics.diagnostic import Diagnostic, DiagnosticOption, DiagnosticDomainOption, DiagnosticListIntOption from earthdiagnostics.frequency import Frequencies from earthdiagnostics.utils import Utils, TempFile from earthdiagnostics.variable_type import VariableType @@ -29,23 +29,24 @@ class MonthlyPercentile(Diagnostic): alias = 'monpercent' "Diagnostic alias for the configuration file" - def __init__(self, data_manager, startdate, member, chunk, variable, domain, percentile): + def __init__(self, data_manager, startdate, member, chunk, domain, variable, percentiles): Diagnostic.__init__(self, data_manager) self.startdate = startdate self.member = member self.chunk = chunk self.variable = variable self.domain = domain - self.percentile = percentile + self.percentiles = percentiles def __eq__(self, other): return self.startdate == other.startdate and self.member == other.member and self.chunk == other.chunk and \ - self.domain == other.domain and self.variable == other.variable and self.percentile == other.percentile + self.domain == other.domain and self.variable == other.variable and self.percentiles == other.percentiles def __str__(self): - return 'Monthly percentile {0} Startdate: {0} Member: {1} Chunk: {2} ' \ - 'Variable: {3}:{4} Percentile: {5}'.format(self.startdate, self.member, self.chunk, - self.domain, self.variable, self.percentile) + return 'Monthly percentile Startdate: {0} Member: {1} Chunk: {2} ' \ + 'Variable: {3}:{4} Percentiles: {5}'.format(self.startdate, self.member, self.chunk, + self.domain, self.variable, + ', '.join(str(i) for i in self.percentiles)) @classmethod def generate_jobs(cls, diags, options): @@ -60,13 +61,13 @@ class MonthlyPercentile(Diagnostic): """ options_available = (DiagnosticOption('domain'), DiagnosticDomainOption('variable'), - DiagnosticIntOption('percentile', None, 0, 100)) + DiagnosticListIntOption('percentiles', None, 0, 100)) options = cls.process_options(options, options_available) job_list = list() for startdate, member, chunk in diags.config.experiment.get_chunk_list(): job_list.append(MonthlyPercentile(diags.data_manager, startdate, member, chunk, - options['variable'], options['domain'], options['percentile'])) + options['variable'], options['domain'], options['percentiles'])) return job_list def compute(self): @@ -108,12 +109,13 @@ class MonthlyPercentile(Diagnostic): monmax_file = TempFile.get() Utils.cdo.monmax(input=variable_file, output=monmax_file) - Log.debug('Computing percentile') - Utils.cdo.monpctl(str(self.percentile), input=[variable_file, monmin_file, monmax_file], output=temp) - Utils.rename_variable(temp, 'lev', 'ensemble', False, True) - self.send_file(temp, self.domain, '{0}_q{1}'.format(self.variable, self.percentile), self.startdate, - self.member, self.chunk, frequency=Frequencies.monthly, rename_var=self.variable, - vartype=VariableType.STATISTIC) + for percentile in self.percentiles: + Log.debug('Computing percentile {0}', percentile) + Utils.cdo.monpctl(str(percentile), input=[variable_file, monmin_file, monmax_file], output=temp) + Utils.rename_variable(temp, 'lev', 'ensemble', False, True) + self.send_file(temp, self.domain, '{0}_q{1}'.format(self.variable, percentile), self.startdate, + self.member, self.chunk, frequency=Frequencies.monthly, rename_var=self.variable, + vartype=VariableType.STATISTIC) diff --git a/test/unit/__init__.py b/test/unit/__init__.py index 80b2d991..fd268596 100644 --- a/test/unit/__init__.py +++ b/test/unit/__init__.py @@ -11,6 +11,7 @@ from test_areamoc import TestAreaMoc from test_averagesection import TestAverageSection from test_cutsection import TestCutSection from test_convectionsites import TestConvectionSites +from test_frequency import TestFrequency from test_gyres import TestGyres from test_heatcontent import TestHeatContent from test_heatcontentlayer import TestHeatContentLayer @@ -25,3 +26,6 @@ from test_verticalmean import TestVerticalMean from test_verticalmeanmeters import TestVerticalMeanMeters from test_monthlymean import TestMonthlyMean from test_rewrite import TestRewrite +from test_variable_type import TestVariableType +from test_monthlypercentile import TestMonthlyPercentile +from test_climatologicalpercentile import TestClimatologicalPercentile diff --git a/test/unit/test_areamoc.py b/test/unit/test_areamoc.py index f4ddf699..fb23ff38 100644 --- a/test/unit/test_areamoc.py +++ b/test/unit/test_areamoc.py @@ -23,20 +23,20 @@ class TestAreaMoc(TestCase): self.psi = AreaMoc(self.data_manager, '20000101', 1, 1, Basins.Antarctic, self.box) def test_generate_jobs(self): - jobs = AreaMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0']) + jobs = AreaMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], AreaMoc(self.data_manager, '20010101', 0, 0, Basins.Global, self.box)) self.assertEqual(jobs[1], AreaMoc(self.data_manager, '20010101', 0, 1, Basins.Global, self.box)) - jobs = AreaMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', 'atl']) + jobs = AreaMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', 'atl']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], AreaMoc(self.data_manager, '20010101', 0, 0, Basins.Atlantic, self.box)) self.assertEqual(jobs[1], AreaMoc(self.data_manager, '20010101', 0, 1, Basins.Atlantic, self.box)) with self.assertRaises(Exception): - AreaMoc.generate_jobs(self.diags, ['psi']) + AreaMoc.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - AreaMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0']) + AreaMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.psi), 'Area MOC Startdate: 20000101 Member: 1 Chunk: 1 Box: 0N0') diff --git a/test/unit/test_averagesection.py b/test/unit/test_averagesection.py index 78554e5e..7a454c4a 100644 --- a/test/unit/test_averagesection.py +++ b/test/unit/test_averagesection.py @@ -24,14 +24,14 @@ class TestAverageSection(TestCase): self.psi = AverageSection(self.data_manager, '20000101', 1, 1, ModelingRealms.ocean, 'var', self.box) def test_generate_jobs(self): - jobs = AverageSection.generate_jobs(self.diags, ['psi', 'var', '0', '0', '0', '0']) + jobs = AverageSection.generate_jobs(self.diags, ['diagnostic', 'var', '0', '0', '0', '0']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], AverageSection(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', self.box)) self.assertEqual(jobs[1], AverageSection(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', self.box)) - jobs = AverageSection.generate_jobs(self.diags, ['psi', 'var', '0', '0', '0', '0', 'ocean']) + jobs = AverageSection.generate_jobs(self.diags, ['diagnostic', 'var', '0', '0', '0', '0', 'ocean']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], AverageSection(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', self.box)) @@ -39,9 +39,9 @@ class TestAverageSection(TestCase): self.box)) with self.assertRaises(Exception): - AverageSection.generate_jobs(self.diags, ['psi']) + AverageSection.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - AverageSection.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + AverageSection.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.psi), 'Average section Startdate: 20000101 Member: 1 Chunk: 1 Box: 0N0E ' diff --git a/test/unit/test_climatologicalpercentile.py b/test/unit/test_climatologicalpercentile.py new file mode 100644 index 00000000..95afc38b --- /dev/null +++ b/test/unit/test_climatologicalpercentile.py @@ -0,0 +1,35 @@ +# coding=utf-8 +from unittest import TestCase + +from earthdiagnostics.statistics.climatologicalpercentile import ClimatologicalPercentile +from mock import Mock + +from earthdiagnostics.modelingrealm import ModelingRealms + + +class TestClimatologicalPercentile(TestCase): + + def setUp(self): + self.data_manager = Mock() + self.data_manager.variable_list.get_variable.return_value = None + + self.diags = Mock() + self.diags.data_manager = self.data_manager + + self.diagnostic = ClimatologicalPercentile(self.data_manager, ModelingRealms.ocean, 'var', + [10, 90], 1000, self.diags.config.experiment) + + def test_generate_jobs(self): + jobs = ClimatologicalPercentile.generate_jobs(self.diags, ['climpercent', 'ocean', 'var', '1-2', '1000']) + self.assertEqual(len(jobs), 1) + self.assertEqual(jobs[0], ClimatologicalPercentile(self.data_manager, ModelingRealms.ocean, 'var', [1, 2], + 1000, self.diags.config.experiment)) + + with self.assertRaises(Exception): + ClimatologicalPercentile.generate_jobs(self.diags, ['climpercent']) + with self.assertRaises(Exception): + ClimatologicalPercentile.generate_jobs(self.diags, ['climpercent', '0', '0', '0', '0', '0', '0', '0']) + + def test_str(self): + self.assertEquals(str(self.diagnostic), 'Climatological percentile Variable: ocean:var Leadtimes: [10, 90] ' + 'Bins: 1000') diff --git a/test/unit/test_convectionsites.py b/test/unit/test_convectionsites.py index b6a7e543..63710d05 100644 --- a/test/unit/test_convectionsites.py +++ b/test/unit/test_convectionsites.py @@ -16,13 +16,13 @@ class TestConvectionSites(TestCase): self.psi = ConvectionSites(self.data_manager, '20000101', 1, 1, 'model_version') def test_generate_jobs(self): - jobs = ConvectionSites.generate_jobs(self.diags, ['psi']) + jobs = ConvectionSites.generate_jobs(self.diags, ['diagnostic']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], ConvectionSites(self.data_manager, '20010101', 0, 0, 'model_version')) self.assertEqual(jobs[1], ConvectionSites(self.data_manager, '20010101', 0, 1, 'model_version')) with self.assertRaises(Exception): - ConvectionSites.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + ConvectionSites.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.psi), 'Convection sites Startdate: 20000101 Member: 1 Chunk: 1') diff --git a/test/unit/test_cutsection.py b/test/unit/test_cutsection.py index 8cfb3cdb..170d0426 100644 --- a/test/unit/test_cutsection.py +++ b/test/unit/test_cutsection.py @@ -24,14 +24,14 @@ class TestCutSection(TestCase): self.psi = CutSection(self.data_manager, '20000101', 1, 1, ModelingRealms.atmos, 'var', True, 0) def test_generate_jobs(self): - jobs = CutSection.generate_jobs(self.diags, ['psi', 'var', 'true', '10']) + jobs = CutSection.generate_jobs(self.diags, ['diagnostic', 'var', 'true', '10']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], CutSection(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', True, 10)) self.assertEqual(jobs[1], CutSection(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', True, 10)) - jobs = CutSection.generate_jobs(self.diags, ['psi', 'var', 'false', '0', 'atmos']) + jobs = CutSection.generate_jobs(self.diags, ['diagnostic', 'var', 'false', '0', 'atmos']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], CutSection(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var', False, 0)) @@ -39,9 +39,9 @@ class TestCutSection(TestCase): False, 0)) with self.assertRaises(Exception): - CutSection.generate_jobs(self.diags, ['psi']) + CutSection.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - CutSection.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + CutSection.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.psi), 'Cut section Startdate: 20000101 Member: 1 Chunk: 1 Variable: atmos:var ' diff --git a/test/unit/test_frequency.py b/test/unit/test_frequency.py new file mode 100644 index 00000000..28b5bd91 --- /dev/null +++ b/test/unit/test_frequency.py @@ -0,0 +1,32 @@ +# coding=utf-8 +from unittest import TestCase + +from earthdiagnostics.frequency import Frequencies, Frequency +from earthdiagnostics.variable_type import VariableType + + +class TestFrequency(TestCase): + + def test_not_supported(self): + with self.assertRaises(ValueError): + Frequency('badfreq') + + def test_get_monthly_mean(self): + self.assertEqual(Frequency('m').folder_name(VariableType.MEAN), 'monthly_mean') + + def test_get_monthly_stats(self): + self.assertEqual(Frequency('m').folder_name(VariableType.STATISTIC), 'monthly_statistics') + + def test_get_daily_mean(self): + self.assertEqual(Frequency('d').folder_name(VariableType.MEAN), 'daily_mean') + + def test_get_daily_stats(self): + self.assertEqual(Frequency('d').folder_name(VariableType.STATISTIC), 'daily_statistics') + + def test_get_6hourlymean(self): + self.assertEqual(Frequency('6hr').folder_name(VariableType.STATISTIC), '6hourly') + + def test_get_climatology(self): + self.assertEqual(Frequency('clim').folder_name(VariableType.STATISTIC), 'clim') + self.assertEqual(Frequency('clim').folder_name(VariableType.MEAN), 'clim') + diff --git a/test/unit/test_gyres.py b/test/unit/test_gyres.py index 77f39872..becc4e7d 100644 --- a/test/unit/test_gyres.py +++ b/test/unit/test_gyres.py @@ -17,13 +17,13 @@ class TestGyres(TestCase): self.gyres = Gyres(self.data_manager, '20000101', 1, 1, 'model_version') def test_generate_jobs(self): - jobs = Gyres.generate_jobs(self.diags, ['psi']) + jobs = Gyres.generate_jobs(self.diags, ['diagnostic']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], Gyres(self.data_manager, '20010101', 0, 0, 'model_version')) self.assertEqual(jobs[1], Gyres(self.data_manager, '20010101', 0, 1, 'model_version')) with self.assertRaises(Exception): - Gyres.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + Gyres.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.gyres), 'Gyres Startdate: 20000101 Member: 1 Chunk: 1') diff --git a/test/unit/test_heatcontent.py b/test/unit/test_heatcontent.py index b2c28f8c..8452eb59 100644 --- a/test/unit/test_heatcontent.py +++ b/test/unit/test_heatcontent.py @@ -23,16 +23,16 @@ class TestHeatContent(TestCase): self.heat_content = HeatContent(self.data_manager, '20000101', 1, 1, Basins.Global, 1, self.box) def test_generate_jobs(self): - jobs = HeatContent.generate_jobs(self.diags, ['psi', 'atl', '-1', '0', '100']) + jobs = HeatContent.generate_jobs(self.diags, ['diagnostic', 'atl', '-1', '0', '100']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], HeatContent(self.data_manager, '20010101', 0, 0, Basins.Atlantic, -1, self.box)) self.assertEqual(jobs[1], HeatContent(self.data_manager, '20010101', 0, 1, Basins.Atlantic, -1, self.box)) with self.assertRaises(Exception): - HeatContent.generate_jobs(self.diags, ['psi']) + HeatContent.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - HeatContent.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + HeatContent.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.heat_content), 'Heat content Startdate: 20000101 Member: 1 Chunk: 1 Mixed layer: 1 ' diff --git a/test/unit/test_maxmoc.py b/test/unit/test_maxmoc.py index 99c2fca6..35117a67 100644 --- a/test/unit/test_maxmoc.py +++ b/test/unit/test_maxmoc.py @@ -27,25 +27,25 @@ class TestMaxMoc(TestCase): self.diags.config.experiment.members = (0,) self.diags.config.experiment.get_full_years.return_value = (2000, 2001) - jobs = MaxMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0']) + jobs = MaxMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MaxMoc(self.data_manager, '20010101', 0, 2000, Basins.Global, self.box)) self.assertEqual(jobs[1], MaxMoc(self.data_manager, '20010101', 0, 2001, Basins.Global, self.box)) - jobs = MaxMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', 'atl']) + jobs = MaxMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', 'atl']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MaxMoc(self.data_manager, '20010101', 0, 2000, Basins.Atlantic, self.box)) self.assertEqual(jobs[1], MaxMoc(self.data_manager, '20010101', 0, 2001, Basins.Atlantic, self.box)) self.diags.config.experiment.get_full_years.return_value = list() - jobs = MaxMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0']) + jobs = MaxMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0']) self.assertEqual(len(jobs), 0) with self.assertRaises(Exception): - MaxMoc.generate_jobs(self.diags, ['psi']) + MaxMoc.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - MaxMoc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + MaxMoc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.maxmoc), 'Max moc Startdate: 20000101 Member: 1 Year: 2000 ' diff --git a/test/unit/test_mixedlayerheatcontent.py b/test/unit/test_mixedlayerheatcontent.py index bf7bff95..b7cf564b 100644 --- a/test/unit/test_mixedlayerheatcontent.py +++ b/test/unit/test_mixedlayerheatcontent.py @@ -17,13 +17,13 @@ class TestMixedLayerHeatContent(TestCase): self.mixed = MixedLayerHeatContent(self.data_manager, '20000101', 1, 1) def test_generate_jobs(self): - jobs = MixedLayerHeatContent.generate_jobs(self.diags, ['psi']) + jobs = MixedLayerHeatContent.generate_jobs(self.diags, ['diagnostic']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MixedLayerHeatContent(self.data_manager, '20010101', 0, 0)) self.assertEqual(jobs[1], MixedLayerHeatContent(self.data_manager, '20010101', 0, 1)) with self.assertRaises(Exception): - MixedLayerHeatContent.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + MixedLayerHeatContent.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Mixed layer heat content Startdate: 20000101 Member: 1 Chunk: 1') diff --git a/test/unit/test_mixedlayersaltcontent.py b/test/unit/test_mixedlayersaltcontent.py index 38074f0f..7aa42f66 100644 --- a/test/unit/test_mixedlayersaltcontent.py +++ b/test/unit/test_mixedlayersaltcontent.py @@ -17,13 +17,13 @@ class TestMixedLayerSaltContent(TestCase): self.mixed = MixedLayerSaltContent(self.data_manager, '20000101', 1, 1) def test_generate_jobs(self): - jobs = MixedLayerSaltContent.generate_jobs(self.diags, ['psi']) + jobs = MixedLayerSaltContent.generate_jobs(self.diags, ['diagnostic']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MixedLayerSaltContent(self.data_manager, '20010101', 0, 0)) self.assertEqual(jobs[1], MixedLayerSaltContent(self.data_manager, '20010101', 0, 1)) with self.assertRaises(Exception): - MixedLayerSaltContent.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + MixedLayerSaltContent.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Mixed layer salt content Startdate: 20000101 Member: 1 Chunk: 1') diff --git a/test/unit/test_moc.py b/test/unit/test_moc.py index 1a143035..0c05f8c4 100644 --- a/test/unit/test_moc.py +++ b/test/unit/test_moc.py @@ -17,13 +17,13 @@ class TestMoc(TestCase): self.mixed = Moc(self.data_manager, '20000101', 1, 1) def test_generate_jobs(self): - jobs = Moc.generate_jobs(self.diags, ['psi']) + jobs = Moc.generate_jobs(self.diags, ['diagnostic']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], Moc(self.data_manager, '20010101', 0, 0)) self.assertEqual(jobs[1], Moc(self.data_manager, '20010101', 0, 1)) with self.assertRaises(Exception): - Moc.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + Moc.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'MOC Startdate: 20000101 Member: 1 Chunk: 1') diff --git a/test/unit/test_monthlymean.py b/test/unit/test_monthlymean.py index 91e42a53..e2165f5d 100644 --- a/test/unit/test_monthlymean.py +++ b/test/unit/test_monthlymean.py @@ -26,21 +26,21 @@ class TestMonthlyMean(TestCase): def test_generate_jobs(self): - jobs = MonthlyMean.generate_jobs(self.diags, ['psi', 'var', 'ocean']) + jobs = MonthlyMean.generate_jobs(self.diags, ['diagnostic', 'var', 'ocean']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MonthlyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', Frequencies.daily, '')) self.assertEqual(jobs[1], MonthlyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', Frequencies.daily, '')) - jobs = MonthlyMean.generate_jobs(self.diags, ['psi', 'var', 'atmos', 'monthly']) + jobs = MonthlyMean.generate_jobs(self.diags, ['diagnostic', 'var', 'atmos', 'monthly']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MonthlyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var', Frequencies.monthly, '')) self.assertEqual(jobs[1], MonthlyMean(self.data_manager, '20010101', 0, 1, ModelingRealms.atmos, 'var', Frequencies.monthly, '')) - jobs = MonthlyMean.generate_jobs(self.diags, ['psi', 'var', 'seaice', 'mon', 'grid']) + jobs = MonthlyMean.generate_jobs(self.diags, ['diagnostic', 'var', 'seaice', 'mon', 'grid']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], MonthlyMean(self.data_manager, '20010101', 0, 0, ModelingRealms.seaIce, 'var', Frequencies.monthly, 'grid')) @@ -48,10 +48,10 @@ class TestMonthlyMean(TestCase): Frequencies.monthly, 'grid')) with self.assertRaises(Exception): - MonthlyMean.generate_jobs(self.diags, ['psi']) + MonthlyMean.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - MonthlyMean.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + MonthlyMean.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Calculate monthly mean Startdate: 20000101 Member: 1 Chunk: 1 ' diff --git a/test/unit/test_monthlypercentile.py b/test/unit/test_monthlypercentile.py new file mode 100644 index 00000000..4b9bbfb0 --- /dev/null +++ b/test/unit/test_monthlypercentile.py @@ -0,0 +1,41 @@ +# coding=utf-8 +from unittest import TestCase + +from earthdiagnostics.box import Box +from earthdiagnostics.statistics.monthlypercentile import MonthlyPercentile +from mock import Mock + +from earthdiagnostics.modelingrealm import ModelingRealms + + +class TestMonthlyPercentile(TestCase): + + def setUp(self): + self.data_manager = Mock() + self.diags = Mock() + + self.box = Box() + self.box.min_lat = 0 + self.box.max_lat = 0 + self.box.min_lon = 0 + self.box.max_lon = 0 + + self.diags.config.experiment.get_chunk_list.return_value = (('20010101', 0, 0), ('20010101', 0, 1)) + self.diagnostic = MonthlyPercentile(self.data_manager, '20000101', 1, 1, ModelingRealms.ocean, 'var', [10, 90]) + + def test_generate_jobs(self): + jobs = MonthlyPercentile.generate_jobs(self.diags, ['monpercent', 'var', 'ocean', '10-90']) + self.assertEqual(len(jobs), 2) + self.assertEqual(jobs[0], MonthlyPercentile(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', + [10, 90])) + self.assertEqual(jobs[1], MonthlyPercentile(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', + [10, 90])) + + with self.assertRaises(Exception): + MonthlyPercentile.generate_jobs(self.diags, ['monpercent']) + with self.assertRaises(Exception): + MonthlyPercentile.generate_jobs(self.diags, ['monpercent', '0', '0', '0', '0', '0', '0', '0']) + + def test_str(self): + self.assertEquals(str(self.diagnostic), 'Monthly percentile Startdate: 20000101 Member: 1 Chunk: 1 ' + 'Variable: ocean:var Percentiles: 10, 90') diff --git a/test/unit/test_psi.py b/test/unit/test_psi.py index 3099fa82..019e9339 100644 --- a/test/unit/test_psi.py +++ b/test/unit/test_psi.py @@ -13,13 +13,13 @@ class TestPsi(TestCase): self.psi = Psi(self.data_manager, '20000101', 1, 1) def test_generate_jobs(self): - jobs = Psi.generate_jobs(self.diags, ['psi']) + jobs = Psi.generate_jobs(self.diags, ['diagnostic']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], Psi(self.data_manager, '20010101', 0, 0)) self.assertEqual(jobs[1], Psi(self.data_manager, '20010101', 0, 1)) with self.assertRaises(Exception): - Psi.generate_jobs(self.diags, ['psi', 'badoption']) + Psi.generate_jobs(self.diags, ['diagnostic', 'badoption']) def test_str(self): self.assertEquals(str(self.psi), 'PSI Startdate: 20000101 Member: 1 Chunk: 1') diff --git a/test/unit/test_rewrite.py b/test/unit/test_rewrite.py index f125947f..25380fcd 100644 --- a/test/unit/test_rewrite.py +++ b/test/unit/test_rewrite.py @@ -25,21 +25,21 @@ class TestRewrite(TestCase): def test_generate_jobs(self): - jobs = Rewrite.generate_jobs(self.diags, ['psi', 'var', 'atmos']) + jobs = Rewrite.generate_jobs(self.diags, ['diagnostic', 'var', 'atmos']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], Rewrite(self.data_manager, '20010101', 0, 0, ModelingRealms.atmos, 'var', 'original')) self.assertEqual(jobs[1], Rewrite(self.data_manager, '20010101', 0, 1, ModelingRealms.atmos, 'var', 'original')) - jobs = Rewrite.generate_jobs(self.diags, ['psi', 'var', 'ocean', 'grid']) + jobs = Rewrite.generate_jobs(self.diags, ['diagnostic', 'var', 'ocean', 'grid']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], Rewrite(self.data_manager, '20010101', 0, 0, ModelingRealms.ocean, 'var', 'grid')) self.assertEqual(jobs[1], Rewrite(self.data_manager, '20010101', 0, 1, ModelingRealms.ocean, 'var', 'grid')) with self.assertRaises(Exception): - Rewrite.generate_jobs(self.diags, ['psi']) + Rewrite.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - Rewrite.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + Rewrite.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Rewrite output Startdate: 20000101 Member: 1 Chunk: 1 ' diff --git a/test/unit/test_variable_type.py b/test/unit/test_variable_type.py new file mode 100644 index 00000000..28dd44f5 --- /dev/null +++ b/test/unit/test_variable_type.py @@ -0,0 +1,20 @@ +# coding=utf-8 +from unittest import TestCase + +from earthdiagnostics.variable_type import VariableType + + +class TestVariableType(TestCase): + + def test_mean(self): + self.assertEqual(VariableType.to_str(VariableType.MEAN), 'mean') + + def test_statistics(self): + self.assertEqual(VariableType.to_str(VariableType.STATISTIC), 'statistics') + + def test_bad_one(self): + with self.assertRaises(ValueError): + VariableType.to_str('bad type') + + + diff --git a/test/unit/test_verticalmean.py b/test/unit/test_verticalmean.py index dc2d32ae..59d0fb50 100644 --- a/test/unit/test_verticalmean.py +++ b/test/unit/test_verticalmean.py @@ -22,28 +22,28 @@ class TestVerticalMean(TestCase): self.mixed = VerticalMean(self.data_manager, '20000101', 1, 1, 'var', self.box) def test_generate_jobs(self): - jobs = VerticalMean.generate_jobs(self.diags, ['psi', 'var', '0', '100']) + jobs = VerticalMean.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMean(self.data_manager, '20010101', 0, 0, 'var', self.box)) self.assertEqual(jobs[1], VerticalMean(self.data_manager, '20010101', 0, 1, 'var', self.box)) - jobs = VerticalMean.generate_jobs(self.diags, ['psi', 'var', '0']) + jobs = VerticalMean.generate_jobs(self.diags, ['diagnostic', 'var', '0']) box = Box() box.min_depth = 0 self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMean(self.data_manager, '20010101', 0, 0, 'var', box)) self.assertEqual(jobs[1], VerticalMean(self.data_manager, '20010101', 0, 1, 'var', box)) - jobs = VerticalMean.generate_jobs(self.diags, ['psi', 'var']) + jobs = VerticalMean.generate_jobs(self.diags, ['diagnostic', 'var']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMean(self.data_manager, '20010101', 0, 0, 'var', Box())) self.assertEqual(jobs[1], VerticalMean(self.data_manager, '20010101', 0, 1, 'var', Box())) with self.assertRaises(Exception): - VerticalMean.generate_jobs(self.diags, ['psi']) + VerticalMean.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - VerticalMean.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + VerticalMean.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Vertical mean Startdate: 20000101 Member: 1 Chunk: 1 Variable: var ' diff --git a/test/unit/test_verticalmeanmeters.py b/test/unit/test_verticalmeanmeters.py index 20599cd5..2a70f1ed 100644 --- a/test/unit/test_verticalmeanmeters.py +++ b/test/unit/test_verticalmeanmeters.py @@ -22,28 +22,28 @@ class TestVerticalMeanMeters(TestCase): self.mixed = VerticalMeanMeters(self.data_manager, '20000101', 1, 1, 'var', self.box) def test_generate_jobs(self): - jobs = VerticalMeanMeters.generate_jobs(self.diags, ['psi', 'var', '0', '100']) + jobs = VerticalMeanMeters.generate_jobs(self.diags, ['diagnostic', 'var', '0', '100']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMeanMeters(self.data_manager, '20010101', 0, 0, 'var', self.box)) self.assertEqual(jobs[1], VerticalMeanMeters(self.data_manager, '20010101', 0, 1, 'var', self.box)) - jobs = VerticalMeanMeters.generate_jobs(self.diags, ['psi', 'var', '0']) + jobs = VerticalMeanMeters.generate_jobs(self.diags, ['diagnostic', 'var', '0']) box = Box(True) box.min_depth = 0 self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMeanMeters(self.data_manager, '20010101', 0, 0, 'var', box)) self.assertEqual(jobs[1], VerticalMeanMeters(self.data_manager, '20010101', 0, 1, 'var', box)) - jobs = VerticalMeanMeters.generate_jobs(self.diags, ['psi', 'var']) + jobs = VerticalMeanMeters.generate_jobs(self.diags, ['diagnostic', 'var']) self.assertEqual(len(jobs), 2) self.assertEqual(jobs[0], VerticalMeanMeters(self.data_manager, '20010101', 0, 0, 'var', Box(True))) self.assertEqual(jobs[1], VerticalMeanMeters(self.data_manager, '20010101', 0, 1, 'var', Box(True))) with self.assertRaises(Exception): - VerticalMeanMeters.generate_jobs(self.diags, ['psi']) + VerticalMeanMeters.generate_jobs(self.diags, ['diagnostic']) with self.assertRaises(Exception): - VerticalMeanMeters.generate_jobs(self.diags, ['psi', '0', '0', '0', '0', '0', '0', '0']) + VerticalMeanMeters.generate_jobs(self.diags, ['diagnostic', '0', '0', '0', '0', '0', '0', '0']) def test_str(self): self.assertEquals(str(self.mixed), 'Vertical mean meters Startdate: 20000101 Member: 1 Chunk: 1 Variable: var ' -- GitLab From be8155155d1ef899e84e3b4c96e815c52ce31f7f Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Mon, 23 Jan 2017 10:31:18 +0100 Subject: [PATCH 10/14] Reduced data loss due to zip corruption --- earthdiagnostics/cmor_tables/default.csv | 73 +++++++++++---------- earthdiagnostics/cmorizer.py | 51 ++++++++------ earthdiagnostics/ocean/moc.py | 2 +- earthdiagnostics/variable_alias/default.csv | 5 +- earthdiagnostics/variable_alias/specs.csv | 2 +- test/unit/__init__.py | 1 + test/unit/test_earthdiags.py | 10 +++ test/unit/test_variable.py | 54 ++++++++------- 8 files changed, 108 insertions(+), 90 deletions(-) create mode 100644 test/unit/test_earthdiags.py diff --git a/earthdiagnostics/cmor_tables/default.csv b/earthdiagnostics/cmor_tables/default.csv index bf92abd7..86b613a7 100644 --- a/earthdiagnostics/cmor_tables/default.csv +++ b/earthdiagnostics/cmor_tables/default.csv @@ -295,44 +295,45 @@ rsdo,rsds,downwelling_shortwave_flux_in_sea_water,Downwelling Shortwave Radiatio wo,wo,sea_water_upward_velocity,Sea Water Upward Velocity ,ocean,,,,,, w2o,wosq,square_of_sea_water_upward_velocity,Square of Sea Water Upward Velocity ,ocean,,,,,, difvho,difvho,ocean_vertical_heat_diffusivity,Ocean Vertical Heat Diffusivity,ocean,,,,,, -vovematr,wmo,upward_ocean_mass_transport,Upward Ocean Mass Transport ,ocean,,,,,, +vovematr,wmo,upward_ocean_mass_transport,Upward Ocean Mass Transport,ocean,,,,,, qtr_ice,qtr,shortwave_flux_transmitted_through_ice,Shortwave Flux Transmitted Through The Ice,seaIce,,,,,, -poc,poc,small_organic_carbon_concentration,Small organic carbon Concentration ,ocnBgchem,,,,,, -nanophy,nanophy,nanopthyoplankton_concentration,(Nano)Phytoplankton Concentration ,ocnBgchem,,,,,, -dsi,dsi,diatoms_silicate_concentration,Diatoms Silicate Concentration ,ocnBgchem,,,,,, -goc,goc,big_organic_carbon_concentration,Big organic carbon Concentration ,ocnBgchem,,,,,, -sfe,sfe,small_iron_particles_concentration,Small iron particles Concentration ,ocnBgchem,,,,,, -nfe,nfe,nano_iron_concentration,Nano iron Concentration ,ocnBgchem,,,,,, -nchl,nchl,nano_chlorophyl_concentration,Nano chlorophyl Concentration ,ocnBgchem,,,,,, -pno3tot,pno3tot,global_mean_nitrate_concentration,Global mean nitrate concentration ,ocnBgchem,,,,,, -psiltot,psiltot,global_mean_silicate_concentration,Global mean silicate concentration ,ocnBgchem,,,,,, -palktot,palktot,global_mean_alkalinity_concentration,Global mean alkalinity concentration ,ocnBgchem,,,,,, -pfertot,pfertot,global_mean_iron_concentration,Global mean iron concentration ,ocnBgchem,,,,,, -tcflx,tcflx,total_flux_carbon_out_of_the_ocean,total Flux of Carbon out of the ocean ,ocnBgchem,,,,,, -tcflxcum,tcflxcum,cumulative_total_flux_of_carbon_out_of_the_ocean,cumulative total Flux of Carbon out of the ocean ,ocnBgchem,,,,,, -c-export,c-export,total_carbon_export_at_100m,total Carbon export at 100m ,ocnBgchem,,,,,, -tintpp,tintpp,global_total_integrated_primary_production,global total integrated primary production ,ocnBgchem,,,,,, -tnfix,tnfix,global_total_nitrogen_fixation,global total nitrogen fixation ,ocnBgchem,,,,,, -tdenit,tdenit,total_denitrification,Total denitrification ,ocnBgchem,,,,,, -intppnew,intppnew,new_primary_production_of_phyto,New Primary production of phyto ,ocnBgchem,,,,,, -intppphy,intppphy,vertically_integrated_primary_production_by_nanophy,Vertically integrated primary production by nanophy ,ocnBgchem,,,,,, +poc,poc,small_organic_carbon_concentration,Small organic carbon Concentration,ocnBgchem,,,,,, +nanophy,nanophy,nanopthyoplankton_concentration,(Nano)Phytoplankton Concentration,ocnBgchem,,,,,, +dsi,dsi,diatoms_silicate_concentration,Diatoms Silicate Concentration,ocnBgchem,,,,,, +goc,goc,big_organic_carbon_concentration,Big organic carbon Concentration,ocnBgchem,,,,,, +sfe,sfe,small_iron_particles_concentration,Small iron particles Concentration,ocnBgchem,,,,,, +nfe,nfe,nano_iron_concentration,Nano iron Concentration,ocnBgchem,,,,,, +nchl,nchl,nano_chlorophyl_concentration,Nano chlorophyl Concentration,ocnBgchem,,,,,, +pno3tot,pno3tot,global_mean_nitrate_concentration,Global mean nitrate concentration,ocnBgchem,,,,,, +psiltot,psiltot,global_mean_silicate_concentration,Global mean silicate concentration,ocnBgchem,,,,,, +palktot,palktot,global_mean_alkalinity_concentration,Global mean alkalinity concentration,ocnBgchem,,,,,, +pfertot,pfertot,global_mean_iron_concentration,Global mean iron concentration,ocnBgchem,,,,,, +tcflx,tcflx,total_flux_carbon_out_of_the_ocean,total Flux of Carbon out of the ocean,ocnBgchem,,,,,, +tcflxcum,tcflxcum,cumulative_total_flux_of_carbon_out_of_the_ocean,cumulative total Flux of Carbon out of the ocean,ocnBgchem,,,,,, +c-export,c-export,total_carbon_export_at_100m,total Carbon export at 100m,ocnBgchem,,,,,, +tintpp,tintpp,global_total_integrated_primary_production,global total integrated primary production,ocnBgchem,,,,,, +tnfix,tnfix,global_total_nitrogen_fixation,global total nitrogen fixation,ocnBgchem,,,,,, +tdenit,tdenit,total_denitrification,Total denitrification,ocnBgchem,,,,,, +inttpp,inttpp,total_primary_production_of_phyto,Total Primary production of phyto,ocnBgchem,,,,,, +inttppnew,inttppnew,new_primary_production_of_phyto,New Primary production of phyto,ocnBgchem,,,,,, +intppphy,intppphy,vertically_integrated_primary_production_by_nanophy,Vertically integrated primary production by nanophy,ocnBgchem,,,,,, ppphy,ppphy,primary_production_of_nanooplakton,Primary production of nanooplakton,ocnBgchem,,,,,, intpbcal,intpbcal,vertically_integrated_of_calcite_productdic_fluxion,Vertically integrated of calcite productDIC fluxion,ocnBgchem,,,,,, cflx,cflx,dic_flux,DIC flux,ocnBgchem,,,,,, -remin,remin,oxic_remineralization_of_om,Oxic remineralization of OM ,ocnBgchem,,,,,, -denit,denit,anoxic_remineralization_of_om,Anoxic remineralization of OM ,ocnBgchem,,,,,, +remin,remin,oxic_remineralization_of_om,Oxic remineralization of OM,ocnBgchem,,,,,, +denit,denit,anoxic_remineralization_of_om,Anoxic remineralization of OM,ocnBgchem,,,,,, nfix,nfix,nitrogen_fixation,Nitrogen fixation ,ocnBgchem,,,,,, -sdenit,sdenit,nitrate_reduction_in_the_sediments,Nitrate reduction in the sediments ,ocnBgchem,,,,,, -par,par,photosynthetically_available_radiation,photosynthetically Available Radiation ,ocnBgchem,,,,,, -lnnut,lnnut,nutrient_limitation_term_in_nanophyto,Nutrient limitation term in Nanophyto ,ocnBgchem,,,,,, -ldnut,ldnut,nutrient_limitation_term_in_diatoms,Nutrient limitation term in Diatoms ,ocnBgchem,,,,,, -lnfe,lnfe,iron_limitation_term_in_nanophyoto,Iron limitation term in Nanophyoto ,ocnBgchem,,,,,, -lnlight,lnlight,light_limitation_term_in_nanophyto,Light limitation term in Nanophyto ,ocnBgchem,,,,,, -ldlight,ldlight,light_limitation_term_in_diatoms,Light limitation term in Diatoms ,ocnBgchem,,,,,, -graz1,graz1,grazing_by_microzooplankton,Grazing by microzooplankton ,ocnBgchem,,,,,, -graz2,graz2,grazing_by_mesozooplankto_,Grazing by mesozooplankton ,ocnBgchem,,,,,, -mumax,mumax,maximum_growth_rate,Maximum growth rate ,ocnBgchem,,,,,, -mun,mun,realized_growth_rate_for_nanophyto,Realized growth rate for nanophyto ,ocnBgchem,,,,,, -mud,mud,realized_growth_rate_for_diatomes,Realized growth rate for diatomes ,ocnBgchem,,,,,, -ppnewn,ppnewn,new_primary_production_of_nanophyto,New Primary production of nanophyto ,ocnBgchem,,,,,, -ppnewd,ppnewd,new_primary_production_of_diatoms,New Primary production of diatoms ,ocnBgchem,,,,,, +sdenit,sdenit,nitrate_reduction_in_the_sediments,Nitrate reduction in the sediments,ocnBgchem,,,,,, +par,par,photosynthetically_available_radiation,photosynthetically Available Radiation,ocnBgchem,,,,,, +lnnut,lnnut,nutrient_limitation_term_in_nanophyto,Nutrient limitation term in Nanophyto,ocnBgchem,,,,,, +ldnut,ldnut,nutrient_limitation_term_in_diatoms,Nutrient limitation term in Diatoms,ocnBgchem,,,,,, +lnfe,lnfe,iron_limitation_term_in_nanophyoto,Iron limitation term in Nanophyoto,ocnBgchem,,,,,, +lnlight,lnlight,light_limitation_term_in_nanophyto,Light limitation term in Nanophyto,ocnBgchem,,,,,, +ldlight,ldlight,light_limitation_term_in_diatoms,Light limitation term in Diatoms,ocnBgchem,,,,,, +graz1,graz1,grazing_by_microzooplankton,Grazing by microzooplankton,ocnBgchem,,,,,, +graz2,graz2,grazing_by_mesozooplankto_,Grazing by mesozooplankton,ocnBgchem,,,,,, +mumax,mumax,maximum_growth_rate,Maximum growth rate,ocnBgchem,,,,,, +mun,mun,realized_growth_rate_for_nanophyto,Realized growth rate for nanophyto,ocnBgchem,,,,,, +mud,mud,realized_growth_rate_for_diatomes,Realized growth rate for diatomes,ocnBgchem,,,,,, +ppnewn,ppnewn,new_primary_production_of_nanophyto,New Primary production of nanophyto,ocnBgchem,,,,,, +ppnewd,ppnewd,new_primary_production_of_diatoms,New Primary production of diatoms,ocnBgchem,,,,,, diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index 3769caf1..4dd08c97 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -124,8 +124,11 @@ class Cmorizer(object): os.makedirs(self.cmor_scratch) Utils.untar((tarfile,), self.cmor_scratch) zip_files = glob.glob(os.path.join(self.cmor_scratch, '*.gz')) - zip_files = self._filter_files(zip_files) - Utils.unzip(zip_files) + for zip_file in self._filter_files(zip_files): + try: + Utils.unzip(zip_file) + except Utils.UnzipException as ex: + Log.error('File {0} could not be unzipped: {1}', tarfile, ex) def _clean_cmor_scratch(self): if os.path.exists(self.cmor_scratch): @@ -223,26 +226,9 @@ class Cmorizer(object): Utils.copy_file(original_gribfile, gribfile) self._obtain_atmos_timestep(gribfile) + full_file = self._get_monthly_grib(current_date, gribfile, grid) + self._unpack_grib(full_file, gribfile, grid) - prev_gribfile = self.get_scratch_grib_path(add_months(current_date, -1, self.experiment.calendar), grid) - if os.path.exists(prev_gribfile): - self._merge_grib_files(current_date, prev_gribfile, gribfile) - full_file = 'ICM' - else: - full_file = gribfile - - Log.info('Unpacking... ') - # remap on regular Gauss grid - if grid == 'SH': - Utils.cdo.splitparam(input='-sp2gpl {0}'.format(full_file), output=gribfile + '_', - options='-f nc4') - else: - Utils.cdo.splitparam(input=full_file, output=gribfile + '_', options='-R -f nc4') - # total precipitation (remove negative values) - Utils.cdo.setcode(228, input='-setmisstoc,0 -setvrange,0,Inf -add ' - '{0}_{{142,143}}.128.nc'.format(gribfile), - output='{0}_228.128.nc'.format(gribfile)) - Utils.remove_file('ICM') next_gribfile = self.get_original_grib_path(add_months(current_date, 1, self.experiment.calendar), grid) if not os.path.exists(next_gribfile): @@ -264,6 +250,29 @@ class Cmorizer(object): self._merge_and_cmorize_atmos(chunk_start, chunk_end, grid, '{0}hr'.format(self.atmos_timestep)) + def _unpack_grib(self, full_file, gribfile, grid): + Log.info('Unpacking... ') + # remap on regular Gauss grid + if grid == 'SH': + Utils.cdo.splitparam(input='-sp2gpl {0}'.format(full_file), output=gribfile + '_', + options='-f nc4') + else: + Utils.cdo.splitparam(input=full_file, output=gribfile + '_', options='-R -f nc4') + # total precipitation (remove negative values) + Utils.cdo.setcode(228, input='-setmisstoc,0 -setvrange,0,Inf -add ' + '{0}_{{142,143}}.128.nc'.format(gribfile), + output='{0}_228.128.nc'.format(gribfile)) + Utils.remove_file('ICM') + + def _get_monthly_grib(self, current_date, gribfile, grid): + prev_gribfile = self.get_scratch_grib_path(add_months(current_date, -1, self.experiment.calendar), grid) + if os.path.exists(prev_gribfile): + self._merge_grib_files(current_date, prev_gribfile, gribfile) + full_file = 'ICM' + else: + full_file = gribfile + return full_file + def get_scratch_grib_path(self, current_date, grid): return os.path.join(self.config.scratch_dir, self._get_grib_filename(grid, current_date)) diff --git a/earthdiagnostics/ocean/moc.py b/earthdiagnostics/ocean/moc.py index ee070c19..edf5711f 100644 --- a/earthdiagnostics/ocean/moc.py +++ b/earthdiagnostics/ocean/moc.py @@ -91,7 +91,7 @@ class Moc(Diagnostic): ('time', 'lev', 'i', 'j', 'basin'), fill_value=example._FillValue) - moc.units = example.units + moc.units = Utils.convert_to_ASCII_if_possible(example.units) moc.add_offset = example.add_offset moc.scale_factor = example.scale_factor diff --git a/earthdiagnostics/variable_alias/default.csv b/earthdiagnostics/variable_alias/default.csv index 8e1179d7..fd7d03d8 100644 --- a/earthdiagnostics/variable_alias/default.csv +++ b/earthdiagnostics/variable_alias/default.csv @@ -325,8 +325,8 @@ c-export,c-export,, tintpp,tintpp,, tnfix,tnfix,, tdenit,tdenit,, -intpp,intpp,, -intppnew,intppnew,, +inttpp,inttpp,, +inttppnew,inttppnew,, inttpbfe,pbfe,, intdic,intdic,, o2min,o2min,, @@ -337,7 +337,6 @@ intppphy2,intppdiat,, ppphy ,ppphy ,, ppphy2 ,pdi,, intpp,intpp,, -intppnew,intppnew,, intpbfe,intpbfe,, intpbsi,intpbsi,, intpbcal,intpbcal,, diff --git a/earthdiagnostics/variable_alias/specs.csv b/earthdiagnostics/variable_alias/specs.csv index 4b068759..993ebfa5 100644 --- a/earthdiagnostics/variable_alias/specs.csv +++ b/earthdiagnostics/variable_alias/specs.csv @@ -1,3 +1,3 @@ Aliases,Shortname,Basin,Grid -iiceconc:siconc:soicecov,sic,, +iiceconc:siconc:soicecov:ileadfra,sic,, ci,sic,,ifs \ No newline at end of file diff --git a/test/unit/__init__.py b/test/unit/__init__.py index fd268596..caa99542 100644 --- a/test/unit/__init__.py +++ b/test/unit/__init__.py @@ -29,3 +29,4 @@ from test_rewrite import TestRewrite from test_variable_type import TestVariableType from test_monthlypercentile import TestMonthlyPercentile from test_climatologicalpercentile import TestClimatologicalPercentile +from test_variable import TestCMORTable, TestVariableAlias diff --git a/test/unit/test_earthdiags.py b/test/unit/test_earthdiags.py new file mode 100644 index 00000000..155c37f9 --- /dev/null +++ b/test/unit/test_earthdiags.py @@ -0,0 +1,10 @@ +# coding=utf-8 +from unittest import TestCase + +from earthdiagnostics.earthdiags import EarthDiags + + +class TestEarthDiags(TestCase): + pass + + diff --git a/test/unit/test_variable.py b/test/unit/test_variable.py index 7f3e0b84..07199ab8 100644 --- a/test/unit/test_variable.py +++ b/test/unit/test_variable.py @@ -1,29 +1,27 @@ # coding=utf-8 -# from unittest import TestCase -# -# from earthdiagnostics.variable import Variable -# from earthdiagnostics.modelingrealm import ModelingRealms - - -# class TestVariable(TestCase): -# -# def test__init__(self): -# variable = Variable('alias:alias2,name,standard_name,long_name,ocean,basin,units,' -# 'valid_min,valid_max,grid'.split(',')) -# self.assertEqual(variable.short_name, 'name') -# self.assertEqual(variable.standard_name, 'standard_name') -# self.assertEqual(variable.long_name, 'long_name') -# self.assertEqual(variable.domain, Domains.ocean) -# self.assertEqual(variable.basin, None) -# self.assertEqual(variable.units, 'units') -# self.assertEqual(variable.valid_min, 'valid_min') -# self.assertEqual(variable.valid_max, 'valid_max') -# self.assertEqual(variable.grid, 'grid') -# -# def test_get_variable(self): -# Variable._dict_variables = dict() -# variable = Variable('alias:alias2,name,standard_name,long_name,atmos,basin,units,valid_min,' -# 'valid_max,grid'.split(',')) -# Variable._dict_variables['var'] = variable -# self.assertIs(Variable.get_variable('var'), variable) -# self.assertIsNone(Variable.get_variable('novar')) + +from mock import Mock +from unittest import TestCase +from earthdiagnostics.variable import CMORTable, VariableAlias + + +class TestCMORTable(TestCase): + + def setUp(self): + self.frequency = Mock() + + def test_str(self): + self.assertEquals(str(CMORTable('name', 'm', 'Month YEAR')), 'name') + + +class TestVariableAlias(TestCase): + + def test_str(self): + alias = VariableAlias('alias') + self.assertEquals(str(alias), 'alias') + alias.basin = 'basin' + self.assertEquals(str(alias), 'alias Basin: basin') + alias.grid = 'grid' + self.assertEquals(str(alias), 'alias Basin: basin Grid: grid') + + -- GitLab From cb9f933ce25bde306c86cc9703809a89906d872a Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Mon, 23 Jan 2017 11:28:15 +0100 Subject: [PATCH 11/14] Improved cmorization to allow specification of chunks --- earthdiagnostics/cmorizer.py | 6 +++++- earthdiagnostics/cmormanager.py | 16 ++++++++++------ earthdiagnostics/config.py | 6 ++++++ earthdiagnostics/utils.py | 4 +++- 4 files changed, 24 insertions(+), 8 deletions(-) diff --git a/earthdiagnostics/cmorizer.py b/earthdiagnostics/cmorizer.py index 4dd08c97..dad63185 100644 --- a/earthdiagnostics/cmorizer.py +++ b/earthdiagnostics/cmorizer.py @@ -609,7 +609,11 @@ class Cmorizer(object): return len(gribfiles) > 0 def cmorization_required(self, chunk, domain): - return self.config.cmor.force or not self.data_manager.is_cmorized(self.startdate, self.member, chunk, domain) + if not self.config.cmor.chunk_cmorization_requested(chunk): + return False + if self.config.cmor.force: + return True + return not self.data_manager.is_cmorized(self.startdate, self.member, chunk, domain) class CMORException(Exception): diff --git a/earthdiagnostics/cmormanager.py b/earthdiagnostics/cmormanager.py index d7c60bba..2c6bc9d9 100644 --- a/earthdiagnostics/cmormanager.py +++ b/earthdiagnostics/cmormanager.py @@ -412,18 +412,22 @@ class CMORManager(DataManager): filepaths = self._get_transferred_cmor_data_filepaths(startdate, member, chunk, 'tar.gz') if len(filepaths) > 0: - Log.info('Unzipping cmorized data for {0} {1} {2}...', startdate, member, chunk) - Utils.unzip(filepaths, True) + if self.config.cmor.chunk_cmorization_requested(chunk): + Log.info('Unzipping cmorized data for {0} {1} {2}...', startdate, member, chunk) + Utils.unzip(filepaths, True) + else: + return True if not os.path.exists(self.cmor_path): os.mkdir(self.cmor_path) filepaths = self._get_transferred_cmor_data_filepaths(startdate, member, chunk, 'tar') if len(filepaths) > 0: - Log.info('Unpacking cmorized data for {0} {1} {2}...', startdate, member, chunk) - Utils.untar(filepaths, self.cmor_path) - self._correct_paths(startdate) - self.create_links(startdate) + if self.config.cmor.chunk_cmorization_requested(chunk): + Log.info('Unpacking cmorized data for {0} {1} {2}...', startdate, member, chunk) + Utils.untar(filepaths, self.cmor_path) + self._correct_paths(startdate) + self.create_links(startdate) return True return False diff --git a/earthdiagnostics/config.py b/earthdiagnostics/config.py index 66f01f97..db28a892 100644 --- a/earthdiagnostics/config.py +++ b/earthdiagnostics/config.py @@ -96,6 +96,7 @@ class CMORConfig(object): self.ocean = parser.get_bool_option('CMOR', 'OCEAN_FILES', True) self.atmosphere = parser.get_bool_option('CMOR', 'ATMOSPHERE_FILES', True) self.use_grib = parser.get_bool_option('CMOR', 'USE_GRIB', True) + self._chunks = [int(chunk) for chunk in parser.get_list_option('CMOR', 'CHUNKS')] self.associated_experiment = parser.get_option('CMOR', 'ASSOCIATED_EXPERIMENT', 'to be filled') self.associated_model = parser.get_option('CMOR', 'ASSOCIATED_MODEL', 'to be filled') self.initialization_description = parser.get_option('CMOR', 'INITIALIZATION_DESCRIPTION', 'to be filled') @@ -139,6 +140,11 @@ class CMORConfig(object): return False + def chunk_cmorization_requested(self, chunk): + if len(self._chunks) == 0: + return True + return chunk in self._chunks + @staticmethod def _parse_variables(raw_string): variables = dict() diff --git a/earthdiagnostics/utils.py b/earthdiagnostics/utils.py index 7b19d1d5..308ec030 100644 --- a/earthdiagnostics/utils.py +++ b/earthdiagnostics/utils.py @@ -581,10 +581,12 @@ class Utils(object): """ Unzip a list of files :param files: files to unzip - :type files: list + :type files: list | str :param force: if True, it will overwrite unzipped files :type force: bool """ + if isinstance(files, basestring): + files = [files] for filepath in files: Log.debug('Unzipping {0}', filepath) if force: -- GitLab From 4cca56fd7c8a4164b1ddcd153e602738f9cc2e9d Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Mon, 23 Jan 2017 11:28:46 +0100 Subject: [PATCH 12/14] Moved PISCES alias to CMIP6 alias table --- earthdiagnostics/cmor_tables/default.csv | 2 +- earthdiagnostics/variable_alias/cmip6.csv | 70 +++++++++++++++++++++ earthdiagnostics/variable_alias/default.csv | 70 --------------------- 3 files changed, 71 insertions(+), 71 deletions(-) diff --git a/earthdiagnostics/cmor_tables/default.csv b/earthdiagnostics/cmor_tables/default.csv index 86b613a7..99a9be7b 100644 --- a/earthdiagnostics/cmor_tables/default.csv +++ b/earthdiagnostics/cmor_tables/default.csv @@ -322,7 +322,7 @@ intpbcal,intpbcal,vertically_integrated_of_calcite_productdic_fluxion,Vertically cflx,cflx,dic_flux,DIC flux,ocnBgchem,,,,,, remin,remin,oxic_remineralization_of_om,Oxic remineralization of OM,ocnBgchem,,,,,, denit,denit,anoxic_remineralization_of_om,Anoxic remineralization of OM,ocnBgchem,,,,,, -nfix,nfix,nitrogen_fixation,Nitrogen fixation ,ocnBgchem,,,,,, +nfix,nfix,nitrogen_fixation,Nitrogen fixation,ocnBgchem,,,,,, sdenit,sdenit,nitrate_reduction_in_the_sediments,Nitrate reduction in the sediments,ocnBgchem,,,,,, par,par,photosynthetically_available_radiation,photosynthetically Available Radiation,ocnBgchem,,,,,, lnnut,lnnut,nutrient_limitation_term_in_nanophyto,Nutrient limitation term in Nanophyto,ocnBgchem,,,,,, diff --git a/earthdiagnostics/variable_alias/cmip6.csv b/earthdiagnostics/variable_alias/cmip6.csv index 6aee91f5..e996633e 100644 --- a/earthdiagnostics/variable_alias/cmip6.csv +++ b/earthdiagnostics/variable_alias/cmip6.csv @@ -1,3 +1,73 @@ Aliases,Shortname,Basin,Grid iiceconc:soicecov:ileadfra,siconc,, ci,siconc,,ifs +alk,talk,, +oxygen,o2,, +calcite,calc,, +po4,po4,, +poc,poc,, +silicate,si,, +nanophy,nanophy,, +microzoo,zmicro,, +doc,dissoc,, +diaphy,phydiat,, +mesozoo,zmeso,, +dsi,dsi,, +dissfe,dfe,, +bfe,bfe,, +goc,goc,, +sfe,sfe,, +dfe,dfe,, +micrzoo,zmicro,, +nfe,nfe,, +nchl,nchl,, +dchl,chldiat,, +nitrate,no3,, +ammonium,nh4,, +pno3tot,pno3tot,, +psiltot,psiltot,, +palktot,palktot,, +pfertot,pfertot,, +tcflx,tcflx,, +tcflxcum,tcflxcum,, +c-export,c-export,, +tintpp,tintpp,, +tnfix,tnfix,, +tdenit,tdenit,, +inttpp,inttpp,, +inttppnew,inttppnew,, +inttpbfe,pbfe,, +intdic,intdic,, +o2min,o2min,, +zo2min,zo2min,, +intnfix,intpn2,, +intppphy,intppphy,, +intppphy2,intppdiat,, +ppphy ,ppphy ,, +ppphy2 ,pdi,, +intpp,intpp,, +intpbfe,intpbfe,, +intpbsi,intpbsi,, +intpbcal,intpbcal,, +cflx,cflx,, +remin,remin,, +denit,denit,, +nfix,nfix,, +sdenit,sdenit,, +dpco2,dpco2,, +epc100,epc100,, +expc,expc,, +par,par,, +lnnut,lnnut,, +ldnut,ldnut,, +lnfe,lnfe,, +ldfe,limfediat,, +lnlight,lnlight,, +ldlight,ldlight,, +graz1,graz1,, +graz2,graz2,, +mumax,mumax,, +mun,mun,, +mud,mud,, +ppnewn,ppnewn,, +ppnewd,ppnewd,, diff --git a/earthdiagnostics/variable_alias/default.csv b/earthdiagnostics/variable_alias/default.csv index fd7d03d8..24683fe3 100644 --- a/earthdiagnostics/variable_alias/default.csv +++ b/earthdiagnostics/variable_alias/default.csv @@ -292,73 +292,3 @@ w2o,wosq,, difvho,difvho,, vovematr,wmo,, qtr_ice,qtr,, -alk,talk,, -oxygen,o2,, -calcite,calc,, -po4,po4,, -poc,poc,, -silicate,si,, -nanophy,nanophy,, -microzoo,zmicro,, -doc,dissoc,, -diaphy,phydiat,, -mesozoo,zmeso,, -dsi,dsi,, -dissfe,dfe,, -bfe,bfe,, -goc,goc,, -sfe,sfe,, -dfe,dfe,, -micrzoo,zmicro,, -nfe,nfe,, -nchl,nchl,, -dchl,chldiat,, -nitrate,no3,, -ammonium,nh4,, -pno3tot,pno3tot,, -psiltot,psiltot,, -palktot,palktot,, -pfertot,pfertot,, -tcflx,tcflx,, -tcflxcum,tcflxcum,, -c-export,c-export,, -tintpp,tintpp,, -tnfix,tnfix,, -tdenit,tdenit,, -inttpp,inttpp,, -inttppnew,inttppnew,, -inttpbfe,pbfe,, -intdic,intdic,, -o2min,o2min,, -zo2min,zo2min,, -intnfix,intpn2,, -intppphy,intppphy,, -intppphy2,intppdiat,, -ppphy ,ppphy ,, -ppphy2 ,pdi,, -intpp,intpp,, -intpbfe,intpbfe,, -intpbsi,intpbsi,, -intpbcal,intpbcal,, -cflx,cflx,, -remin,remin,, -denit,denit,, -nfix,nfix,, -sdenit,sdenit,, -dpco2,dpco2,, -epc100,epc100,, -expc,expc,, -par,par,, -lnnut,lnnut,, -ldnut,ldnut,, -lnfe,lnfe,, -ldfe,limfediat,, -lnlight,lnlight,, -ldlight,ldlight,, -graz1,graz1,, -graz2,graz2,, -mumax,mumax,, -mun,mun,, -mud,mud,, -ppnewn,ppnewn,, -ppnewd,ppnewd,, -- GitLab From f354522ee3127e73d4045c4cd0ff42fc85ce6a01 Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Mon, 23 Jan 2017 11:36:29 +0100 Subject: [PATCH 13/14] Added last variable from PISCES. Fixes #15 --- earthdiagnostics/cmor_tables/default.csv | 1 + 1 file changed, 1 insertion(+) diff --git a/earthdiagnostics/cmor_tables/default.csv b/earthdiagnostics/cmor_tables/default.csv index 99a9be7b..26c06435 100644 --- a/earthdiagnostics/cmor_tables/default.csv +++ b/earthdiagnostics/cmor_tables/default.csv @@ -337,3 +337,4 @@ mun,mun,realized_growth_rate_for_nanophyto,Realized growth rate for nanophyto,oc mud,mud,realized_growth_rate_for_diatomes,Realized growth rate for diatomes,ocnBgchem,,,,,, ppnewn,ppnewn,new_primary_production_of_nanophyto,New Primary production of nanophyto,ocnBgchem,,,,,, ppnewd,ppnewd,new_primary_production_of_diatoms,New Primary production of diatoms,ocnBgchem,,,,,, +dic,dic,disolved_inorganic_carbon,Disolved Inorganic Carbon,ocnBgchem,,,,,, -- GitLab From 2002cb8b74c7063fca492def28e72c97f888a50d Mon Sep 17 00:00:00 2001 From: Javier Vegas-Regidor Date: Mon, 23 Jan 2017 11:37:33 +0100 Subject: [PATCH 14/14] Bumped version and updated doc --- VERSION | 2 +- doc/source/conf.py | 2 +- earthdiagnostics/EarthDiagnostics.pdf | Bin 266287 -> 265741 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/VERSION b/VERSION index 88a9ea52..50a63251 100644 --- a/VERSION +++ b/VERSION @@ -1,2 +1,2 @@ -3.0.0b32 +3.0.0b33 diff --git a/doc/source/conf.py b/doc/source/conf.py index 3af007a7..26fbbb19 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -64,7 +64,7 @@ copyright = u'2016, BSC-CNS Earth Sciences Department' # The short X.Y version. version = '3.0b' # The full version, including alpha/beta/rc tags. -release = '3.0.0b32' +release = '3.0.0b33' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. diff --git a/earthdiagnostics/EarthDiagnostics.pdf b/earthdiagnostics/EarthDiagnostics.pdf index 370a218159927804c6e9ee2d95c5a6ec24eb0693..eee3b4ab80665f05e2af6d8636d4271228dac4ca 100644 GIT binary patch delta 112120 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