COSMOS v7.655  COSMOSv7655
(AirShowerMC)
cdedxe.f
Go to the documentation of this file.
1 ! ****************************************************************
2 ! * *
3 ! * dpdedxe: gives -de/dx (gev/(g/cm2) of e-/e+
4 ! * *
5 ! Restricted energy loss rate dE/dt
6 ! Full - moller or bhabha loss(>RecoilkEmin)
7 ! modifed version of epdedxe in Epics; specific to Air
8  subroutine cdedxe(aPtcl, rho, dedt, dedtF)
9  implicit none
10 #include "Zptcl.h"
11 #include "ZdedxAir.h"
12 #include "Zmass.h"
13 
14  type(ptcl):: aPtcl ! input. a Particle (e- or e+)
15  real*8 rho ! input. air density in kg/m3
16  real*8 dedt ! output. restriced dE/dt GeV/(g/cm^2)
17  real*8 dedtF ! output. Full dE/dt GeV/(g/cm^2)
18 
19  real*8 emass
20  real*8 E, gi, Beta2, x, cb
21  real*8 g, D, u, F, y
22 
23  real*8 delta
24 
25  real*8 bbbeta2, lindbeta2, truebeta2
26  real*8 bbbeta, lindbeta
27  real*8 logbbbeta, loglindbeta
28  real*8 a, b, c, xx, gra, restricted
29  real*8 full, tm, vc, B1, B2, B3, B4, g1
30  real*8 RKEmin ! w0/emass
31  real*8 ln2, tln2
32  parameter(ln2=0.6931471, tln2=2*ln2)
33 
34  parameter(bbbeta = 0.1d0, lindbeta = 0.01d0, gra=4.0d0/3.d0)
35  parameter(bbbeta2 = bbbeta**2, lindbeta2=lindbeta**2)
36  parameter(logbbbeta =-2.302585093e+00,
37  * loglindbeta = -4.605170186e+00)
38  parameter(a = (1.+gra)/2.d0/(logbbbeta-loglindbeta),
39  * b = 2*a*loglindbeta + 1.)
40 !
41 ! (Z/A) I[eV] a k x0 x1 Cbar delta0
42 ! 0.49919 85.7 0.1091 3.3994 1.7418 4.2759 10.5961 0.00
43 ! | this is sh.sa not sh.a
44 
45  real*8 sha, shb
46 ! sha = 0.153536* (media.Z/media.A) = 0.153536*0.49919=0.07664
47 ! shb= 2*log(masele*/I) = 2*log(0.511e6/85.7)=
48  data sha/0.076643d0/, shb/17.38654d0/
49  save sha, shb
50 
51  parameter(emass = masele*1000.d0) ! in MeV
52 
53 
54 ! Energy, mass=emass in MeV unit
55  e = aptcl%fm%p(4)*1000.d0
56  g = e/emass
57  gi= 1.d0/g
58  truebeta2= 1. - gi**2
59  if(truebeta2 .lt. bbbeta2) then
60  beta2 = bbbeta2
61 ! wm = emass*Beta2/2
62  g = (1.+beta2/2)
63  e = emass*g
64  else
65  beta2 = truebeta2
66  endif
67  g1 =g + 1.0
68  u = g - 1.0 ! incident kinetic energy in Me unit
69 ! x=log10(p/mc)
70 ! x=log10( (E/emass)**2 - 1. ) / 2 ! = log10(gbeta) = 0.4343log(gbeta)
71  x=log10( g**2 - 1. ) / 2 ! = log10(gbeta) = 0.4343log(gbeta)
72 ! from v8.80, dltx is not used but usual delta is used.
73 
74 ! dE/dx = sh.a/Beta2* (B0 +sh.b -delta +other)
75 ! other=shell correction < 0.75 % effect at samll E
76 !
77 ! We get restricted dE/dx; i.e knock-on K.E<sh.w0
78 ! First get full dE/dx and subtract dE/dx (>sh.w0)
79 ! (get B0 + sh.b part)
80  rkemin = w0inmev/emass
81  if(aptcl%charge .eq. -1) then
82 ! electron; max recoil kinetic E
83  tm = min(u/2, rkemin)
84 
85  full = shb + log(u**2*g1/2) +
86  * (1.0+u**2/8. -(u+g)*ln2)/g/g
87 
88  if(u/2 .gt. rkemin) then
89 ! possible max recoil > w0; need subtraction
90  vc = rkemin/u
91 ! loss in w0~tm; integrate Moller
92  f = log(0.5/vc)
93  * - (u+g)*gi*gi*(0.5-vc) + (1.-vc/(1.0-vc))
94  * + 0.5*(u*gi)**2 * (0.25-vc**2)
95  * - log(2*(1.-vc)) *(1.+(u+g)*gi*gi)
96 ! next is wrong
97 ! * - (u+g)*gi*(0.5-vc) + (1.-vc/(1.0-vc))
98 ! * + (u*gi)**2* (-log(2*(1.-vc)) + 0.5*(0.25-vc**2))
99  else
100  f =0.
101  endif
102  elseif(aptcl%charge .eq. 1) then
103 ! positron
104  tm = min(u, rkemin)
105  vc = rkemin/u
106  full = shb + log(u**2*g1/2) + tln2 -
107  * beta2/12. * (((4./g1 + 10.)/g1 + 14.0)/g1 + 23.)
108  if(u .gt. rkemin) then
109  y = 1.d0/g1
110  b1 = 2.0-y**2
111  b2 = (1.0-2*y)*(3.0+y**2)
112  b3 = (1.0-2*y)**2 *( 1. + (1.-2*y))
113  b4 = (1.0-2*y)**3
114  f = log(1./vc) -beta2*
115  * (b1*(1.-vc) - b2/2.0*(1.0-vc**2) + b3/3.0*(1.-vc**3)
116  * - b4/4.0*(1.-vc**4) )
117  else
118  f = 0.
119  endif
120  else
121  write(0,*) ' charge is invalid for cdedxe=', aptcl%charge
122  write(0,*) ' ptcl code =', aptcl%code, aptcl%subcode
123  stop
124  endif
125 ! dE/dx fluctuation is not needed in Cosmos
126 ! Tupper = tm*emass/1000.0 ! in GeV; used in Urban
127 ! get delta
128  call cdedxdlt(rho, g, delta)
129  full = full - delta ! density correction
130  restricted = full - f
131  dedt =sha/beta2 *restricted
132  dedtf =sha/beta2 * full
133 
134  if(truebeta2 .lt. bbbeta2) then
135  c = log(dedt) + ( a* logbbbeta - b )*logbbbeta
136  if( truebeta2 .gt. lindbeta2) then
137  xx = log( truebeta2 )/2.
138  dedt =exp( (-a*xx + b)*xx + c)
139 
140  else
141  dedt = exp( (-a*loglindbeta + b)* loglindbeta + c) *
142  * sqrt(truebeta2)/lindbeta
143  endif
144  dedtf = dedt
145  endif
146 ! convert it to gev/(g/cm2)
147  dedt=dedt *1.d-3
148  dedtf = dedtf*1.d-3
149  end
integer npitbl real *nx parameter(n=101, npitbl=46, nx=n-1) real *8 uconst
subroutine cdedxdlt(rhoin, gin, delta)
Definition: cdedxdlt.f:4
block data cblkEvhnp ! currently usable models data RegMdls ad *special data *Cekaon d0
Definition: cblkEvhnp.h:5
const double masele
Definition: Zmass.h:2
Definition: Zptcl.h:75
subroutine cdedxe(aPtcl, rho, dedt, dedtF)
Definition: cdedxe.f:9