pro tdeflag_remove_nan, dat = dat, display_object = display_object
if (~is_struct(dat)) then begin
dprint, 'Input is not a structure. Nothing to do.', display_object = display_object
return
endif
y = dat.y
t0 = dat.x
nrows = n_elements(t0)
if (n_elements(y[*, 0]) ne nrows) Then Begin
dprint, 'Number of rows does not agree between time and y array(s)', display_object = display_object
Return
Endif
ndims = size(y, /dimensions)
ncols = 0 & nlayers = 0
if (n_elements(ndims) ge 2) then ncols = ndims[1]
if (n_elements(ndims) eq 3) then nlayers = ndims[2]
if (ncols eq 0) then nycols = 1 else nycols = ncols
if (nlayers eq 0) then nylayers = 1 else nylayers = nlayers
nycolayers = nycols*nylayers
y = reform(y, nrows, nycolayers)
finite_elements = make_array(nrows, /integer, value = 1)
for j = 0, nycolayers-1 do begin
finite_elements[where(finite(y[*, j]) Eq 0)] = 0
end
t0 = t0[where(finite_elements eq 1)]
new_nrows = n_elements(t0)
if new_nrows le 0 then begin
dat = 0
dprint, 'NaN values were removed. Empty array returned.', display_object = display_object
endif else begin
y0 = make_array(new_nrows, nycolayers)
for j = 0, nycolayers-1 do begin
y0[*, j] = y[where(finite_elements eq 1), j]
endfor
str_element, dat, 'x', t0, /ADD_REPLACE
str_element, dat, 'y', y0, /ADD_REPLACE
dprint, 'A total of ' + STRTRIM(string(nrows - new_nrows), 2) + ' NaN values were removed.', display_object = display_object
endelse
end
Pro tdeflag, varnames, method, newname = newname, display_object = display_object, $
overwrite = overwrite, _extra = _extra
n = n_elements(varnames)
if (keyword_set(newname)) Then begin
if (keyword_set(overwrite)) Then begin
dprint, 'Do not set both the newname and overwrite keywords', display_object = display_object
return
Endif
if (n_elements(newname) Ne n) Then Begin
dprint, 'Incompatible varnames, newname input', display_object = display_object
Return
Endif
nvn = newname
Endif Else nvn = varnames+'_deflag'
For j = 0, n-1 Do Begin
get_data, varnames[j], data = d, dlim = dlim, lim = lim
if (is_struct(d)) Then Begin
if STRCMP(method, 'remove_nan', /FOLD_CASE) then begin
tdeflag_remove_nan, dat=d, display_object = display_object
endif else begin
y = d.y
xdeflag, method, d.x, y, display_object = display_object, _extra = _extra
d.y = temporary(y)
endelse
if (keyword_set(overwrite)) Then new_name = varnames[j] $
Else new_name = nvn[j]
store_data, new_name, data = d, dlim = dlim, lim = lim
Endif Else Begin
dprint,'No Deflagging of: '+varnames[j], display_object = display_object
Endelse
Endfor
newname = nvn
Return
End