11
11
from aqua .util import load_yaml , get_arg , create_folder
12
12
from aqua .logger import log_configure
13
13
14
+ reasonable_vert_coords = ['depth_full' , 'depth_half' , 'level' ]
15
+
14
16
15
17
def parse_arguments (args ):
16
18
"""
17
19
Parse command line arguments
18
20
"""
19
21
20
- parser = argparse .ArgumentParser (description = 'AQUA gribber ' )
22
+ parser = argparse .ArgumentParser (description = 'AQUA grids from data ' )
21
23
parser .add_argument ('-c' , '--config' , type = str , required = True ,
22
24
help = 'yaml file with exp information and directories' )
23
25
parser .add_argument ('-l' , '--loglevel' , type = str ,
24
26
help = 'log level [default: WARNING]' )
27
+ parser .add_argument ('-z' , '--zoom' , type = str ,
28
+ help = 'override zoom: convenient for loop on many zoom levels' )
25
29
26
30
return parser .parse_args (args )
27
31
@@ -42,28 +46,44 @@ def parse_arguments(args):
42
46
source = config ['source' ]
43
47
var = config ['var' ]
44
48
resolution = config .get ('resolution' )
49
+ extra = config .get ('extra' )
45
50
logger .info ('Retrieving %s from %s %s %s' , var , model , exp , source )
46
51
47
52
# Configuration needed to save the file
48
53
tmp = config ['tmp' ]
49
54
model_name = config ['model_name' ]
50
- zoom = config ['zoom' ]
55
+ zoom = int (get_arg (args , 'zoom' , config .get ('zoom' ))) #HACK for zoom
56
+ catalog = config .get ('catalog' )
51
57
nested = config ['nested' ]
52
58
59
+ # adding zoom if found
60
+ mykwargs = {}
61
+ if zoom :
62
+ mykwargs = {** mykwargs , ** {'zoom' : zoom }}
63
+ if catalog :
64
+ mykwargs = {** mykwargs , ** {'catalog' : catalog }}
65
+
66
+
53
67
# Create Reader object
54
68
reader = Reader (model = model , exp = exp , source = source ,
55
- areas = False , fix = False , loglevel = loglevel )
69
+ areas = False , fix = False , loglevel = loglevel , ** mykwargs )
56
70
data = reader .retrieve (var = var )
57
71
72
+ # detect vertical coordinate from a set of plausible values
73
+ vert_coord = list (set (reasonable_vert_coords ) & set (data .coords ))
74
+
58
75
#automatic detection of 3d
59
- if data [ 'level' ] is not None :
76
+ if vert_coord :
60
77
model3d = True
78
+ if len (vert_coord )> 1 :
79
+ raise KeyError ("Too many vertical coordinates identified, check the data manually" )
80
+ vert_coord = vert_coord [0 ]
61
81
else :
62
82
model3d = False
63
83
64
84
if model3d :
65
85
logger .debug ("Modifying level axis attributes as Z" )
66
- data ['level' ].attrs ['axis' ] = 'Z'
86
+ data [vert_coord ].attrs ['axis' ] = 'Z'
67
87
68
88
# Save data in a netcdf file on the temporary directory
69
89
create_folder (tmp )
@@ -78,28 +98,38 @@ def parse_arguments(args):
78
98
79
99
# cdo command setup:
80
100
nside = 2 ** zoom
101
+
102
+ # Setting grid name
81
103
if nested :
82
- grid_name = 'hp' + str ( nside ) + ' _nested'
104
+ grid_name = f 'hp{ nside } _nested'
83
105
else : # ring
84
- grid_name = 'hp' + str ( nside ) + ' _ring'
106
+ grid_name = f 'hp{ nside } _ring'
85
107
86
- # setting output filename
108
+ # Setting output filename
87
109
tgt = config ['tgt' ]
88
110
create_folder (tgt )
89
- filename_tgt = tgt + '/' + model_name
111
+ filename_tgt = os .path .join (tgt , model_name )
112
+
113
+ # add info on original data resolution if available
90
114
if resolution :
91
- filename_tgt = filename_tgt + "-" + resolution
115
+ filename_tgt = f" { filename_tgt } - { resolution } "
92
116
93
- filename_tgt = filename_tgt + '_hpz' + str (zoom )
117
+ # add info on hpz zoom
118
+ filename_tgt = f"{ filename_tgt } _hpz{ zoom } "
119
+
120
+ # options for nested and ringed
94
121
if nested :
95
- filename_tgt = filename_tgt + ' _nested_oce'
122
+ filename_tgt = f" { filename_tgt } _nested_oce"
96
123
else :
97
- filename_tgt = filename_tgt + ' _ring_oce'
124
+ filename_tgt = f" { filename_tgt } _ring_oce"
98
125
99
126
if model3d :
100
- filename_tgt = filename_tgt + '_level.nc'
101
- else :
102
- filename_tgt = filename_tgt + '.nc'
127
+ filename_tgt = f"{ filename_tgt } _{ vert_coord } "
128
+
129
+ if extra :
130
+ filename_tgt = f"{ filename_tgt } _{ extra } "
131
+
132
+ filename_tgt = f'{ filename_tgt } .nc'
103
133
104
134
logger .info ('Setting grid %s' , grid_name )
105
135
logger .info ('Saving data in %s' , filename_tgt )
0 commit comments