5 * Revision 1.1.1.1 1995/10/24 10:21:44 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.24 by S.Giani
14 C. ******************************************************************
16 C. * Controls tracking of current particle, *
17 C. * up to end of track for sequential tracking mode, or *
18 C. * through current volume for parallel tracking mode. *
20 C. * ==>Called by : GUTRAK *
21 C. * Authors : R.Brun, F.Bruyant *
23 C. ******************************************************************
25 #include "geant321/gcbank.inc"
26 #include "geant321/gccuts.inc"
27 #include "geant321/gcjloc.inc"
28 #include "geant321/gckine.inc"
29 #include "geant321/gcking.inc"
30 #include "geant321/gcmate.inc"
31 #include "geant321/gcphys.inc"
32 #include "geant321/gcparm.inc"
33 #include "geant321/gcsets.inc"
34 #include "geant321/gcstak.inc"
35 #include "geant321/gctmed.inc"
36 #include "geant321/gctrak.inc"
37 #include "geant321/gcvolu.inc"
38 #include "geant321/gcunit.inc"
39 #include "geant321/gcflag.inc"
40 #include "geant321/gcnum.inc"
41 #if defined(CERNLIB_USRJMP)
42 #include "geant321/gcjump.inc"
47 DIMENSION CUTS(10),MECA(5,13)
48 EQUIVALENCE (CUTS(1),CUTGAM),(MECA(1,1),IPAIR)
50 #if !defined(CERNLIB_SINGLE)
51 PARAMETER (EPSMAC=1.E-6)
53 #if defined(CERNLIB_SINGLE)
54 PARAMETER (EPSMAC=1.E-11)
57 C. ------------------------------------------------------------------
64 * *** Check validity of tracking medium and material parameters
66 10 IF (NUMED.NE.NUMOLD) THEN
69 JTM = LQ(JTMED- NUMED)
82 PRECOR = MIN(0.1*EPSIL, 0.0010)
83 IF (LQ(JTM).EQ.0) THEN
89 MECA(1,I) = Q(JTMED+10+I)
91 ILABS = Q(JTMED+10+21)
92 ISYNC = Q(JTMED+10+22)
93 ISTRA = Q(JTMED+10+23)
102 MECA(1,I) = Q(JTMN+10+I)
104 ILABS = Q(JTMN+10+21)
105 ISYNC = Q(JTMN+10+22)
106 ISTRA = Q(JTMN+10+23)
114 NAMATE(I) = IQ(JMA+I)
121 IF(IQ(JTM-2).GE.3.AND.LQ(JTM-3).NE.0.AND.ITCKOV.NE.0.AND.
122 + LQ(LQ(JTM-3)-3).NE.0.AND.Z.GE.1.) THEN
124 * *** In this tracking medium Cerenkov photons are generated and
125 * *** tracked. Set to 1 the corresponding flag.
133 * ** Update precomputed quantities
139 ELSEIF (DEEMAX.GT.0.) THEN
148 * If now the particle is entering in the same volume where
149 * it was exiting from last step, and if it has done this for
150 * more than 5 times, we decrease the precision of tracking
152 IF(MOD(NSTOUT,5).EQ.0) THEN
154 * WRITE(CHMAIL,10000)ITRA,ISTAK,NTMULT,NAPART
155 *10000 FORMAT(' *** GTRACK *** Boundary loop: track ',
156 * + I4,' stack ',I4,' NTMULT ',I5,1X,5A4)
158 * WRITE (CHMAIL,10250) IEVENT,IDEVT,(NRNDM(I),I = 1,2)
160 * WRITE(CHMAIL,10100) EPSCUR
161 *10100 FORMAT(' Precision now set to ',G10.3)
171 * *** Compute SET and DET number if volume is sensitive
186 * Clear step dependent variables
196 PREC = MAX(PRECOR,MAX(ABS(VECT(1)),ABS(VECT(2)),
197 + ABS(VECT(3)),SLENG)*EPSCUR)
199 * Give control to user at entrance of volume (INWVOL=1)
201 IF (INWVOL.EQ.1) THEN
202 #if !defined(CERNLIB_USRJMP)
205 #if defined(CERNLIB_USRJMP)
208 IF (ISTOP.NE.0) GO TO 999
212 * *** Propagate particle up to next volume boundary or end of track
216 IF (IPARAM.NE.0) THEN
217 IF (GEKIN.LE.PACUTS(ITRTYP)) THEN
221 #if !defined(CERNLIB_USRJMP)
224 #if defined(CERNLIB_USRJMP)
230 IF (ITRTYP.EQ.1) THEN
232 ELSE IF (ITRTYP.EQ.2) THEN
234 ELSE IF (ITRTYP.EQ.3) THEN
236 ELSE IF (ITRTYP.EQ.4) THEN
238 ELSE IF (ITRTYP.EQ.5) THEN
240 ELSE IF (ITRTYP.EQ.6) THEN
242 ELSE IF (ITRTYP.EQ.7) THEN
244 ELSE IF (ITRTYP.EQ.8) THEN
247 IF(JGSTAT.NE.0) CALL GFSTAT(10+ITRTYP)
250 * Check for possible endless loop
253 IF (NSTEP.GT.MAXNST) THEN
258 WRITE(CHMAIL,10200) MAXNST
260 WRITE(CHMAIL,10250) IEVENT,IDEVT,(NRNDM(I),I = 1,2)
262 WRITE(CHMAIL,10300)ITRA,ISTAK,NTMULT,(NAPART(I),I=1,5),
265 10200 FORMAT(' *** GTRACK *** More than ',I6,
266 + ' steps, tracking abandoned!')
267 10250 FORMAT(' IEVENT=',I7,' IDEVT=',I7,
268 + ' Random Seeds = ',I10,2X,I10)
269 10300 FORMAT(' Track ',I5,' stack ',I5,' NTMULT ',
270 + I5,1X,5A4,1X,'Time of flight ',F10.3,' ns')
274 * *** Give control to user at end of each tracking step
276 SAFETY = SAFETY -STEP
277 #if !defined(CERNLIB_USRJMP)
280 #if defined(CERNLIB_USRJMP)
284 IF (ISTOP.NE.0) GO TO 999
286 * Renormalize direction cosines
288 PMOM = SQRT(VECT(4)**2+VECT(5)**2+VECT(6)**2)
291 VECT(4) = VECT(4)*CMOD
292 VECT(5) = VECT(5)*CMOD
293 VECT(6) = VECT(6)*CMOD
296 IF (INWVOL.EQ.0) GO TO 80
298 IF (NJTMAX.GT.0) THEN
300 IF (NLEVIN.EQ.0) GO TO 100
303 IF (NLEVIN.GE.NLEVEL) THEN
306 IF (NLEVIN.EQ.0) GO TO 100
307 INFROM = LINDEX(NLEVIN+1)
309 IF (NLEVIN.NE.NLEVEL) INGOTO = 0
312 CALL GTMEDI (VECT, NUMED)
319 * Track outside setup, give control to user (INWVOL=3)
332 #if !defined(CERNLIB_USRJMP)
335 #if defined(CERNLIB_USRJMP)