COSMOS v7.655  COSMOSv7655
(AirShowerMC)
ctracking.f
Go to the documentation of this file.
1  subroutine ctrackingall
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
79  end
80 ! -------------------------------------tracking a ptcl
81  subroutine ctracking
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 
300  end
301  subroutine cresettimer(aTrack)
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
323  end
324 ! if you activate the next routine, Epics will have link problem b
325 
326  subroutine checkstat(str)
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
365  end
366 !cccc #endif
367 !-------------------------------------------------------
368  subroutine cfixmag
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
407  end
408 
409 ! --------------------------------------------------
410  subroutine csampintl
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 
489  end
490 ! **************************** cfixProc **********
491  subroutine cfixproc
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
569  end
570 ! ***********************
571 ! truncate a path of the particle, if the path
572 ! given in InfIntArray is too long, or the path traverses
573 ! an observation depth.
574  subroutine ctruncpath
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
614  end
615 ! *************** for same model, we must use simple super position for heavy
616 ! If so, current particle is decomposed into nucelons and put into stack
617 ! and icon =1 is made. else icon = 0
618  subroutine cforcessp(atrack, icon)
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
679  end
subroutine cerrormsg(msg, needrtn)
Definition: cerrorMsg.f:4
subroutine clengsmallbc(aTrack, r)
Definition: cmaxMovLen.f:280
subroutine cinismpintl
Definition: ciniSmpIntL.f:3
subroutine csetmintime(from)
Definition: cmkIncident.f:448
subroutine cmaxmovlen(leng, thick)
Definition: cmaxMovLen.f:3
max ptcl codes in the kgnuc
Definition: Zcode.h:2
subroutine cfixmodel(aPtcl)
Definition: cfixModel.f:2
subroutine cseecolpossible(pj, icon)
subroutine cthick2len(aTrack, tin, leng, t, jcut)
Definition: cthick2len.f:6
masn
Definition: Zmass.h:5
block data cblkIncident data *Za1ry *HeightOfInj d3
Definition: cblkIncident.h:7
subroutine cresetintinf
Definition: csetIntInf.f:23
const int kphoton
Definition: Zcode.h:6
Definition: Ztrack.h:44
max ptcl codes in the kkaon
Definition: Zcode.h:2
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
const int truncated
Definition: Ztrackv.h:95
subroutine cgeomag(yearin, llh, h, icon)
Definition: cgeomag.f:25
subroutine cobservation(id)
Definition: cobservation.f:4
const int tobeobserved
Definition: Ztrackv.h:94
subroutine csampnepintl
Definition: csampNEPIntL.f:11
subroutine checkstat(str)
Definition: ctracking.f:327
subroutine cifdead(a, icon)
Definition: cifDead.f:4
subroutine csetintinf(lenOrThick, decay, procname)
Definition: csetIntInf.f:4
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
subroutine csampgintl
Definition: csampGIntL.f:3
subroutine csampeintl
Definition: csampEIntL.f:3
dE dx *! Nuc Int sampling table d
Definition: cblkMuInt.h:130
subroutine cfixproc
Definition: ctracking.f:492
subroutine cresettimer(aTrack)
Definition: ctracking.f:302
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 ctrackingall
Definition: ctracking.f:2
subroutine ctransmagto(sys, pos, a, b)
Definition: ctransMagTo.f:11
subroutine ccomppathend
Definition: ccompPathEnd.f:6
subroutine cfixtarget(media)
Definition: cGetXsec.f:498
subroutine ctruncpath
Definition: ctracking.f:575
masp
Definition: Zmass.h:5
subroutine cputtrinfo
Definition: cputTrInfo.f:35
subroutine cforcessp(atrack, icon)
Definition: ctracking.f:619
subroutine ctracking
Definition: ctracking.f:82
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
max ptcl codes in the kmuon
Definition: Zcode.h:2
subroutine chookeint(never)
Definition: chook.f:162
subroutine cobas(el)
Definition: cobAS.f:9
subroutine cfixtargetmuni(media)
Definition: cGetXsec.f:585
subroutine cscalerprod(a, b, c)
Definition: cscalerProd.f:4