1 #include "geant321/pilot.h"
2 *CMZ : 3.21/02 29/03/94 15.41.24 by S.Giani
6 C. ******************************************************************
8 C. * Photon track. Computes step size and propagates particle *
11 C. * ==>Called by : GTRACK *
12 C. * Authors R.Brun, F.Bruyant L.Urban ******** *
14 C. ******************************************************************
16 #include "geant321/gcbank.inc"
17 #include "geant321/gccuts.inc"
18 #include "geant321/gcjloc.inc"
19 #include "geant321/gconsp.inc"
20 #include "geant321/gcphys.inc"
21 #include "geant321/gcstak.inc"
22 #include "geant321/gctmed.inc"
23 #include "geant321/gcmulo.inc"
24 #include "geant321/gctrak.inc"
25 #if defined(CERNLIB_DEBUG)
26 #include "geant321/gcunit.inc"
28 #if !defined(CERNLIB_SINGLE)
29 PARAMETER (EPSMAC=1.E-6)
30 DOUBLE PRECISION ONE,XCOEF1,XCOEF2,XCOEF3,ZERO
32 #if defined(CERNLIB_SINGLE)
33 PARAMETER (EPSMAC=1.E-11)
35 PARAMETER (ONE=1,ZERO=0)
36 PARAMETER (EPCUT=1.022E-3)
38 C. ------------------------------------------------------------------
40 * *** Particle below energy threshold ? Short circuit
43 IF (GEKIN.LE.CUTGAM) GOTO 998
45 * *** Update local pointers if medium has changed
56 * *** Compute current step size
62 * ** Step limitation due to pair production ?
64 IF (GETOT.GT.EPCUT) THEN
66 STEPPA = GEKRT1*Q(JPAIR+IEKBIN) +GEKRAT*Q(JPAIR+IEKBIN+1)
68 IF (SPAIR.LT.STEP) THEN
75 * ** Step limitation due to Compton scattering ?
78 STEPCO = GEKRT1*Q(JCOMP+IEKBIN) +GEKRAT*Q(JCOMP+IEKBIN+1)
80 IF (SCOMP.LT.STEP) THEN
86 * ** Step limitation due to photo-electric effect ?
88 IF (GEKIN.LT.0.4) THEN
90 STEPPH = GEKRT1*Q(JPHOT+IEKBIN) +GEKRAT*Q(JPHOT+IEKBIN+1)
92 IF (SPHOT.LT.STEP) THEN
99 * ** Step limitation due to photo-fission ?
102 STEPPF = GEKRT1*Q(JPFIS+IEKBIN) +GEKRAT*Q(JPFIS+IEKBIN+1)
103 SPFIS = STEPPF*ZINTPF
104 IF (SPFIS.LT.STEP) THEN
110 * ** Step limitation due to Rayleigh scattering ?
113 IF (GEKIN.LT.0.01) THEN
114 STEPRA = GEKRT1*Q(JRAYL+IEKBIN) +GEKRAT*Q(JRAYL+IEKBIN+1)
115 SRAYL = STEPRA*ZINTRA
116 IF (SRAYL.LT.STEP) THEN
123 IF (STEP.LT.0.) STEP = 0.
125 * ** Step limitation due to geometry ?
127 IF (STEP.GE.SAFETY) THEN
129 IF (IGNEXT.NE.0) THEN
137 * Update SAFETY in stack companions, if any
138 IF (IQ(JSTAK+3).NE.0) THEN
139 DO 10 IST = IQ(JSTAK+3),IQ(JSTAK+1)
140 JST = JSTAK +3 +(IST-1)*NWSTAK
150 * *** Linear transport
152 IF (INWVOL.EQ.2) THEN
154 VECTMP = VECT(I) +STEP*VECT(I+3)
155 IF(VECTMP.EQ.VECT(I)) THEN
157 * *** Correct for machine precision
159 IF(VECT(I+3).NE.0.) THEN
160 VECTMP = VECT(I)+ABS(VECT(I))*SIGN(1.,VECT(I+3))*
163 IF(LMEC(NMEC).EQ.104) NMEC=NMEC-1
167 #if defined(CERNLIB_DEBUG)
170 WRITE(CHMAIL, 10100) GEKIN, NUMED, STEP, SNEXT
172 10000 FORMAT(' Boundary correction in GTGAMA: ',
173 + ' GEKIN NUMED STEP SNEXT')
174 10100 FORMAT(31X,E10.3,1X,I10,1X,E10.3,1X,E10.3,1X)
182 VECT(I) = VECT(I) +STEP*VECT(I+3)
188 * *** Update time of flight
190 TOFG = TOFG +STEP/CLIGHT
192 * *** Update interaction probabilities
194 IF (GETOT.GT.EPCUT) THEN
195 IF (IPAIR.GT.0) ZINTPA = ZINTPA -STEP/STEPPA
197 IF (ICOMP.GT.0) ZINTCO = ZINTCO -STEP/STEPCO
198 IF (GEKIN.LT.0.4) THEN
199 IF (IPHOT.GT.0) ZINTPH = ZINTPH -STEP/STEPPH
201 IF (JPFIS.GT.0) ZINTPF = ZINTPF -STEP/STEPPF
203 IF (GEKIN.LT.0.01) ZINTRA = ZINTRA -STEP/STEPRA
206 IF (IPROC.EQ.0) GO TO 999
210 * ** Pair production ?
215 * ** Compton scattering ?
217 ELSE IF (IPROC.EQ.7) THEN
220 * ** Photo-electric effect ?
222 ELSE IF (IPROC.EQ.8) THEN
223 * Calculate range of the photoelectron ( with kin. energy Ephot)
225 IF(GEKIN.LE.0.001) THEN
227 IF(GEKRAT.LT.0.7) THEN
230 I1 = MIN(IEKBIN,NEKBIN-1)
234 XCOEF2 = Q(JCOEF+I1+1)
235 XCOEF3 = Q(JCOEF+I1+2)
236 IF(XCOEF1.NE.0.) THEN
237 STOPMX = -XCOEF2+SIGN(ONE,XCOEF1)*SQRT(XCOEF2**2 - (XCOEF3-
240 STOPMX = - (XCOEF3-GEKIN)/XCOEF2
243 * DO NOT call GPHOT if this (overestimated) range is smaller
246 IF (STOPMX.LE.SAFETY) GOTO 998
251 * ** Rayleigh effect ?
253 ELSE IF (IPROC.EQ.25) THEN
258 ELSE IF (IPROC.EQ.23) THEN