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. * Neutral hadron type track. Computes step size and propagates *
17 C. * particle through step. *
19 C. * ==>Called by : GTRACK *
20 C. * Authors R.Brun, F.Bruyant ********* *
22 C. ******************************************************************
24 #include "geant321/gcbank.inc"
25 #include "geant321/gccuts.inc"
26 #include "geant321/gckine.inc"
27 #include "geant321/gcking.inc"
28 #include "geant321/gconsp.inc"
29 #include "geant321/gcphys.inc"
30 #include "geant321/gcstak.inc"
31 #include "geant321/gctmed.inc"
32 #include "geant321/gctrak.inc"
33 #if defined(CERNLIB_USRJMP)
34 #include "geant321/gcjump.inc"
36 #if defined(CERNLIB_DEBUG)
37 #include "geant321/gcunit.inc"
39 #if !defined(CERNLIB_SINGLE)
40 PARAMETER (EPSMAC=1.E-6)
42 #if defined(CERNLIB_SINGLE)
43 PARAMETER (EPSMAC=1.E-11)
46 C. ------------------------------------------------------------------
48 * *** Particle below energy threshold ? Special treatment
50 IF (GEKIN.LE.CUTNEU) THEN
57 IF (IHADR.EQ.0.AND.AMASS.GT.0.) THEN
60 TOFG = TOFG +GAMMA*SUMLIF/CLIGHT
62 IF (TOFG.GE.TOFMAX) THEN
80 * *** Compute step size
85 * ** Step limitation due to hadron interaction ?
88 #if !defined(CERNLIB_USRJMP)
91 #if defined(CERNLIB_USRJMP)
94 IF (SHADR.LT.STEP) THEN
95 IF (SHADR.LE.0.) SHADR = PREC
101 * ** Step limitation due to decay ?
103 IF ((IDCAY.NE.0).AND.(AMASS.GT.0.)) THEN
104 SDCAY = SUMLIF*VECT(7)/AMASS
105 IF (SDCAY.LT.STEP) THEN
111 IF (STEP.LT.0.) STEP = 0.
113 * ** Step limitation due to geometry ?
115 IF (STEP.GE.SAFETY) THEN
117 IF (IGNEXT.NE.0) THEN
125 * Update SAFETY in stack companions, if any
126 IF (IQ(JSTAK+3).NE.0) THEN
127 DO 10 IST = IQ(JSTAK+3),IQ(JSTAK+1)
128 JST = JSTAK +3 +(IST-1)*NWSTAK
138 * *** Linear transport
140 IF (INWVOL.EQ.2) THEN
142 VECTMP = VECT(I) +STEP*VECT(I+3)
143 IF(VECTMP.EQ.VECT(I)) THEN
145 * *** Correct for machine precision
147 IF(VECT(I+3).NE.0.) THEN
148 VECTMP = VECT(I)+ABS(VECT(I))*SIGN(1.,VECT(I+3))*
151 IF(LMEC(NMEC).EQ.104) NMEC=NMEC-1
155 #if defined(CERNLIB_DEBUG)
158 WRITE(CHMAIL, 10100) GEKIN, NUMED, STEP, SNEXT
160 10000 FORMAT(' Boundary correction in GTNEUT: ',
161 + ' GEKIN NUMED STEP SNEXT')
162 10100 FORMAT(31X,E10.3,1X,I10,1X,E10.3,1X,E10.3,1X)
170 VECT(I) = VECT(I) +STEP*VECT(I+3)
176 * *** Update time of flight
178 SUMLIF = SUMLIF -STEP*AMASS/VECT(7)
179 TOFG = TOFG +STEP*GETOT/(VECT(7)*CLIGHT)
180 IF (TOFG.GE.TOFMAX) THEN
187 * *** Update interaction probabilities
189 IF (IHADR.GT.0) ZINTHA = ZINTHA*(1.-STEP/SHADR)
191 * *** apply the selected process if any
193 40 IF (IPROC.EQ.0) GO TO 999
197 * ** Hadron interaction ?
199 IF (IPROC.EQ.12) THEN
200 #if !defined(CERNLIB_USRJMP)
203 #if defined(CERNLIB_USRJMP)
206 * Check time cut-off for decays at rest
207 IF (LMEC(NMEC).EQ.5) THEN
208 TOFG = TOFG +SUMLIF/CLIGHT
210 IF (TOFG.GE.TOFMAX) THEN
219 ELSE IF (IPROC.EQ.5) THEN