; Warning DON'T USE THE REALTIME KEYWORD - IT RUN'S VERY SLOW! pro mav_gse_structure_append,ptrs,str,tname=tname,tags=tagsformat,realtime=realtime,reset=reset,clear=clear,insert_gap=gap if n_params() eq 2 then begin ; append data if size(/type,str) ne 8 then begin dprint,dlevel=3,'Not a structure!' return endif if arg_present(ptrs) then begin ;&& ~keyword_set(realtime) if not keyword_set(ptrs) then ptrs = { name:keyword_set(tname) ? tname :'' , x:ptr_new(0), xi:ptr_new(0) } if keyword_set(gap) then append_array,*ptrs.x,fill_nan(str[0]), index = *ptrs.xi append_array,*ptrs.x, str, index= *ptrs.xi,/fillnan endif if size(/type,tname) eq 7 && keyword_set(realtime) then begin ; Note setting the realtime keyword will make it substantially slower! if not keyword_set(tags) then tags = tag_names( str ) time = str.time time_dim = size(time,/dimensions) nstr = n_elements(str) for i = 0,n_elements(tags)-1 do begin if tags[i] eq 'TIME' then continue dlim = 0 vvalue=0 yvalue = str.(i) if (size(/type,yvalue) ne 10) then begin dim= size(yvalue,/dimensions) if (nstr eq 1 && (n_elements(dim) eq 2 || (dim[0] gt 1))) then begin yvalue=transpose(yvalue) vvalue=findgen(dim[0]) endif if (nstr gt 1 && (n_elements(dim) eq 2 )) then begin yvalue=transpose(yvalue) vvalue=findgen(dim[0]) dprint,/phelp,tname+'_'+tags[i],time,yvalue,time_dim,dim,dlevel=4 endif if strpos(tags[i],'FLAG') ge 0 then dlim =struct(dlim,tplot_routine='bitplot',colors='bmgr',panel_size=.4) if keyword_set(gap) then $ store_data,tname+'_'+tags[i], fill_nan(time),fill_nan( yvalue),fill_nan(vvalue), /append ,dlim=dlim store_data,tname+'_'+tags[i], time, yvalue,vvalue, /append ,dlim=dlim endif endfor endif endif else begin ; one parameter - perform finalization of data if keyword_set(reset) then begin ; cleanup pointers if reset is set to anything ptr_free,ptr_extract(ptrs) ptrs = 0 endif if not keyword_set(ptrs) then ptrs = { name:keyword_set(tname) ? tname :'' , x:ptr_new(0), xi:ptr_new(0) } if size(/type,ptrs) ne 8 || ptr_valid(ptrs.x) eq 0 then return if keyword_set(clear) then begin *ptrs.x =0 *ptrs.xi=0 return endif if size(/type,*ptrs.x) ne 8 then begin if size(/type,tname) eq 7 then dprint,'No data for ',tname,dlevel=2 return endif append_array, *ptrs.x, index= *ptrs.xi,/done ; truncate arrays as needed if size(/type,tname) eq 7 && ~keyword_set(realtime) then begin ; str_all = (*ptrs.x) ' don't copy for efficiency tags_all = tag_names( *ptrs.x) if keyword_set(tagsformat) then tags = tags_all[strfilter(/index,tags_all,strsplit(/extract,tagsformat) ) > 0] ; else tags= tags_all time = (*ptrs.x).time for i = 0,n_elements(tags)-1 do begin if tags[i] eq 'TIME' then continue dlim = 0 vvalue=0 str_element,(*ptrs.x),tags[i],yvalue dprint,/phelp,tags[i],yvalue,dlevel=4 if (size(/type,yvalue) ne 10) then begin dim= size(yvalue,/dimensions) if (n_elements(dim) eq 2 ) then begin yvalue=transpose(yvalue) vvalue=findgen(dim[0]) endif if strpos(tags[i],'FLAG') ge 0 then dlim =struct(dlim,tplot_routine='bitplot',colors='bmgr',panel_size=.4) store_data,tname+'_'+tags[i], time, yvalue,vvalue ,dlim=dlim endif endfor endif endelse end