5 * Revision 1.1.1.1 1995/10/24 10:20:30 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 28/03/94 01.30.59 by S.Giani
14 C. ******************************************************************
18 C. * Tracking of light rays. *
20 C. * Author: S.Giani. *
22 C. ******************************************************************
24 #include "geant321/gcvolu.inc"
25 #include "geant321/gconsp.inc"
26 #include "geant321/gcdraw.inc"
27 #include "geant321/gcflag.inc"
28 #include "geant321/gctmed.inc"
29 #include "geant321/gctrak.inc"
30 #include "geant321/gcbank.inc"
31 #include "geant321/gckine.inc"
32 #if defined(CERNLIB_DEBUG)
33 #include "geant321/gcunit.inc"
35 #if !defined(CERNLIB_SINGLE)
36 PARAMETER (EPSMAC=1.E-6)
38 #if defined(CERNLIB_SINGLE)
39 PARAMETER (EPSMAC=1.E-11)
41 ********************************************************************************
42 #include "geant321/gcfdim.inc"
43 #include "geant321/gcrayt.inc"
44 #include "geant321/gcpixe.inc"
45 DIMENSION CCVV(3),DDVV(2)
46 ********************************************************************************
48 C. ------------------------------------------------------------------
51 IF((BOFLAG.NE.1.).and.(VECT(1).le.XCUT.or.VECT(2).le.YCUT
52 +.or.VECT(3).le.ZCUT))THEN
62 *** if(iombra.eq.9)step=step+.001
66 * *** Linear transport
69 VECTMP = VECT(I) +STEP*VECT(I+3)
70 IF(VECTMP.EQ.VECT(I)) THEN
72 * *** Correct for machine precision
74 IF(VECT(I+3).NE.0.) THEN
75 VECTMP = VECT(I)+ABS(VECT(I))*SIGN(1.,VECT(I+3))*
79 ********************************************************************************
88 IF(VECT(1).GT.XCUT.AND.VECT(2).GT.YCUT.AND.
89 + VECT(3).GT.ZCUT)THEN
107 DDXX=GVSAFE(VECT,-XCUT,CCXX,4)
108 CALL GVLONG(CCVV,CCXX,4,DDVV,NTAU)
110 IF(DDVV(1).GE.0.)THEN
113 APFLAG=(CCXX(2)*XCOSXS)+(CCXX(3)*YCOSYS)+
117 DDYY=GVSAFE(VECT,-YCUT,CCYY,4)
118 CALL GVLONG(CCVV,CCYY,4,DDVV,NTAU)
120 IF(DDVV(1).LT.STEP1.AND.DDVV(1).GE.0.)THEN
123 APFLAG=(CCYY(2)*XCOSXS)+(CCYY(3)*YCOSYS)+
127 DDZZ=GVSAFE(VECT,-ZCUT,CCZZ,4)
128 CALL GVLONG(CCVV,CCZZ,4,DDVV,NTAU)
130 IF(DDVV(1).LT.STEP1.AND.DDVV(1).GE.0.)THEN
133 APFLAG=(CCZZ(2)*XCOSXS)+(CCZZ(3)*YCOSYS)+
139 IF(BOFLAG.NE.1)VECT(I)=VECT(I)+STEP1*VECT(I+3)
141 IF(IOMBRA.EQ.9)SLENG=SLENG+STEP1
143 XYZMOD=1./SQRT((XLPOS-VECT(1))**2+(YLPOS-VECT(2))**2+
144 + (ZLPOS-VECT(3))**2)
145 XLDIR=(XLPOS-VECT(1))*XYZMOD
146 YLDIR=(YLPOS-VECT(2))*XYZMOD
147 ZLDIR=(ZLPOS-VECT(3))*XYZMOD
149 APFLAH=(CCXX(2)*XLDIR)+(CCXX(3)*YLDIR)+(CCXX(4)*ZLDIR)
150 * if(apflah.lt.0.)print *,APFLAH,'=apflah',IXYFLA,'=flag',
151 * + CCXX(2),XLDIR,CCXX(3),YLDIR,CCXX(4),ZLDIR
152 ELSEIF(IXYFLA.EQ.2)THEN
153 APFLAH=(CCYY(2)*XLDIR)+(CCYY(3)*YLDIR)+(CCYY(4)*ZLDIR)
154 * if(apflah.lt.0.)print *,APFLAH,'=apflah',IXYFLA,'=flag',
155 * + CCYY(2),XLDIR,CCYY(3),YLDIR,CCYY(4),ZLDIR
156 ELSEIF(IXYFLA.EQ.3)THEN
157 APFLAH=(CCZZ(2)*XLDIR)+(CCZZ(3)*YLDIR)+(CCZZ(4)*ZLDIR)
164 XYZMOD=1./SQRT((XLPOS-VECT(1))**2+(YLPOS-VECT(2))**2+
165 + (ZLPOS-VECT(3))**2)
166 VECT(4)=(XLPOS-VECT(1))*XYZMOD
167 VECT(5)=(YLPOS-VECT(2))*XYZMOD
168 VECT(6)=(ZLPOS-VECT(3))*XYZMOD
176 IF(IOMBRA.EQ.9)IOMBRA=10
190 IF(BOFLAG.NE.1)VECT(I) = VECT(I) +STEP*VECT(I+3)
191 ********************************************************************************