;+
;FUNCTION:	heatflux
;PURPOSE:	Calulates heatlux from a 3dimensional data structure such as
;		those generated by get_el,get_pl,etc. 
;		e.g. "get_el"
;INPUT:		
;	dat:	A 3d data structure.
;KEYWORDS:
;	esteprange:	the energy step range to use, default is full range
;CREATED BY:	Davin Larson
;LAST MODIFICATION:	@(#)heatflux.pro	1.5 95/10/06
;-



function heatflux, dat, $
   ESTEPRANGE = esteprange

if n_elements(esteprange) eq 0 then esteprange = [0 ,dat.nenergy-1]

e1 = esteprange(0)
e2 = esteprange(1)
b1 = 0
b2 = dat.nbins-1


data = dat.data(e1:e2,b1:b2)
theta= dat.theta(e1:e2,b1:b2)
phi  = dat.phi(e1:e2,b1:b2)
energy = dat.energy(e1:e2,b1:b2)

mult = replicate(1.,e2-e1+1)
domega = mult # dat.domega(b1:b2)
geom =  mult # dat.geom(b1:b2)

sphere_to_cart, 1., theta, phi, sx,sy,sz

pp = data * domega * energy * energy / geom  ;must be fixed: incorrect weights!
qx = total(sx*sx*pp,/double)
qy = total(sy*sy*pp,/double)
qz = total(sz*sz*pp,/double)

heatflux = [ qx,qy,qz ]

return ,heatflux
end