COSMOS v7.655  COSMOSv7655
(AirShowerMC)
cputCerenkov.f
Go to the documentation of this file.
1 ! ready made output for cerenkov
2 ! threshold dependence on the air density is
3 ! taken into account.
4 !
5  subroutine cputcerenkov
6  implicit none
7 #include "Zmanagerp.h"
8 #include "Ztrack.h"
9 #include "Ztrackp.h"
10 #include "Ztrackv.h"
11 #include "Zcode.h"
12 #include "Zmass.h"
13 #include "Zprimary.h"
14 #include "Zprimaryv.h"
15 #include "Zheavyp.h"
16 #include "Zincidentv.h"
17 !
18  integer,parameter:: maxcerenka=6
19  real*8 crnth(maxcerenka)
20 !
21 !
22  real*8 thg, thpi, thk, thmu, thnuc
23  parameter(thg=40.-1., thpi=thg*maspic, thk=thg*maskc,
24  1 thmu=thg*masmu, thnuc=thg*masp)
25 ! threshold energy in GeV at sea level
26 !
27  type(coord)::f
28  type(coord)::t
29  integer chrg, code
30 !
31  real*8 h1, den1, e1, the
32 ! real*8 h2, den2, e2
33  real*8 cvh2den
34  logical first/.true./
35  real*8 denAtSea
36  save first, denatsea
37  integer ka, itb, it, utrace
38  data crnth(kelec)/20.e-6/, crnth(kpion)/thpi/,
39  1 crnth(kkaon)/thk/, crnth(kmuon)/thmu/,
40  2 crnth(knuc)/thnuc/
41 
42  if(first) then
43  denatsea = cvh2den(0.d0)
44  first = .false.
45  endif
46 
47  utrace = trace
48  if(utrace .gt. 160) utrace = utrace - 100
49 ! get air density.
50  h1 = trackbefmove%pos%height
51  den1 = cvh2den(h1)
52 ! h2 = MovedTrack.pos.height
53 ! den2 = cvh2den(h2)
54  ka = trackbefmove%p%code
55  e1 = trackbefmove%p%fm%p(4)
56 ! e2 = MovedTrack.p.fm.p(4)
57 !
58  if( ka .gt. knuc) then
59  the = thg * trackbefmove%p%mass
60  else
61  the = crnth(ka)
62  endif
63 !
64  if( e1 .gt. the*denatsea/den1 ) then
65 ! get transformed coord.
66 ! utrace: 61-70: --> 1ry
67 ! 71-80: --> 1ry but z is depth above
68 ! 81-90: --> det
69 ! 91-100 --> det but z is depth above
70 !
71  call ccoordfortr(utrace-60, f, t)
72  itb=trackbefmove%t*100 ! centimeter/beta
73  it=(movedtrack%t - trackbefmove%t)*100 ! length/beta (cm)
74  chrg = trackbefmove%p%charge
75 
76  if(trace .gt. 160) then
77  call chookceren(ka, chrg, e1, itb, it, f, t)
78  else
79  if(mod(utrace, 2) .eq. 0 ) then
80  write(tracedev) ka, chrg, sngl(e1), itb, it,
81  * sngl(f%r(1)), sngl(f%r(2)), sngl(f%r(3)),
82  * sngl(t%r(1)), sngl(t%r(2)), sngl(t%r(3))
83  else
84  write(tracedev, *) ka, chrg, sngl(e1), itb, it,
85  * sngl(f%r(1)), sngl(f%r(2)), sngl(f%r(3)),
86  * sngl(t%r(1)), sngl(t%r(2)), sngl(t%r(3))
87  endif
88  endif
89  endif
90  return
91 ! ************* start of 1 shower for cerenkov trace(called from
92 ! ciniTracking
93 !
94  entry cputcerenkovs
95  utrace = trace
96  if(utrace .gt. 160) utrace = utrace -100
97 
98  if(trace .gt. 160) then
99  call chookcerens(eventno, prim, angleatobscopy)
100  else
101  code = prim%particle%code
102  if(mod(utrace, 2) .eq. 0) then
103  write(tracedev) eventno,
104  * code,
105  * prim%particle%fm%p(4),
106  * angleatobscopy%r(1), angleatobscopy%r(2),
107  * angleatobscopy%r(3)
108  else
109  write(tracedev, *) eventno,
110  * code,
111  * prim%particle%fm%p(4),
112  * angleatobscopy%r(1), angleatobscopy%r(2),
113  * angleatobscopy%r(3)
114  endif
115  endif
116  return
117 ! ************** end of 1 shower
118  entry cputcerenkove
119 ! ***************
120  utrace = trace
121  if(utrace .gt. 160) utrace = utrace - 100
122  ka = 0
123  chrg = 0
124  e1 = 0.
125  itb =0
126  it =0
127  f%r(1) = 0.
128  f%r(2) = 0.
129  f%r(3) =0
130  t%r(1) = 0.
131  t%r(2) = 0.
132  t%r(3) = 0.
133  if(trace .gt. 160) then
134  call chookcerene(ka, chrg, e1, itb, it, f, t)
135  else
136 !
137  if(mod(utrace, 2) .eq. 0) then
138  write(tracedev) ka, chrg, sngl(e1), itb, it,
139  * sngl(f%r(1)), sngl(f%r(2)), sngl(f%r(3)),
140  * sngl(t%r(1)), sngl(t%r(2)), sngl(t%r(3))
141  else
142  write(tracedev, *) ka, chrg, sngl(e1), itb, it,
143  * sngl(f%r(1)), sngl(f%r(2)), sngl(f%r(3)),
144  * sngl(t%r(1)), sngl(t%r(2)), sngl(t%r(3))
145  endif
146  endif
147  end
integer npitbl real *nx parameter(n=101, npitbl=46, nx=n-1) real *8 uconst
dE dx *! Nuc Int sampling table e
Definition: cblkMuInt.h:130
subroutine ccoordfortr(how, f, t)
Definition: cputTrInfo.f:119
max ptcl codes in the kkaon
Definition: Zcode.h:2
max ptcl codes in the kelec
Definition: Zcode.h:2
masmu
Definition: Zmass.h:5
subroutine chookceren
Definition: det2Exyz.f:63
maskc
Definition: Zmass.h:5
subroutine cputcerenkov
Definition: cputCerenkov.f:6
block data cblkEvhnp ! currently usable models data RegMdls ad *special data *Cekaon d0
Definition: cblkEvhnp.h:5
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code knuc
Definition: cblkHeavy.h:7
subroutine chookcerene
Definition: det2Exyz.f:67
subroutine chookcerens(no, primary, angle)
Definition: ctemplCeren.f:19
block data cblkElemag data *AnihiE ! Eposi< 1 TeV, anihilation considered *X0/365.667/, ! radiation length of air in kg/m2 *Ecrit/81.e-3/, ! critical energy of air in GeV *MaxComptonE/1./, ! compton is considered below 1 GeV *MaxPhotoE/1.e-3/, ! above this, PhotoElectric effect neg. *MinPhotoProdE/153.e-3/, ! below 153 MeV, no gp --> hadrons ! scattering const not MeV *Knockon ! knockon is considered Obsolete *PhotoProd false
Definition: cblkElemag.h:7
masp
Definition: Zmass.h:5
Definition: Zcoord.h:43
max ptcl codes in the kpion
Definition: Zcode.h:2
maspic
Definition: Zmass.h:5
max ptcl codes in the kmuon
Definition: Zcode.h:2