; 0, To use, edit jumpa/jumpb, prota/protb, colla/collb. They corresponds to ; jumps, protected time, collection time. ; 1, First location is the first element in jump, so # of jump is always >1. ; 2, Use last location, or known jump to update "first location". ; 3, The predict curve should be very accurate. ; 4, Don't put jump in between collections. Add 1min pad time between ; jump and collection. Don't let collection time overlap. ; 5, To ensure accuracy, if update "first location" using last location, then ; set 1st collection start from last time, set earlier. ; **** combine jump & collection, sort, convert to abs memory id, print info, ; treat wrap, generate time & memory id for tplot, load contact time to tplot. pro rbsp_b1_predict_plot_process, probe, jumps, colls, $ lun = lun, time = t0, memf = memf, mems = mems ; constants. sz = 262144D ; memory size, in block. s2b = sz/84890D ; sec to 16438 block. s2b = sz/85890D ; sec to 16438 block. s2b = sz/86916D ; sec to 16438 block. print, 'conversion constant: ', s2b ; load contact times. rbsp_load_contact, conta, probe nrec = n_elements(conta)/2 t0 = dblarr(nrec*3) for i = 0, nrec-1 do t0[i*3:i*3+2] = [reform(conta[i,*]),conta[i,1]+1e-5] tmp = dblarr(nrec*3) & tmp[2:*:3] = !values.d_nan vname = 'rbsp'+strlowcase(probe)+'_contact' store_data, vname, t0, tmp, limits = {labels:'contact', yrange:[-1,1], $ ytitle:'', ytickformat:'(A1)', yticks:2, yminor:1, yticklen:0.01, $ thick:5, panel_size:0.1, colors:2} if n_elements(lun) eq 0 then lun = -1 ; combine jump and collection. njump = n_elements(jumps)/2 & ncoll = n_elements(colls)/3 nmem = njump+ncoll mems = dblarr(nmem, 5) ; [tsta, tend, memsta, memend, rate]. mems[0:njump-1,0:1] = [[jumps[*,0]], [jumps[*,0]]] mems[0:njump-1,2:3] = [[jumps[*,1]], [jumps[*,1]]] mems[0:njump-1,4] = 0 mems[njump:*,0:1] = colls[*,0:1] mems[njump:*,2:3] = 0 mems[njump:*,4] = colls[*,2] idx = sort(mems[*,0]) mems = mems[idx,*] ; convert to absolute memory id. for i = 0, nmem-1 do begin if mems[i,0] eq mems[i,1] then continue ; jump. mems[i,2] = mems[i-1,3] mems[i,3] = mems[i,2]+(mems[i,1]-mems[i,0])*(mems[i,4]/16438D)*s2b mems[i,2:3] = long(mems[i,2:3]) mod sz ; wrap absolute memory id. endfor ; print result. printf, lun, '' printf, lun, 'RBSP-'+strupcase(probe) fmt = '(I6)' for i = 0, nmem-1 do begin if mems[i,4] eq 0 then begin printf, lun, 'jump: '+time_string(mems[i,0])+' to '+$ string(mems[i,3],format=fmt) endif else if mems[i,4] eq -1 then begin printf, lun, 'wrap: '+time_string(mems[i,0]) endif else begin printf, lun, 'collection: '+time_string(mems[i,0])+' to '+$ time_string(mems[i,1])+' '+string(mems[i,2],format=fmt)+$ ' to '+string(mems[i,3],format=fmt)+' at '+$ string(mems[i,4],format='(I5)')+' sample/s' endelse endfor ; treat memory overflow. i = 1 & dt = 0.1 while i lt nmem do begin if mems[i,2] le mems[i,3] then begin ; jump, or normal. if mems[i,0] eq mems[i,1] then begin ; jump mems[i,1] = mems[i,0]+dt if i gt 1 then mems[i,2] = mems[i-1,3] endif i+=1 & continue endif twrap = mems[i,0]+(mems[i,1]-mems[i,0])*$ (sz-1-mems[i,2])/(sz-1-mems[i,2]+mems[i,3]) tmem = [twrap,twrap,!values.d_nan,!values.d_nan,-1] mems = [mems[0:i,*],transpose(tmem),mems[i:*,*]] mems[i,1] = twrap-dt & mems[i,3] = sz-1 i+=2 mems[i,0] = twrap+dt & mems[i,2] = 0 i+=1 nmem = n_elements(mems)/5 endwhile ; convert to array. t0 = dblarr(nmem*2) & memf = dblarr(nmem*2) for i = 0, nmem-1 do begin t0[i*2:i*2+1] = mems[i,0:1] memf[i*2:i*2+1] = mems[i,2:3] endfor end timespan, systime(1)-10D*86400, 20 ; jumps: [n,2], each record in [tsta, absolute memory id]. ; The 1st record is always the start location. jumpa = [$ [time_double('2014-04-09/01:43'), 95350D]] jumpb = [$ [time_double('2014-04-08/01:11'), 78505D],$ [time_double('2014-04-09/21:50'), 161480D],$ [time_double('2014-04-10/07:42'), 179520D],$ [time_double('2014-04-11/03:10'), 239650D],$ [time_double('2014-04-11/11:08'), 255890D]] jumpa = transpose(jumpa) jumpb = transpose(jumpb) ; protected memory, [n,2], each record in [tsta, tend]. prota = [$ [time_double(['2014-03-13/05:09', '2014-03-13/05:10'])]] protb = [$ [time_double(['2014-04-05/12:00', '2014-04-05/17:00'])]] prota = transpose(prota) protb = transpose(protb) ; collection, [n,3], each record in [tsta, tend, rate]. colla = [$ [time_double(['2014-04-09/01:44', '2014-04-09/06:44']), 16384],$ [time_double(['2014-04-09/10:42', '2014-04-09/15:42']), 16384],$ [time_double(['2014-04-09/19:41', '2014-04-10/00:41']), 16384],$ [time_double(['2014-04-10/04:40', '2014-04-10/09:40']), 16384],$ [time_double(['2014-04-10/13:38', '2014-04-10/18:38']), 16384],$ [time_double(['2014-04-10/22:37', '2014-04-11/03:37']), 16384],$ [time_double(['2014-04-11/07:36', '2014-04-11/12:36']), 16384],$ [time_double(['2014-04-11/16:35', '2014-04-11/21:35']), 16384]] collb = [$ [time_double(['2014-04-08/01:12', '2014-04-08/01:22']),16384],$ [time_double(['2014-04-08/02:58', '2014-04-08/08:58']), 4096],$ [time_double(['2014-04-08/11:59', '2014-04-08/17:59']), 4096],$ ; new. [time_double(['2014-04-09/21:51', '2014-04-09/22:01']),16384],$ [time_double(['2014-04-10/07:43', '2014-04-10/07:53']),16384],$ [time_double(['2014-04-11/11:09', '2014-04-11/11:19']),16384],$ [time_double(['2014-04-08/21:01', '2014-04-09/03:01']), 4096],$ [time_double(['2014-04-09/06:03', '2014-04-09/12:03']), 4096],$ [time_double(['2014-04-09/15:04', '2014-04-09/21:04']), 4096],$ [time_double(['2014-04-10/00:06', '2014-04-10/06:06']), 4096],$ [time_double(['2014-04-10/09:08', '2014-04-10/15:08']), 4096],$ [time_double(['2014-04-10/18:09', '2014-04-11/00:09']), 4096],$ [time_double(['2014-04-11/03:11', '2014-04-11/09:11']), 4096],$ [time_double(['2014-04-11/12:13', '2014-04-11/18:13']), 4096],$ [time_double(['2014-04-11/21:14', '2014-04-12/03:14']), 4096]] colla = transpose(colla) collb = transpose(collb) ; future lightning collection for April. ; [time_double(['2014-04-12/22:11', '2014-04-12/22:21']),16384],$ ; [time_double(['2014-04-13/08:05', '2014-04-13/08:15']),16384],$ ; [time_double(['2014-04-14/11:25', '2014-04-14/11:35']),16384],$ ; [time_double(['2014-04-15/22:29', '2014-04-15/22:39']),16384],$ ; [time_double(['2014-04-16/08:23', '2014-04-16/08:33']),16384],$ ; [time_double(['2014-04-17/11:43', '2014-04-17/11:53']),16384],$ ; [time_double(['2014-04-18/22:48', '2014-04-18/22:58']),16384],$ ; [time_double(['2014-04-19/08:26', '2014-04-19/08:36']),16384],$ ; [time_double(['2014-04-20/02:14', '2014-04-20/02:24']),16384],$ ; [time_double(['2014-04-21/23:02', '2014-04-21/23:12']),16384],$ ; [time_double(['2014-04-22/08:50', '2014-04-22/09:00']),16384],$ ; [time_double(['2014-04-23/02:28', '2014-04-23/02:38']),16384],$ ; [time_double(['2014-04-24/23:16', '2014-04-24/23:26']),16384],$ ; [time_double(['2014-04-25/09:04', '2014-04-25/09:14']),16384],$ ; [time_double(['2014-04-26/02:42', '2014-04-26/02:52']),16384],$ ; [time_double(['2014-04-27/23:33', '2014-04-27/23:43']),16384],$ ; [time_double(['2014-04-28/09:16', '2014-04-28/09:26']),16384],$ ; [time_double(['2014-04-29/02:57', '2014-04-29/03:07']),16384],$ ; [time_double(['2014-04-30/23:49', '2014-04-30/23:59']),16384],$ rbsp_b1_predict_plot_process, 'a', jumpa, colla, $ time = timea, memf = memaf, mems = mema rbsp_b1_predict_plot_process, 'b', jumpb, collb, $ time = timeb, memf = membf, mems = memb ; **** below are from Aaron. ; create a tplot variable with the future memory locations. store_data,'future_a',data={x:timea,y:memaf} store_data,'future_b',data={x:timeb,y:membf} options,['future_a','future_b'],'colors',250 options,['future_a','future_b'],'thick',2 ; treat protect memory. get_data,'rbspa_efw_b1_fmt_block_index2',data=gootmpa get_data,'rbspb_efw_b1_fmt_block_index2',data=gootmpb gootmpa2 = gootmpa gootmpb2 = gootmpb gootmpa2.y = !values.f_nan gootmpb2.y = !values.f_nan tpa0 = reform(prota[*,0]) & tpa1 = reform(prota[*,1]) for vv=0,n_elements(tpa0)-1 do begin boob = where((gootmpa.x ge tpa0[vv]) and (gootmpa.x le tpa1[vv])) if boob[0] ne -1 then gootmpa2.y[boob] = gootmpa.y[boob] endfor tpb0 = reform(protb[*,0]) & tpb1 = reform(protb[*,1]) for vv=0,n_elements(tpb0)-1 do begin boob = where((gootmpb.x ge tpb0[vv]) and (gootmpb.x le tpb1[vv])) if boob[0] ne -1 then gootmpb2.y[boob] = gootmpb.y[boob] endfor store_data,'rbspa_efw_b1_fmt_block_index3',data=gootmpa2 store_data,'rbspb_efw_b1_fmt_block_index3',data=gootmpb2 options,'rbsp?_efw_b1_fmt_block_index3','colors',100 options,'rbsp?_efw_b1_fmt_block_index3','psym',4 ; prepare tplot. store_data,'comba',data=['rbspa_efw_b1_fmt_block_index_cutoff',$ 'rbspa_efw_b1_fmt_block_index','rbspa_efw_b1_fmt_block_index2',$ 'rbspa_efw_b1_fmt_block_index3','future_a','rbspa_contact'] store_data,'combb',data=['rbspb_efw_b1_fmt_block_index_cutoff',$ 'rbspb_efw_b1_fmt_block_index','rbspb_efw_b1_fmt_block_index2',$ 'rbspb_efw_b1_fmt_block_index3','future_b','rbspb_contact'] store_data, 'comba2', data = ['rbspa_efw_b1_fmt_block_index', 'future_a'] store_data, 'combb2', data = ['rbspb_efw_b1_fmt_block_index', 'future_b'] sz = 262144D ; memory size, in block. ylim,['comba','combb'],0,sz options,'rbsp?_b1_status','panel_size',0.5 tplot,['comba','rbspa_b1_status','combb','rbspb_b1_status'] ; print last position: time and memory id. get_data, 'rbspa_efw_b1_fmt_block_index_cutoff', data = tmp print, 'RBSP-A last pos: '+time_string(tmp.x[1])+' at '+$ string(tmp.y[1],format='(I6)') get_data, 'future_a', t0, yy idx = (where(tmp.x[1] le t0))[0] loc = interpol(yy[[idx-1,idx]],t0[[idx-1,idx]],tmp.x[1]) print, 'RBSP-A predict pos: '+time_string(tmp.x[1])+' at '+$ string(loc,format='(F8.1)') print, yy[idx] get_data, 'rbspb_efw_b1_fmt_block_index_cutoff', data = tmp print, 'RBSP-B last pos: '+time_string(tmp.x[1])+' at '+$ string(tmp.y[1],format='(I6)') get_data, 'future_b', t0, yy idx = (where(tmp.x[1] le t0))[0] loc = interpol(yy[[idx-1,idx]],t0[[idx-1,idx]],tmp.x[1]) print, 'RBSP-B predict pos: '+time_string(tmp.x[1])+' at '+$ string(loc,format='(F8.1)') print, yy[idx] print,'type .c to print the plot to the desktop' stop pcharsize_saved=!p.charsize pfont_saved=!p.font pcharthick_saved=!p.charthick pthick_saved=!p.thick set_plot,'Z' rbsp_efw_init,/reset ; try to get decent colors in the Z buffer device,set_resolution=[3200,2400],set_font='helvetica',/tt_font,set_character_size=[28,35] !p.thick=4. !p.charthick=4. options,['comba','combb'],'ytickformat','(I6.6)' tplot_options,'xmargin',[14,12] tplot timebar,jumpa_s,color=50,varname=['comba','rbspa_b1_status'] timebar,jumpb_s,color=50,varname=['combb','rbspb_b1_status'] ; take snapshot of z buffer snapshot=tvrd() device,/close ; convert snapshot from index colors to true colors tvlct,r,g,b,/get sz=size(snapshot,/dimensions) snapshot3=bytarr(3,sz[0],sz[1]) snapshot3[0,*,*]=r[snapshot] snapshot3[1,*,*]=g[snapshot] snapshot3[2,*,*]=b[snapshot] ; shrink snapshot xsize=800 ysize=600 snapshot3=rebin(snapshot3,3,xsize,ysize) print, 'saving png ...' ; write a png write_png,'~/Desktop/b1_status_predict.png',snapshot3 set_plot,'X' rbsp_efw_init,/reset !p.charsize=pcharsize_saved !p.font=pfont_saved !p.charthick=pcharthick_saved !p.thick=pthick_saved end