Blame view

Analysis.py 5.41 KB
7030f150   Thomas Fitoussi   Full reorganisati...
1
2
3
#!/bin/python

from sys import argv
631c85a9   Thomas Fitoussi   Ad generation com...
4
from numpy import append, savetxt, shape, array, newaxis, zeros, arange
074c1729   Thomas Fitoussi   Analysis.py used ...
5
from Modules.Read import ReadEnergy, ReadTime, ReadExtraFile, ReadProfile
49a0fe94   Thomas Fitoussi   Add direct printi...
6
from Modules.Read import ReadMomentumAngle, ReadPositionAngle, resultDirectory
65135318   Thomas Fitoussi   Reset modules
7
from Modules.Spectrum import spectrum
49a0fe94   Thomas Fitoussi   Add direct printi...
8
from Modules.Map import printMap, isotrop
074c1729   Thomas Fitoussi   Analysis.py used ...
9
10
from Modules.Angle import radial, angle_vs_energy
from Modules.Timing import timing
49a0fe94   Thomas Fitoussi   Add direct printi...
11
from Modules.Constants import degre
7030f150   Thomas Fitoussi   Full reorganisati...
12

49a0fe94   Thomas Fitoussi   Add direct printi...
13
14
def InProgress(fileId,step,i,Nmax):
   print "Work on ", fileId, "(step "+ step +": ", (i*100)/Nmax, "% done"
7030f150   Thomas Fitoussi   Full reorganisati...
15

6633967c   Thomas Fitoussi   Correction on the...
16
17
18
if shape(argv)[0] < 2: 
   print "not enough arguments (at least 1)"
   exit()
8ffbee93   Thomas Fitoussi   Analytic expressi...
19

6633967c   Thomas Fitoussi   Correction on the...
20
21
22
#================================================================#
#  Parameters
#================================================================#
6633967c   Thomas Fitoussi   Correction on the...
23
PowerSpectrum=[1,1.5,2,2.5] 
49a0fe94   Thomas Fitoussi   Add direct printi...
24
25
26
powerlaw_index = 2
Elim = 1e-1 # GeV
thetalim = 20 # degre
7030f150   Thomas Fitoussi   Full reorganisati...
27

074c1729   Thomas Fitoussi   Analysis.py used ...
28
29
30
31
32
33
34
for fileId in argv[1:]:
   # read files
   time = ReadTime(fileId)
   energy = ReadEnergy(fileId)
   weightini, generation, theta_arrival, Esource = ReadExtraFile(fileId,[2,3,4,5])
   nbPhotonsEmitted=ReadProfile(fileId,[3]) 

49a0fe94   Thomas Fitoussi   Add direct printi...
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
   #=============================================================================#
   #  IMAGING 
   #=============================================================================#
   thetaDir,phiDir = ReadMomentumAngle(fileId)*degre
   thetaPos,phiPos = ReadPositionAngle(fileId)*degre
   theta = thetaDir - thetaPos
   phi = phiDir -phiPos

   # apply source spectrum
   weight_source = (Esource/min(Esource))**(1-powerlaw_index)
   weight = weightini* weight_source

   # apply selection
   cond=(energy>Elim) & (abs(theta)<thetalim) & (abs(phi)<thetalim)
   weight=weight[cond]
   theta=theta[cond]
   phi=phi[cond]
   printMap(theta,phi,weight,fileId,source=isotrop(),borne=[thetalim,thetalim])
6633967c   Thomas Fitoussi   Correction on the...
53

631c85a9   Thomas Fitoussi   Ad generation com...
54
55
   Gen_contrib = []
   Gen_cont = zeros((int(max(generation))+1))
074c1729   Thomas Fitoussi   Analysis.py used ...
56
57
58
59
60
61
   Source = []
   Spectrum = []
   Radial = []
   Angle_Energy = []
   Timing = []

6633967c   Thomas Fitoussi   Correction on the...
62
   for powerlaw_index in PowerSpectrum:
074c1729   Thomas Fitoussi   Analysis.py used ...
63
      # apply source spectrum
49a0fe94   Thomas Fitoussi   Add direct printi...
64
      weight_source = (Esource/min(Esource))**(1-powerlaw_index)
6633967c   Thomas Fitoussi   Correction on the...
65
66
      weight = weightini* weight_source

074c1729   Thomas Fitoussi   Analysis.py used ...
67
      #=============================================================================#
631c85a9   Thomas Fitoussi   Ad generation com...
68
69
70
71
72
73
74
75
76
77
78
      # GENERATION CONTRIBUTION
      #=============================================================================#
      NbTotEvents = sum(weight)
      if Gen_contrib==[]:
         Gen_contrib = arange(0,max(generation)+1,1)[:,newaxis]

      for gen in list(set(generation)):
         Gen_cont[int(gen)] = sum(weight[generation==gen])/NbTotEvents *100
      Gen_contrib = append(Gen_contrib,Gen_cont[:,newaxis],axis=1)

      #=============================================================================#
074c1729   Thomas Fitoussi   Analysis.py used ...
79
80
81
82
83
      #  SPECTRUM (SOURCE AND MEASURED)
      #=============================================================================#
      nbBins = 100
      # draw source spectrum
      Es=array(list(set(Esource)))
49a0fe94   Thomas Fitoussi   Add direct printi...
84
      Ws= (Es/min(Es))**(1-powerlaw_index)
6633967c   Thomas Fitoussi   Correction on the...
85
      Es,Fs = spectrum(Es,Ws,nbBins=nbBins)
074c1729   Thomas Fitoussi   Analysis.py used ...
86
87
88
89
90
91
92
93
      Es=Es[:,newaxis]
      Fs=Fs[:,newaxis]
      if Source==[]:
         Source = Es
         Source = append(Source,Fs,axis=1)
      else: 
         Source = append(Source,Fs,axis=1)

6633967c   Thomas Fitoussi   Correction on the...
94
95
      # primary gamma-rays contribution and full spectrum
      ener,flux,flux_0 = spectrum(energy,weight,generation,nbBins)
074c1729   Thomas Fitoussi   Analysis.py used ...
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
      ener=ener[:,newaxis]
      flux=flux[:,newaxis]
      flux_0=flux_0[:,newaxis]
      if Spectrum==[]:
         Spectrum = ener
         Spectrum = append(Spectrum,flux,axis=1)
         Spectrum = append(Spectrum,flux_0,axis=1)
      else:
         Spectrum = append(Spectrum,flux,axis=1)
         Spectrum = append(Spectrum,flux_0,axis=1)

      #=============================================================================#
      #  RADIAL DISTRIBUTION AND ANGLE VERSUS ENERGY
      #=============================================================================#
      nbBins = 100
      ener,angle = angle_vs_energy(theta_arrival,energy,weight,nbPhotonsEmitted)
      ener=ener[:,newaxis]
      angle=angle[:,newaxis]
      if Angle_Energy==[]:
         Angle_Energy = ener
         Angle_Energy = append(Angle_Energy,angle,axis=1)
      else:
         Angle_Energy = append(Angle_Energy,angle,axis=1)

      theta,dndtheta2 = radial(theta_arrival,weight,nbPhotonsEmitted)
      theta=theta[:,newaxis]
      dndtheta2=dndtheta2[:,newaxis]
      if Radial==[]:
         Radial = theta
         Radial = append(Radial,dndtheta2,axis=1)
      else:
         Radial = append(Radial,dndtheta2,axis=1)

      #=============================================================================#
      #  TIME DISTRIBUTION AND TIME DELAY VERSUS ANGLE
      #=============================================================================#
      nbBins = 100
      delta_t,dNdt = timing(time,weight,nbBins)
      delta_t=delta_t[:,newaxis]
      dNdt=dNdt[:,newaxis]
      if Timing==[]:
         Timing = delta_t
         Timing = append(Timing,dNdt,axis=1)
      else:
         Timing = append(Timing,dNdt,axis=1)

49a0fe94   Thomas Fitoussi   Add direct printi...
142
      InProgress(fileId,"1",PowerSpectrum.index(powerlaw_index)+1,shape(PowerSpectrum)[0])
6633967c   Thomas Fitoussi   Correction on the...
143

49a0fe94   Thomas Fitoussi   Add direct printi...
144
145
146
147
148
149
   savetxt(resultDirectory+fileId+"/Generation.txt",Gen_contrib)
   savetxt(resultDirectory+fileId+"/Spectrum.txt",Spectrum)
   savetxt(resultDirectory+fileId+"/Source_spectrum.txt",Source)
   savetxt(resultDirectory+fileId+"/Angle_vs_Energy.txt",Angle_Energy)
   savetxt(resultDirectory+fileId+"/Radial_distribution.txt",Radial)
   savetxt(resultDirectory+fileId+"/Timing.txt",Timing)