function thm_part_omni_convert_struct,dist_data_in
compile_opt idl2,hidden
dist_data_out=dist_data_in
if dist_data_in.nbins le 1 then return,dist_data_out
tg_names = tag_names(dist_data_out)
str_element,dist_data_out,'data',dblarr(dimen(dist_data_in.data)),/add_replace
if strlowcase(dist_data_in.units_name) eq 'eflux' then begin
scale = dist_data_in.bins
endif else if strlowcase(dist_data_in.units_name) eq 'counts' then begin
if in_set('atten',strlowcase(tg_names)) then begin
scale = 1d/(thm_sst_atten_scale(dist_data_in.atten,dimen(dist_data_in.data))*dist_data_in.gf*dist_data_in.geom_factor*dist_data_in.eff*dist_data_in.bins)
endif else begin
scale = 1d/(dist_data_in.gf*dist_data_in.geom_factor*dist_data_in.eff*dist_data_in.bins)
endelse
endif else begin
message,'ERROR: omni conversion only works with eflux or counts'
endelse
dist_data_out.data = (total(dist_data_in.data*scale,2,/nan)/(total(scale,2,/nan)))#(dblarr(dist_data_in.nbins)+1)
return, dist_data_out
end
function thm_part_omni_convert_array,dist_data_array_in
compile_opt idl2,hidden
dist_data_out=ptrarr(n_elements(dist_data_array_in))
for i = 0,n_elements(dist_data_array_in)-1 do begin
dist_data_template = thm_part_omni_convert_struct((*dist_data_array_in[i])[0])
if ~is_struct(dist_data_template) then return,0
dist_data_out[i] = ptr_new(replicate(dist_data_template,n_elements(*dist_data_array_in[i])))
for j = 0,n_elements(*dist_data_array_in[i])-1 do begin
(*dist_data_out[i])[j] = thm_part_omni_convert_struct((*dist_data_array_in[i])[j])
endfor
endfor
return, dist_data_out
end
pro thm_part_omni_convert,dist_data,error=error
compile_opt idl2
error=1
if is_struct(dist_data) then begin
dist_data=thm_part_omni_convert_struct(dist_data)
endif else if size(dist_data,/type) eq 10 then begin
dist_data=thm_part_omni_convert_array(dist_data)
endif else begin
dprint, 'ERROR: Incorrect type passed to thm_part_omni_convert',dlevel=0
return
endelse
heap_gc
if ~is_struct(dist_data) then return
error=0
return
end