;--------------------------- ; Read Macro field Data ;--------------------------- FUNCTION macro_read, file_name, var_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex @common @com_eg IF debug_w THEN print, ' ENTER macro_read...' IF debug_w THEN print, ' keyword_set(ALL_DATA) : ', keyword_set(ALL_DATA) ; ; 1) read macro definition of field ; @get_macro_def print, ' Computing macro : ', macro_def ; 2) loop to decode definition and build field CASE macro_def[1] OF '=:': BEGIN ; 2.1 call specific function ; if stat extract base field CASE macro_def[2] OF 'make_stddev': macro_base_fld = extract_str(line, '\', '/') 'make_grad' : macro_base_fld = extract_str(line, '\', '/') 'make_ratio' : macro_base_fld = extract_str(line, '\', '/') 'make_interp' : macro_base_fld = extract_str(line, '\', '/') 'make_skewness': macro_base_fld = extract_str(line, '\', '/') ELSE: ENDCASE strcall = 'field_lec = '+macro_def[2]+'(file_name, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data, _extra = ex)' res = execute(strcall) fieldo = {name: '', data: field_lec.data, legend: '', units: '', origin: '', dim: 0, direc:''} fieldo.name = var_name fieldo.legend = legend+field_lec.legend fieldo.units = unit fieldo.origin = field_lec.origin fieldo.dim = field_lec.dim fieldo.direc = field_lec.direc ;;;;; causes problems for @@vosigthi because field_lec.direc is not defined in make_depth END ELSE: BEGIN ; 2.2 add fields mult = 1. first = 1 FOR index = 2, nfields-1 DO BEGIN command = macro_def[index] IF command EQ '-' THEN BEGIN mult = -1. ENDIF ELSE IF command EQ '+' THEN BEGIN mult = 1. ENDIF ELSE BEGIN command2 = macro_def[(index+1) <(nfields-1) ] ; print, 'command 2 = '+command2 IF command2 EQ '*' THEN BEGIN mult = mult*float(command) index = index + 2 command = macro_def[index] ENDIF ; read field field_lec = nc_read(file_name, command, ncdf_db, TIME_1 = time_1, TIME_2 = time_2, ALL_DATA = all_data) IF first EQ 1 THEN BEGIN first = 0 fieldo = {name: '', data: field_lec.data*mult, legend: '', units: '', origin: '', dim: 0, direc:''} fieldo.name = var_name fieldo.legend = legend fieldo.units = unit fieldo.origin = field_lec.origin+' macro' fieldo.dim = field_lec.dim fieldo.direc = field_lec.direc ENDIF ELSE BEGIN ; check units IF field_lec.units NE fieldo.units OR field_lec.dim NE fieldo.dim THEN BEGIN print, ' *** WARNING in macro : units/dim mismatch : ',field_lec.units,' vs. ', fieldo.units,' and ', field_lec.dim,' vs. ', fieldo.dim ENDIF ; add field fieldo.data = fieldo.data + field_lec.data*mult ENDELSE ENDELSE ENDFOR END ENDCASE IF debug_w THEN print, ' ...EXIT macro_read' return, fieldo END