pro get_3dt,funct,get_dat,ERANGE=er,BINS=bins,NAME=name,SILENT=silent,$
INDEX=index,TIMES=time,_extra=e
if n_params() lt 2 then begin
return
endif
get_raw = 'get_'+get_dat
times = call_function(get_raw,/times,_extra=e)
ntimes = n_elements(times)
if ntimes lt 1 then begin
dprint, 'No data loaded'
return
endif
if keyword_set(index) then ind = index
if keyword_set(time) then begin
nt = n_elements(time)
if nt ne 1 and nt ne 2 then begin
dprint,'Keyword TIME must have (zero,) one or two elements.'
return
endif
tim = time_double(time)
ind = nn(times,tim)
if nt eq 1 then ind = [ind,ntimes-1]
endif
maxi = long(ntimes-1)
CASE n_elements(ind) OF
2: ind = 0>ind<maxi
1: ind = [0>ind<maxi,maxi]
0: ind = [0 ,maxi]
else: begin
dprint,'Keyword TIME must have (zero,) one or two elements.'
return
end
endcase
i = ind(0)
raw = {valid:0}
while raw.valid eq 0 and i lt ind(1) do begin
raw = call_function(get_raw,ind=i,_extra=e)
i = i+1
endwhile
ind(0) = i
if not keyword_set(er) then er=[0,-1]
if (not keyword_set(bins) and raw.valid eq 1) then begin
bins=bytarr(raw.nbins)
bins(*)=1
endif
if (raw.valid eq 1) then begin
sum = call_function(funct,raw,ERANGE=er,BINS=bins)
nargs = n_elements(sum)
time = dblarr(ntimes)
data = fltarr(ntimes,nargs)
data(0,*) = sum
time(0) = (raw.time + raw.end_time)/2.
endif else begin
dprint, " No Data! "
return
endelse
n = 1
for i=ind(0),ind(1) do begin
raw = call_function(get_raw,index=i,_extra=e)
if raw.valid ne 0 then begin
sum = call_function(funct,raw,ERANGE=er,BINS=bins)
data(n,*) = sum
time(n) = (raw.time + raw.end_time)/2.
n = n+1
endif
endfor
data = data(0:n-1,*)
time = time(0:n-1)
if not keyword_set(silent) then dprint, " number of data points = ",n
ytitle = funct+"_"+get_dat
if not keyword_set(name) then name=ytitle else ytitle=name
store_data,name,data={x:time,y:data}
return
end