Blame view

Modules/Analytic.py 3.7 KB
8ffbee93   Thomas Fitoussi   Analytic expressi...
1
from Constants import *
a44230b7   Thomas Fitoussi   Improve approxima...
2
from numpy import sqrt, abs, cos, sin, arcsin, searchsorted, loadtxt
65135318   Thomas Fitoussi   Reset modules
3
from Read import ReadProfile
7030f150   Thomas Fitoussi   Full reorganisati...
4

8ffbee93   Thomas Fitoussi   Analytic expressi...
5
6
# Value for analytic expression
Ee_default=1e3 #GeV
fb95bd3d   Thomas Fitoussi   Add time delay ve...
7
Egamma_default=1 #GeV
8ffbee93   Thomas Fitoussi   Analytic expressi...
8
9
10
B_default=1e-17 #Gauss
lambda_B_default=0.3 #Mpc

7030f150   Thomas Fitoussi   Full reorganisati...
11
def Analytic_flux(E_ic):
8ffbee93   Thomas Fitoussi   Analytic expressi...
12
   return  me*1e3/4*sqrt(3e9/Ecmb)*1e-9*E_ic**(1/2.) #GeV
7030f150   Thomas Fitoussi   Full reorganisati...
13

8ffbee93   Thomas Fitoussi   Analytic expressi...
14
def Analytic_theta(E_ic,fileId):
65135318   Thomas Fitoussi   Reset modules
15
   Esource,Dsource,B=ReadProfile(fileId,[0,2,4]) #GeV #Mpc #Gauss
8ffbee93   Thomas Fitoussi   Analytic expressi...
16
   delta_to_theta=lambda_gg(Esource)/Dsource
a44230b7   Thomas Fitoussi   Improve approxima...
17
   delta_to_theta=1.9440974051313842/Dsource
8ffbee93   Thomas Fitoussi   Analytic expressi...
18
19
   RL0=RL(Esource/2,B)
   Dic0=Dic(Esource/2)
484df032   Thomas Fitoussi   Correction on the...
20
21
   delta=Dic0/(2*RL0)*((Esource/(2*Ee(E_ic)))**2 -1)
   return abs(arcsin(delta_to_theta*sin(delta)))*degre
8ffbee93   Thomas Fitoussi   Analytic expressi...
22

fb95bd3d   Thomas Fitoussi   Add time delay ve...
23
def Analytic_delay_vs_theta(theta,fileId):
65135318   Thomas Fitoussi   Reset modules
24
25
26
27
28
29
   Esource,distSource=ReadProfile(fileId,[0,2]) #GeV #Mpc 
   E0_source = Esource*1e-3 #TeV
   lgg = 1.94 #lambda_gg(E0_source)
   delta_ic = arcsin(distSource/lgg*sin(theta))
   Dic0=Dic(E0_source/2)
   c_delta_t = lgg*(1-cos(delta_ic)) - distSource*(1-cos(theta))
fb95bd3d   Thomas Fitoussi   Add time delay ve...
30
31
   return c_delta_t *Mpc/c # sec.

65135318   Thomas Fitoussi   Reset modules
32
33
34
35
36
37
def dt_approx(th):
   lgg = 1.94*Mpc
   D = 131.75*Mpc
   thetamax = arcsin(lgg/D)
   return D**2/lgg /c * th**2 / 2.

fb95bd3d   Thomas Fitoussi   Add time delay ve...
38
def Analytic_delay_vs_Egamma(Egamma, fileId):
65135318   Thomas Fitoussi   Reset modules
39
   Esource,Dsource,B=ReadProfile(fileId,[0,2,4]) #GeV #Mpc #Gauss
fb95bd3d   Thomas Fitoussi   Add time delay ve...
40
41
   RL0=RL(Esource/2,B)
   Dic0=Dic(Esource/2)
65135318   Thomas Fitoussi   Reset modules
42
43
44
45
   E_e = Ee(Egamma)
   delta_ic = Dic0/(2*RL0)*((Esource/2/E_e)**2 -1)
   theta = arcsin(lambda_gg(Esource)/Dsource*sin(delta_ic))
   c_delta_t = lambda_gg(Esource)*(1-cos(delta_ic)) - Dsource*(1-cos(theta))
fb95bd3d   Thomas Fitoussi   Add time delay ve...
46
   return c_delta_t *Mpc/c # sec.
f4246390   Thomas Fitoussi   Improve angular d...
47

8ffbee93   Thomas Fitoussi   Analytic expressi...
48
# Compton accumulation
a44230b7   Thomas Fitoussi   Improve approxima...
49
50
def ECompton_threshold(Compton_threshold = 0.005,z=0):
   return Compton_threshold/(4/3*Ecmb*(1+z)/me*1e-3) *me*1e-6 #GeV
8ffbee93   Thomas Fitoussi   Analytic expressi...
51
52

# Compton scattering
a44230b7   Thomas Fitoussi   Improve approxima...
53
54
def Dic(Ee=Ee_default,z=0): # Ee (GeV)
   return 3*(me*1e3)**2/(4*sigmaT*Ee*1e9*rhoCMB*(1+z)**4) /Mpc #Mpc
8ffbee93   Thomas Fitoussi   Analytic expressi...
55

a44230b7   Thomas Fitoussi   Improve approxima...
56
57
def lambdaIC(z=0):
   return 1/(sigmaT*Mpc*nCMB*(1+z)**3) #Mpc
8ffbee93   Thomas Fitoussi   Analytic expressi...
58

a44230b7   Thomas Fitoussi   Improve approxima...
59
60
def Eic(Ee=Ee_default,z=0):
   return 4*Ecmb*(1+z) *Ee**2/(3*me**2)*1e3 #GeV 
8ffbee93   Thomas Fitoussi   Analytic expressi...
61

a44230b7   Thomas Fitoussi   Improve approxima...
62
63
def Ee(Egamma=Egamma_default,z=0):
   return me*sqrt((3*Egamma*1e-3 )/(4*Ecmb*(1+z))) #GeV 
fb95bd3d   Thomas Fitoussi   Add time delay ve...
64

8ffbee93   Thomas Fitoussi   Analytic expressi...
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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

a44230b7   Thomas Fitoussi   Improve approxima...
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
def lambda_gg(Egamma=1,z=0): # Egamma (GeV)
   # Bilinear interpolation 
   z_tab = [0,0.5,1,2,3]
   E_tab = loadtxt("lambda_e.dat",unpack=True,usecols=[0])*me*1e-6
   i2 = searchsorted(z_tab,z)
   if z<=0:
      fy=1
      i1=i2
   elif z>3:
      fy=1
      i2-=1
      i1=i2
   else:
      i1 = i2-1
      fy=(z-z_tab[i1])/(z_tab[i2]-z_tab[i1])
   j2 = searchsorted(E_tab,Egamma)
   j1 = j2-1
   fx=(Egamma-E_tab[j1])/(E_tab[j2]-E_tab[j1])
   lambda_e = loadtxt("lambda_e.dat",unpack=True,usecols=[i1+1,i2+1,i1+6,i2+6])
   lambda11 = lambda_e[0,j1]*((1-fx)*(1-fy))
   lambda12 = lambda_e[1,j1]*((1-fx)*fy)
   lambda21 = lambda_e[0,j2]*(fx*(1-fy))
   lambda22 = lambda_e[1,j2]*(fx*fy)
   lambda_proper = lambda11 + lambda12 + lambda21 + lambda22
   lambda11 = lambda_e[2,j1]*((1-fx)*(1-fy))
   lambda12 = lambda_e[3,j1]*((1-fx)*fy)
   lambda21 = lambda_e[2,j2]*(fx*(1-fy))
   lambda22 = lambda_e[3,j2]*(fx*fy)
   lambda_comobile = lambda11 + lambda12 + lambda21 + lambda22
   return lambda_proper, lambda_comobile, 800.e3/Egamma #Mpc (from Durrer and Neronov 2013)