pro tsmooth2, name_, width, esteps=esteps, newname=newname, preserve_nans=preserve_nans,edge_truncate=edge_truncate, display_object=display_object
if n_elements(width) eq 0 then begin
message,/info, 'Smoothing width defaulting to 10.'
width=10
endif
names = tnames(name_,cnt)
for n=0,cnt-1 do begin
name = names[n]
if cnt gt 1 then newname = name+'_sm'
get_data,name,data=data,alim=alim
if size(data, /type) ne 8 then dprint,'Bad data.'
w = width
d = dimen2(data.y)
if d ne dimen1(w) then w = replicate(width[0],d)
ntimes = n_elements(data.x)
if(ntimes Lt width) then begin
dprint, dlevel=1, 'WARNING: Fewer data points than smoothing width for: '+tnames(name), display_object=display_object
endif else begin
dt = data.x[1:*]-data.x
dt_test = width*median(dt)
big_gap = where(dt gt dt_test, nbig_gap)
if(nbig_gap Gt 0) then begin
nbstr = strcompress(string(nbig_gap), /remove_all)
dprint, dlevel=1, display_object=display_object, 'WARNING: Variable: '+tnames(name)+' has '+$
nbstr+' data gaps larger than the smoothing width*median dt'
endif
endelse
for i = 0,d-1 do begin
if w[i] gt 2 then begin
nan_data=where(finite(data.y[*,i],/nan),nancount)
nonnan_data=where(~finite(data.y[*,i],/nan),nonnan_count)
if nonnan_count gt 0 then begin
temp_ind=where(data.y[nonnan_data,i] gt 1.9e20,count)
if count gt 0 then begin
bad_data=nonnan_data[temp_ind]
data.y[bad_data,i]=( data.y[bad_data-1,i] + data.y[bad_data+1,i] ) /2.0
endif
data.y[*,i] = smooth(data.y[*,i],w[i],/nan,edge_truncate=edge_truncate)
if count gt 0 then $
data.y[bad_data,i]=2.0e20
if keyword_set(preserve_nans) then begin
if nancount gt 0 then data.y[nan_data,i]=!values.f_nan
endif
endif
endif
endfor
printdat,out=outs,width,'width',/val
str_element,/add,alim,'comment',outs[0]
if not keyword_set(newname) then newname = name+'_sm'
store_data,newname,data=data,dlim=alim
endfor
return
end