from Constants import * from numpy import sqrt, abs, cos, sin, arcsin from Read import ReadE_source, ReadD_source, ReadEGMF # Value for analytic expression Ee_default=1e3 #GeV Egamma_default=1 #GeV B_default=1e-17 #Gauss lambda_B_default=0.3 #Mpc def Analytic_flux(E_ic): return me*1e3/4*sqrt(3e9/Ecmb)*1e-9*E_ic**(1/2.) #GeV def Analytic_theta(E_ic,fileId): Esource=ReadE_source(fileId) #GeV Dsource=ReadD_source(fileId) #Mpc B=ReadEGMF(fileId) #Gauss delta_to_theta=lambda_gg(Esource)/Dsource RL0=RL(Esource/2,B) Dic0=Dic(Esource/2) Ee2= E_ic /Eic(1) #GeV^2 delta=Dic0/(2*RL0)*((Esource/2)**2 /Ee2 -1) return abs(arcsin(delta_to_theta*sin(delta))*degre) def Analytic_delay_vs_theta(theta,fileId): E0_source = ReadE_source(fileId)*1e-3 #TeV distSource = ReadD_source(fileId) delta_ic = arcsin(distSource/lambda_gg(E0_source)*sin(theta/degre)) c_delta_t = lambda_gg(E0_source)*(1-cos(delta_ic)) - distSource*(1-cos(theta/degre)) return c_delta_t *Mpc/c # sec. def Analytic_delay_vs_Egamma(Egamma, fileId): Esource=ReadE_source(fileId) #GeV Dsource=ReadD_source(fileId) #Mpc B=ReadEGMF(fileId) #Gauss RL0=RL(Esource/2,B) Dic0=Dic(Esource/2) Ee2 = Ee(Egamma)**2 delta_ic = Dic0/(2*RL0)*((Esource/2)**2 /Ee2 -1) theta = arcsin(lambda_gg(Esource)/Dsource*sin(delta_ic/degre)) c_delta_t = lambda_gg(Esource)*(1-cos(delta_ic)) - Dsource*(1-cos(theta/degre)) return c_delta_t *Mpc/c # sec. # Compton accumulation def ECompton_threshold(Compton_threshold = 0.005): return Compton_threshold/(4/3*Ecmb/me*1e-3) *me*1e-6 #GeV # Compton scattering def Dic(Ee=Ee_default): # Ee (GeV) return 3*(me*1e-6)**2/(4*sigmaT*rhoCMB*1e-9*Ee) /Mpc #Mpc def lambdaIC(): return 1/(nCMB*sigmaT*Mpc) #Mpc def Eic(Ee=Ee_default): return 4*Ecmb*Ee**2/(3*me**2)*1e3 #GeV def Ee(Egamma=Egamma_default): return sqrt((3*me**2)/(4*Ecmb)*1e-3 *Egamma) #GeV def tIC(): return lambdaIC()/(c*yr/Mpc) #yr # Larmor radius def RL(Ee=Ee_default,B=B_default): return (Ee/erg_to_GeV)/(e*B) /Mpc #Mpc # Magnetic deflection def delta(Ee=Ee_default,B=B_default): return lambdaIC()/RL(Ee,B)*degre def Delta(Ee=Ee_default,B=B_default,lambda_B=lambda_B_default): Delta1=Dic(Ee)/RL(Ee,B)*degre #degre if Dic >> lambda_B Delta2=sqrt(Dic(Ee)*lambda_B)/RL(Ee,B)*degre #degre if Dic << lambda_B return Delta1, Delta2 # Threshold energy when Dic = RL def Ethreshold_ic(Ee=Ee_default,B=B_default): return Eic(Ee)*Dic(Ee)/RL(Ee,B) # GeV # Pair production def Ethreshold_gg(): return (me)**2/Eebl *1e-3 #GeV def lambda_gg(Egamma=1): # Egamma (GeV) return 800. /(Egamma)#Mpc (from Durrer and Neronov 2013)