File name and path of MARIS nuclide lookup table containing variable names
tpl_fname
str
File name and path of NetCDF4 file to be generated
enum_dicts
Dict
MARIS NetCDF enumeration types
verbose
bool
False
Exported source
class NCTemplater:"MARIS NetCDF template generator."def__init__(self, cdl:Dict, # "Pseudo CDL" (`.toml`) nuclide_vars_fname:str, # File name and path of MARIS nuclide lookup table containing variable names tpl_fname:str, # File name and path of NetCDF4 file to be generated enum_dicts:Dict, # MARIS NetCDF enumeration types verbose=False ): fc.store_attr()self.dim = cdl['dim']self.enum_types = {}
For example, provided the configuration cdl.toml below, the templater gets access, among others, to its dim definiton section:
Return the name of the radionuclide variables analysed.
Type
Default
Details
col_varnames
str
nc_name
Column name in the Excel lookup file containing the NetCDF variable names
col_stdnames
str
nusymbol
Column name Excel lookup file containing the NetCDF standard names
dtype
str
f4
Default data type
Returns
list
List of nuclide variables (including their names and attributes)
Exported source
@patchdef nuclide_vars(self:NCTemplater, col_varnames:str='nc_name', # Column name in the Excel lookup file containing the NetCDF variable names col_stdnames:str='nusymbol', # Column name Excel lookup file containing the NetCDF standard names dtype:str='f4', # Default data type ) ->list[dict]: # List of nuclide variables (including their names and attributes)"Return the name of the radionuclide variables analysed." df = pd.read_excel(self.nuclide_vars_fname, index_col=0) df = df[(df.nuclide !='NOT AVAILABLE') & (df.nuclide !='NOT APPLICABLE')]# df = df[df.nuclide.isin(['NOT AVAILABLE', 'NOT APPLICABLE'])]return [ {'name': n,'dtype': dtype,'attrs': {'long_name': f"{nuclide.capitalize()}{massnb}",'standard_name': sn, } }for n, nuclide, massnb, sn inzip( df[col_varnames], df['nuclide'].str.capitalize(), df['massnb'].astype(int), df[col_stdnames], ) ]
For example, to retrieve the NetCDF nuclide names and associated attributes:
Derive NetCDF nuclide-dependent variable names & attributes as defined in CDL.
Type
Details
nuclide
dict
Nuclide variable name and associated netcdf attributes
suffix
dict
Naming rules as described in CDL (e.g _unc)
Returns
dict
Derived variable name and associated attributes
Exported source
@patchdef derive(self:NCTemplater, nuclide:dict, # Nuclide variable name and associated netcdf attributes suffix:dict, # Naming rules as described in CDL (e.g `_unc`)) ->dict: # Derived variable name and associated attributes"Derive NetCDF nuclide-dependent variable names & attributes as defined in CDL."return {# 'name': nuclide['name'] + '_' + suffix['name'],'name': nuclide['name'] + suffix['name'],'dtype': suffix['dtype'], # Using dtype from suffix'attrs': {key: nuclide['attrs'][key] + suffix['attrs'][key] for key in nuclide['attrs']} }
For example, among others, the cdl.toml file defines the naming convention on variable names deriving from nuclides (e.g h3_unc for measurement uncertainty on the h3 nuclide variable).
# Example of suffix defined in the .cdl filesuffix = {'name': '_unc','attrs': {'long_name': ' uncertainty','standard_name': '_uncertainty' },'dtype': 'f4' }# And what we expectexpected = {'name': 'h3_unc','attrs': {'long_name': 'Tritium 3 uncertainty','standard_name': '3H_uncertainty' },'dtype': 'f4' }fc.test_eq(templater.derive(templater.nuclide_vars()[0], suffix=suffix), expected)
@patchdef create_group_specific_variables(self:NCTemplater, grp:netCDF4.Group, # NetCDF group ):"Create group specific variables"vars=self.cdl['vars']for var invars.get(name2grp(grp.name, self.cdl), {}).values(): self.create_variable(grp, var)
Create analyte variables and dependent one as uncertainty, detection limit, …
Type
Details
grp
Group
NetCDF group
Exported source
@patchdef create_analyte_variables(self:NCTemplater, grp:netCDF4.Group, # NetCDF group ):"Create analyte variables and dependent one as uncertainty, detection limit, ..."for var inself.nuclide_vars():self.create_variable(grp, var)for v inself.cdl['vars']['suffixes'].values(): self.create_variable(grp, self.derive(var, v))
Creating area_t enumeration type
Creating bio_group_t enumeration type
Creating body_part_t enumeration type
Creating species_t enumeration type
Creating sed_type_t enumeration type
Creating unit_t enumeration type
Creating dl_t enumeration type
Creating filt_t enumeration type
Creating counmet_t enumeration type
Creating sampmet_t enumeration type
Creating prepmet_t enumeration type