]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/gdraw/gdhits.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gdhits.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1995/10/24 10:20:23  cernlib
6 * Geant
7 *
8 *
9 #include "geant321/pilot.h"
10 *CMZ :  3.21/02 29/03/94  15.41.26  by  S.Giani
11 *-- Author :
12       SUBROUTINE GDHITS (IUSET,IUDET,ITRS,ISYMB,SSYMB)
13 C.
14 C.    ******************************************************************
15 C.    *                                                                *
16 C.    *       Draw HITS points of track ITRS in detector IUDET         *
17 C.    *       of set IUSET, in case that the spatial coordinates       *
18 C.    *       of the HITS had been stored as the first three words     *
19 C.    *       in the argument vector of GSAHIT.                        *
20 C.    *                                                                *
21 C.    *       The following characters may be chosen :                 *
22 C.    *          ISYMB = -1   hardware character    (fast),            *
23 C.    *                =  0   crosses X by TVDRAW   (default),         *
24 C.    *                       (size = SSYMB in cm, default = 0.1),     *
25 C.    *                = 840  characters by HPLSOF                     *
26 C.    *                   .   according to the table p. 25             *
27 C.    *                   .   of the HPLOT manual                      *
28 C.    *                  853  (size = SSYMB in cm)                     *
29 C.    *             (844,854  white, black asterisk * in addition).    *
30 C.    *                                                                *
31 C.    *       JH =LQ(JHITS-ISET)                                       *
32 C.    *       JHD=LQ(JH-IDET)                                          *
33 C.    *       IQ(JH+IDET)=pointer to the LAST USED word in JHD         *
34 C.    *         Each hit was packed into JHD in the following format:  *
35 C.    *        --Track number ITRA not packed;                         *
36 C.    *        --Volume numbers packed;                                *
37 C.    *        --Hits transformed and packed.                          *
38 C.    *                                                                *
39 C.    *    ==>Called by : <USER>, <GXINT>                              *
40 C.    *       Authors : R.Brun, W.Gebel, P.Zanarini, S.Giani ***       *
41 C.    *                                                                *
42 C.    ******************************************************************
43 C.
44 #include "geant321/gcbank.inc"
45 #include "geant321/gcdraw.inc"
46       CHARACTER*4 IUSET,IUDET
47       DIMENSION HITS(3,10)
48 C
49 C.
50 C.    ------------------------------------------------------------------
51 C.
52       CALL UCTOH('OFF ',IOFF,4,4)
53 C
54 C            Set IOBJ to HIT
55 C
56       IOBJ=3
57 C
58       IF (JHITS.LE.0)           GOTO 160
59       NSET = IQ(JSET-1)
60       NS1        = 1
61       NS2        = NSET
62       IF (IUSET(1:1).EQ.'*')   GOTO  10
63       CALL GLOOK(IUSET,IQ(JSET+1),NSET,ISET)
64       IF (ISET .LE.0)           GOTO 160
65       NS1        = ISET
66       NS2        = ISET
67    10 CONTINUE
68 C
69 C
70 C            loop on all selected sets
71 C
72       DO 150   ISET=NS1,NS2
73          JS = LQ(JSET-ISET)
74          JH = LQ(JHITS-ISET)
75          IF(JS.LE.0)GO TO 140
76          IF(JH.LE.0)GO TO 140
77          NDET = IQ(JS-1)
78          ND1 = 1
79          ND2 = NDET
80          IF (IUDET(1:1).EQ.'*') GOTO 20
81          CALL GLOOK(IUDET,IQ(JS+1),NDET,IDET)
82          IF (IDET .EQ.0) GOTO 140
83          ND1 = IDET
84          ND2 = IDET
85    20    CONTINUE
86 C
87 C            loop on selected detectors for this set
88 C
89          DO 130 IDET=ND1,ND2
90             JD = LQ(JS-IDET)
91             JHD = LQ(JH-IDET)
92             IF (JHD .LE.0) GOTO 120
93             JDH = LQ(JD-1)
94             ILAST = IQ(JH+IDET)
95             IF (ILAST.EQ.0) GOTO 120
96             NV = IQ(JD+2)
97             NH = IQ(JD+4)
98             NW = IQ(JD+1) + IQ(JD+3) + 1
99 C
100 C            Now loop on all hits to get their space coordinates
101 C
102             MH = 0
103             IHIT = 0
104             DO 110 I=1,ILAST,NW
105                IHIT = IHIT + 1
106                ITRA = IQ(JHD+I)
107 C
108 C            Is this the right track ?
109 C
110                IF (ITRS.NE.0 .AND. ITRS.NE.ITRA) GOTO 110
111 C
112 C            Is THRZ option set on (R-Z projection)
113 C            and the cut lateral (vertical or horizontal) ?
114 C
115                IF (ITHRZ.NE.IOFF) THEN
116                   IF (ICUT.EQ.1.OR.ICUT.EQ.2) ITR3D=-ITRA
117                ELSE
118                   ITR3D=0
119                ENDIF
120 C
121 C            Skip words with volume numbers
122 C
123                NK = 1
124                K = 1
125                IF (NV.LE.0) GOTO 40
126                DO 30 IV=1,NV
127                   NB = IQ(JD+2*IV+10)
128                   IF (NB.EQ.0) NB=32
129                   K = NB + K
130                   IF (K.LE.33) GOTO 30
131                   NK = NK + 1
132                   K = NB + 1
133    30          CONTINUE
134                NK = NK + 1
135 C
136 C            Get unpacked (first three !) HITS.
137 C            Hits origin is shifted. Division by scale factor.
138 C
139    40          CONTINUE
140                IF (NH.LE.2) GOTO 110
141                MH = MH + 1
142                K=1
143                DO 80 IH=1,3
144                   NB = IQ(JDH+4*IH-2)
145                   IF (NB.GT.0) GOTO 50
146                   IF (K.GT.1) THEN
147                      NK=NK+1
148                   ENDIF
149                   KHIT = IQ(JHD+I+NK)
150                   K = 1
151                   NK = NK + 1
152                   GOTO 70
153    50             IF (K+NB.LE.33) GOTO 60
154                   K = 1
155                   NK = NK + 1
156    60             KHIT = IBITS(IQ(JHD+I+NK),K-1,NB)
157                   K = K + NB
158    70             CONTINUE
159                   HITS(IH,MH)= FLOAT(KHIT)/Q(JDH+4*IH) - Q(JDH+4*IH-1)
160    80          CONTINUE
161 C
162 C            Draw the hits (usually 10 at a time);
163 C            flush HITS vector if
164 C             --loop on this detector volume is to finish,
165 C             --loop on current track is to finish,
166 C             --HITS vector is full.
167 C
168                IF ((ILAST-I).LT.NW) GOTO 90
169                ITRN = IQ(JHD+I+NW)
170                IF (ITRA.NE.ITRN) GOTO 90
171                IF (MH .NE. 10) GOTO 110
172 C
173    90          CONTINUE
174 C
175                CALL IGPID(1,'Hitset',IQ(JSET+ISET),' ')
176                CALL IGPID(2,'Hitdet',IQ(JS+IDET),' ')
177                DO 100 II=1,MH
178                   IHITNR=IHIT-MH+II
179                   CALL IGPID(3,'Hitnum',IHITNR,' ')
180                   CALL GDAHIT(HITS(1,II),HITS(2,II),HITS(3,II),ISYMB,
181      +            SSYMB)
182   100          CONTINUE
183                MH=0
184 C
185   110       CONTINUE
186 C
187   120       CONTINUE
188   130    CONTINUE
189 C
190   140    CONTINUE
191   150 CONTINUE
192 C
193   160 CONTINUE
194 C
195 C             Reset ITR3D to 'standard projection'
196 C
197       ITR3D=0
198       IOBJ=0
199 C
200       CALL GDCOL(0)
201 C
202       END