function swe_n_3d, dat2, EBINS=ebins, ABINS=abins, DBINS=dbins
density = 0.
if dat2.valid eq 0 then begin
dprint, 'Invalid Data'
return, density
endif
dat = conv_units(dat2,"eflux")
data = dat.data
na = dat.nenergy
nb = dat.nbins
pot = dat.sc_pot
ebins2 = replicate(1B,na)
if keyword_set(ebins) then ebins2 = ebins
abins2 = replicate(1B,16)
if keyword_set(abins) then abins2 = abins
dbins2 = replicate(1B,6)
if keyword_set(dbins) then dbins2 = dbins
obins2 = reform(abins2 # dbins2, nb)
bins2 = ebins2 # obins2
energy = dat.energy[*,0]
denergy = energy
denergy[0] = abs(energy[1] - energy[0])
for i=1,(na-2) do denergy[i] = abs(energy[i+1] - energy[i-1])/2.
denergy[na-1] = abs(energy[na-1] - energy[na-2])
phi = dat.phi*!dtor
dphi = phi
i0 = 16*indgen(6)
dphi[*,i0] = abs(phi[*,i0+1] - phi[*,i0])
for i=1,14 do dphi[*,i0+i] = abs(phi[*,i0+i+1] - phi[*,i0+i-1])/2.
dphi[*,i0+15] = abs(phi[*,i0+15] - phi[*,i0+14])
the = dat.theta*!dtor
dthe = the
i0 = indgen(16)
dthe[*,i0] = abs(the[*,i0+16] - the[*,i0])
for i=1,4 do dthe[*,i0 + i*16] = abs(the[*,i0 + (i+1)*16] - the[*,i0 + (i-1)*16])/2.
dthe[*,i0 + 5*16] = abs(the[*,i0 + 5*16] - the[*,i0 + 4*16])
domega = 2.*dphi*cos(the)*sin(dthe/2.)
sumdata = total(data*domega*bins2,2)
fovcorr = total(domega*(replicate(1.,na)#obins2),2)/(4.*!pi)
prat = (pot/energy) < 1.
mass = 5.6856297d-06
Const = 1d-5 * sqrt(mass/2D)
density = Const*total(denergy*sqrt(1. - prat)*(energy^(-1.5))*sumdata/fovcorr)
return, density
end