pro fa_convert_esa_units, data, units, scale=scale
if n_params() eq 0 then return
if strupcase(units) eq strupcase(data.units_name) then return
energy = data.energy
n_e = data.nenergy
nbins=data.nbins
gf = data.geom_factor*data.gf*data.eff
dt = data.integ_t
dt_arr=1.
mass = data.mass
dead = data.dead
case strupcase(data.units_name) of
'COMPRESSED' : scale = 1.
'COUNTS' : scale = 1.
'RATE' : scale = dt*dt_arr
'CRATE' : scale = dt*dt_arr
'EFLUX' : scale = gf
'FLUX' : scale = gf * energy
'DF' : scale = gf * energy^2 * 2./mass/mass*1e5
else: begin
print,'Unknown starting units: ',data.units_name
return
end
endcase
tmp=data.data
if (strupcase(data.units_name) eq 'COMPRESSED') OR (strupcase(units) eq 'COMPRESSED') then begin
fa_esa_init
common fa_information,info_struct
case data.data_name of
'Eesa Survey': begin
ccvt=info_struct.byteto16_map
ctbyt=info_struct.sixteen_to_byte_map
end
'Eesa Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Iesa Survey': begin
ccvt=info_struct.byteto16_map
ctbyt=info_struct.sixteen_to_byte_map
end
'Iesa Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa 1 Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa 2 Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa 3 Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa 4 Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa 5 Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa 6 Burst': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa Burst Combined': begin
ccvt=info_struct.byteto14_map
ctbyt=info_struct.fourteen_to_byte_map
end
'Sesa Survey': begin
ccvt=info_struct.byteto16_map
ctbyt=info_struct.sixteen_to_byte_map
end
else: begin
print,'Error Converting Between Compressed and Counts: Invalid Type'
return
end
endcase
endif
if strupcase(data.units_name) eq 'COMPRESSED' then tmp=ccvt[tmp]
tmp = scale * tmp
if strupcase(data.units_name) ne 'COUNTS' and strupcase(data.units_name) ne 'RATE' and strupcase(data.units_name) ne 'COMPRESSED' then $
tmp = round(dt*tmp/(1.+tmp*dead/dt_arr))
scale = 0
case strupcase(units) of
'COMPRESSED' : scale = 1.
'COUNTS' : scale = 1.
'RATE' : scale = 1./(dt * dt_arr)
'CRATE' : scale = 1./(dt * dt_arr)
'EFLUX' : scale = 1./(dt * gf)
'FLUX' : scale = 1./(dt * gf * energy)
'DF' : scale = 1./(dt * gf * energy^2 * 2./mass/mass*1e5 )
else: begin
message,'Undefined units: '+units
return
end
endcase
if strupcase(units) ne 'COUNTS' and strupcase(units) ne 'RATE' and strupcase(units) ne 'COMPRESSED' then begin
denom = 1.- dead/dt_arr*tmp/dt
void = where(denom lt .1,count)
if count gt 0 then begin
dprint,dlevel=1,min(denom,ind)
denom = denom>.1
dprint,dlevel=1,' Error: convert_peace_units dead time error.'
dprint,dlevel=1,' Dead time correction limited to x10 for ',count,' bins'
dprint,dlevel=1,' Time= ',time_string(data.time,/msec)
endif
tmp2 = tmp/denom
endif else tmp2 = tmp
data.units_name = units
if find_str_element(data,'ddata') ge 0 then data.ddata = scale * tmp2^.5
if strupcase(units) eq 'COMPRESSED' then tmp2=float(ctbyt(tmp2))
data.data = scale * tmp2
return
end