;+ ;PROGRAM: get_3dt(funct,get_dat,ERANGE=erange,BINS=bins,NAME=name) ;INPUT: ; funct: function, function that operates on structures generated ; by get_pl, get_el, etc. ; e.g. "get_el" ; ; funct = 'n_3d','j_3d','v_3d','p_3d','t_3d', ; 'vth_3d', or 'c_3d' ; "n_3d" ; "j_3d" ; "v_3d" ; "p_3d" ; "t_3d" ; "vth_3d" ; "c_3d" ; get_dat:function, function that returns 3d data structures ; function name must be "get_"+"get_dat" ; get_dat = 'pl' for get_pl, ; get_dat = 'el' for get_el, etc. ;KEYWORDS: ; erange: fltarr(2), optional, min,max energy bin numbers for integration ; bins: bytarr(nbins), optional, angle bins for integration, see edit3dbins.pro ; 0,1=exclude,include, nbins = temp.nbins ; name: string New name of the Data Quantity ; Default: funct+'_'+get_dat ; times: dblarr(1or2)or Specifies start time (and end time) ; strarr(1or2) ; index: lonarr(1 or 2) Specifies starting index (and ending index) ; keyword time overrides keyword index ;PURPOSE: ; To generate time series data for "tplot" ;NOTES: ; Program names time series data to funct+"_"+get_dat. ; See "tplot_names". ; ;CREATED BY: J.McFadden ;LAST MODIFICATION: 01/05/09 ;FILE: @(#)get_3dt.pro 1.13 ;- 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 ;don't change keyword value 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) ;don't change keyword value 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) ;find the first valid spec i = i+1 endwhile ind(0) = i ;the next spec we'll get 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 ;1 because 0 was done above 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