]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gdraw/gkxyz.F
This commit was generated by cvs2svn to compensate for changes in r2,
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gkxyz.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 GKXYZ(EPSILO)
13C.
14C. ******************************************************************
15C. * *
16C. * Prints the kinematics of the track picked (using the *
17C. * graphics cursor) in case that the space points of the *
18C. * track had been stored in the bank JXYZ. *
19C. * The picking is repeated until the character typed is *
20C. * 'Q' or 'q'. *
21C. * EPSILO is the delta angle used for pick, in the sense *
22C. * that tracks to be considered as possible candidates *
23C. * must start with a direction in the angular range *
24C. * between ANG0-EPSILO and ANG0+EPSILO (where ANG0 is the *
25C. * angle relative to the cursor position). *
26C. * If EPSILO is zero there is no delta angle concept and *
27C. * over all the track points the one nearest to the pick *
28C. * point is taken. *
29C. * *
30C. * ==>Called by : <USER>, <GXINT> *
31C. * Author : P.Zanarini ********* *
32C. * *
33C. ******************************************************************
34C.
35#include "geant321/gcbank.inc"
36#include "geant321/gcdraw.inc"
37#include "geant321/gconsp.inc"
38#include "geant321/gcunit.inc"
39 DIMENSION U(50),V(50)
40 DIMENSION UP(5),VP(5)
41C
42 DIMENSION XZERO(3)
43C
44 SAVE XZERO
45 DATA XZERO/3*0./
46C.
47C. ------------------------------------------------------------------
48C.
49 CALL UCTOH('OFF ',IOFF,4,4)
50C
51C Set IOBJ to TRACK
52C
53 IOBJ=2
54C
55 10 CONTINUE
56 CALL GDCURS(U0,V0,KCHAR)
57 IF (KCHAR.EQ.0) GO TO 130
58C
59 IF(JXYZ.LE.0)GO TO 130
60 NXYZ=IQ(JXYZ-2)
61 N1 =1
62 N2 =NXYZ
63C
64 CALL GDFR3D(XZERO,1,UOR,VOR)
65 VATAN=V0-VOR
66 UATAN=U0-UOR
67 IF (VATAN.EQ.0..AND.UATAN.EQ.0.) THEN
68 WRITE (CHMAIL,2200)
69 CALL GMAIL(0,0)
70 GO TO 130
71 ENDIF
72 ANG0=ATAN2(VATAN,UATAN)
73 MAXWS=10000
74 IF (EPSILO.EQ.0) MAXWS=MAXWS*2
75
76C
77 20 CONTINUE
78 CALL GWORK(MAXWS)
79 ANGEPS=ABS(EPSILO)
80 EPSIL=1.
81 EPS=MAX(PLTRNX,PLTRNY)*EPSIL/20.
82 IBIAS=0
83C
84 30 CONTINUE
85C
86 DO 90 I=N1,N2
87C
88C Track is not (yet) a canditate
89C
90 IFL=0
91 ILOOP=0
92C
93 JX=LQ(JXYZ-I)
94 IF(JX.LE.0)GO TO 90
95 IPOINT=JX+3
96 40 IF(IPOINT.GT.JX+IQ(JX-1))GO TO 90
97 NPOINT=Q(IPOINT)
98 IF(NPOINT.LE.0)GO TO 90
99 IPF=1
100 50 IPL=IPF+49
101 IF(IPL.GT.NPOINT)IPL=NPOINT
102 NP=IPL-IPF+1
103 IF(NP.LE.1)GO TO 80
104C
105C Is THRZ option set on (R-Z projection)
106C and the cut lateral (vertical or horizontal) ?
107C
108 IF (ITHRZ.NE.IOFF) THEN
109 IF (ICUT.EQ.1.OR.ICUT.EQ.2) ITR3D=-I
110 ELSE
111 ITR3D=0
112 ENDIF
113C
114 IF (EPSILO.EQ.0) GO TO 60
115C
116 IF (ILOOP.EQ.0) THEN
117 ILOOP=1
118C
119 CALL GDFR3D(Q(IPOINT+3*IPF-1),2,U,V)
120 CALL GDFR3D(Q(IPOINT+3*NPOINT-1),1,ULAST,VLAST)
121C
122 IF (U0.GE.UOR-EPS.AND.U0.LE.UOR+EPS.AND. V0.GE.VOR-EPS.AND.
123 + V0.LE.VOR+EPS) THEN
124C
125C Pick point too near the origin
126C
127 IFL=1
128 GO TO 60
129 ELSE IF (U(1).LT.UOR-EPS.OR.U(1).GT.UOR+EPS.OR. V(1).LT.VOR-
130 + EPS.OR.V(1).GT.VOR+EPS) THEN
131C
132C First track point does not start near the origin
133C
134 IFL=1
135 GO TO 60
136 ELSE
137 VATAN=V(2)-V(1)
138 UATAN=U(2)-U(1)
139 IF (VATAN.EQ.0..AND.UATAN.EQ.0.) THEN
140 IFL=1
141 GO TO 60
142 ENDIF
143 ANG=ATAN2(VATAN,UATAN)
144 VATAN=VLAST-V(1)
145 UATAN=ULAST-U(1)
146 IF (VATAN.EQ.0..AND.UATAN.EQ.0.) THEN
147 IFL=1
148 GO TO 60
149 ENDIF
150 ANGLST=ATAN2(VATAN,UATAN)
151 IF (ANG.GT.(PI-ANGEPS).OR.ANG.LT.(-PI+ANGEPS)) THEN
152C
153C First track point near the +PI/-PI edge
154C
155 IFL=1
156 GO TO 60
157 ELSE IF (ANG.GT.ANG0-ANGEPS.AND.ANG.LT.ANG0+ANGEPS) THEN
158C
159C Pick point inside the pick angle
160C
161 IFL=1
162 GO TO 60
163 ELSE IF (ANGLST.LT.ANG-ANGEPS.OR.ANGLST.GT.ANG+ANGEPS)
164 + THEN
165C
166C Track is too curved
167C
168 IFL=1
169 GO TO 60
170 ENDIF
171 ENDIF
172C
173 ENDIF
174C
175C Skip completely the track ?
176C
177 IF (IFL.NE.1) GO TO 90
178C
179 60 CONTINUE
180C
181 IF (IBIAS+3*NP.GE.MAXWS) THEN
182 MAXWS=MAXWS*2
183 GO TO 20
184 ENDIF
185C
186 CALL GDFR3D(Q(IPOINT+3*IPF-1),NP,U,V)
187C
188 DO 70 L=1,NP
189 WS(3*L-2+IBIAS)=U(L)
190 WS(3*L-1+IBIAS)=V(L)
191 WS(3*L+IBIAS)=I
192 70 CONTINUE
193C
194 IBIAS=IBIAS+3*NP
195C
196 IPF=IPL
197 IF(IPF.LT.NPOINT)GO TO 50
198 80 IPOINT=IPOINT+3.*Q(IPOINT)+2.
199 GO TO 40
200C
201 90 CONTINUE
202C
203C
204 IF (IBIAS.EQ.0) THEN
205 ANGEPS=ANGEPS*2.
206 GO TO 30
207 ENDIF
208C
209 DISMIN=1.
210 DISTPK=1000000.
211 IPK=0
212C
213 DO 120 I=1,IBIAS,3
214 UPK=WS(I)
215 VPK=WS(I+1)
216 DIST=(UPK-U0)*(UPK-U0)+(VPK-V0)*(VPK-V0)
217 IF (DIST.LT.DISTPK) THEN
218 DISTPK=DIST
219 IPK=I
220 ENDIF
221 120 CONTINUE
222C
223 IF (DISTPK.GT.DISMIN) THEN
224 IT=0
225 ELSE
226 UPK=WS(IPK)
227 VPK=WS(IPK+1)
228 IT=WS(IPK+2)
229 ENDIF
230C
231 IF (IT.EQ.0) THEN
232C
233 WRITE (CHMAIL,2000)
234 CALL GMAIL(0,0)
235C
236 ELSE
237C
238C Draw the picked track point
239C
240 UDELTA=0.05*PLTRNX/20.
241 VDELTA=0.05*PLTRNY/20.
242 UP(1)=UPK-UDELTA
243 VP(1)=VPK-VDELTA
244 UP(2)=UPK+UDELTA
245 VP(2)=VP(1)
246 UP(3)=UP(2)
247 VP(3)=VPK+VDELTA
248 UP(4)=UP(1)
249 VP(4)=VP(3)
250 UP(5)=UP(1)
251 VP(5)=VP(1)
252 CALL GDRAWV(UP,VP,5)
253C
254C Print kinematics of the picked track
255C
256 CALL GPKINE(IT)
257C
258 ENDIF
259C
260C Restart for another pick operation
261C
262 GO TO 10
263C
264 130 CONTINUE
265C
266C Reset ITR3D to 'standard projection'
267C
268 ITR3D=0
269 IOBJ=0
270 RETURN
271 1900 FORMAT (' GKXYZ: Work space doubled - Now is',I6)
272 2000 FORMAT (' GKXYZ: No track picked')
273 2100 FORMAT (' GKXYZ: Pick angle doubled - Now is',F5.2)
274 2200 FORMAT (' GKXYZ: Primary vertex: no track picked')
275 END