;+ ;FUNCTION make_3dmap, dat,nx,ny ;PURPOSE: ; Returns a 3d map using the theta's and phi's of a 3d structure. ; This routine is primarily used by "PLOT3D_NEW". ;INPUT: dat: a 3d structure (see "3D_STRUCTURE" for more info). ; nx: x dimension of output array. ; ny: y dimension of output array. ;OUTPUT: A 2 dimensional array of bin values that reflect the mapping. ;KEYWORDS: ; HIGHEST: force the highest bin number to prevail for overlapping bins. ;ASSUMPTIONS: theta +/- dtheta should be in the range: -90 to +90. ;NOTES: if there are any overlapping bins, then the lowest bin number ; will win, unless the HIGHEST keyword is set. ;WRITTEN BY: Davin Larson, 96-2-8 ;LAST MODIFICATION: @(#)make_3dmap.pro 1.7 99/10/22 ;- function make_3dmap, dat,nx,ny, highest=highest if n_elements(nx) eq 0 then nx = 64 if n_elements(ny) eq 0 then ny = 32 str_element,dat,'bins',bins if n_elements(bins) eq dat.nenergy*dat.nbins then $ bins = total(bins,1) gt 0 if n_elements(bins) eq 0 then bins = replicate(1b,dat.nbins) phi = total(dat.phi,1,/nan)/total(finite(dat.phi),1) theta = total(dat.theta,1,/nan)/total(finite(dat.theta),1) dphi = total(dat.dphi,1,/nan)/total(finite(dat.dphi),1) ;dphi = dat.dphi dtheta = total(dat.dtheta,1,/nan)/total(finite(dat.dtheta),1) ;dtheta = dat.dtheta map = replicate(-1,nx,ny) ;help,phi,theta,dphi,dtheta ; phi,theta,dphi and dtheta should have the nbins = n_elements(phi) p1 = round((phi-dphi/2.)*nx/360.) p2 = round((phi+dphi/2.)*nx/360.)-1 t1 = round((theta-dtheta/2.+90.)*ny/180.) t2 = round((theta+dtheta/2.+90.)*ny/180.)-1 for b1=0,nbins-1 do begin if keyword_set(highest) then b=b1 else b=nbins-b1-1 if (bins[b] gt 0) and (p2(b) ne -1) and (p1(b) ne -1) then begin p = indgen(p2(b)-p1(b)+1) + p1(b) p = (p+nx) mod nx ; array of p indices t = indgen(t2(b)-t1(b)+1) + t1(b) t = (t+ny) mod ny ; array of t indices for i=0,n_elements(t)-1 do map(p,t(i)) = b endif endfor return,map end