Skip to content

Commit 70e4cc1

Browse files
committed
Add csv file output
1 parent 0446b29 commit 70e4cc1

9 files changed

Lines changed: 57 additions & 10 deletions

File tree

dr2xml/Xwrite.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -409,7 +409,7 @@ def is_singleton(sdim):
409409

410410

411411
def write_xios_file_def(filename, svars_per_table, year, dummies, skipped_vars_per_table, actually_written_vars,
412-
context, enddate=None, attributes=[]):
412+
csv_file_content, context, enddate=None, attributes=[]):
413413
"""
414414
Write XIOS file_def.
415415
"""
@@ -470,6 +470,7 @@ def write_xios_file_def(filename, svars_per_table, year, dummies, skipped_vars_p
470470
write_xios_file_def_for_svars_list(hgrid=hgrid, xml_file_definition=xml_file_definition, dummies=dummies,
471471
skipped_vars_per_table=skipped_vars_per_table,
472472
actually_written_vars=actually_written_vars,
473+
csv_file_content=csv_file_content,
473474
attributes=attributes, **file_dict)
474475
grid_defs = get_config_variable("grid_defs")
475476
# Add cfsites if needed
@@ -544,7 +545,7 @@ def write_xios_file_def_for_svars_list(vars_list, hgrid, xml_file_definition, fr
544545
split_start_offset, split_end_offset, split_last_date, grid_description,
545546
grid_label, grid_resolution, table, skipped_vars_per_table, dummies,
546547
target_hgrid_id, zgrid_id, source_grid, region, cell_measures, cell_methods,
547-
actually_written_vars, attributes=list(), debug=list()):
548+
actually_written_vars, csv_file_content, attributes=list(), debug=list()):
548549
logger = get_logger()
549550
internal_dict = get_settings_values("internal")
550551
context = internal_dict["context"]
@@ -589,6 +590,8 @@ def write_xios_file_def_for_svars_list(vars_list, hgrid, xml_file_definition, fr
589590
xml_file.append(end_field)
590591
actually_written_vars.append((svar.ref_var, svar.long_name, svar.stdname, " ".join(svar.modeling_realm),
591592
svar.mipTable, svar.region, svar.frequency, svar.Priority, svar.spatial_shp))
593+
csv_file_content.append(("-".join(svar.modeling_realm), svar.official_label, svar.home, svar.frequency,
594+
svar.label, svar.region, svar.Priority))
592595
# Add content to xml_file to out
593596
if found_begin_A:
594597
# create a field_def entry for surface pressure

dr2xml/__init__.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -699,6 +699,7 @@ def generate_file_defs(year, enddate, context, pingfiles=None, dummies='include'
699699
# --------------------------------------------------------------------
700700
skipped_vars_per_table = OrderedDict()
701701
actually_written_vars = list()
702+
csv_file_content = list()
702703
svars_per_table = select_variables_to_be_processed()
703704
#
704705
# --------------------------------------------------------------------
@@ -724,7 +725,7 @@ def generate_file_defs(year, enddate, context, pingfiles=None, dummies='include'
724725
os.chdir(dirname)
725726
filename = dirname + "dr2xml_%s.xml" % context
726727
write_xios_file_def(filename, svars_per_table, year, dummies, skipped_vars_per_table, actually_written_vars,
727-
context, enddate, attributes)
728+
csv_file_content, context, enddate, attributes)
728729
logger.info("\nfile_def written as %s" % filename)
729730

730731
#
@@ -734,7 +735,8 @@ def generate_file_defs(year, enddate, context, pingfiles=None, dummies='include'
734735
# mpmoine_petitplus:generate_file_defs: pour sortir des stats sur ce que l'on sort reelement
735736
# SS - non : gros plus
736737
print_some_stats(context, svars_per_table, skipped_vars_per_table,
737-
actually_written_vars, internal_settings["print_stats_per_var_label"])
738+
actually_written_vars, csv_file_content, extended=internal_settings["print_stats_per_var_label"],
739+
csv_file=internal_settings["create_csv_file"])
738740

739741
warn = OrderedDict()
740742
for warning, label, table in get_config_variable("cell_method_warnings", to_change=True):

dr2xml/dr_interface/definition.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,7 +201,7 @@ def __init__(self, type=False, modeling_realm=list(), grids=[""], label=None, mi
201201
cell_methods=None, cell_measures=None, spatial_shp=None, temporal_shp=None, experiment=None,
202202
Priority=1, mip_era=False, prec="float", missing=1.e+20, cmvar=None, ref_var=None, mip=None,
203203
sdims=dict(), comments=None, coordinates=None, cm=False, id=None, flag_meanings=None, flag_values=None,
204-
region=None, official_label=None, extravar=None, extra_name=None, **kwargs):
204+
region=None, official_label=None, extravar=None, extra_name=None, home=False, **kwargs):
205205
self.type = type
206206
self.modeling_realm = modeling_realm
207207
self.set_modeling_realms = set()
@@ -246,6 +246,7 @@ def __init__(self, type=False, modeling_realm=list(), grids=[""], label=None, mi
246246
self.region = region
247247
self.official_label = official_label
248248
self.extra_name = extra_name
249+
self.home = home
249250
super(SimpleCMORVar, self).__init__(**kwargs)
250251

251252
def set_attributes(self, **kwargs):

dr2xml/infos.py

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,16 @@
66
"""
77
from __future__ import print_function, division, absolute_import, unicode_literals
88

9+
import csv
910
from collections import OrderedDict, defaultdict
1011

1112
from utilities.logger import get_logger
1213

1314

1415
# mpmoine_petitplus: nouvelle fonction print_some_stats (plus d'info sur les skipped_vars, nbre de vars / (shape,freq) )
1516
# SS - non : gros plus
16-
def print_some_stats(context, svars_per_table, skipped_vars_per_table, actually_written_vars, extended=False):
17+
def print_some_stats(context, svars_per_table, skipped_vars_per_table, actually_written_vars, csv_file_content,
18+
extended=False, csv_file=False):
1719
"""
1820
1921
:param context:
@@ -116,5 +118,31 @@ def print_some_stats(context, svars_per_table, skipped_vars_per_table, actually_
116118
logger.warning(14 * " " + "Warning: several standard names are available:")
117119
for stdname in sn:
118120
logger.warning(18 * " " + "- %s" % stdname)
121+
if csv_file:
122+
table_titles = ["Modeling realms", "Variable", "Home Data Request", "Frequency", "Temporal structure",
123+
"Vertical structure", "Horizontal Structure", "Mask", "Region", "Physical parameter",
124+
"Priority"]
125+
csv_content = list()
126+
for (realms, official_label, home, frequency, label, region, Priority) in csv_file_content:
127+
official_label = official_label.split("_")
128+
(tmp_struct, vert_struct, horz_struct, mask) = official_label[1].split("-")
129+
csv_content.append({
130+
"Modeling realms": realms,
131+
"Variable": official_label[0],
132+
"Home Data Request": home,
133+
"Frequency": frequency,
134+
"Temporal structure": tmp_struct,
135+
"Vertical structure": vert_struct,
136+
"Horizontal Structure": horz_struct,
137+
"Mask": mask,
138+
"Region": region,
139+
"Physical parameter": label,
140+
"Priority": Priority})
141+
with open(csv_file % context, "w", newline="") as csv_fic:
142+
writer = csv.DictWriter(csv_fic, fieldnames=table_titles)
143+
writer.writeheader()
144+
writer.writerows(csv_content)
145+
146+
logger.info("\n\nSome Statistics in csv file will be available in %s..." % csv_file)
119147

120148
return True

dr2xml/projects/dr2xml.json

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -322,6 +322,17 @@
322322
}
323323
]
324324
},
325+
"create_csv_file": {
326+
"help": "Pattern containing context if a csv file should be produced, else False.",
327+
"values": [
328+
{
329+
"type": "value",
330+
"origin": "laboratory",
331+
"keys": ["create_csv_file"]
332+
},
333+
false
334+
]
335+
},
325336
"debug_parsing": {
326337
"help": "In order to identify which xml files generates a problem, you can use this flag.",
327338
"values": [

dr2xml/vars_interface/cmor.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
def read_home_var_cmor(line_split, mips, expid):
2525
home_var = read_home_var(line_split, home_attrs)
26-
home_var.set_attributes(label_with_area=home_var.label)
26+
home_var.set_attributes(label_with_area=home_var.label, home=True)
2727
home_var = fill_homevar(home_var)
2828
if check_homevar(home_var, mips, expid):
2929
return home_var

dr2xml/vars_interface/dev.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@ def read_home_var_dev(line_split, mips, expid):
2929
else:
3030
cell_methods = tcmName2tcmValue[home_var.temporal_shp]
3131
home_var.set_attributes(label_with_area=home_var.label, mip_era="DEV", mipVarLabel=home_var.label,
32-
cell_methods=cell_methods, label_without_psuffix=home_var.label, cell_measures="")
32+
cell_methods=cell_methods, label_without_psuffix=home_var.label, cell_measures="",
33+
home=True)
3334
home_var = fill_homevar(home_var)
3435
if check_homevar(home_var, mips, expid):
3536
return home_var

dr2xml/vars_interface/extra.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ def read_home_var_extra(line_split, expid, mips, path_extra_tables=None, extra_v
5252
if var_found.official_label is None:
5353
var_found.set_attributes(official_label="_".join([var_found.label, var_found.mipTable]))
5454
var_found = [var_found, ]
55+
5556
if home_var.mip in ["ANY", ] or home_var.mip in mips:
5657
if get_settings_values("internal", "select_on_expt") and home_var.experiment not in ["ANY", ]:
5758
if expid in home_var.experiment:
@@ -173,7 +174,7 @@ def read_extra_table(path, table):
173174
label_without_psuffix=remove_p_suffix(extra_var, multi_plev_suffixes | add_multi_plevs_suffixes,
174175
single_plev_suffixes | add_single_plevs_suffixes,
175176
realms=["atmos", "aerosol", "atmosChem"]))
176-
extra_var.set_attributes(ref_var=extra_var.label_without_psuffix)
177+
extra_var.set_attributes(ref_var=extra_var.label_without_psuffix, home=True)
177178
extravars.append(extra_var)
178179
logger.info("For extra table %s (which has %d variables):" % (table, len(extravars)))
179180
logger.info("\tVariables which dim was found in extra coordinates table:\n%s" %

dr2xml/vars_interface/perso.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def read_home_var_perso(line_split, mips, expid):
2020
home_var = read_home_var(line_split, home_attrs)
2121
home_var.set_attributes(label_with_area=home_var.label, mip_era="PERSO", label_without_psuffix=home_var.label,
2222
cell_measures="",
23-
cell_methods=tcmName2tcmValue[home_var.temporal_shp])
23+
cell_methods=tcmName2tcmValue[home_var.temporal_shp], home=True)
2424
home_var = fill_homevar(home_var)
2525
if check_homevar(home_var, mips, expid):
2626
return home_var

0 commit comments

Comments
 (0)