function average_bins,data,ind,d if d ne 1 then message ,'not working yet!' dim = dimen(data) nd = ndimen(data) if nd eq 1 then d=1 mx = max(ind)+1 dim[d-1] = mx val = !values.f_nan rdat = make_array(val=val,dim=dim) nan=1 case nd of 1:begin for i=0l,mx-1 do begin w = where(ind eq i,c) if c eq 1 then rdat[i] = data[w] if c gt 1 then rdat[i] = average(data[w],nan=nan) endfor end 2:begin for i=0l,mx-1 do begin w = where(ind eq i,c) if c eq 1 then rdat[i,*] = data[w,*] if c gt 1 then rdat[i,*] = average(data[w,*],d,nan=nan) endfor end 3:begin for i=0l,mx-1 do begin w = where(ind eq i,c) if c eq 1 then rdat[i,*,*] = data[w,*,*] if c gt 1 then rdat[i,*,*] = average(data[w,*,*],d,nan=nan) if c le 1 then help,c,w,i endfor end endcase return,rdat end ;+ ;PROCEDURE: avg_data, name, res ;PURPOSE: ; Creates a new tplot variable that is the time average of original. ;INPUT: name tplot variable names (strings) ;KEYWORDS: ; display_object = Object reference to be passed to dprint for output. ;- PRO avg_data,name,res,newname=newname,append=append,trange=trange,day=day, display_object=display_object get_data,name,ptr=p1,dlim=dlim,lim=lim if not keyword_set(p1) then begin dprint, 'data not defined!', display_object=display_object return endif if not keyword_set(append) then append = '_avg' if not keyword_set(newname) then newname = name+append if not keyword_set(res) then res = 60d ; 1 minute resolution res = double(res) time = *p1.x if keyword_set(day) then trange=(round(average(time,/nan)/86400d -day/2.)+[0,day])*86400d if not keyword_set(trange) then trange= (floor(minmax(time)/res)+[0,1]) * res ;check for data in this time range time_test = where(time Ge trange[0] And time Lt trange[1], ntimes_ok) If(ntimes_ok Eq 0) Then Begin dprint, 'No data in input time range', display_object=display_object return Endif ind = floor( (time-trange[0])/res ) max = round((trange[1]-trange[0])/res) w = where( ind lt 0 or ind ge max, c) if c ne 0 then ind[w]=-1 newtime = (dindgen(max)+.5)*res+trange[0] ;n = n_elements(time) ;ind = floor(time / res) ;start = min(ind) ;ind = ind - start ;max = max(ind)+1 ;if max gt 1 then newtime = (dindgen(max)+.5+start)*res $ ;else newtime = (start+.5)*res y = average_bins(*p1.y,ind,1) dat = {x:newtime,y:y} v=0 str_element,p1,'v',v if keyword_set(v) then begin if ndimen(*v) gt 1 then str_element,/add,dat,'v',average_bins(*v,ind,1) $ else str_element,/add,dat,'v',*v endif v=0 str_element,p1,'v1',v if keyword_set(v) then begin if ndimen(*v) gt 1 then str_element,/add,dat,'v1',average_bins(*v,ind,1) $ else str_element,/add,dat,'v1',*v endif v=0 str_element,p1,'v2',v if keyword_set(v) then begin if ndimen(*v) gt 1 then str_element,/add,dat,'v2',average_bins(*v,ind,1) $ else str_element,/add,dat,'v2',*v endif store_data,newname,data=dat,dlim=dlim,lim=lim return end