Commit f42463907fb1bec9c6dc7d526d4c07d3220ead49

Authored by Thomas Fitoussi
1 parent e6f5876a
Exists in master

Improve angular distribution (plot in log-log)

@@ -26,7 +26,7 @@ if shape(argv)[0] < 3: @@ -26,7 +26,7 @@ if shape(argv)[0] < 3:
26 error("not enough argument") 26 error("not enough argument")
27 27
28 elif argv[1] == "spectrum": 28 elif argv[1] == "spectrum":
29 - drawSpectrum(argv[2:]) 29 + drawSpectrum(argv[2:],PlotAnalytic=True)
30 30
31 elif argv[1] == "spectrumLept": 31 elif argv[1] == "spectrumLept":
32 drawSpectrum_normaLepton(argv[2:]) 32 drawSpectrum_normaLepton(argv[2:])
Modules/Analytic.py
1 from Constants import * 1 from Constants import *
2 -from numpy import sqrt, abs, sin, arcsin 2 +from numpy import sqrt, abs, cos, sin, arcsin
3 from Read import ReadE_source, ReadD_source, ReadEGMF 3 from Read import ReadE_source, ReadD_source, ReadEGMF
4 4
5 # Value for analytic expression 5 # Value for analytic expression
@@ -21,6 +21,13 @@ def Analytic_theta(E_ic,fileId): @@ -21,6 +21,13 @@ def Analytic_theta(E_ic,fileId):
21 delta=Dic0/(2*RL0)*((Esource/2)**2 /Ee2 -1) 21 delta=Dic0/(2*RL0)*((Esource/2)**2 /Ee2 -1)
22 return abs(arcsin(delta_to_theta*sin(delta))*degre) 22 return abs(arcsin(delta_to_theta*sin(delta))*degre)
23 23
  24 +def Analytic_delay(theta, E0_source, distSource):
  25 + delta_ic = arcsin(lambda_gg(E0_source)/distSource*theta/degre)
  26 + #c_delta_t = lambda_gg(E0_source)*(1-cos(delta_ic))-distSource*(1-cos(theta))
  27 + #return abs(c_delta_t*Mpc/c)
  28 + coef = lambda_gg(E0_source)/(2*c/Mpc)
  29 + return coef*delta_ic#**2
  30 +
24 # Compton accumulation 31 # Compton accumulation
25 def ECompton_threshold(Compton_threshold = 0.005): 32 def ECompton_threshold(Compton_threshold = 0.005):
26 return Compton_threshold/(4/3*Ecmb/me*1e-3) *me*1e-6 #GeV 33 return Compton_threshold/(4/3*Ecmb/me*1e-3) *me*1e-6 #GeV
Modules/Analytic.pyc
No preview for this file type
Modules/Angle.py
@@ -3,12 +3,18 @@ from matplotlib.pyplot import figure, show, ylim, setp @@ -3,12 +3,18 @@ from matplotlib.pyplot import figure, show, ylim, setp
3 from matplotlib import gridspec 3 from matplotlib import gridspec
4 from Read import ReadMomentum, ReadPosition, ReadEnergy, ReadWeight, ReadNphot_source 4 from Read import ReadMomentum, ReadPosition, ReadEnergy, ReadWeight, ReadNphot_source
5 from Analytic import Analytic_theta 5 from Analytic import Analytic_theta
  6 +from Map import thetaphi
6 from Constants import degre 7 from Constants import degre
7 8
8 Eliminf = 1e0 #GeV 9 Eliminf = 1e0 #GeV
9 Elimsup = 1e5 #GeV 10 Elimsup = 1e5 #GeV
10 11
11 def compute_theta(fileName): 12 def compute_theta(fileName):
  13 + '''
  14 + Compute arrival angle
  15 + Input: directory name
  16 + Output: energy, weight, arrival angle
  17 + '''
12 position = ReadPosition(fileName) 18 position = ReadPosition(fileName)
13 momentum = ReadMomentum(fileName) 19 momentum = ReadMomentum(fileName)
14 energy = ReadEnergy(fileName) 20 energy = ReadEnergy(fileName)
@@ -29,12 +35,17 @@ def compute_theta(fileName): @@ -29,12 +35,17 @@ def compute_theta(fileName):
29 return energy, weight, theta 35 return energy, weight, theta
30 36
31 def angle_vs_energy(fileName): 37 def angle_vs_energy(fileName):
  38 + '''
  39 + Compute arrival angle versus energy
  40 + Input: directory name
  41 + Output: energy, arrival angle
  42 + '''
32 energy,weight,theta = compute_theta(fileName) 43 energy,weight,theta = compute_theta(fileName)
33 nbBins = 40 44 nbBins = 40
34 45
35 energy =log10(energy) 46 energy =log10(energy)
36 - angle,ener =histogram(energy,nbBins,weights=theta)  
37 - nb,ener =histogram(energy,nbBins) 47 + angle,ener =histogram(energy,nbBins,weights=weight*theta)
  48 + nb,ener =histogram(energy,nbBins,weights=weight)
38 ener = 10**ener 49 ener = 10**ener
39 enercenter=(ener[1:nbBins+1]+ener[0:nbBins])/2 50 enercenter=(ener[1:nbBins+1]+ener[0:nbBins])/2
40 angle = angle/nb 51 angle = angle/nb
@@ -42,6 +53,11 @@ def angle_vs_energy(fileName): @@ -42,6 +53,11 @@ def angle_vs_energy(fileName):
42 return enercenter, angle 53 return enercenter, angle
43 54
44 def drawAngle(files): 55 def drawAngle(files):
  56 + '''
  57 + Plot arrival angle versus energy + analytic expression
  58 + Input: list of directories
  59 + Output: graph of arrival angle versus energy
  60 + '''
45 fig = figure() 61 fig = figure()
46 gs = gridspec.GridSpec(2, 1, height_ratios=[4,1]) 62 gs = gridspec.GridSpec(2, 1, height_ratios=[4,1])
47 fig.subplots_adjust(hspace=0.001) 63 fig.subplots_adjust(hspace=0.001)
@@ -75,31 +91,49 @@ def drawAngle(files): @@ -75,31 +91,49 @@ def drawAngle(files):
75 91
76 show() 92 show()
77 93
78 -def radial(fileName):  
79 - nbBins = 20  
80 - energy,weight,theta = compute_theta(fileName)  
81 -  
82 - dn,angle=histogram(theta**2,nbBins,range=[0,0.25],weights=weight)  
83 - thetacenter=(angle[1:nbBins+1]+angle[0:nbBins])/2  
84 - dtheta=angle[1:nbBins+1]-angle[0:nbBins]  
85 - dndtheta2=dn/dtheta  
86 - maxflux = ReadNphot_source(fileName)  
87 - dndtheta2 /= maxflux  
88 -  
89 - return thetacenter, dndtheta2  
90 -  
91 -def drawRadial(files): 94 +##############################################################################################
  95 +def radial(fileId,thetamax=90):
  96 + '''
  97 + Compute flux versus arrival angle
  98 + Input: directory name
  99 + Input (optionnal): maximal angle desired (by default full sky)
  100 + Output: arrival angle, flux (dn/dtheta)
  101 + '''
  102 + nbBins = 50
  103 + energy,weight,theta = compute_theta(fileId)
  104 +
  105 + theta=log10(theta)
  106 + dn,angle = histogram(theta,nbBins,range=[log10(1e-6),log10(thetamax)],weights=weight)
  107 + angle=10**angle
  108 + thetacenter = (angle[1:nbBins+1]+angle[0:nbBins])/2
  109 + dtheta = angle[1:nbBins+1]-angle[0:nbBins]
  110 + dndtheta = dn/dtheta
  111 + maxflux = ReadNphot_source(fileId)
  112 + dndtheta /= maxflux
  113 +
  114 + print "integral: ", sum(dtheta*dndtheta)
  115 +
  116 + return thetacenter, dndtheta
  117 +
  118 +def drawRadial(files,thetamax=90):
  119 + '''
  120 + Plot flux versus arrival angle
  121 + Input: list of directories
  122 + Input (optionnal): maximal angle desired (by default full sky)
  123 + Output: graph of flux versus angle
  124 + '''
92 fig = figure() 125 fig = figure()
93 ax = fig.add_subplot(111) 126 ax = fig.add_subplot(111)
94 127
95 for fileId in files: 128 for fileId in files:
96 - theta,dndtheta2=radial(fileId) 129 + theta,dndtheta2=radial(fileId,thetamax)
97 ax.plot(theta,dndtheta2,drawstyle='steps-mid',label=fileId) 130 ax.plot(theta,dndtheta2,drawstyle='steps-mid',label=fileId)
98 131
99 - ax.legend(loc="best",title="%3d - %3d GeV"%(Eliminf,Elimsup)) 132 + ax.legend(loc="best")
  133 + ax.set_xscale('log')
100 ax.set_yscale('log') 134 ax.set_yscale('log')
101 ax.grid(b=True,which='major') 135 ax.grid(b=True,which='major')
102 - ax.set_xlabel("$\\theta^2$ [deg$^2$]")  
103 - ax.set_ylabel("$dN/d\\theta^2$ [deg$^{-2}$]") 136 + ax.set_xlabel("$\\theta$ [deg]")
  137 + ax.set_ylabel("$dN/d\\theta$ [deg$^{-1}$]")
104 138
105 show() 139 show()
Modules/Angle.pyc
No preview for this file type
Modules/Constants.pyc
No preview for this file type
Modules/Generation.py
@@ -4,6 +4,11 @@ from Read import ReadGeneration, ReadWeight @@ -4,6 +4,11 @@ from Read import ReadGeneration, ReadWeight
4 4
5 5
6 def drawGeneration(files): 6 def drawGeneration(files):
  7 + '''
  8 + Plot histogram of particles'generations
  9 + Input: list of directories
  10 + Output: histogram of generations
  11 + '''
7 fig = figure() 12 fig = figure()
8 ax = fig.add_subplot(111) 13 ax = fig.add_subplot(111)
9 nbBins = 7 14 nbBins = 7
Modules/Generation.pyc
No preview for this file type
Modules/Map.py
1 -from numpy import shape, pi, histogram2d, arange, newaxis, exp, log, array 1 +from numpy import shape, pi, histogram2d, arange, newaxis, exp, log, array, sin, cos
2 from scipy.signal import convolve2d 2 from scipy.signal import convolve2d
3 from matplotlib.pyplot import figure, show, matshow 3 from matplotlib.pyplot import figure, show, matshow
4 from matplotlib.colors import LogNorm 4 from matplotlib.colors import LogNorm
@@ -7,14 +7,21 @@ from Read import ReadD_source, Readz_source, ReadEGMF @@ -7,14 +7,21 @@ from Read import ReadD_source, Readz_source, ReadEGMF
7 from Constants import degre 7 from Constants import degre
8 8
9 thetalim = 180 9 thetalim = 180
10 -philim = 90  
11 -step = 1 #deg 10 +philim = 180
  11 +step = 0.25 #deg
12 nbBins = array([int(2*philim/step)+1,int(2*thetalim/step)+1]) 12 nbBins = array([int(2*philim/step)+1,int(2*thetalim/step)+1])
13 philim=float(philim) 13 philim=float(philim)
14 thetalim=float(thetalim) 14 thetalim=float(thetalim)
15 limits = [[-thetalim,thetalim],[-philim,philim]] 15 limits = [[-thetalim,thetalim],[-philim,philim]]
16 16
17 def thetaphi(fileId,Elim=0.1): 17 def thetaphi(fileId,Elim=0.1):
  18 + '''
  19 + Compute arrival angles (theta,phi) selected with energy upper than Elim
  20 + normalize to 1 source photon
  21 + Input: directory name
  22 + Input (optional): lower energy limit in GeV (default = 100MeV)
  23 + Output: energy (GeV), theta, phi (degre), weight
  24 + '''
18 energy = ReadEnergy(fileId) 25 energy = ReadEnergy(fileId)
19 weight = ReadWeight(fileId) 26 weight = ReadWeight(fileId)
20 thetaDir,phiDir = ReadMomentumAngle(fileId)*degre 27 thetaDir,phiDir = ReadMomentumAngle(fileId)*degre
@@ -42,7 +49,15 @@ def Gaussian2D(center=[0,0],fwhm=0.01): @@ -42,7 +49,15 @@ def Gaussian2D(center=[0,0],fwhm=0.01):
42 y = y[:,newaxis] 49 y = y[:,newaxis]
43 return exp(-4*log(2) * ((x-center[0])**2 + (y+center[1])**2) / fwhm**2) 50 return exp(-4*log(2) * ((x-center[0])**2 + (y+center[1])**2) / fwhm**2)
44 51
45 -def drawMap(files,Elim=0.1,source=isotrop(),borne=[180,90]): 52 +def drawMap(files,Elim=0.1,source=isotrop(),borne=[180,180]):
  53 + '''
  54 + Plot 2D histogram of arrival direction of the photons with energy upper than Elim
  55 + Input: list of directories
  56 + Input (optional): lower energy limit (in GeV (default = 100MeV)
  57 + Input (optional): nature of the source (default isotrop)
  58 + Input (optional): limits on theta, phi
  59 + Output: 2D histogram of theta cos(phi), theta sin(phi)
  60 + '''
46 print "Cut at", Elim, "GeV" 61 print "Cut at", Elim, "GeV"
47 fig = figure() 62 fig = figure()
48 nbplots = len(files) 63 nbplots = len(files)
@@ -51,7 +66,7 @@ def drawMap(files,Elim=0.1,source=isotrop(),borne=[180,90]): @@ -51,7 +66,7 @@ def drawMap(files,Elim=0.1,source=isotrop(),borne=[180,90]):
51 for fileId in files: 66 for fileId in files:
52 energy, theta, phi, weight = thetaphi(fileId,Elim) 67 energy, theta, phi, weight = thetaphi(fileId,Elim)
53 68
54 - H,xedges,yedges = histogram2d(phi,theta,nbBins,weights=weight,range=limits) 69 + H,xedges,yedges = histogram2d(theta*cos(phi),theta*sin(phi),nbBins,weights=weight,range=limits)
55 conv=convolve2d(H,source,boundary="wrap",mode="same") 70 conv=convolve2d(H,source,boundary="wrap",mode="same")
56 71
57 ax = fig.add_subplot(100+nbplots*10+ind) 72 ax = fig.add_subplot(100+nbplots*10+ind)
@@ -62,8 +77,8 @@ def drawMap(files,Elim=0.1,source=isotrop(),borne=[180,90]): @@ -62,8 +77,8 @@ def drawMap(files,Elim=0.1,source=isotrop(),borne=[180,90]):
62 cbar.ax.set_ylabel("counts normalize to 1 photon emitted") 77 cbar.ax.set_ylabel("counts normalize to 1 photon emitted")
63 ax.set_xlim((-borne[0],borne[0])) 78 ax.set_xlim((-borne[0],borne[0]))
64 ax.set_ylim((-borne[1],borne[1])) 79 ax.set_ylim((-borne[1],borne[1]))
65 - ax.set_xlabel("$\\theta$ [deg]")  
66 - ax.set_ylabel("$\\phi$ [deg]") 80 + ax.set_xlabel("$\\theta$ $\\cos(\\phi)$ [deg]")
  81 + ax.set_ylabel("$\\theta$ $\\sin(\\phi)$ [deg]")
67 ax.grid(b=True,which='major') 82 ax.grid(b=True,which='major')
68 zsource=Readz_source(fileId) 83 zsource=Readz_source(fileId)
69 Dsource=ReadD_source(fileId) 84 Dsource=ReadD_source(fileId)
Modules/Map.pyc
No preview for this file type
Modules/Spectrum.py
@@ -7,6 +7,11 @@ from Read import ReadNphot_source, ReadGeneration @@ -7,6 +7,11 @@ from Read import ReadNphot_source, ReadGeneration
7 from Analytic import Analytic_flux, Ethreshold_gg 7 from Analytic import Analytic_flux, Ethreshold_gg
8 8
9 def spectrum(fileId,gen=-1): 9 def spectrum(fileId,gen=-1):
  10 + '''
  11 + Compute flux versus energy
  12 + Input: directory name, generation (optional, by default: all generation)
  13 + Output: energy, flux
  14 + '''
10 energy = ReadEnergy(fileId) 15 energy = ReadEnergy(fileId)
11 weight = ReadWeight(fileId) 16 weight = ReadWeight(fileId)
12 17
@@ -30,12 +35,19 @@ def spectrum(fileId,gen=-1): @@ -30,12 +35,19 @@ def spectrum(fileId,gen=-1):
30 return enercenter,flux 35 return enercenter,flux
31 36
32 ########################################################################################### 37 ###########################################################################################
33 -def drawSpectrum(files,PlotElmag=False,PlotAnalytic=False): 38 +def drawSpectrum(files,gen=-1,PlotElmag=False,PlotAnalytic=False):
  39 + '''
  40 + Plot flux versus energy
  41 + Input: list of directories
  42 + Input (optional, default=all): selection on the generation
  43 + Input (optional, default=False): Plot Elmag spectrum if exists, plot analytic expression
  44 + Output: graph spectrum normalize to 1 source photon
  45 + '''
34 fig = figure() 46 fig = figure()
35 ax = fig.add_subplot(111) 47 ax = fig.add_subplot(111)
36 48
37 for fileId in files: 49 for fileId in files:
38 - energy,flux = spectrum(fileId) 50 + energy,flux = spectrum(fileId,gen)
39 if PlotElmag: 51 if PlotElmag:
40 maxflux = max(flux)*(.8) 52 maxflux = max(flux)*(.8)
41 p=ax.plot(energy,flux,drawstyle='steps-mid',label=fileId) 53 p=ax.plot(energy,flux,drawstyle='steps-mid',label=fileId)
@@ -47,9 +59,10 @@ def drawSpectrum(files,PlotElmag=False,PlotAnalytic=False): @@ -47,9 +59,10 @@ def drawSpectrum(files,PlotElmag=False,PlotAnalytic=False):
47 ax.plot(energy,flux,"--",color=p[0].get_color(),label="Elmag - "+fileId) 59 ax.plot(energy,flux,"--",color=p[0].get_color(),label="Elmag - "+fileId)
48 60
49 if PlotAnalytic: 61 if PlotAnalytic:
50 - alpha=2.8e3 62 + minEner=min(energy)
  63 + alpha=flux[energy==minEner]/sqrt(minEner)
51 ax.plot(energy,alpha*sqrt(energy),'--m',linewidth=2) 64 ax.plot(energy,alpha*sqrt(energy),'--m',linewidth=2)
52 - ax.plot(energy,energy**(0)*max(flux),'--m',linewidth=2) 65 + ax.plot(energy,energy**(0)*max(flux)*0.95,'--m',linewidth=2)
53 ax.axvline(x=Ethreshold_gg(), ymin=0., ymax = 1., color='r', linewidth=2) 66 ax.axvline(x=Ethreshold_gg(), ymin=0., ymax = 1., color='r', linewidth=2)
54 67
55 ax.set_xscale('log') 68 ax.set_xscale('log')
@@ -65,6 +78,11 @@ def drawSpectrum(files,PlotElmag=False,PlotAnalytic=False): @@ -65,6 +78,11 @@ def drawSpectrum(files,PlotElmag=False,PlotAnalytic=False):
65 show() 78 show()
66 79
67 def drawSpectrum_normaLepton(files): 80 def drawSpectrum_normaLepton(files):
  81 + '''
  82 + Plot flux versus energy compare with analytic expression
  83 + Input: list of directories
  84 + Output: graph spectrum normalize to 1 lepton generated
  85 + '''
68 fig = figure() 86 fig = figure()
69 gs = gridspec.GridSpec(2, 1, height_ratios=[4,1]) 87 gs = gridspec.GridSpec(2, 1, height_ratios=[4,1])
70 fig.subplots_adjust(hspace=0.001) 88 fig.subplots_adjust(hspace=0.001)
@@ -101,6 +119,11 @@ def drawSpectrum_normaLepton(files): @@ -101,6 +119,11 @@ def drawSpectrum_normaLepton(files):
101 119
102 ######################################################################################## 120 ########################################################################################
103 def drawSpectrumGen(fileId): 121 def drawSpectrumGen(fileId):
  122 + '''
  123 + Plot flux versus energy generation by generation
  124 + Input: directory name
  125 + Output: graph spectrum normalize to 1 photon source
  126 + '''
104 fig = figure() 127 fig = figure()
105 ax = fig.add_subplot(111) 128 ax = fig.add_subplot(111)
106 129
@@ -110,8 +133,9 @@ def drawSpectrumGen(fileId): @@ -110,8 +133,9 @@ def drawSpectrumGen(fileId):
110 133
111 energy,flux = spectrum(fileId) 134 energy,flux = spectrum(fileId)
112 p=ax.plot(energy,flux,drawstyle='steps-mid',color='k',label="gen = all") 135 p=ax.plot(energy,flux,drawstyle='steps-mid',color='k',label="gen = all")
113 - alpha=2e3  
114 136
  137 + minEner=min(energy)
  138 + alpha=flux[energy==minEner]/sqrt(minEner)
115 ax.plot(energy,sqrt(energy)*alpha,'--m',linewidth=2) 139 ax.plot(energy,sqrt(energy)*alpha,'--m',linewidth=2)
116 ax.plot(energy,energy**(0)*max(flux),'--m',linewidth=2) 140 ax.plot(energy,energy**(0)*max(flux),'--m',linewidth=2)
117 ax.axvline(x=Ethreshold_gg(), ymin=0., ymax = 1., color='r', linewidth=2) 141 ax.axvline(x=Ethreshold_gg(), ymin=0., ymax = 1., color='r', linewidth=2)
Modules/Spectrum.pyc
No preview for this file type
Modules/Timing.py
1 -from numpy import histogram, log10, shape 1 +from numpy import histogram, log10, shape, sqrt, arccos
2 from matplotlib.pyplot import figure, show 2 from matplotlib.pyplot import figure, show
3 from scipy.integrate import quad 3 from scipy.integrate import quad
4 -from Read import ReadTime, ReadWeight, Readz_source, ReadNphot_source  
5 -from Constants import yr 4 +from Read import ReadTime, ReadWeight, ReadGeneration, ReadE_source, ReadD_source
  5 +from Read import ReadNphot_source,ReadPosition,ReadMomentum,ReadNbLeptonsProd
  6 +from Constants import yr, degre
6 from Integrand import comobileTime 7 from Integrand import comobileTime
  8 +from Analytic import Analytic_delay
7 9
8 -def timing(fileName):  
9 - time=ReadTime(fileName)  
10 - weight=ReadWeight(fileName)  
11 - prop = float(shape(time[time<0])[0])/shape(time)[0]  
12 - print "file", fileName, "->", shape(time)[0], "events", "negative time:", shape(time[time<0])[0], "~", prop 10 +def timing(fileId,gen=-1):
  11 + '''
  12 + Compute flux versus time delay
  13 + Input: directory name
  14 + Input (optional): generation (default = all)
  15 + Output: time delay (sec), flux
  16 + '''
  17 + time=ReadTime(fileId)
  18 + weight=ReadWeight(fileId)
  19 +
  20 + if gen != -1:
  21 + generation = ReadGeneration(fileId)
  22 + time=time[generation==gen]
  23 + weight=weight[generation==gen]
  24 + prop = float(shape(time[time<0])[0])/shape(time)[0]
  25 + print "gen", int(gen), "->", shape(time)[0], "events", "negative time:",shape(time[time<0])[0], "~", prop
  26 + else:
  27 + prop = float(shape(time[time<0])[0])/shape(time)[0]
  28 + print "file", fileId, "->", shape(time)[0], "events", "negative time:",shape(time[time<0])[0], "~", prop
13 29
14 time=time[time>0] 30 time=time[time>0]
15 weight=weight[time>0] 31 weight=weight[time>0]
16 32
17 nbBins = 100 33 nbBins = 100
18 - zSource = Readz_source(fileName)  
19 - tlim = quad(comobileTime,zSource,0)[0]/yr  
20 - time = log10(time/tlim) 34 + time = log10(time*yr)
21 35
22 dN,dt=histogram(time,nbBins,weights=weight) 36 dN,dt=histogram(time,nbBins,weights=weight)
23 timecenter=(dt[1:nbBins+1]+dt[0:nbBins])/2 37 timecenter=(dt[1:nbBins+1]+dt[0:nbBins])/2
24 binSize=dt[1:nbBins+1]-dt[0:nbBins] 38 binSize=dt[1:nbBins+1]-dt[0:nbBins]
25 - Nmax=ReadNphot_source(fileName) # Nb photons emitted by the source 39 + Nmax=ReadNphot_source(fileId) # Nb photons emitted by the source
26 dNdt=dN/(Nmax*binSize) 40 dNdt=dN/(Nmax*binSize)
27 - maxflux = ReadNphot_source(fileName) 41 + maxflux = ReadNphot_source(fileId)
28 dNdt /= maxflux 42 dNdt /= maxflux
29 43
30 - return timecenter, dNdt 44 + return 10**timecenter, dNdt
31 45
32 def drawTiming(files): 46 def drawTiming(files):
  47 + '''
  48 + Plot flux versus time delay
  49 + Input: list of directories
  50 + Output: graph of flux versus time delay
  51 + '''
33 fig = figure() 52 fig = figure()
34 ax = fig.add_subplot(111) 53 ax = fig.add_subplot(111)
35 for fileId in files: 54 for fileId in files:
36 time,dNdt = timing(fileId) 55 time,dNdt = timing(fileId)
37 ax.plot(time[dNdt!=0],dNdt[dNdt!=0],linestyle="steps-mid",label=fileId) 56 ax.plot(time[dNdt!=0],dNdt[dNdt!=0],linestyle="steps-mid",label=fileId)
38 57
  58 + ax.set_xscale('log')
  59 + ax.set_yscale('log')
  60 + ax.grid(b=True,which='major')
  61 + ax.legend(loc="best")
  62 + ax.set_xlabel("Time delay [s]")
  63 + ax.set_ylabel("$t\ dN/dt$")
  64 +
  65 + show()
  66 +
  67 +def drawTimingGen(fileId):
  68 + fig = figure()
  69 + ax = fig.add_subplot(111)
  70 + for gen in list(set(ReadGeneration(fileId))):
  71 + time,dNdt = timing(fileId,gen)
  72 + ax.plot(time[dNdt!=0],dNdt[dNdt!=0],linestyle="steps-mid",label="gen="+str(int(gen)))
  73 +
  74 + time,dNdt = timing(fileId)
  75 + ax.plot(time[dNdt!=0],dNdt[dNdt!=0],color='k',linestyle="steps-mid",label="gen=all")
  76 +
  77 + ax.set_xscale('log')
39 ax.set_yscale('log') 78 ax.set_yscale('log')
40 ax.grid(b=True,which='major') 79 ax.grid(b=True,which='major')
41 ax.legend(loc="best") 80 ax.legend(loc="best")
42 - ax.set_xlabel("Time [$\Delta t / t$ log scale]") 81 + ax.set_xlabel("Time delay [s]")
43 ax.set_ylabel("$t\ dN/dt$") 82 ax.set_ylabel("$t\ dN/dt$")
44 83
45 show() 84 show()
  85 +
  86 +######## delay versus angle ###############
  87 +def delay_vs_angle(fileId,gen=-1):
  88 + '''
  89 + Compute time delay versus arrival angle
  90 + Input: directory name
  91 + Input (optional): generation (default = all)
  92 + Output: arrival angle [degre], time delay [sec]
  93 + '''
  94 + position = ReadPosition(fileId)
  95 + momentum = ReadMomentum(fileId)
  96 + weight = ReadWeight(fileId)
  97 + time=ReadTime(fileId)
  98 +
  99 + hyp=sqrt(position[0]**2+position[1]**2+position[2]**2)
  100 + position /= hyp
  101 + hyp=sqrt(momentum[0]**2+momentum[1]**2+momentum[2]**2)
  102 + momentum /= hyp
  103 + costheta=position[0]*momentum[0]+position[1]*momentum[1]+position[2]*momentum[2]
  104 +
  105 + if gen != -1 :
  106 + generation = ReadGeneration(fileId)
  107 + cond=(abs(costheta)<=1) & (generation==gen) & (time>0)
  108 + else:
  109 + cond=(abs(costheta)<=1) & (time>0)
  110 +
  111 + prop = float(shape(time[time<0])[0])/shape(time)[0]
  112 + theta = arccos(costheta[cond])*degre
  113 + weight= weight[cond]
  114 + time=time[cond]*yr
  115 + print "gen", int(gen), "->", shape(time)[0], "events", "negative time:",shape(time[time<0])[0], "~", prop
  116 + cond=(theta!=0)
  117 + return theta[cond], time[cond], weight[cond]
  118 +
  119 +def delay_vs_angle_histo(fileId,gen=-1):
  120 + theta, time, weight = delay_vs_angle(fileId,gen)
  121 + nbBins = 100
  122 +
  123 + theta=log10(theta)
  124 + dt,dtheta=histogram(theta,nbBins,weights=time)
  125 + dN,dtheta=histogram(theta,nbBins,weights=weight)
  126 + dtheta=10**dtheta
  127 + thetacenter=(dtheta[1:nbBins+1]+dtheta[0:nbBins])/2
  128 + timing = dt/dN
  129 +
  130 + return thetacenter, timing
  131 +
  132 +def drawDelay_vs_angle(fileId):
  133 + '''
  134 + Plot angle versus time delay, generation by generation
  135 + Input: directory name
  136 + Output: graph of angle versus time delay, generation by generation
  137 + '''
  138 + fig = figure()
  139 + ax = fig.add_subplot(111)
  140 +
  141 + Nmax = ReadNphot_source(fileId)
  142 +
  143 + for gen in list(set(ReadGeneration(fileId))):
  144 + angle,delay,weight = delay_vs_angle(fileId,gen)
  145 + ax.plot(angle,delay/weight/Nmax,".",label="gen="+str(int(gen)))
  146 +
  147 + #angle,delay = delay_vs_angle_histo(fileId,gen)
  148 + #ax.plot(angle,delay,linestyle="steps-mid",label="gen="+str(int(gen)))
  149 +
  150 + angle,delay = delay_vs_angle_histo(fileId)
  151 + ax.plot(angle,delay/Nmax,color='k',linestyle="steps-mid",label="gen=all")
  152 +
  153 + Esource = ReadE_source(fileId)
  154 + dSource = ReadD_source(fileId)
  155 + yfit = Analytic_delay(angle,Esource,dSource)
  156 + ax.plot(angle,yfit,'--k',linewidth=2)
  157 +
  158 + ax.set_xscale('log')
  159 + ax.set_yscale('log')
  160 + ax.grid(b=True,which='major')
  161 + ax.legend(loc="best")
  162 + ax.set_xlabel("$\\theta $[deg]")
  163 + ax.set_ylabel("Time delay [s]")
  164 +
  165 + show()
Modules/Timing.pyc
No preview for this file type
Modules/Weight.py
@@ -4,6 +4,11 @@ from Read import ReadGeneration, ReadWeight, ReadEnergy @@ -4,6 +4,11 @@ from Read import ReadGeneration, ReadWeight, ReadEnergy
4 4
5 5
6 def drawWeightHisto(fileId): 6 def drawWeightHisto(fileId):
  7 + '''
  8 + Plot particles'weights histogram, generation by generation
  9 + Input: directory name
  10 + Output: particles'weights histogram
  11 + '''
7 fig = figure() 12 fig = figure()
8 ax = fig.add_subplot(111) 13 ax = fig.add_subplot(111)
9 nbBins =100 14 nbBins =100
@@ -24,6 +29,11 @@ def drawWeightHisto(fileId): @@ -24,6 +29,11 @@ def drawWeightHisto(fileId):
24 29
25 ####################################################################################### 30 #######################################################################################
26 def weightVsEnergy(fileId,gen=-1): 31 def weightVsEnergy(fileId,gen=-1):
  32 + '''
  33 + Compute particles'weight versus energy
  34 + Input: directory name
  35 + Input (optional): generation (default = all)
  36 + '''
27 energy = ReadEnergy(fileId) 37 energy = ReadEnergy(fileId)
28 weight = ReadWeight(fileId) 38 weight = ReadWeight(fileId)
29 nbBins = 100 39 nbBins = 100
@@ -43,6 +53,11 @@ def weightVsEnergy(fileId,gen=-1): @@ -43,6 +53,11 @@ def weightVsEnergy(fileId,gen=-1):
43 return enercenter, weight 53 return enercenter, weight
44 54
45 def drawWeightVsEnergy(fileId): 55 def drawWeightVsEnergy(fileId):
  56 + '''
  57 + Plot particles'weight versus energy, generation by generation
  58 + Input: directory name
  59 + Output: graph of particles'weight versus energy
  60 + '''
46 fig = figure() 61 fig = figure()
47 ax = fig.add_subplot(111) 62 ax = fig.add_subplot(111)
48 63
Modules/Weight.pyc 0 → 100644
No preview for this file type