function mav_sep_science_decom,msg,hkppkt=hkp, last=last, memdump=memdump
if msg.valid eq 0 then return,0
tot = total(msg.data)
mapid = keyword_set(hkp) ? hkp.mapid : 0b
mem_addr = keyword_set(hkp) ? hkp.mem_addr : 0u
event_cntr = keyword_set(hkp) ? hkp.event_cntr : 0u
diff_cntr = keyword_set(last) ? fix(tot)-fix(last.event_cntr) : 0
pp = find_mpeaks(msg.data,threshold = 40,roiw=4,fitval=0,verbose=0)
npp = n_elements(pp.g)
p = pp.g[0]
if 0 then begin
mp = mgauss(binsize = 1)
mp.g.a = p.a
mp.g.x0 = p.x0
mp.g.s = p.s
b = indgen(256)
endif
if keyword_set(memdump) then ranges=reform(memdump.range,2,12) else ranges = transpose( [[indgen(12)*20],[indgen(12)*20+19]] )
if 1 then begin
n = 12
psum = fltarr(n)
for i = 0,12-1 do psum[i] = total(msg.data[ranges[0,i]:ranges[1,i] ])
endif
dprint,dlevel=4,transpose(ranges)
tdiff = msg.time-systime(1)
dprint,dlevel=4,byte(round(psum[0:11]))
if 1 && abs(tdiff) lt 10 then begin
labels = strsplit('O T OT F FT FTO',' ',/extract)
labels = transpose( [[labels+'_0'],[labels+'_1']] ) +'_'
w = where(psum ge 1,nw)
if nw eq 1 then begin
prefix='multiples/'+labels[w[0]]
if strpos(prefix,'T') ge 0 then begin
dprint,prefix,dlevel=3
endif
endif
endif
strct = {time : msg.time, $
mapid : mapid , $
mem_addr : mem_addr , $
data : msg.data , $
psum : psum, $
event_cntr : event_cntr , $
diff_cntr : diff_cntr , $
total : tot, $
A : p.a , $
x0 : p.x0 , $
s : p.s , $
valid : msg.valid }
return,strct
end