; + ;PROCEDURE: accum_df2d,dat,VLIM=vlim,NGRID=ngrid,MINCNT=mincnt ;PURPOSE: ; Adds 2D pitch angle distribution (df2d, vx2d, vy2d) to a 3d structure ; Also adds dat.df2dz, dat.vx2dz, dat.vy2dz to dat structure. ; ; df2d, vx2d and vy2d are the interpolated two dimensional ; distribution function and velocity in the x-y plane. ; df2d is generated from df by folding pitch angles with vy>0 ; and vy<0 to opposite sides of vy in df2d to allow some ; measure of non-gyrotropic distributions. ; df2dz, vx2dz and vy2dz are interpolated to the x-z plane. ; ; "x" is along the magnetic field, the "x-y" plane is defined ; to contain the magnetic field and the drift velocity, ; and the reference frame is transformed to the drift frame. ; ;INPUT: ; dat: 3D structure (obtained from get_??() routines) ; e.g. "GET_PH" ;KEYWORDS: ; mincnt: If present, this minimum count level gets ; added to all angle bins. Used to smooth ; noisy contour plots. ; Default : mincnt=0. (You may want to use mincnt=.5) ; vlim Velocity (km/s) limit for the vx2d, vy2d arrays ; vx2d,vy2d arrays have 101 elements from -vlim to +vlim ; Default is vlim=2500. for pesah ; Default is vlim=2500. for eesal ;Notes: ; Magnetic field direction must be present in dat, dat.magf. ; See "GET_MFI" ; See "ADD_MAGF" ; Drift velocity must be present in dat, dat.vsw. ; See "GET_PMOM" and "ADD_VSW" ; ; Currently all velocities are assumed non-relativistic. ; ;Created by: Davin Larson 1995-10-08 ;Modified from routine by J.P.McFadden 9-15-95 ; - pro accum_df2d, dat, df2d,VLIM=vlim,NGRID=ngrid,MINCNT=mincnt if data_type(df2d) ne 8 then begin df2d = dat endif if not keyword_set(mincnt) then mincnt=0. if not keyword_set(vlim) then vlim = max(sqrt(2*dat.energy/dat.mass)) $ else vlim = float(vlim) str_element,dat,'magf',val=magfield str_element,dat,'vsw',val=vsw str_element,dat,'bins',val=bins nbins=dat.nbins nenergy=dat.nenergy case ndimen(bins) of -1 or 0: ind = indgen(nenergy*nbins) 1: ind = where(replicate(1,nenergy) # bins) 2: ind = where(bins) endcase ndat = conv_units(dat,'df') df_dat = ndat.data(ind) ;Relativistic velocity: (momentum/mass) (km/s) ; vmag=(2.*ndat.energy(ind)/dat.mass)^.5 ; Not relativistic! vmag = velocity(ndat.energy(ind),mass,/mom) theta = ndat.theta(ind) phi = ndat.phi(ind) nd = n_elements(ind) sphere_to_cart,vmag,theta,phi,vx,vy,vz vel = [[vx],[vy],[vz]] vel = vel - replicate(1.,nd) # vsw rot = rot_mat(magfield,vsw) vd2d=reform(vsw # rot) newvel = vel # rot cart_to_sphere,newvel(*,0),newvel(*,1),newvel(*,2),vmag,theta,phi newphi = 0. sphere_to_cart,vmag,theta,newphi,vperp_dat,dummy,vpar_dat add_str_element,dat,'vsw2d',vd2d add_str_element,dat,'df_dat',df_dat add_str_element,dat,'vperp_dat',vperp_dat add_str_element,dat,'vpar_dat',vpar_dat add_str_element,dat,'phi_dat',phi vperp_dat = [vperp_dat,-vperp_dat] vpar_dat = [vpar_dat,vpar_dat] df_dat = [df_dat,df_dat] triangulate, vpar_dat, vperp_dat, tr if not keyword_set(ngrid) then ngrid = 50 gs=[vlim,vlim]/ngrid xylim=[-1*vlim,-1*vlim,vlim,vlim] df2d = trigrid(vpar_dat, vperp_dat, df_dat, tr, gs, xylim) ;vpar2d = trigrid(vpar_dat, vperp_dat, vpar_dat, tr, gs, xylim) ;vperp2d = trigrid(vpar_dat, vperp_dat, vperp_dat, tr, gs, xylim) vpar2d = -1.*vlim+gs(0)*findgen(fix((2.*vlim)/gs(0))+1) vperp2d = -1.*vlim+gs(1)*findgen(fix((2.*vlim)/gs(1))+1) add_str_element,dat,'df2d',df2d add_str_element,dat,'vpar2d',vpar2d add_str_element,dat,'vperp2d',vperp2d end