5 * Revision 1.1.1.1 1999/05/18 15:55:21 fca
8 * Revision 1.1.1.1 1995/10/24 10:21:44 cernlib
12 #include "geant321/pilot.h"
13 *CMZ : 3.21/02 29/03/94 15.41.24 by S.Giani
14 *FCA : 17/05/99 16:21:12 by Federico Carminati
15 * Added the modifications of P.Nevski in MANY volumes
16 * force update of alternative list of many candidates
20 C. ******************************************************************
22 C. * Controls tracking of current particle, *
23 C. * up to end of track for sequential tracking mode, or *
24 C. * through current volume for parallel tracking mode. *
26 C. * ==>Called by : GUTRAK *
27 C. * Authors : R.Brun, F.Bruyant *
29 C. ******************************************************************
31 #include "geant321/gcbank.inc"
32 #include "geant321/gccuts.inc"
33 #include "geant321/gcjloc.inc"
34 #include "geant321/gckine.inc"
35 #include "geant321/gcking.inc"
36 #include "geant321/gcmate.inc"
37 #include "geant321/gcphys.inc"
38 #include "geant321/gcparm.inc"
39 #include "geant321/gcsets.inc"
40 #include "geant321/gcstak.inc"
41 #include "geant321/gctmed.inc"
42 #include "geant321/gctrak.inc"
43 #include "geant321/gcvolu.inc"
44 #include "geant321/gcunit.inc"
45 #include "geant321/gcflag.inc"
46 #include "geant321/gcnum.inc"
47 #if defined(CERNLIB_USRJMP)
48 #include "geant321/gcjump.inc"
53 DIMENSION CUTS(10),MECA(5,13)
54 EQUIVALENCE (CUTS(1),CUTGAM),(MECA(1,1),IPAIR)
56 #if !defined(CERNLIB_SINGLE)
57 PARAMETER (EPSMAC=1.E-6)
59 #if defined(CERNLIB_SINGLE)
60 PARAMETER (EPSMAC=1.E-11)
63 C. ------------------------------------------------------------------
70 * *** Check validity of tracking medium and material parameters
72 10 IF (NUMED.NE.NUMOLD) THEN
75 JTM = LQ(JTMED- NUMED)
88 PRECOR = MIN(0.1*EPSIL, 0.0010)
89 IF (LQ(JTM).EQ.0) THEN
95 MECA(1,I) = Q(JTMED+10+I)
97 ILABS = Q(JTMED+10+21)
98 ISYNC = Q(JTMED+10+22)
99 ISTRA = Q(JTMED+10+23)
108 MECA(1,I) = Q(JTMN+10+I)
110 ILABS = Q(JTMN+10+21)
111 ISYNC = Q(JTMN+10+22)
112 ISTRA = Q(JTMN+10+23)
120 NAMATE(I) = IQ(JMA+I)
127 IF(IQ(JTM-2).GE.3.AND.LQ(JTM-3).NE.0.AND.ITCKOV.NE.0.AND.
128 + LQ(LQ(JTM-3)-3).NE.0.AND.Z.GE.1.) THEN
130 * *** In this tracking medium Cerenkov photons are generated and
131 * *** tracked. Set to 1 the corresponding flag.
139 * ** Update precomputed quantities
145 ELSEIF (DEEMAX.GT.0.) THEN
154 * If now the particle is entering in the same volume where
155 * it was exiting from last step, and if it has done this for
156 * more than 5 times, we decrease the precision of tracking
158 IF(MOD(NSTOUT,5).EQ.0) THEN
160 * WRITE(CHMAIL,10000)ITRA,ISTAK,NTMULT,NAPART
161 *10000 FORMAT(' *** GTRACK *** Boundary loop: track ',
162 * + I4,' stack ',I4,' NTMULT ',I5,1X,5A4)
164 * WRITE (CHMAIL,10250) IEVENT,IDEVT,(NRNDM(I),I = 1,2)
166 * WRITE(CHMAIL,10100) EPSCUR
167 *10100 FORMAT(' Precision now set to ',G10.3)
177 * *** Compute SET and DET number if volume is sensitive
192 * Clear step dependent variables
202 PREC = MAX(PRECOR,MAX(ABS(VECT(1)),ABS(VECT(2)),
203 + ABS(VECT(3)),SLENG)*EPSCUR)
205 * Give control to user at entrance of volume (INWVOL=1)
207 IF (INWVOL.EQ.1) THEN
208 #if !defined(CERNLIB_USRJMP)
211 #if defined(CERNLIB_USRJMP)
214 IF (ISTOP.NE.0) GO TO 999
218 * *** Propagate particle up to next volume boundary or end of track
222 IF (IPARAM.NE.0) THEN
223 IF (GEKIN.LE.PACUTS(ITRTYP)) THEN
227 #if !defined(CERNLIB_USRJMP)
230 #if defined(CERNLIB_USRJMP)
236 IF (ITRTYP.EQ.1) THEN
238 ELSE IF (ITRTYP.EQ.2) THEN
240 ELSE IF (ITRTYP.EQ.3) THEN
242 ELSE IF (ITRTYP.EQ.4) THEN
244 ELSE IF (ITRTYP.EQ.5) THEN
246 ELSE IF (ITRTYP.EQ.6) THEN
248 ELSE IF (ITRTYP.EQ.7) THEN
250 ELSE IF (ITRTYP.EQ.8) THEN
253 IF(JGSTAT.NE.0) CALL GFSTAT(10+ITRTYP)
256 * Check for possible endless loop
259 IF (NSTEP.GT.MAXNST) THEN
264 WRITE(CHMAIL,10200) MAXNST
267 WRITE(CHMAIL,10250) IEVENT,IDEVT,(NRNDM(I),I=1,2),TOFG*1.E9
269 10200 FORMAT(' *** GTRACK *** More than ',I6,
270 + ' steps, tracking abandoned!')
271 10250 FORMAT(' IEVENT ',I7,' IDEVT ',I7,' Random Seeds ',I10,2X
272 $ ,I10,' Time of flight ',F10.3,' ns')
276 * *** Give control to user at end of each tracking step
278 SAFETY = SAFETY -STEP
279 #if !defined(CERNLIB_USRJMP)
282 #if defined(CERNLIB_USRJMP)
286 IF (ISTOP.NE.0) GO TO 999
288 * Renormalize direction cosines
290 PMOM = SQRT(VECT(4)**2+VECT(5)**2+VECT(6)**2)
293 VECT(4) = VECT(4)*CMOD
294 VECT(5) = VECT(5)*CMOD
295 VECT(6) = VECT(6)*CMOD
297 * force update of alternatives:
298 IF (INWVOL.EQ.0) then
299 if (GONLY(NLEVEL).eq.0.and.Safety.le.0.and.Iswit(10).ge.0)
300 + CALL GTMEDI(VECT,NMED)
304 IF (NJTMAX.GT.0) THEN
306 IF (NLEVIN.EQ.0) GO TO 100
309 IF (NLEVIN.GE.NLEVEL) THEN
312 IF (NLEVIN.EQ.0) GO TO 100
313 INFROM = LINDEX(NLEVIN+1)
315 IF (NLEVIN.NE.NLEVEL) INGOTO = 0
318 CALL GTMEDI (VECT, NUMED)
325 * Track outside setup, give control to user (INWVOL=3)
338 #if !defined(CERNLIB_USRJMP)
341 #if defined(CERNLIB_USRJMP)