Analysis.py 3.54 KB
#!/bin/python

from sys import argv
from numpy import append,savetxt, shape, array, newaxis, empty
from Modules.Read import ReadEnergy, ReadTime, ReadExtraFile, ReadProfile
from Modules.Spectrum import spectrum
from Modules.Angle import radial, angle_vs_energy
from Modules.Timing import timing

def error(error_type):
   print error_type
   exit()

if shape(argv)[0] < 2:
   error("not enough arguments (at least 1)")

folder = "Results/"

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]) 

   Source = []
   Spectrum = []
   Radial = []
   Angle_Energy = []
   Timing = []

   for powerlaw_index in [1,1.5,2,2.5]: 
      # apply source spectrum
      weight = weightini*(Esource)**(1-powerlaw_index)

      #=============================================================================#
      #  SPECTRUM (SOURCE AND MEASURED)
      #=============================================================================#
      nbBins = 100
      # draw source spectrum
      Es=array(list(set(Esource)))
      Ws= (Es)**(1-powerlaw_index)
      Es,Fs = spectrum(Es,Ws,nbBins)
      Es=Es[:,newaxis]
      Fs=Fs[:,newaxis]
      if Source==[]:
         Source = Es
         Source = append(Source,Fs,axis=1)
      else: 
         Source = append(Source,Fs,axis=1)

      # primary gamma-rays contribution
      cond = (generation==0)
      ener,flux_0 = spectrum(energy[cond],weight[cond],nbBins)
      # full spectrum
      ener,flux = spectrum(energy,weight,nbBins)
      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)

   savetxt(folder+fileId+"/Spectrum.txt",Spectrum)
   savetxt(folder+fileId+"/Source_spectrum.txt",Source)
   savetxt(folder+fileId+"/Angle_vs_Energy.txt",Angle_Energy)
   savetxt(folder+fileId+"/Radial_distribution.txt",Radial)
   savetxt(folder+fileId+"/Timing.txt",Timing)