#!/bin/python from sys import argv from numpy import append, savetxt, shape, array, newaxis, zeros, arange from Modules.Read import ReadEnergy, ReadTime, ReadExtraFile, ReadProfile from Modules.Read import ReadMomentumAngle, ReadPositionAngle, resultDirectory from Modules.Spectrum import spectrum from Modules.Map import computeMap from Modules.Angle import angle_vs_energy from Modules.Timing import timing from Modules.Constants import degre def InProgress(i,Nmax): print " ", (i*100)/Nmax, "% done" if shape(argv)[0] < 2: print "not enough arguments (at least 1)" exit() #=============================================================================# PowerSpectrum=[1,1.5,2,2.5] Jet_Opening=[180,30,60] # degre (180 <=> isotrop) for fileId in argv[1:]: print "#=============================================================================#" print "# Analysis of", fileId print "#=============================================================================#" # read files print "# 1. Reading data" time = ReadTime(fileId) energy = ReadEnergy(fileId) weightini, generation, theta_arrival, Esource, dir_source = ReadExtraFile(fileId,[2,3,4,5,6]) nbPhotonsEmitted=ReadProfile(fileId,[3]) weightini /= nbPhotonsEmitted Gen_contrib = [] Gen_cont = zeros((int(max(generation))+1)) Source = [] Spectrum = [] Timing = [] print "# 2. Computing powerlaw spectrum" for powerlaw_index in PowerSpectrum: # apply source spectrum weight_source = (Esource/min(Esource))**(1-powerlaw_index) weight = weightini* weight_source #=============================================================================# # 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) #=============================================================================# # SPECTRUM (SOURCE AND MEASURED) #=============================================================================# nbBins = 50 # draw source spectrum Es=array(list(set(Esource))) Ws= (Es/min(Es))**(1-powerlaw_index) /nbPhotonsEmitted Es,Fs = spectrum(Es,Ws,nbBins=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 and full spectrum ener,flux,flux_0 = spectrum(energy,weight,generation,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) #=============================================================================# # 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) InProgress(PowerSpectrum.index(powerlaw_index)+1,shape(PowerSpectrum)[0]) #=============================================================================# # IMAGING, RADIAL DISTRIBUTION AND ANGLE VERSUS ENERGY #=============================================================================# Angle_Energy = [] Radial = [] print "# 3. compute images and radial distribution" for jet_opening_angle in Jet_Opening: powerlaw_index = 2 Elim = 1e-1 # GeV thetalim = 20 # degre nbBins = 100 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 theta2,dndtheta2,ener,angle = computeMap(theta,phi,weight,energy,dir_source,fileId, jet_opening_angle,Elim,nbBins,borne=[thetalim,thetalim]) theta2=theta2[:,newaxis] dndtheta2=dndtheta2[:,newaxis] ener=ener[:,newaxis] angle=angle[:,newaxis] if Radial==[]: Radial = theta2 Radial = append(Radial,dndtheta2,axis=1) Angle_Energy = ener Angle_Energy = append(Angle_Energy,angle,axis=1) else: Radial = append(Radial,dndtheta2,axis=1) Angle_Energy = append(Angle_Energy,angle,axis=1) InProgress(Jet_Opening.index(jet_opening_angle)+1,shape(Jet_Opening)[0]) #=============================================================================# print "# 4. writing files" 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) print "#=============================================================================#"