COSMOS v7.655  COSMOSv7655
(AirShowerMC)
ctracking.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine ctrackingall
 
subroutine ctracking
 
subroutine cresettimer (aTrack)
 
subroutine checkstat (str)
 
subroutine cfixmag
 
subroutine csampintl
 
subroutine cfixproc
 
subroutine ctruncpath
 
subroutine cforcessp (atrack, icon)
 

Function/Subroutine Documentation

◆ cfixmag()

subroutine cfixmag ( )

Definition at line 369 of file ctracking.f.

References cgeomag(), clengsmallbc(), and ctransmagto().

Referenced by ctracking().

369  implicit none
370 #include "Ztrack.h"
371 #include "Ztrackv.h"
372 #include "Ztrackp.h"
373 #include "Zobs.h"
374 #include "Zobsp.h"
375 #include "Zobsv.h"
376 
377  real*8 x/0./, y/0./, z/0./
378  save x, y, z
379  real*8 distant
380  integer icon
381  real*8 u
382 
383  if(howgeomag .le. 2 .or. howgeomag .eq. 31) then
384 ! distant; change of B is < 1 % (for default
385 ! MagChgDist =20 km; you can change it)
386  call clengsmallbc(trackbefmove, distant)
387  if( (trackbefmove%pos%xyz%r(1) - x)**2 +
388  * (trackbefmove%pos%xyz%r(2) - y)**2 +
389  * (trackbefmove%pos%xyz%r(3) - z)**2
390  * .gt. distant**2) then
391 ! if more than MagChgDist m from previous mag set.,
392 ! reset mag field.
393 !
394  call cgeomag(yearofgeomag, trackbefmove%pos%xyz,
395  * mag, icon)
396 
397  call ctransmagto('xyz', trackbefmove%pos%xyz,
398  * mag, mag)
399  x = trackbefmove%pos%xyz%r(1)
400  y = trackbefmove%pos%xyz%r(2)
401  z = trackbefmove%pos%xyz%r(3)
402 
403  endif
404  else
405  mag = magfieldxyz
406  endif
nodes z
subroutine clengsmallbc(aTrack, r)
Definition: cmaxMovLen.f:280
subroutine cgeomag(yearin, llh, h, icon)
Definition: cgeomag.f:25
latitude latitude this system is used *****************************************************************! type coord sequence union map real y
Definition: Zcoord.h:25
subroutine ctransmagto(sys, pos, a, b)
Definition: ctransMagTo.f:11
! structure defining a particle at production ! Basic idea of what is to be contained in ! the particle structue is that dynamical ones should be included those derivable from the particle code ! is not included ******************************************************type fmom momentum sequence union map real e endmap map real * x
Definition: Zptcl.h:21
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cfixproc()

subroutine cfixproc ( )

Definition at line 492 of file ctracking.f.

References cthick2len(), d, d3, tointeract, and truncated.

Referenced by csampintl().

492  implicit none
493 
494 #include "Zglobalc.h"
495 #include "Ztrack.h"
496 #include "Ztrackv.h"
497 #include "Zearth.h"
498 
499 
500  real*8 h, leng, t, minlen, clen2thick, pcut
501 !
502  integer i, jcut
503 !
504  minlen = infty + infty
505 ! get vertical height
506  h = trackbefmove%pos%height
507  do i = 1, numberofinte
508  if(.not. intinfarray(i)%decay) then
509 ! convert kg/m2 into length
510  if(numberofinte .eq. 1 .or.
511  * intinfarray(i)%thickness .ne. infty) then
512  call cthick2len(trackbefmove,
513  * intinfarray(i)%thickness, leng, t, jcut)
514 
515  if( jcut .ne. 0) then
516  intinfarray(i)%thickness = t
517  endif
518 ! some work around for insufficient accuracy
519  if(leng .lt. 0.) then
520  leng = 1.d-3
521  intinfarray(i)%thickness = clen2thick(h,
522  * trackbefmove%vec%coszenith,
523  * intinfarray(i)%length )
524  endif
525  else
526  leng = infty
527  jcut = 0
528  endif
529  else
530  leng = intinfarray(i)%length
531  jcut = 0
532  endif
533  if(leng .lt. minlen) then
534  if(jcut .ne. 0) then
535  movestat = truncated
536  else
537  movestat = tointeract
538  endif
539  processno = i
540  intinfarray(i)%length = leng
541  minlen = leng
542  endif
543  enddo
544 ! if(leng .ge. minlen) then ! bug in 6.00
545 ! if(leng .ge. Infty) then
546 ! ProcessNo = 1
547 ! IntInfArray(1).length = 1.e5
548 ! endif
549  if(intinfarray(processno)%decay ) then
550 ! In the case of muon, if individual knockon process
551 ! is neglected (by parameter setting or with high Emin)
552 ! the length could be quite large (say, 6000 km).
553 ! and results in error in the next call.
554 ! To avoid that, we cut the path here
555 !
556  if( trackbefmove%vec%coszenith .lt. 0.) then
557  pcut = 300.d3
558  else
559  pcut = 30.d3
560  endif
561  if(intinfarray(processno)%length .gt. pcut) then
562  movestat = truncated
563  intinfarray(processno)%length = pcut
564  endif
565  intinfarray(processno)%thickness = clen2thick(h,
566  * trackbefmove%vec%coszenith,
567  * intinfarray(processno)%length )
568  endif
nodes i
subroutine cthick2len(aTrack, tin, leng, t, jcut)
Definition: cthick2len.f:6
real *8 function clen2thick(z, cosz, leng)
Definition: clen2thick.f:27
block data cblkIncident data *Za1ry *HeightOfInj d3
Definition: cblkIncident.h:7
const int truncated
Definition: Ztrackv.h:95
integer leng
Definition: interface2.h:1
real(4), dimension(:), allocatable, save h
Definition: cNRLAtmos.f:28
dE dx *! Nuc Int sampling table d
Definition: cblkMuInt.h:130
const int tointeract
Definition: Ztrackv.h:93
nodes t
Here is the call graph for this function:
Here is the caller graph for this function:

◆ cforcessp()

subroutine cforcessp ( type(track atrack,
integer  icon 
)

Definition at line 619 of file ctracking.f.

References cfixmodel(), cpush(), kgnuc, knuc, masn, and masp.

Referenced by ctrackingall().

619 #include "Ztrack.h"
620 #include "Zevhnv.h"
621 #include "Zevhnp.h"
622 #include "Zcode.h"
623 #include "Zmass.h"
624 
625  integer icon
626  type(track)::atrack ! input current projectile.
627 
628  type(track)::pj
629  integer i, j
630  real*8 p, po, pr
631 
632  icon = 0
633  if(atrack%p%code .eq. kgnuc) then
634  call cfixmodel(atrack%p)
635  if(activemdl .eq. 'dpmjet3' .and.
636  * atrack%p%subcode .gt. 18) then
637 !///// icon = 1 /////
638  elseif( activemdl .eq. 'incdpm3') then
639  icon = 1
640  endif
641  endif
642  if( icon .eq. 1 ) then
643  pj = atrack
644  pj%p%fm%p(4) = atrack%p%fm%p(4)/atrack%p%subcode
645  pj%p%mass = masp
646  pj%p%code = knuc
647  pj%p%subcode = -1
648  pj%p%charge = 1
649 
650  p = sqrt(pj%p%fm%p(4)**2 - masp**2)
651 ! next one leads to seg. violation on opteron and ifc64
652 ! po = atrack.p.fm.p(1)**2 + atrack.p.fm.p(2)**2 +
653 ! * atrack.p.fm.p(3)**2
654 ! ( still by version 9. )
655 
656  po = atrack%p%fm%p(1)**2 + atrack%p%fm%p(2)**2
657  po = po + atrack%p%fm%p(3)**2
658 
659  po = sqrt(po)
660  pr = p/po
661  do j = 1, 3
662  pj%p%fm%p(j) = atrack%p%fm%p(j)*pr
663  enddo
664  do i = 1, atrack%p%charge
665  call cpush(pj)
666  enddo
667 
668  pj%p%mass = masn
669  p = sqrt(pj%p%fm%p(4)**2 - masn**2)
670  pr = p/po
671  pj%p%charge = 0
672  do j = 1, 3
673  pj%p%fm%p(j) = atrack%p%fm%p(j)*pr
674  enddo
675  do i = 1, atrack%p%subcode - atrack%p%charge
676  call cpush(pj)
677  enddo
678  endif
nodes i
max ptcl codes in the kgnuc
Definition: Zcode.h:2
subroutine cfixmodel(aPtcl)
Definition: cfixModel.f:2
masn
Definition: Zmass.h:5
Definition: Ztrack.h:44
********************block data cblkHeavy ********************integer j data *HeavyG2symbol p
Definition: cblkHeavy.h:7
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code kiron data j
Definition: cblkHeavy.h:36
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code knuc
Definition: cblkHeavy.h:7
masp
Definition: Zmass.h:5
subroutine cpush(a)
Definition: cstack.f:4
Here is the call graph for this function:
Here is the caller graph for this function:

◆ checkstat()

subroutine checkstat ( character*(*)  str)

Definition at line 327 of file ctracking.f.

Referenced by ctracking().

327  implicit none
328 #include "Ztrack.h"
329 #include "Ztrackv.h"
330 #include "Ztrackp.h"
331 #include "Zobs.h"
332 #include "Zobsv.h"
333 #include "Zevhnv.h"
334 
335  logical deb
336  common /cdebug/deb
337 
338  character*(*) str
339  integer i
340  integer nc
341  data nc/0/
342 
343  nc = nc + 1
344 ! if(nc .gt. 750) then
345 ! if( deb) then
346  write(0,*) ' ActiveModel=',activemdl
347  write(0,*) str, ' code=',trackbefmove%p%code,
348  * ' sub',trackbefmove%p%subcode,
349  * ' chg',trackbefmove%p%charge
350  write(0,*) 'Px,y,z e=', trackbefmove%p%fm%p(1:4)
351  write(0,*) 'Move stat=',movestat
352  write(0, *) ' where', trackbefmove%where
353  write(0,*) ' h==', trackbefmove%pos%height,
354  * ' d=', trackbefmove%pos%depth
355  write(0,*) ' cos=',trackbefmove%vec%coszenith
356  do i = 1, numberofinte
357  write(0, *) ' process=',intinfarray(i)%process
358  write(0, *) ' thickness=',intinfarray(i)%thickness
359  write(0, *) ' length=',intinfarray(i)%length
360  enddo
361  write(0,*)' ProcessNo=', processno
362  write(0,*) '--------------'
363 ! endif
364 ! endif
nodes i
real cut integer nc
Definition: Zprivate.h:1
Here is the caller graph for this function:

◆ cresettimer()

subroutine cresettimer ( type(track aTrack)

Definition at line 302 of file ctracking.f.

References csetmintime().

Referenced by cbegin1ev().

302  implicit none
303 #include "Ztrack.h"
304 #include "Ztrackv.h"
305 #include "Ztrackp.h"
306 #include "Zobs.h"
307 #include "Zobsp.h"
308 #include "Zobsv.h"
309 #include "Zincidentv.h"
310 #include "Zcode.h"
311 #include "Zmanagerp.h"
312  type(track)::atrack
313 ! reset minimum time to reach the obs level (time from this
314 ! hight to the obs. level), if no mag. exists until
315 ! the first collision point. or ptcl goes streight
316  if(mod(howgeomag, 2) .eq. 1 .or.
317  * incidentcopy%p%charge .eq. 0 .and.
318  * obsplane .ne. 3) then
319  call csetmintime(atrack)
320  else
321 ! MovedTrack.t = 0. ! bug bef uv6.09 ;;; but why commentout ???
322  endif
subroutine csetmintime(from)
Definition: cmkIncident.f:448
Definition: Ztrack.h:44
Here is the call graph for this function:
Here is the caller graph for this function:

◆ csampintl()

subroutine csampintl ( )

Definition at line 411 of file ctracking.f.

References cfixproc(), cfixtarget(), cfixtargetmuni(), cinismpintl(), cresetintinf(), csampeintl(), csampgintl(), csampnepintl(), cseecolpossible(), csetintinf(), kelec, kphoton, and true.

Referenced by ctracking().

411  use modxsecmedia
412 ! **************************************************
413 !
414 ! sample interaction length
415 ! and interaction type.
416 ! Method. Sample interaction lengths for all possible
417 ! interactions (for collisions, in kg/m2, for decay
418 ! in m). They are stored in a record /intinf/ IntInfArray
419 ! given in Ztrackv.h;
420 ! In the routine, cfixProc,
421 ! we take the minimum of values given in kg/m2, and
422 ! convert it in real length (m). In this process,
423 ! path truncation may occur (if the particle is
424 ! going upward, and there is very thin air there,
425 ! then the given thickness may not be realized.
426 ! Or if the length is too large and accuracy
427 ! of convesion is not enough due to the earch
428 ! curverture)
429 ! If the decay process exists, we compare the length
430 ! given by the above treatment, and take shorter one.
431 ! If decay length is shorter, we assume the decay
432 ! takes place, else some collision takes place if
433 ! the path is not truncated. In the latter case,
434 ! if the path is truncated, MoveStat == Truncated
435 ! is set.
436  implicit none
437 
438 #include "Zcode.h"
439 #include "Ztrack.h"
440 #include "Ztrackv.h"
441 #include "Ztrackp.h"
442 
443  real*8 leng/1.d50/ ! will be truncated by ctruncPath
444  integer:: jcon
445 !/////////
446  logical::show
447  common /showshow/ show
448 !//////////
449 
450 ! **************************************************
451  call cinismpintl ! init for interaction length sampling
452 !
453  if(reverse .ne. 0) then
454  call csetintinf(leng, .true., 'none')
455  processno = 1
456  else
457  if(trackbefmove%p%code .eq. kelec) then
458  call csampeintl
459  elseif(trackbefmove%p%code .eq. kphoton) then
460  call csampgintl
461  else
462  call csampnepintl ! non Electron Photon Interaction.
463  endif
464  call cfixproc
465 
466  if( intinfarray(processno)%process == 'coll' ) then
467 ! some of the code can not deal with coll.of sigma
468 ! etc.
469  call cseecolpossible( trackbefmove%p, jcon)
470 
471  if( jcon == -1) then
472 ! then force to decay
473  call cresetintinf
474  else
475  call cfixtarget( media(1) )
476  endif
477  elseif( intinfarray(processno)%process == 'photop') then
478  call cfixtarget( media(1) )
479  elseif( intinfarray(processno)%process == 'munuci') then
480  call cfixtargetmuni(media(1))
481  endif
482 
483  if(.not. freec .and. zfirst%pos%depth .eq. 0.) then
484  intinfarray(processno)%length = 0.
485  intinfarray(processno)%thickness = 0.
486  endif
487  endif
488 
subroutine cinismpintl
Definition: ciniSmpIntL.f:3
subroutine cseecolpossible(pj, icon)
subroutine cresetintinf
Definition: csetIntInf.f:23
const int kphoton
Definition: Zcode.h:6
max ptcl codes in the kelec
Definition: Zcode.h:2
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 true
Definition: cblkElemag.h:7
integer leng
Definition: interface2.h:1
subroutine csampnepintl
Definition: csampNEPIntL.f:11
subroutine csetintinf(lenOrThick, decay, procname)
Definition: csetIntInf.f:4
subroutine csampgintl
Definition: csampGIntL.f:3
subroutine csampeintl
Definition: csampEIntL.f:3
subroutine cfixproc
Definition: ctracking.f:492
subroutine cfixtarget(media)
Definition: cGetXsec.f:498
subroutine cfixtargetmuni(media)
Definition: cGetXsec.f:585
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctracking()

subroutine ctracking ( )

Definition at line 82 of file ctracking.f.

References borderh, borderl, ccomppathend(), cerrormsg(), cfixmag(), cfixmodel(), checkstat(), chookeabsorb(), chookeint(), cifxobssite(), cinteraction(), cobservation(), cpush(), cputtrinfo(), csampintl(), ctruncpath(), false, kgnuc, knuc, kpion, tobeobserved, tointeract, true, and truncated.

Referenced by ctrackingall().

82  use modxsecmedia, only: targetnucleonno, targetprotonno,
83  * targetxs
84  implicit none
85 
86 #include "Ztrack.h"
87 #include "Ztrackv.h"
88 #include "Ztrackp.h"
89 #include "Zobs.h"
90 #include "Zobsp.h"
91 #include "Zobsv.h"
92 #include "Zincidentv.h"
93 #include "Zcode.h"
94 #include "Zmanagerp.h"
95 #include "Zstackv.h"
96 #include "Zevhnv.h"
97 ! next is for DEBUG
98 !//////
99  logical show
100  common /showshow/ show
101 !/////////
102 #define DEBUG 0
103 
104 
105  logical reset
106  real*8 cosangle
107  character*70 msg
108  integer nextwhere, never, ptclidx
109 !c integer icon
110 
111 #if DEBUG == 1
112  call checkstat('before fixModel')
113 #endif
114 
115  call cfixmodel( trackbefmove%p ) ! fix interaction model.
116  call cfixmag ! Mag field
117 ! sample interaction length. The path may
118 ! be truncated to a shorter one than really sampled.
119 ! In that case, MoveStat == Truncated.
120 #if DEBUG == 1
121  call checkstat('before csampIntl')
122 #endif
123  call csampintl
124 #if DEBUG == 1
125  call checkstat('after csampIntl')
126 #endif
127 ! Truncate the path if it is too long. Note, the truncated
128 ! path in the above process may be again truncated to
129 ! a shorter one. This happens, for example, if ptcl energy
130 ! is low. Path inf is reset in IntInfArray.
131  call ctruncpath
132 
133 #if DEBUG == 1
134  call checkstat('after ctruncPath')
135 #endif
136 
137 ! compute path end inf. including scattering and
138 ! mag. deflection. Path end inf is set in MovedTrack
139 
140  call ccomppathend
141 
142 #if DEBUG == 1
143  call checkstat('after ccompPathEnd')
144 #endif
145 ! see if MovedTrack crosses an observation site.
146 ! (or reaches BorderHeightL) If so, reset MovedTrack.
147  call cifxobssite(nextwhere)
148 
149 
150  if(trackbefmove%p%charge .ne. 0 .and. eabsorb(1) .ne. 0) then
151 ! 4th arg. not used now
152  call chookeabsorb(trackbefmove, movedtrack, energyloss, 0)
153  endif
154 #if DEBUG == 1
155  call checkstat('after cifXObsSite')
156 #endif
157  if(trace .ne. 0) then
158  if( mod(trace, 10) .le. 2) then
159  call cputtrinfo ! put trace info.
160  elseif(mod(trace,10) .le. 4) then
161  if( trackbefmove%pos%height .le. heightlist(1)) then
162  call cputtrinfo ! put trace info.
163  endif
164  endif
165  endif
166 #if DETAILED_TRACKING >= 3
167 ! the user may kill the ptcl
168  call cobservation(8)
169 #endif
170 
171 !
172  if(movestat .eq. truncated) then
173 ! &&&&&&&&&&&&&& some may lose energy by dE/dx etc.
174 ! This should be recorded
175  if(job .eq. 'newskel' .and.
176  * (movedtrack%p%fm%p(4) - movedtrack%p%mass) .lt.
177  * keminobs(1)) then
178  never = -1
179  call chookeint(never)
180  endif
181 ! &&&&&&&&&&&&
182 ! stack current ptcl
183  call cpush(movedtrack)
184  elseif(movestat .eq. tointeract ) then
185  if(zfirst%pos%depth .eq. 0.) then
186 ! if( (MovedTrack.p.code .ge. kpion .and.
187 ! * MovedTrack.p.code .le. knuc ) .or.
188 ! * MovedTrack.p.code .eq. kgnuc ) then
189 ! from v.7.10
190  if( (incidentcopy%p%code .ge. kpion .and.
191  * incidentcopy%p%code .le. knuc ) .or.
192  * incidentcopy%p%code .eq. kgnuc ) then
193 
194 !
195 ! from v6.31 1ry is judged by Stack_pos
196 ! (even if this is not used, almost no problem)
197 ! ! if no stack, the particle should be 1ry (since Zfirst=0)
198 
199  if( stack_pos .eq. 0 .and.
200  * intinfarray(processno)%process .eq. 'coll') then
201  reset = .true.
202  else
203  reset = .false.
204  endif
205  else
206  reset = .true.
207  endif
208  if(reset) then
209 ! reset minimum time to reach the obs level (time from this
210 ! hight to the obs. level), if no mag. exists until
211 ! the first collision point. or ptcl goes streight
212 ! comment out from v6.31
213 ! call cresetTimer(MovedTrack)
214 
215  zfirst = movedtrack
216  firstcola = targetnucleonno
217  firstcolz = targetprotonno
218  firstcolxs = targetxs
219  endif
220  endif
221 #if DETAILED_TRACKING >= 1
222  call cobservation(4)
223 #endif
224 
225 #if DEBUG == 1
226  call checkstat('before cinteraction')
227 #endif
228  call cinteraction
229 #if DEBUG == 1
230  call checkstat('after cinteraction')
231 #endif
232  elseif(movestat .eq. tobeobserved ) then
233  ptclidx = movedtrack%p%code ! make 4 byte integer
234  ptclidx = min(ptclidx, 8) ! this is only for using KEminObs
235  if(movedtrack%p%fm%p(4)-movedtrack%p%mass
236  * .ge. keminobs(ptclidx) ) then ! .gt. for <= uv6.00
237 ! call only for high energy particles
238 ! (at AS generation, some ptcl may have < KEminObs
239 ! or some may loose energy by dE/dx etc.
240  call cobservation(2)
241 
242  if(job .eq. 'newskel' .and.
243  * endlevel .lt. noofsites .and.
244  * movedtrack%where .eq. endlevel ) then
245 ! in this case, even E> KEminObs must be recorded
246 ! for skeleton making for kahanshin
247 ! where should be +1 at flesh time
248 
249  movedtrack%where = movedtrack%where + 1
250  never = -3
251  call chookeint(never)
252  movedtrack%where = movedtrack%where - 1 ! for safty
253  endif
254  elseif(job .eq. 'newskel' .and.
255  * endlevel .eq. noofsites .and.
256  * movedtrack%where .lt. endlevel ) then
257 ! &&&&&& this is to be recorded
258 ! where should be + 1 at flesh time
259  movedtrack%where = movedtrack%where + 1
260  never = -2
261  call chookeint(never)
262  movedtrack%where = movedtrack%where - 1
263 ! &&&&&
264  endif
265 ! update observation place
266 ! if(abs(ObsPlane) .eq. perpendicular) then
267  movedtrack%where = nextwhere
268 ! if more obs-site, stack current ptcl.
269  if(.not. upgoing) then ! incident is downgoing
270  if(movedtrack%where .gt. endlevel) then
271  ! no need to stack; discard ptcl.
272  else
273  movedtrack%where =max( movedtrack%where*1, 1)
274  call cpush(movedtrack)
275  endif
276  else !incident is Upgoing
277  if(movedtrack%where .lt.1 ) then
278  ! no need to stack
279  else
280  movedtrack%where =
281  * min(movedtrack%where*1, endlevel)
282  call cpush(movedtrack)
283  endif
284  endif
285 ! else
286 ! MovedTrack.where = nextwhere
287 ! call cpush(MovedTrack)
288 ! endif
289  elseif(movestat .eq. borderl) then
290  call cobservation(3)
291  call cpush(movedtrack)
292  elseif(movestat .eq. borderh) then
293  call cobservation(1)
294  call cpush(movedtrack)
295  else
296  write(msg, *) ' movestat=',movestat,' invalid'
297  call cerrormsg(msg, 0)
298  endif
299 
subroutine cerrormsg(msg, needrtn)
Definition: cerrorMsg.f:4
max ptcl codes in the kgnuc
Definition: Zcode.h:2
subroutine cfixmodel(aPtcl)
Definition: cfixModel.f:2
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 true
Definition: cblkElemag.h:7
const int truncated
Definition: Ztrackv.h:95
subroutine cobservation(id)
Definition: cobservation.f:4
const int tobeobserved
Definition: Ztrackv.h:94
subroutine checkstat(str)
Definition: ctracking.f:327
subroutine csampintl
Definition: ctracking.f:411
const int borderl
Definition: Ztrackv.h:97
const int borderh
Definition: Ztrackv.h:98
subroutine cifxobssite(nextwhere)
Definition: cifXObsSite.f:2
********************block data cblkHeavy ********************integer j data *HeavyG2symbol *data *HeavyG2code knuc
Definition: cblkHeavy.h:7
const int tointeract
Definition: Ztrackv.h:93
subroutine cinteraction
Definition: cinteraction.f:5
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
subroutine ccomppathend
Definition: ccompPathEnd.f:6
subroutine ctruncpath
Definition: ctracking.f:575
subroutine cputtrinfo
Definition: cputTrInfo.f:35
subroutine cfixmag
Definition: ctracking.f:369
max ptcl codes in the kpion
Definition: Zcode.h:2
subroutine chookeabsorb(a, b, dE, info)
This is called when Eabsorb != 0 and when a charged particle runs from a to b and deposits energy dE ...
Definition: chookEabsorb.f:60
subroutine cpush(a)
Definition: cstack.f:4
subroutine chookeint(never)
Definition: chook.f:162
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctrackingall()

subroutine ctrackingall ( )

Definition at line 2 of file ctracking.f.

References cforcessp(), cifdead(), cobas(), cpop(), cscalerprod(), ctracking(), kelec, kphoton, and true.

Referenced by ceventloop().

2 ! **************************************************
3 ! tracking particles given in the stack area.
4 ! During tracking, new particles may be produced
5 ! and pushed in the stack area. They are all
6 ! treated here, until all particles are processed.
7 ! **************************************************
8  implicit none
9 #include "Zcode.h"
10 #include "Ztrack.h"
11 #include "Ztrackv.h"
12 #include "Ztrackp.h"
13 #include "Zincidentv.h"
14 
15  integer moreptcl, jold, icon
16  real*8 smallas/1./ ! electrons < 1GeV cannot make AS at all.
17 !c real*8 u, iwgt
18  real*8 cosfromaxis
19  external cblktracking
20 !//////
21  logical show
22  common /showshow/ show
23 !////////////
24 !
25 ! *** do until no more ptcl in stack
26  do while (.true.)
27 ! get one particle from stack
28  call cpop(trackbefmove, moreptcl)
29  if(moreptcl .eq. 0) goto 100 ! exit
30  call rndsw(jold, 1) ! specify 1st generator.
31  call cifdead(trackbefmove, icon) ! generator may be switched to 2
32 
33 ! icon=0; alive, 1 E<Emin, 2 long flight 3 h>H 4 h<L
34 ! 5 angle>limit
35 ! AS generation.
36 
37  if(observeas .and. icon .le. 1 ) then
38  if(trackbefmove%p%code .eq. kelec) then
39  if(trackbefmove%asflag .eq. 0) then
40  if(trackbefmove%p%fm%p(4) .le. easwait) then
41  if(trackbefmove%p%fm%p(4) .gt. smallas) then ! 95/08/17
42  call cscalerprod(trackbefmove%vec%w,
43  * dcatobsxyz, cosfromaxis)
44 !!!!!!!!!!!
45  write(0,*) ' cosfromaxis=',cosfromaxis
46  write(0, *) ' Track dc =',trackbefmove%vec%w
47  write(0,*) ' DcAtObsXyz=', dcatobsxyz
48 !!!!!!!!!!!!!!!
49  if(cosfromaxis .gt. 0.5 ) then
50 ! as gneration for e with 60 deg or less from axis
51  call cobas(trackbefmove)
52  endif
53  endif
54  trackbefmove%asflag =1
55  endif
56  endif
57  elseif(trackbefmove%p%code .eq. kphoton) then
58  if(icon .eq. 1) then
59  if(trackbefmove%asflag .eq. 0) then
60  if(trackbefmove%p%fm%p(4) .gt. smallas) then
61  icon = 0 ! follow until it becomes e-pair
62  endif
63  endif
64  endif
65  endif
66  endif
67 ! ----------------------------
68  if(icon .eq. 0) then
69 ! see if heavy and ssp is needed; icon =1 --> SSP so skip tracking here
70  call cforcessp(trackbefmove, icon)
71  if(icon .eq. 0) then
72  call ctracking
73  endif
74  else
75 ! already dead ptcl has been considered in cifDead; nothing todo
76  endif
77  enddo
78  100 continue
const int kphoton
Definition: Zcode.h:6
max ptcl codes in the kelec
Definition: Zcode.h:2
subroutine cpop(a, remain)
Definition: cstack.f:38
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 true
Definition: cblkElemag.h:7
subroutine cifdead(a, icon)
Definition: cifDead.f:4
subroutine cforcessp(atrack, icon)
Definition: ctracking.f:619
subroutine ctracking
Definition: ctracking.f:82
subroutine cobas(el)
Definition: cobAS.f:9
subroutine cscalerprod(a, b, c)
Definition: cscalerProd.f:4
Here is the call graph for this function:
Here is the caller graph for this function:

◆ ctruncpath()

subroutine ctruncpath ( )

Definition at line 575 of file ctracking.f.

References cmaxmovlen(), kkaon, kmuon, kpion, tointeract, and truncated.

Referenced by ctracking().

575  implicit none
576 #include "Zcode.h"
577 #include "Ztrack.h"
578 #include "Ztrackv.h"
579 
580  real*8 leng, thick
581  real(8),parameter::veryshort=0.1 ! 10cm
582  real(8),parameter::verylow=2d-3 ! 2MeV
583 !
584 !//////////////////
585  logical show
586  common /showshow/ show
587 !////////////
588  call cmaxmovlen(leng, thick)
589  if(leng .lt. intinfarray(processno)%length ) then
590  movestat = truncated
591  intinfarray(processno)%length = leng
592  intinfarray(processno)%thickness = thick
593  if(leng < veryshort ) then
594 ! some very unhappy case, B and dE/dx forces
595 ! muon (typically) path very short and the
596 ! muon cannot decay, while E loss is very small
597 ! and muon KE is still > 0 after the path.
598 ! This is repeated and KE becomes smaller and
599 ! smaller (say, until 10^-13 GeV); it may need
600 ! huge steps for traveling only a few cm and
601 ! cpu time more than 5 sec. This is avoided
602 ! by next
603  if( movedtrack%p%code == kmuon .or.
604  * movedtrack%p%code == kpion .or.
605  * movedtrack%p%code == kkaon ) then
606  if( movedtrack%p%fm%p(4)- movedtrack%p%mass
607  * < verylow ) then
608 ! force to decay;
609  movestat = tointeract
610  endif
611  endif
612  endif
613  endif
real(4), dimension(:), allocatable, save thick
Definition: cNRLAtmos.f:28
subroutine cmaxmovlen(leng, thick)
Definition: cmaxMovLen.f:3
max ptcl codes in the kkaon
Definition: Zcode.h:2
const int truncated
Definition: Ztrackv.h:95
integer leng
Definition: interface2.h:1
dE dx *! Nuc Int sampling table d
Definition: cblkMuInt.h:130
const int tointeract
Definition: Ztrackv.h:93
max ptcl codes in the kpion
Definition: Zcode.h:2
max ptcl codes in the kmuon
Definition: Zcode.h:2
Here is the call graph for this function:
Here is the caller graph for this function: