]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gdraw/gkhits.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gkhits.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:20:30 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani
11*-- Author :
12 SUBROUTINE GKHITS (IUSET,IUDET,EPSILO)
13C.
14C. ******************************************************************
15C. * *
16C. * Prints the hit picked (using the graphics cursor) *
17C. * from all the hits of all tracks in detector IUDET *
18C. * of set IUSET, in case that the spatial coordinates *
19C. * of the hits had been stored as the first three words *
20C. * in the argument vector of GSAHIT. *
21C. * If the character typed to pick is 'K' or 'k' then the *
22C. * kinematics of the corresponding track is also printed. *
23C. * The picking is repeated until the character typed is *
24C. * 'Q' or 'q'. *
25C. * EPSILO is the pick aperture, i.e. the first hit that *
26C. * falls into the square centered at U0,V0 (the pick point) *
27C. * with half length EPSILO is kept. *
28C. * If EPSILO is negative then its absolute value is taken *
29C. * and in addition the pick square is drawn. *
30C. * If EPSILO is zero there is no pick aperture and over all *
31C. * the hits the one nearest to the pick point is taken. *
32C. * *
33C. * ==>Called by : <USER>, <GXINT> *
34C. * Authors : R.Brun, W.Gebel, P.Zanarini ********* *
35C. * *
36C. ******************************************************************
37C.
38#include "geant321/gcbank.inc"
39#include "geant321/gcdraw.inc"
40#include "geant321/gcunit.inc"
41 DIMENSION HITS(3,10)
42 DIMENSION U(10),V(10)
43 DIMENSION UP(5),VP(5)
44 CHARACTER*4 IUSET,IUDET,KIUSET,KIUDET
45C.
46C. ------------------------------------------------------------------
47C.
48 CALL UCTOH('OFF ',IOFF,4,4)
49C
50C Set IOBJ to HIT
51C
52 IOBJ=3
53C
54 10 CONTINUE
55C
56 CALL GDCURS(U0,V0,KCHAR)
57 IF (KCHAR.EQ.0) GO TO 160
58C
59 IF (JHITS.LE.0) GOTO 160
60 NSET = IQ(JSET-1)
61 NS1 = 1
62 NS2 = NSET
63 IF (IUSET(1:1).EQ.'*') GOTO 20
64 CALL GLOOK(IUSET,IQ(JSET+1),NSET,ISET)
65 IF (ISET .LE.0) GOTO 160
66 NS1 = ISET
67 NS2 = ISET
68C
69 20 CONTINUE
70C
71 EPSIL=ABS(EPSILO)
72 EPSU=PLTRNX*EPSIL/20.
73 EPSV=PLTRNY*EPSIL/20.
74 IHITNR=0
75 DISTPK=1000000.
76C
77C Draw the pick box
78C
79 IF (EPSILO.LT.0) THEN
80 UP(1)=U0-EPSU
81 VP(1)=V0-EPSV
82 UP(2)=U0+EPSU
83 VP(2)=VP(1)
84 UP(3)=UP(2)
85 VP(3)=V0+EPSV
86 UP(4)=UP(1)
87 VP(4)=VP(3)
88 UP(5)=UP(1)
89 VP(5)=VP(1)
90 CALL GDRAWV(UP,VP,5)
91 ENDIF
92C
93C loop on all selected sets
94C
95 DO 140 ISET=NS1,NS2
96C
97 JS = LQ(JSET-ISET)
98 JH = LQ(JHITS-ISET)
99 IF(JS.LE.0)GO TO 140
100 IF(JH.LE.0)GO TO 140
101 NDET = IQ(JS-1)
102 ND1 = 1
103 ND2 = NDET
104 IF (IUDET(1:1).EQ.'*') GOTO 30
105 CALL GLOOK(IUDET,IQ(JS+1),NDET,IDET)
106 IF (IDET .EQ.0) GOTO 140
107 ND1 = IDET
108 ND2 = IDET
109 30 CONTINUE
110C
111C loop on selected detectors for this set
112C
113 DO 130 IDET=ND1,ND2
114C
115 JD = LQ(JS-IDET)
116 JHD = LQ(JH-IDET)
117 IF (JHD .LE.0) GOTO 130
118 JDH = LQ(JD-1)
119 ILAST = IQ(JH+IDET)
120 IF (ILAST.EQ.0) GOTO 130
121 NV = IQ(JD+2)
122 NH = IQ(JD+4)
123 NW = IQ(JD+1) + IQ(JD+3) + 1
124C
125C Now loop on all hits to get their space coordinates
126C
127 MH = 0
128 IHIT = 0
129 DO 120 I=1,ILAST,NW
130 IHIT = IHIT + 1
131 ITRA = IQ(JHD+I)
132C
133C Is THRZ option set on (R-Z projection)
134C and the cut lateral (vertical or horizontal) ?
135C
136 IF (ITHRZ.NE.IOFF) THEN
137 IF (ICUT.EQ.1.OR.ICUT.EQ.2) ITR3D=-ITRA
138 ELSE
139 ITR3D=0
140 ENDIF
141C
142C Skip words with volume numbers
143C
144 NK = 1
145 K = 1
146 IF (NV.LE.0) GOTO 50
147 DO 40 IV=1,NV
148 NB = IQ(JD+2*IV+10)
149 IF (NB.EQ.0) NB=32
150 K = NB + K
151 IF (K.LE.33) GOTO 40
152 NK = NK + 1
153 K = NB + 1
154 40 CONTINUE
155 NK = NK + 1
156C
157C Get unpacked (first three !) HITS.
158C Hits origin is shifted. Division by scale factor.
159C
160 50 CONTINUE
161 IF (NH.LE.2) GOTO 120
162 MH = MH + 1
163 K=1
164 DO 90 IH=1,3
165 NB = IQ(JDH+4*IH-2)
166 IF (NB.GT.0) GOTO 60
167 IF (K.GT.1) THEN
168 NK=NK+1
169 ENDIF
170 KHIT = IQ(JHD+I+NK)
171 K = 1
172 NK = NK + 1
173 GOTO 80
174 60 IF (K+NB.LE.33) GOTO 70
175 K = 1
176 NK = NK + 1
177 70 KHIT = IBITS(IQ(JHD+I+NK),K-1,NB)
178 K = K + NB
179 80 CONTINUE
180 HITS(IH,MH)= FLOAT(KHIT)/Q(JDH+4*IH) - Q(JDH+4*IH-1)
181 90 CONTINUE
182C
183C Scan the hits (usually 10 at a time);
184C flush HITS vector if
185C --loop on this detector volume is to finish,
186C --loop on current track is to finish,
187C --HITS vector is full.
188C
189 IF ((ILAST-I).LT.NW) GOTO 100
190 ITRN = IQ(JHD+I+NW)
191 IF (ITRA.NE.ITRN) GOTO 100
192 IF (MH .NE. 10) GOTO 120
193C
194 100 CONTINUE
195C
196 CALL GDFR3D(HITS(1,1),MH,U,V)
197C
198 DO 110 IP=1,MH
199C
200 IF (EPSILO.NE.0) THEN
201 IF (U(IP).LT.U0-EPSU) GO TO 110
202 IF (U(IP).GT.U0+EPSU) GO TO 110
203 IF (V(IP).LT.V0-EPSV) GO TO 110
204 IF (V(IP).GT.V0+EPSV) GO TO 110
205 II=IP
206 IHITNR=IHIT-MH+II
207 JS = LQ(JSET-ISET)
208 CALL UHTOC(IQ(JSET+ISET),4,KIUSET,4)
209 CALL UHTOC(IQ(JS+IDET) ,4,KIUDET,4)
210 KITRA=ITRA
211 GO TO 150
212 ELSE
213 DIST=(U(IP)-U0)*(U(IP)-U0)+(V(IP)-V0)*(V(IP)-V0)
214 IF (DIST.LT.DISTPK) THEN
215 DISTPK=DIST
216 II=IP
217 IHITNR=IHIT-MH+II
218 JS = LQ(JSET-ISET)
219 CALL UHTOC(IQ(JSET+ISET),4,KIUSET,4)
220 CALL UHTOC(IQ(JS+IDET) ,4,KIUDET,4)
221 KITRA=ITRA
222 ENDIF
223 ENDIF
224C
225 110 CONTINUE
226C
227 MH=0
228C
229 120 CONTINUE
230C
231 130 CONTINUE
232C
233 140 CONTINUE
234C
235 IF (EPSILO.EQ.0) GO TO 150
236C
237C Hit not picked
238C
239 WRITE (CHMAIL,1000)
240 CALL GMAIL(0,0)
241C
242C Restart for another pick operation
243C
244 GO TO 10
245C
246C Hit picked
247C
248 150 CONTINUE
249C
250C Highlight the picked hit
251C
252 UDELTA=0.05*PLTRNX/20.
253 VDELTA=0.05*PLTRNY/20.
254 UP(1)=U(II)-UDELTA
255 VP(1)=V(II)-VDELTA
256 UP(2)=U(II)+UDELTA
257 VP(2)=VP(1)
258 UP(3)=UP(2)
259 VP(3)=V(II)+VDELTA
260 UP(4)=UP(1)
261 VP(4)=VP(3)
262 UP(5)=UP(1)
263 VP(5)=VP(1)
264 CALL GDRAWV(UP,VP,5)
265C
266C Print parameters of the picked hit
267C
268 IPKHIT=IHITNR
269 IF (IPKHIT.GT.0) CALL GPHITS(KIUSET,KIUDET)
270 IPKHIT=0
271 CALL GPKINE(KITRA)
272C
273C Restart for another pick operation
274C
275 GO TO 10
276C
277 160 CONTINUE
278C
279C Reset ITR3D to 'standard projection'
280C
281 ITR3D=0
282 IOBJ=0
283C
284 1000 FORMAT (' GKHITS: No hit picked')
285 RETURN
286 END