5 * Revision 1.1.1.1 1995/10/24 10:20:28 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani
12 SUBROUTINE GDTHRZ(XYZ)
14 C. ******************************************************************
16 C. * Routine processing R-Z projection of tracks and hits *
18 C. * XYZ = Array of X,Y,Z coordinates (input/output) *
20 C. * ==>Called by : GDFR3D *
21 C. * Author : P.Zanarini ********* *
23 C. ******************************************************************
25 #include "geant321/gcdraw.inc"
26 #include "geant321/gcflag.inc"
27 #include "geant321/gcnum.inc"
28 DIMENSION XYZ(3),ITRSGN(20),ITRFLG(20)
30 SAVE MAXITR,EPS,LIDEVT,LITR3D,ITRSGN,ITRFLG,IFACT
31 DATA MAXITR/20/,EPS/0.0001/,LIDEVT/0/
33 C. ------------------------------------------------------------------
35 CALL UCTOH('360 ',I360,4,4)
37 C If ITHRZ='ON ' or '180 ' then use positive or negative ra
38 C else if ITHRZ='360 ' then use only positive radius
40 IF (ITHRZ.EQ.I360) THEN
41 XYZ(2)=SQRT(XYZ(2)*XYZ(2)+XYZ(3)*XYZ(3))
45 C IDEVT = Event number (in common GCFLAG)
46 C LIDEVT = Last event number
48 IF (IDEVT.NE.LIDEVT) THEN
56 C NBIT = Number of bit per machine word (in common GCNUM)
57 C MAXITR = A maximum of NBIT*MAXITR significant track signs
58 C can be stored (after that all signs will be posit
59 C IWORD = 1,2,...,MAXITR
60 C IOFSET = 0,1,...,NBIT-1
62 IWORD=(IABS(ITR3D)/NBIT)+1
63 IOFSET=MAX(MOD(IABS(ITR3D),NBIT)-1,0)
65 IF (IWORD.GT.MAXITR) THEN
67 XYZ(2)=IFACT*SQRT(XYZ(2)*XYZ(2)+XYZ(3)*XYZ(3))
71 C If being drawing an hit, with sign already
72 C set by previous track, then use that sign
74 IF (IOBJ.EQ.3.AND.BTEST(ITRFLG(IWORD),IOFSET)) THEN
75 IF(BTEST(ITRSGN(IWORD),IOFSET)) THEN
80 XYZ(2)=IFACT*SQRT(XYZ(2)*XYZ(2)+XYZ(3)*XYZ(3))
86 C First call to GDFR3D/GDTHRZ : initialize LITR3D and make I
89 IF (.NOT.BTEST(ITRFLG(IWORD),IOFSET)) THEN
90 ITRFLG(IWORD) = IBSET(ITRFLG(IWORD),IOFSET)
97 C LITR3D contains the last ITR3D value,
98 C or zero if last point was at U-V origin (0,0,...)
100 IF (ITR3D.EQ.LITR3D) THEN
102 C Old track : get R sign from ITRSGN into IFACT
104 IF(BTEST(ITRSGN(IWORD),IOFSET)) THEN
112 C New track : set R sign into ITRSGN and IFACT
114 IF (ABS(XYZ(2)).GT.EPS) THEN
115 IF (XYZ(2)/ABS(XYZ(2)).GT.0.) THEN
116 ITRSGN(IWORD) = IBSET(ITRSGN(IWORD),IOFSET)
119 ITRSGN(IWORD) = IBCLR(ITRSGN(IWORD),IOFSET)
125 IF ((ABS(XYZ(1)).LT.EPS).AND.(ABS(XYZ(2)).LT.EPS)) LITR3D=0
130 XYZ(2)=IFACT*SQRT(XYZ(2)*XYZ(2)+XYZ(3)*XYZ(3))