;+ ;FUNCTION: dje_3d_new(dat,ENERGY=en,ERANGE=er,EBINS=ebins,ANGLE=an,ARANGE=ar,BINS=bins) ;INPUT: ; dat: structure, 3d data structure filled by get_eesa_surv, get_eesa_burst, etc. ;KEYWORDS ; ENERGY: fltarr(2), optional, min,max energy range for integration ; ERANGE: fltarr(2), optional, min,max energy bin numbers for integration ; EBINS: bytarr(na), optional, energy bins array for integration ; 0,1=exclude,include, ; na = dat.nenergy ; ANGLE: fltarr(2,2), optional, angle range for integration ; theta min,max (0,0),(1,0) -900. ; energy/charge analyzer ; the following 15 lines were added to prevent photoelectron contamination when in the plasmasheet ; this section assumes the ESA energy steps go from high energy to low energy lin = 1 ; this line determines whether the data is df or log(df) interpolated to low energy if charge eq -1. then begin ; scale=1. scale=.5 if dat.nbins eq 1 then begin ind=where(energy[*] lt scale*denergy[*],count) ; if count gt 0 and charge lt 0 then begin if count gt 0 then begin mind = min(ind) denergy[mind] = energy[mind]+denergy[mind]/2. energy[ind] = 0. energy[mind] = denergy[mind]/2. if lin eq 1 then data[mind] = data[mind-1] + (energy[mind-1]-energy[mind])*(data[mind-1]-data[mind-2])/(energy[mind-2]-energy[mind-1]) if lin eq 0 then data[mind] = exp(alog(data[mind-1]) + (energy[mind-1]-energy[mind])*(alog(data[mind-1])-alog(data[mind-2]))/(energy[mind-2]-energy[mind-1])) endif else begin nrg=dat.nenergy-1 if lin eq 1 then data[nrg]=data[nrg]+(data[nrg]-data[nrg-1])/(energy[nrg]-energy[nrg-1])*(-energy[nrg]/2.+denergy[nrg]/4.) if lin eq 0 then data[nrg]=exp(alog(data[nrg])+(alog(data[nrg])-alog(data[nrg-1]))/(energy[nrg]-energy[nrg-1])*(-energy[nrg]/2.+denergy[nrg]/4.)) denergy[nrg]=denergy[nrg]/2.+energy[nrg] energy[nrg]=denergy[nrg]/2. endelse endif else begin ind=where(energy[*,0] lt scale*denergy[*,0],count) ; if count gt 0 and charge lt 0 then begin if count gt 0 then begin mind=min(ind) denergy[mind,*] = energy[mind,*]+denergy[mind,*]/2. energy[ind,*] = 0. energy[mind,*] = denergy[mind,*]/2. if lin eq 1 then data[mind,*] = data[mind-1,*] + (energy[mind-1,*]-energy[mind,*])*(data[mind-1,*]-data[mind-2,*])/(energy[mind-2,*]-energy[mind-1,*]) if lin eq 0 then data[mind,*] = exp(alog(data[mind-1,*]) + (energy[mind-1,*]-energy[mind,*])*(alog(data[mind-1,*])-alog(data[mind-2,*]))/(energy[mind-2,*]-energy[mind-1,*])) endif else begin nrg=dat.nenergy-1 if lin eq 1 then data[nrg,*]=data[nrg,*]+(data[nrg,*]-data[nrg-1,*])/(energy[nrg,*]-energy[nrg-1,*])*(-energy[nrg,*]/2.+denergy[nrg,*]/4.) if lin eq 0 then data[nrg,*]=exp(alog(data[nrg,*])+(alog(data[nrg,*])-alog(data[nrg-1,*]))/(energy[nrg,*]-energy[nrg-1,*])*(-energy[nrg,*]/2.+denergy[nrg,*]/4.)) denergy[nrg,*]=denergy[nrg,*]/2.+energy[nrg,*] energy[nrg,*]=denergy[nrg,*]/2. endelse endelse ; this section throws away background counts in the lowest ion energy channels in low density plasmas as determined from sc_pot endif else if charge eq +1. then begin if dat.sc_pot gt 20. then begin if dat.nbins eq 1 then begin ind=where(dat.energy lt dat.sc_pot/2.,count) if count gt 0 then data[ind]=0. endif else begin ind=where(dat.energy[*,0] lt dat.sc_pot/2.,count) if count gt 0 then data[ind,*]=0. endelse endif endif eflux3dx = (Const^2*total(denergy*(energy)^2*data*(dtheta/2.+cos(2*theta)*sin(dtheta)/2.)*(2.*sin(dphi/2.)*cos(phi))*denergy*(energy)^2*data1*(dtheta/2.+cos(2*theta)*sin(dtheta)/2.)*(2.*sin(dphi/2.)*cos(phi))))^.5 eflux3dy = (Const^2*total(denergy*(energy)^2*data*(dtheta/2.+cos(2*theta)*sin(dtheta)/2.)*(2.*sin(dphi/2.)*sin(phi))*denergy*(energy)^2*data*(dtheta/2.+cos(2*theta)*sin(dtheta)/2.)*(2.*sin(dphi/2.)*sin(phi))))^.5 eflux3dz = (Const^2*total(denergy*(energy)^2*data*(2.*sin(theta)*cos(theta)*sin(dtheta/2.)*cos(dtheta/2.))*dphi*denergy*(energy)^2*data1*(2.*sin(theta)*cos(theta)*sin(dtheta/2.)*cos(dtheta/2.))*dphi))^.5 ; units are ergs/cm^2-sec return, [eflux3dx,eflux3dy,eflux3dz] end