function find_peak,d,cbins,window = wnd,threshold=threshold
nan = !values.d_nan
peak = {a:nan, x0:nan, s:nan}
if n_params() eq 0 then return,peak
if not keyword_set(cbins) then cbins = dindgen(n_elements(d))
if keyword_set(wnd) then begin
mx = max(d,b)
i1 = (b-wnd) > 0
i2 = (b+wnd) < (n_elements(d)-1)
pk = find_peak(d[i1:i2],cbins[i1:i2],threshold=threshold)
return,pk
endif
if keyword_set(threshold) then begin
dprint,'not functioning'
endif
t = total(d)
avg = total(d * cbins)/t
sdev = sqrt(total(d*(cbins-avg)^2)/t)
peak.a=t
peak.x0=avg
peak.s=sdev
return,peak
end
function mvn_apid_sep_noise_decom,ccsds
data = mvn_pfdpu_part_decompress_data(ccsds,cfactor=cfactor)
if n_elements(data) ge 66 then begin
ddata = data[6:65]
endif else begin
printdat,data,/hex,out=outs
dprint,outs,dlevel=2
ddata = bytarr(60)
endelse
subsec = data[0]*256 + data[1]
ccode = data[2]
mapid = data[3]
duration = 0u
ddata = mvn_pfp_log_decomp(ddata,ccode)
p= replicate(find_peak(),6)
noise_res = 3
x = (dindgen(10)-4.5) * ( 2d ^ (noise_res-3))
d = reform(ddata,10,6)
for j=0,5 do begin
p[j] = find_peak(d[0:8,j],x[0:8])
endfor
dprint,dlevel=4,p.s
noise = { $
time: ccsds.time, $
met: ccsds.met, $
tdiff: ccsds.time_diff, $
duration: duration, $
ccode:ccode, $
mapid:mapid, $
noise_res:noise_res, $
tot:p.a , $
baseline:p.x0 , $
sigma:p.s, $
data:ddata, $
cfactor:cfactor, $
valid:1 }
return,noise
end
function mvn_pfdpu_read_dpu_commands,trange,ncommands
common mav_pfdpu_cmnblk_handler_com,command_ptrs,realtime
ncommands=0
if ~keyword_set(command_ptrs) then return,0
pkts = *command_ptrs.x
if n_elements(trange) ne 2 then begin
ctime,trange,npoints=2,/silent
printdat,/value,time_string(trange) ,varname='T_cmd'
endif
w = where(pkts.time ge trange[0] and pkts.time le trange[1],ncommands)
if ncommands eq 0 then return,0
return,pkts[w].buffer[14:17]
end
function mvn_sep_commands_to_lut,sepn,cmds=cmds,trange=trange,LUT1=LUT1,LUT2=LUT2
if ~keyword_set(cmds) then cmds= mvn_pfdpu_read_dpu_commands(trange,ncommands)
nc= n_elements(cmds)/4
w = where(cmds[0,*] ne 'fe'x ,npfp)
w = where(cmds[0,*] eq 'fe'x ,nsep)
scmds = cmds
mask = '40'xb
dprint,nc,' Total Commands',nsep, ' SEP Commands ',npfp,' PFP Commands'
lut1 = replicate(-1,2L^17)
ptr1 =0L
lut2 = replicate(-1,2L^17)
ptr2 =0L
for i= 0L,nc-1 do begin
c = scmds[*,i]
if c[0] ne 'FE'x then begin
dprint,c,' non SEP',format='(4(Z02," "),a)'
continue
endif
case c[1] of
'12'x: ptr1 = c[2] * 256L + c[3]
'13'x: ptr1 = c[2] * 256L + c[3] +2L^16
'15'x: for j=0,c[2]-1 do lut1[ptr1++] = c[3]
'52'x: ptr2 = c[2] * 256L + c[3]
'53'x: ptr2 = c[2] * 256L + c[3] +2L^16
'55'x: for j=0,c[2]-1 do lut2[ptr2++] = c[3]
else: dprint,c,format='(4(Z02," "))'
endcase
endfor
LUT1 = LUT1[2L^16 : *]
LUT2 = LUT2[2L^16 : *]
w = where(lut1 eq -1,nw)
if nw ne 0 then dprint,'LUT1 not fully loaded!'
w = where(lut2 eq -1,nw)
if nw ne 0 then dprint,'LUT2 not fully loaded!'
lut1= byte(lut1)
lut2= byte(lut2)
return, sepn ? lut2 : lut1
end
function mvn_mag_hkp_decom_f0,ccsds
data = ccsds.data
data2 = uint(data,0,n_elements(data)/2) & byteorder,data2,/swap_if_little_endian
hkp = { time: ccsds.time, $
MET: ccsds.met, $
frm_ctr: data2[4], $
f0: ulong(data2[5]), $
time_f1: data2[6], $
time_f2: data2[7], $
time_f3: data2[8], $
F_MET: data2[6] * 2d^16 + data2[7] + data2[8]/2d^16, $
valid:1}
return,hkp
end
function mvn_apid_sep_memdump_decom,ccsds,lastmem=lastmem
data = mvn_pfdpu_part_decompress_data(ccsds)
dprint,ccsds.apid,n_elements(ccsds.data),n_elements(data),format='(z02,i5,i5)',dlevel=3
subsec = data[0]*256 + data[1]
addr1 = data[4]*256u+data[5]
addr2 = data[8]*256u+data[9]
map = data[10:*]
printdat,map
n = n_elements(map)
map = reform( reverse( reform(map,2,n/2),1),n)
memdump = { $
time: ccsds.time, $
ccode:data[2], $
addr2:addr2, $
map:map, $
valid:1 }
if not keyword_set(lastmem) then lastmem = {time:0d, map:intarr(2UL ^16)-1}
if data[7] ne 1 then begin
dprint,'Memdump error'
memdump.valid=0
endif
lastmem.time = memdump.time
mn = addr2
mx = (addr2 + 2048ul-4) < (2UL^16)
lastmem.map[mn:mx-1] = map[0:mx-mn-1]
if ccsds.apid and 0 then begin
dprint,addr2,mn,mx
hexprint,data
if addr2 ge 'ffff'x - 256 then begin
hexprint,lastmem.map
endif
endif
return,memdump
end
pro mvn_sep_plot_spectra,data,avg_data=avg_data,window=wnd,color=color
plt = get_plot_state()
if keyword_set(wnd) then wi,wnd
if n_elements(avg_data) le 1 then avg_data = data*1.
n=10.
avg_data = (avg_data*n + data) / (n+1)
yrange = minmax(avg_data > 5) * [0,2]
plot,avg_data,xrange=[-5,260],/xstyle,yrange= yrange
oplot,data,color=color,psym=10
restore_plot_state,plt
end
function mvn_apid_sep_science_decom,ccsds
data = mvn_pfdpu_part_decompress_data(ccsds,cfactor=cfactor)
if n_elements(data) ne 518 then begin
dprint,'Bad decompression',n_elements(ccsds.data),n_elements(data),dlevel=2
endif
len = (n_elements(data)-6)/2
len = 256
subsec = data[0]*256L+data[1]
seqcntr = ccsds.seq_cntr
sensor= byte(ccsds.apid and 1) + 1b
ccode = data[2]
mapid = data[3]
attdur1 = data[4]
attdur2 = data[5]
att1 = ishft(attdur1, -6)
att2 = ishft(attdur2 ,-6)
dat = { time:0d, $
met: 0d, $
et: 0d, $
subsec:subsec, $
f0: 0UL, $
delta_time: 0d, $
trange:[0d,0d], $
seq_cntr:seqcntr, $
dseqcntr:0ul, $
sensor:sensor, $
ccode:ccode,$
mapid:mapid,att:att1,$
duration:0u,$
counts_total:0.,rate:0.,cfactor:cfactor, data:fltarr(256), $
valid:0 }
time = ccsds.time + (subsec / 2d^16)
met = ccsds.met + (subsec/2d^16)
dat1=dat
duration1 =(attdur1 and '111111'b)+1
dat1.time = time + duration1 /2.
dat1.met = met + duration1/2.
dat1.trange = [time,time+duration1]
dat1.delta_time = duration1
dat1.duration = duration1
dat1.att = att1
dat1.data = mvn_pfp_log_decomp(data[6:len+6-1],ccode)
dat1.counts_total = total(dat1.data)
dat1.rate = float(dat1.counts_total)/dat1.duration
delt = duration1
dat2=dat
duration2 =(attdur2 and '111111'b)+1
dat2.delta_time = duration2
dat2.duration = duration2
dat2.time = time + duration2/2. + delt
dat2.met = met + duration2/2. + delt
dat2.trange = [time,time+duration2] + delt
dat2.att = att2
dat2.data = mvn_pfp_log_decomp(data[len+6:2*len+6-1],ccode)
dat2.counts_total = total(dat2.data)
dat2.rate = float(dat2.counts_total)/dat2.duration
return, [dat1,dat2]
end
pro mvn_sep_mapbins1
det_names = ['X','O','T','OT','F','X','FT','FTO']
side_names = ['A','B']
mav_apid_sep_handler,mem1=mem1
mapstat = {bin:0,chan:0b,side:'',det:'',width:0u,emm:[0u,0u]}
mapstats = replicate(mapstat,256)
map = reform(mem1.map,4096,2,8)
map[*,*,0] = -2
map[*,*,5] = -2
for b =0,255 do begin
w = where(map eq b,nw)
if nw ne 0 then begin
addr = minmax(w)
channel = addr/4096
if channel[0] eq channel[1] then begin
ms = mapstat
ms.bin = b
chan = channel[0]
ms.chan = chan
ms.det = chan/2
ms.side = chan mod 2
ms.emm = addr mod 4096
ms.width = nw
nemm = ms.emm[1] - ms.emm[0] + 1
mapstats[b] = ms
lab = side_names[ms.side]+'-'+det_names[ms.det]
if nemm ne nw then lab+=' Not contiguous'
dprint,ms,lab,format='(i5,i5,i3,i3,i7, 2i7," ",a-10)'
endif else dprint,b,' Multiple mapping',i
endif else dprint,b,'No mapping'
endfor
end
function mvn_sep_mapbins2
mav_apid_sep_handler,mem1=mem1
det_names = ['X','O','T','OT','F','X','FT','FTO']
side_names = ['A','B']
det_pattern = [1,2,4,3,6,7]
mapstat = {bin:0,chan:0b,side:'',det:'',width:0u,emm:[0u,0u]}
mapstats = replicate(mapstat,256)
map = reform(mem1.map,4096,2,8)
ms_struct = {time:0d}
for s=0,1 do begin
for d=0,5 do begin
dp = det_pattern[d]
m = map[*,s,dp]
ms = m[sort(m)]
bs = ms[uniq(ms)]
ms_array= replicate(mapstat,n_elements(bs) )
for i =0,n_elements(bs)-1 do begin
w = where(m eq bs[i],nw)
if nw ne 0 then begin
ms = mapstat
ms.bin = bs[i]
ms.side = s
ms.det = dp
ms.emm = minmax(w)
ms.width = nw
nemm = ms.emm[1] - ms.emm[0] + 1
mapstats[i] = ms
lab = side_names[ms.side]+'-'+det_names[ms.det]
dprint,ms,lab,format='(i5,i5,i3,i3,i7, 2i7," ",a-10)'
ms_array[i] = ms
endif else dprint,b,'No mapping'
endfor
lab = side_names[ms.side]+'_'+det_names[ms.det]
ms_struct = create_struct(ms_struct,LAB,ms_array)
endfor
endfor
return,ms_struct
end
pro mvn_sep_extract_data,dataname,data,trange=trange,tnames=tnames,tags=tags,num=num
common mav_apid_sep_handler_com , sep_all_ptrs , sep1_hkp,sep2_hkp,sep1_svy,sep2_svy,sep1_arc,sep2_arc,sep1_noise,sep2_noise $
,sep1_memdump,sep2_memdump,mag1_hkp_f0,mag2_hkp_f0
count=0
data=0
if ~keyword_set(sep_all_ptrs) then begin
dprint,'No data has been loaded!'
return
endif
w = where(dataname eq sep_all_ptrs.name,nw)
if nw ne 1 then begin
if nw eq 0 then dprint,'Data not found: '+dataname else dprint,'Multiple names found: '+dataname
dprint,sep_all_ptrs.name
return
endif
ptrs= sep_all_ptrs[w]
datap = ptrs.x
num = n_elements(*datap)
if keyword_set(trange) then begin
trr = minmax( time_double( trange))
tr = (*datap).trange
w = where( (tr[0,*] le trr[1]) and (tr[1,*] gt trr[0] ) ,num)
if num eq 0 then begin
dprint,'No ',dataname,' data found in time range: '+strjoin(time_string(trr),' - ')
endif else begin
data = (*datap)[w]
endelse
endif else data = *datap
if keyword_set(tags) then begin
if keyword_set(tnames) then prefix =tnames else prefix=ptrs.name
printdat,prefix
mav_gse_structure_append, ptrs, tname=prefix, tags=tags
endif
return
end
pro mvn_sep_var_save,filename,pathname=pathname,trange=trange,prereq_info=prereq_info,verbose=verbose,description=description
common mav_apid_sep_handler_com , sep_all_ptrs , sep1_hkp,sep2_hkp,sep1_svy,sep2_svy,sep1_arc,sep2_arc,sep1_noise,sep2_noise $
,sep1_memdump,sep2_memdump,mag1_hkp_f0,mag2_hkp_f0
common mvn_apid_misc_handler_com ,manage,realtime,apid20x,apid21x,apid22x,apid23x,apid24x,apid25x
if not keyword_set(filename) then begin
if not keyword_set(trange) then trange = minmax((*(sep1_svy.x)).time)
res = 86400.d
days = round( time_double(trange )/res)
ndays = days[1]-days[0]
tr = days * res
if not keyword_set(pathname) then pathname = 'maven/pfp/sep/l1/sav/YYYY/MM/mvn_sep_l1_YYYYMMDD_$NDAY.sav'
pn = str_sub(pathname, '$NDAY', strtrim(ndays,2)+'day')
filename = mvn_pfp_file_retrieve(pn,/daily,trange=tr[0],source=source,verbose=verbose,/create_dir)
dprint,dlevel=2,verbose=verbose,'Creating: ',filename
endif
if 1 then begin
sw_version = mvn_sep_sw_version()
spice_kernels = spice_test('*')
spice_info = file_checksum(/add_mtime,spice_kernels)
if keyword_set(sep1_hkp) then s1_hkp = *sep1_hkp.x
if keyword_set(sep1_svy) then s1_svy = *sep1_svy.x
if keyword_set(sep1_arc) then s1_arc = *sep1_arc.x
if keyword_set(sep1_noise) then s1_nse = *sep1_noise.x
if keyword_set(sep2_hkp) then s2_hkp = *sep2_hkp.x
if keyword_set(sep2_svy) then s2_svy = *sep2_svy.x
if keyword_set(sep2_arc) then s2_arc = *sep2_arc.x
if keyword_set(sep2_noise) then s2_nse = *sep2_noise.x
if keyword_set(mag1_hkp_f0) then m1_hkp = *mag1_hkp_f0.x
if keyword_set(mag2_hkp_f0) then m2_hkp = *mag2_hkp_f0.x
if keyword_set(apid20x) then ap20 = *apid20x.x
if keyword_set(apid21x) then ap21 = *apid21x.x
if keyword_set(apid22x) then ap22 = *apid22x.x
if keyword_set(apid23x) then ap23 = *apid23x.x
if keyword_set(apid24x) then ap24 = *apid24x.x
if keyword_set(apid25x) then ap25 = *apid25x.x
file_mkdir2,file_dirname(filename)
save,filename=filename,verbose=verbose,s1_hkp,s1_svy,s1_arc,s1_nse,s2_hkp,s2_svy,s2_arc,s2_nse,m1_hkp,m2_hkp,sw_version,prereq_info,spice_info,ap20,ap21,ap22,ap23,ap24,ap25,description=description
endif else begin
save,verbose=verbose,filename=filename,sep_all_ptrs,sep1_hkp,sep2_hkp,sep1_svy,sep2_svy,sep1_arc,sep2_arc,sep1_noise,sep2_noise,sep1_memdump,sep2_memdump
endelse
end
pro mvn_sep_handler,ccsds,decom=decom,reset=reset,debug=debug,finish=finish,set_realtime=set_realtime ,clear=clear,set_manage=set_manage $
,trange=trange,svy_tags=svy_tags,hkp_tags=hkp_tags,noise_tags=noise_tags,sepnum=sepnum,mag_tags=mag_tags
common mav_apid_sep_handler_misc_com,manage,realtime,sep1_avg,sep2_avg,lastmem1,lastmem2,sep1_last_hkp,sep2_last_hkp ,sep1_spec,sep2_spec,sep1arc_spec,sep2arc_spec
common mav_apid_sep_handler_com , sep_all_ptrs , sep1_hkp,sep2_hkp,sep1_svy,sep2_svy,sep1_arc,sep2_arc,sep1_noise,sep2_noise $
,sep1_memdump,sep2_memdump ,mag1_hkp_f0,mag2_hkp_f0
if n_elements(sepn) eq 0 then sepn=3
if n_elements(magnum) eq 0 then magnum=3
if not keyword_set(ccsds) then begin
if n_elements(reset) ne 0 then begin
manage = reset
realtime=0
sep1_last_hkp =0
sep2_last_hkp = 0
sep1_avg = 0
sep2_avg = 0
clear = keyword_set(reset)
endif
if n_elements(set_manage) ne 0 then manage=set_manage
if n_elements(set_realtime) ne 0 then realtime=set_realtime
if keyword_set(debug) then begin
dprint,phelp=debug,manage,realtime
if (sepn and 1) ne 0 then dprint,phelp=debug,sep1_hkp,sep1_svy,sep1_arc,sep1_memdump,lastmem1
if (sepn and 2) ne 0 then dprint,phelp=debug,sep2_hkp,sep2_svy,sep2_arc ,sep2_memdump,lastmem2
return
endif
dprint,dlevel=2,'SEP handler: ' , keyword_set(clear) ? 'Clearing Data' : 'Finalizing'
prefix = 'mvn_'
if ~keyword_set(hkp_tags) then hkp_tags = 'RATE_CNTR VCMD_CNTR AMON_* DACS'
if ~keyword_set(svy_tags) then svy_tags = 'DATA ATT COUNTS_TOTAL'
if ~keyword_set(noise_tags) then noise_tags = 'BASELINE SIGMA DATA TOT'
if (sepn and 1) ne 0 then mav_gse_structure_append, clear=clear, sep1_hkp, tname=prefix+'sep1_hkp' , tags=hkp_tags
if (sepn and 2) ne 0 then mav_gse_structure_append, clear=clear, sep2_hkp, tname=prefix+'sep2_hkp' , tags=hkp_tags
if (sepn and 1) ne 0 then mav_gse_structure_append, clear=clear, sep1_svy, tname=prefix+'sep1_svy' , tags= svy_tags
if (sepn and 2) ne 0 then mav_gse_structure_append, clear=clear, sep2_svy, tname=prefix+'sep2_svy' , tags= svy_tags
if (sepn and 1) ne 0 then mav_gse_structure_append, clear=clear, sep1_arc, tname=prefix+'sep1_arc' , tags= svy_tags
if (sepn and 2) ne 0 then mav_gse_structure_append, clear=clear, sep2_arc, tname=prefix+'sep2_arc' , tags= svy_tags
if (sepn and 1) ne 0 then mav_gse_structure_append, clear=clear, sep1_noise, tname=prefix+'sep1_noise', tags= noise_tags
if (sepn and 2) ne 0 then mav_gse_structure_append, clear=clear, sep2_noise, tname=prefix+'sep2_noise', tags= noise_tags
if (sepn and 1) ne 0 then mav_gse_structure_append, clear=clear, sep1_memdump , tname = prefix+'sep1_mem'
if (sepn and 2) ne 0 then mav_gse_structure_append, clear=clear, sep2_memdump , tname = prefix+'sep2_mem'
if (magnum and 1) ne 0 then mav_gse_structure_append, clear=clear, mag1_hkp_f0 , tname= 'mvn_mag1_hkp' , tags = mag_tags
if (magnum and 2) ne 0 then mav_gse_structure_append, clear=clear, mag2_hkp_f0 , tname= 'mvn_mag2_hkp' , tags = mag_tags
sep_all_ptrs = 0
append_array,sep_all_ptrs,sep1_hkp
append_array,sep_all_ptrs,sep2_hkp
append_array,sep_all_ptrs,sep1_svy
append_array,sep_all_ptrs,sep2_svy
append_array,sep_all_ptrs,sep1_arc
append_array,sep_all_ptrs,sep2_arc
append_array,sep_all_ptrs,sep1_noise
append_array,sep_all_ptrs,sep2_noise
append_array,sep_all_ptrs,sep1_memdump
append_array,sep_all_ptrs,sep2_memdump
append_array,sep_all_ptrs,mag1_hkp_f0
append_array,sep_all_ptrs,mag2_hkp_f0
if keyword_set(finish) && (keyword_set(sep1_svy) || keyword_set(sep2_svy)) then begin
if (sepn and 1) ne 0 then mvn_sep_create_subarrays,'mvn_sep1_svy'
if (sepn and 2) ne 0 then mvn_sep_create_subarrays,'mvn_sep2_svy'
if (sepn and 1) ne 0 && keyword_set(sep1_noise) then mvn_sep_create_noise_arrays,*sep1_noise.x,tname=prefix+'sep1'
if (sepn and 2) ne 0 && keyword_set(sep2_noise) then mvn_sep_create_noise_arrays,*sep2_noise.x,tname=prefix+'sep2'
mvn_sep_pfdpu_tplot_options
endif
return
endif
if not keyword_set(manage) then return
prefix = 'mvn_'
Case ccsds.apid of
'2b'x: begin
mav_gse_structure_append ,sep1_hkp, realtime=realtime, tname=prefix+'sep1_hkp',(sep1_last_hkp=mvn_sep_hkp_pfdpu_decom(ccsds,last_hkp=sep1_last_hkp,gap=gap)),insert_gap=gap
end
'2c'x: begin
mav_gse_structure_append ,sep2_hkp, realtime=realtime, tname=prefix+'sep2_hkp',(sep2_last_hkp=mvn_sep_hkp_pfdpu_decom(ccsds,last_hkp=sep2_last_hkp,gap=gap)),insert_gap=gap
end
'70'x: begin
last_seqcntr = keyword_set(sep1_spec) ? sep1_spec[0].seq_cntr : 0u
mav_gse_structure_append ,sep1_svy, realtime=realtime, tname=prefix+'sep1_svy',(sep1_spec=mvn_apid_sep_science_decom(ccsds)) ,insert_gap = (sep1_spec[0].seq_cntr-last_seqcntr) ne 1
end
'71'x: begin
last_seqcntr = keyword_set(sep2_spec) ? sep2_spec[0].seq_cntr : 0u
mav_gse_structure_append ,sep2_svy, realtime=realtime, tname=prefix+'sep2_svy',(sep2_spec=mvn_apid_sep_science_decom(ccsds)) ,insert_gap = (sep2_spec[0].seq_cntr-last_seqcntr) ne 1
end
'72'x: begin
last_seqcntr = keyword_set(sep1arc_spec) ? sep1arc_spec[0].seq_cntr : 0u
mav_gse_structure_append ,sep1_arc, realtime=realtime, tname=prefix+'sep1_arc',(sep1arc_spec=mvn_apid_sep_science_decom(ccsds)) ,insert_gap = (sep1arc_spec[0].seq_cntr-last_seqcntr) ne 1
end
'73'x: begin
last_seqcntr = keyword_set(sep2arc_spec) ? sep2arc_spec[0].seq_cntr : 0u
mav_gse_structure_append ,sep2_arc, realtime=realtime, tname=prefix+'sep2_arc',(sep2arc_spec=mvn_apid_sep_science_decom(ccsds)),insert_gap = (sep2arc_spec[0].seq_cntr-last_seqcntr) ne 1
end
'78'x: mav_gse_structure_append ,sep1_noise, realtime=realtime, tname=prefix+'sep1_noise',mvn_apid_sep_noise_decom(ccsds)
'79'x: mav_gse_structure_append ,sep2_noise, realtime=realtime, tname=prefix+'sep2_noise',mvn_apid_sep_noise_decom(ccsds)
'7c'x: mav_gse_structure_append ,sep1_memdump, realtime=realtime, tname=prefix+'sep1_memdump',mvn_apid_sep_memdump_decom(ccsds,lastmem=lastmem1)
'7d'x: mav_gse_structure_append ,sep2_memdump, realtime=realtime, tname=prefix+'sep2_memdump',mvn_apid_sep_memdump_decom(ccsds,lastmem=lastmem2)
'26'x: mav_gse_structure_append ,mag1_hkp_f0, realtime=realtime, tname=prefix+'mag1_hkp',mvn_mag_hkp_decom_f0(ccsds)
'27'x: mav_gse_structure_append ,mag2_hkp_f0, realtime=realtime, tname=prefix+'mag2_hkp',mvn_mag_hkp_decom_f0(ccsds)
else: return
endcase
decom = 1
end
pro mvn_sep_verify_mem
mvn_sep_extract_data,'mvn_sep1_mem',data
printdat,data
lut = mvn_sep_create_lut(mapnum=9)
printdat,where( lut ne data.map)
mvn_sep_extract_data,'mvn_sep2_mem',data
lut = mvn_sep_create_lut(mapnum=9)
printdat,where( lut ne data.map)
end