pro cdf_vatt_put_tplot_to_cdf,id,var,atts,prefix=prefix
if not keyword_set(prefix) then prefix=''
if size(/type,atts) ne 8 then return
tags = tag_names(atts)
ntags = n_elements(tags)
for i=0,ntags-1 do begin
if size(/type,atts.(i)) eq 8 then $
cdf_vatt_put_tplot_to_cdf,id,var,atts.(i),prefix=tags[i]+'.' $
else begin
if cdf_attexists(id,prefix+tags[i]) eq 0 then $
result = cdf_attcreate(id,prefix+tags[i],/variable)
cdf_attput,id,prefix+tags[i],var,atts.(i)
endelse
endfor
end
pro cdf_varcreate_put_tplot_to_cdf,id,name,data,vtype=vtype,shift=shft,rec_novary=rec_novary
nd = size(/n_dimen,data)
if nd eq 0 then return
dim = size(/dimen,data)
if keyword_set(shft) and nd ge 2 and not keyword_set(rec_novary) then begin
sv = shift(indgen(nd),-shft)
cdf_varcreate_put_tplot_to_cdf,id,name,transpose(data,sv),vtype=vtype,rec_novary=rec_novary
return
endif
vartypes = 'CDF_'+strsplit('Null UCHAR INT2 INT4 FLOAT DOUBLE',' ',/extract)
if not keyword_set(vtype) then vtype = vartypes[size(/type,data)]
vstruct = create_struct(vtype,1)
nrecs = dim[nd-1]
dim2 = dim[0:nd-1]
if keyword_set(rec_novary) then $
zid = cdf_varcreate(id,name,dim2,dim=dim2,_extra=vstruct,/zvar,/rec_novary) $
else begin
if nd ge 2 then begin
dim2 = dim[0:nd-2]
zid = cdf_varcreate(id,name,dim2,dim=dim2,_extra=vstruct,/zvar,alloc=nrecs,rec_novary=rec_novary)
endif else begin
zid = cdf_varcreate(id,name,_extra=vstruct,/zvar,alloc=nrecs,rec_novary=rec_novary)
endelse
endelse
cdf_varput,id,name,data
end
pro tplot_to_cdf,vars,filename=filename, trange=trange, resolution=res, $
overwrite=overwrite,verbose=verbose,days=day
if not keyword_set(filename) then begin
message, "keyword 'filename' must be set"
return
endif
fname=filename
if keyword_set(overwrite) then begin
on_ioerror, create
id = cdf_open(fname)
cdf_delete,id
create:
on_ioerror,null
endif
if keyword_set(resolution) then print,'resolution=',res
names=tnames(vars,/all)
ntags = n_elements(names)
if ntags eq 0 then begin
message,/info,'No data!'
return
endif
if not keyword_set(noclobber) and file_test(fname) then file_delete,fname
id = cdf_create(fname, /single, /clobber)
att0 = {depend_0: 'Epoch'}
printdat,names
for n=0,ntags-1 do begin
name = names[n]
if keyword_set(verbose) then print,name
att = 0
get_data,name,time,data,values,dlim=dlim
if not keyword_set(time) or not keyword_set(data) then begin
message,/info,"No data found for: '"+name+"'"
continue
endif
cdf = struct_value(dlim,'cdf')
val_vary = size(/n_dimen,data) eq size(/n_dimen,values)
if not keyword_set(cdf) then begin
cdfname = name
atts ={depend_0:'Epoch'}
if keyword_set(values) then str_element,/add,atts,'depend_1',cdfname+'_v'
cdf = {name:cdfname,atts:atts}
endif
print,name,val_vary,att
if keyword_set(day) and not keyword_set(trange) then $
trange=(round(average(time,/nan)/86400d -day/2.)+[0,day])*86400d
ndata=time_average(time,data,newtime=ntime,trange=trange,resolu=res)
if val_vary then $
nvalues= time_average(time,values,trange=trange,resolu=res) $
else nvalues=values
if not keyword_set(time0) then begin
time0=ntime
cdf_varcreate_put_tplot_to_cdf,id,'unix_time',time0
epoch0 = 719528.d * 24.* 3600. * 1000.
epoch = time0 * 1000. + epoch0
cdf_varcreate_put_tplot_to_cdf,id,cdf.atts.depend_0,epoch,vtype='CDF_EPOCH'
endif else begin
if array_equal(time0,ntime,/no_type) eq 0 then begin
message,/info,name+": size does not match"
goto,cont
endif
endelse
cdf_varcreate_put_tplot_to_cdf,id,cdf.name,ndata,/shift
cdf_vatt_put_tplot_to_cdf,id,name,cdf.atts
if keyword_set(nvalues) then begin
cdf_varcreate_put_tplot_to_cdf,id,cdf.atts.depend_1,nvalues,/shift,rec_novary=val_vary eq 0
endif
cont:
endfor
cdf_close,id
print,'file ',fname,'.cdf created'
end