Map.py 1.98 KB
from numpy import shape, pi, histogram2d, arange, newaxis, exp, log, array, sin, cos
from scipy.signal import convolve2d
from matplotlib.pyplot import figure, show, matshow, savefig
from matplotlib.colors import LogNorm
from Read import  resultDirectory
from Constants import degre

thetalim = 180
philim = 180
step = 0.25 #deg
nbBins = array([int(2*philim/step)+1,int(2*thetalim/step)+1])
philim=float(philim)
thetalim=float(thetalim)
limits = [[-thetalim,thetalim],[-philim,philim]]

def isotrop():
   return array([[1]]), "isotropic"

def Gaussian2D(center=[0,0],fwhm=0.01):
   x = arange(-thetalim,thetalim+step,step)
   y = arange(-philim,philim+step,step)
   y = y[:,newaxis]
   return exp(-4*log(2) * ((x-center[0])**2 + (y+center[1])**2) / fwhm**2), "jet_"+str(fwhm)

def printMap(theta,phi,weight,fileId,source=isotrop(),borne=[180,180]):
   '''
      Plot 2D histogram of arrival direction of the photons with energy upper than Elim
      Input: list of directories
      Input (optional): lower energy limit (in GeV (default = 100MeV)
      Input (optional): nature of the source (default isotrop) 
      Input (optional): limits on theta, phi 
      Output: 2D histogram of theta cos(phi), theta sin(phi)
   '''
   fig = figure()

   H,xedges,yedges = histogram2d(theta*cos(phi),theta*sin(phi),nbBins,weights=weight,range=limits)
   conv=convolve2d(H,source[0],boundary="wrap",mode="same")

   ax = fig.add_subplot(111)
   im = ax.matshow(conv,norm=LogNorm(),aspect='auto',
                     extent=[xedges[0],xedges[-1],yedges[0],yedges[-1]])
   #H,xedges,yedges,im = ax.hist2d(theta,phi,nbBins,weights=weight,norm=LogNorm())
   cbar=fig.colorbar(im, ax=ax)
   cbar.ax.set_ylabel("counts")
   ax.set_xlim((-borne[0],borne[0]))
   ax.set_ylim((-borne[1],borne[1]))
   ax.set_xlabel("$\\theta$ $\\cos(\\phi)$ [deg]")
   ax.set_ylabel("$\\theta$ $\\sin(\\phi)$ [deg]")
   ax.grid(b=True,which='major')
   ax.set_title(fileId+" - "+source[1])

   savefig(resultDirectory+fileId+"/map_"+source[1]+".png")
   #show()