COSMOS v7.655  COSMOSv7655
(AirShowerMC)
cAAXsec2.f
Go to the documentation of this file.
1  subroutine caaxsec2(pj, tgA, tgZ, xs)
2 ! compute AA' inelastice cross -section
3 ! At low energies, Shen's formulation is used as is used
4 ! in PHITS. Over 5 GeV/n, Frier et al's formula is used
5 ! but it is normalized to the Shen's value at 5 GeV/n.
6 !
7 !
8 ! formula: xs = pi(r1 + r2 - d)**2
9 ! r = r0 A**(1/3)
10 ! d = 1.189 r0 exp(-0.055min(A1,A2))
11 ! r0 = (1.29f to 1.41f)
12 ! Therefore
13 ! xs = pi r0^2 (A1^0.333 + A2^0.333 - 1.189exp(-0.055min(A1,A2)))**2
14 ! This is by Frier et al in ICRC Paris conf. (from Uchu Hosha Sen Edited
15 ! by Nishimura, p.170)
16 !
17 ! At high energies (sqrt(s) > 80 GeV for E/A ?; we use Ek=50 GeV), we include energy dependence
18 ! of cross-section as follows.
19 ! Let the pp cross-section increases as E**delta, then
20 ! AB crosssection is well fitted by the dependence of E**alfa with
21 !
22 ! alfa = 2.5* delta/(p + t + p*t/2)
23 !
24 ! where p = A**(1/3) and t = B**(1/3)
25 !
26 !
27 !
28 
29  implicit none
30 #include "Zcode.h"
31 #include "Zmass.h"
32 #include "Zptcl.h"
33 #include "Ztrackp.h"
34  type(ptcl):: pj ! input projectile
35  real(8),intent(in):: tgA ! target mass #
36  real(8),intent(in):: tgZ ! target charge #
37  real(8),intent(out):: xs ! inela xs in mb
38 
39  real(8):: ek
40  real(8):: pjA, pjZ
41 !
42  real(8):: p, t
43 
44  real(8):: Ekt, Ekpn, Etot, EktMeV
45 
46  real(8),parameter:: Enorm=5. ! KE/n. GeV. normalize to shen at this E
47 
48  real(8):: elxs, elxs5 ! dummy. elastic cross section is 0
49  real(8):: impactp, impactp5 ! impact parameter fm
50  real(8):: xs5s, xs5c
51  integer:: tcode, tsubcode, tcharge
52  type(ptcl):: target
53  real(8)::g, beta
54 !
55  if(pj%code /= kgnuc ) then
56  write(0, *) ' cAAxsec2 is for heavy ion while '
57  write(0, *) ' projectile =',pj%code, pj%subcode, pj%charge
58  stop
59  endif
60  etot = pj%fm%p(4) ! GeV
61  ekt = etot - pj%mass
62  ektmev=ekt*1000. ! MeV
63  ekpn = ekt/pj%subcode
64  pja = pj%subcode
65  pjz = pj%charge
66  if( tga == 1.0 ) then
67 ! use pA (nA) system ; will be done in cinelx
68  call cinelx(pj, tga, tgz, xs)
69 ! tcode = knuc
70 ! tsubcode = -1
71 ! tcharge = tgZ
72 ! call cmkptc(tcode, tsubcode, tcharge, target)
73 ! g = Etot/pj.mass
74 ! target.fm.p(4) = g* masp
75 ! call cinelx(target, pjA, pjZ, xs)
76  else
77  if( ekt <= 0. ) then
78  xs = 0.
79  elseif( aaxsec == 1 ) then ! normalize to Shen's Xs
80  if( ekpn < enorm ) then
81 ! ! this energy total kinetic E in MeV !!
82  call shen(pja, pjz, ektmev, tga, tgz, xs, elxs, impactp)
83  xs = xs*1000. ! output is in b
84  else
85  call caaxsec0(pja, ekpn, tga, xs)
86  ektmev= enorm*pj%subcode*1000.
87  call shen(pja, pjz, ektmev,
88  * tga, tgz, xs5s, elxs5, impactp5)
89  xs5s = xs5s*1000. ! output is in b
90  call caaxsec0(pja, enorm, tga, xs5c)
91  xs = xs * xs5s/xs5c
92  endif
93  elseif( aaxsec == 0 ) then ! normalize to Cosmos xs
94  if( ekpn > enorm ) then
95  call caaxsec0(pja, ekpn, tga, xs)
96  else
97 ! ! this energy total kinetic E in MeV !!
98  call shen(pja, pjz, ektmev, tga, tgz, xs, elxs, impactp)
99  xs = xs*1000. ! output is in b
100  ektmev= enorm*pj%subcode*1000.
101  call shen(pja, pjz, ektmev,
102  * tga, tgz, xs5s, elxs5, impactp5)
103  xs5s = xs5s*1000. ! output is in b
104  call caaxsec0(pja, enorm, tga, xs5c)
105  xs = xs * xs5c/xs5s
106  endif
107  else
108  write(0,*) 'AAXsec =',aaxsec, ' not usable'
109  stop
110  endif
111  endif
112  end
113  subroutine caaxsec0(pjA, Ekpn, tgA, xs)
114  implicit none
115  real(8),intent(in):: pjA ! proj. A
116  real(8),intent(in):: Ekpn ! proj.'s kinetic E /n GeV
117  real(8),intent(in):: tgA ! target A
118  real(8),intent(out):: xs ! in mb
119 
120  real(8):: p, t
121  real(8),parameter:: Ekb(5) = (/5., 10., 100., 700., 3000./)
122 ! sigma( pp) Ek power dependence above
123 ! energy of Ekb(i) : Ek**d
124  real(8),parameter:: delta(5)=(/-0.05,-0.01, 0.02, 0.05, 0.083/)
125  real(8)::d
126  real(8):: pw
127  integer:: i, j
128 
129  p = pja**0.3333
130  t = tga**0.3333
131  xs = 52.2 *( p + t -
132  * 1.189 * exp(- 0.055*min( pja, tga)))**2
133  d = 0.
134  do i = 5, 1, -1
135  if(ekpn > ekb(i)) then
136  pw = 1.
137  do j = 1, i-1
138  d = delta(j)
139  pw = pw * (ekb(j+1)/ekb(j))**(2.5* d/(p+t+p*t/2.))
140  enddo
141  d = delta(i)
142  pw = pw *(ekpn/ekb(i))**(2.5* d/(p+t+p*t/2.))
143  xs = xs *pw
144  exit
145  endif
146  enddo
147 
148  end
subroutine cinelx(pj, A, Z, xs)
Definition: cinelx.f:4
max ptcl codes in the kgnuc
Definition: Zcode.h:2
subroutine caaxsec2(pj, tgA, tgZ, xs)
Definition: cAAXsec2.f:2
subroutine caaxsec0(pjA, Ekpn, tgA, xs)
Definition: cAAXsec2.f:114
Definition: Zptcl.h:75