source: trunk/procs/macro_read.pro @ 13

Last change on this file since 13 was 8, checked in by kolasinski, 17 years ago

Simplify macro_read.pro with get_macro_def - Add def_macro_base_fld.pro and get_macro_def.pro on the server - Bugfix for def_grid.pro also

File size: 3.6 KB
Line 
1;--------------------------- 
2; Read Macro field Data
3;--------------------------- 
4FUNCTION 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
99END
Note: See TracBrowser for help on using the repository browser.