1 | ;--------------------------- |
---|
2 | ; Read Macro field Data |
---|
3 | ;--------------------------- |
---|
4 | FUNCTION macro_read, file_name, var_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex |
---|
5 | @common |
---|
6 | @com_eg |
---|
7 | |
---|
8 | IF debug_w THEN print, ' ENTER macro_read...' |
---|
9 | |
---|
10 | IF debug_w THEN print, ' keyword_set(ALL_DATA) : ', keyword_set(ALL_DATA) |
---|
11 | ; |
---|
12 | ; 1) read macro definition of field |
---|
13 | ; |
---|
14 | @get_macro_def |
---|
15 | |
---|
16 | print, ' Computing macro : ', macro_def |
---|
17 | |
---|
18 | ; 2) loop to decode definition and build field |
---|
19 | |
---|
20 | CASE macro_def[1] OF |
---|
21 | '=:': BEGIN |
---|
22 | |
---|
23 | ; 2.1 call specific function |
---|
24 | |
---|
25 | ; if stat extract base field |
---|
26 | |
---|
27 | CASE macro_def[2] OF |
---|
28 | 'make_stddev': macro_base_fld = extract_str(line, '\', '/') |
---|
29 | 'make_grad' : macro_base_fld = extract_str(line, '\', '/') |
---|
30 | 'make_ratio' : macro_base_fld = extract_str(line, '\', '/') |
---|
31 | 'make_interp' : macro_base_fld = extract_str(line, '\', '/') |
---|
32 | 'make_skewness': macro_base_fld = extract_str(line, '\', '/') |
---|
33 | ELSE: |
---|
34 | ENDCASE |
---|
35 | strcall = 'field_lec = '+macro_def[2]+'(file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex)' |
---|
36 | res = execute(strcall) |
---|
37 | fieldo = {name: '', data: field_lec.data, legend: '', units: '', origin: '', dim: 0, direc:''} |
---|
38 | fieldo.name = var_name |
---|
39 | fieldo.legend = legend+field_lec.legend |
---|
40 | fieldo.units = unit |
---|
41 | fieldo.origin = field_lec.origin |
---|
42 | fieldo.dim = field_lec.dim |
---|
43 | fieldo.direc = field_lec.direc ;;;;; causes problems for @@vosigthi because field_lec.direc is not defined in make_depth |
---|
44 | |
---|
45 | END |
---|
46 | ELSE: BEGIN |
---|
47 | |
---|
48 | ; 2.2 add fields |
---|
49 | |
---|
50 | mult = 1. |
---|
51 | first = 1 |
---|
52 | FOR index = 2, nfields-1 DO BEGIN |
---|
53 | |
---|
54 | command = macro_def[index] |
---|
55 | |
---|
56 | IF command EQ '-' THEN BEGIN |
---|
57 | mult = -1. |
---|
58 | ENDIF ELSE IF command EQ '+' THEN BEGIN |
---|
59 | mult = 1. |
---|
60 | ENDIF ELSE BEGIN |
---|
61 | command2 = macro_def[(index+1) <(nfields-1) ] |
---|
62 | ; print, 'command 2 = '+command2 |
---|
63 | IF command2 EQ '*' THEN BEGIN |
---|
64 | mult = mult*float(command) |
---|
65 | index = index + 2 |
---|
66 | command = macro_def[index] |
---|
67 | ENDIF |
---|
68 | ; read field |
---|
69 | field_lec = nc_read(file_name, command, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data) |
---|
70 | IF first EQ 1 THEN BEGIN |
---|
71 | first = 0 |
---|
72 | fieldo = {name: '', data: field_lec.data*mult, legend: '', units: '', origin: '', dim: 0, direc:''} |
---|
73 | fieldo.name = var_name |
---|
74 | fieldo.legend = legend |
---|
75 | fieldo.units = unit |
---|
76 | fieldo.origin = field_lec.origin+' macro' |
---|
77 | fieldo.dim = field_lec.dim |
---|
78 | fieldo.direc = field_lec.direc |
---|
79 | ENDIF ELSE BEGIN |
---|
80 | ; check units |
---|
81 | IF field_lec.units NE fieldo.units OR field_lec.dim NE fieldo.dim THEN BEGIN |
---|
82 | print, ' *** WARNING in macro : units/dim mismatch : ',field_lec.units,' vs. ', fieldo.units,' and ', field_lec.dim,' vs. ', fieldo.dim |
---|
83 | ENDIF |
---|
84 | ; add field |
---|
85 | fieldo.data = fieldo.data + field_lec.data*mult |
---|
86 | ENDELSE |
---|
87 | ENDELSE |
---|
88 | |
---|
89 | ENDFOR |
---|
90 | |
---|
91 | END |
---|
92 | ENDCASE |
---|
93 | |
---|
94 | |
---|
95 | IF debug_w THEN print, ' ...EXIT macro_read' |
---|
96 | |
---|
97 | |
---|
98 | return, fieldo |
---|
99 | END |
---|