;+
;FUNCTION:  omni3d
;PURPOSE:  produces an omnidirectional spectrum structure by summing
; over the non-zero bins in the keyword bins.
; this structure can be plotted with "spec3d"
;
;CREATED BY:	Davin Larson
;LAST MODIFICATION:	@(#)omni3d.pro	1.12 02/04/17
;
; WARNING:  This is a very crude structure; use at your own risk.
;-

function omni3d,inpdat,  $
   bins=bins            ;not finished !!!

dat = inpdat
units = dat.units_name
if size(/type,dat) ne 8 then return,0
if dat.valid eq 0 then return,{valid:0}
tags = ['project_name','data_name','valid','units_name','units_procedure',  $
  'time','end_time', 'integ_t',  'nbins','nenergy',  $
    'mass', 'eff','geomfactor']
extract_tags,omni,dat,tags=tags
if keyword_set(bins) eq 0 then bins = replicate(1b,dat.nbins)
ind = where(bins,count)
if count eq 0 then return,omni

omni.nbins = 1

fluxindx = where(['FLUX','EFLUX','DF'] eq strupcase(units),fluxcnt)
if fluxcnt eq 0 then begin
	dprint, 'Converting units to EFlux'
	dat=conv_units(dat,'EFlux')
endif

norm = count

str_element,dat,'feff',value=feff
if n_elements(feff) ne 0 then $
   str_element,/add,omni, 'feff',total(dat.feff(*,ind),2)/count

str_element,/add,omni, 'units_name', dat.units_name
str_element,/add,omni, 'denergy',total(dat.denergy(*,ind),2)/count
str_element,/add,omni, 'data'   ,total(dat.data(*,ind),2)/norm
str_element,/add,omni, 'energy' ,total(dat.energy(*,ind),2)/count
;str_element,/add,omni, 'deadtime', total(dat.deadtime(*,ind))
str_element,/add,omni, 'domega' ,total(dat.domega(ind))

str_element,dat,'ddata',value=ddata
if n_elements(ddata) ne 0 then $
   str_element,/add,omni,'ddata', sqrt(total(ddata(*,ind)^2,2))/norm


;if units eq 'Counts' then $
;  str_element,/add,omni, 'ddata'  ,sqrt(omni.data > .7)/norm

omni.nbins = 1

return,omni
end

