]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/gdraw/gkxyz.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gkxyz.F
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)
13 C.
14 C.    ******************************************************************
15 C.    *                                                                *
16 C.    *       Prints the kinematics of the track picked (using the     *
17 C.    *       graphics cursor) in case that the space points of the    *
18 C.    *       track had been stored in the bank JXYZ.                  *
19 C.    *       The picking is repeated until the character typed is     *
20 C.    *       'Q' or 'q'.                                              *
21 C.    *       EPSILO is the delta angle used for pick, in the sense    *
22 C.    *       that tracks to be considered as possible candidates      *
23 C.    *       must start with a direction in the angular range         *
24 C.    *       between ANG0-EPSILO and ANG0+EPSILO (where ANG0 is the   *
25 C.    *       angle relative to the cursor position).                  *
26 C.    *       If EPSILO is zero there is no delta angle concept and    *
27 C.    *       over all the track points the one nearest to the pick    *
28 C.    *       point is taken.                                          *
29 C.    *                                                                *
30 C.    *    ==>Called by : <USER>, <GXINT>                              *
31 C.    *       Author : P.Zanarini   *********                          *
32 C.    *                                                                *
33 C.    ******************************************************************
34 C.
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)
41 C
42       DIMENSION XZERO(3)
43 C
44       SAVE XZERO
45       DATA XZERO/3*0./
46 C.
47 C.    ------------------------------------------------------------------
48 C.
49       CALL UCTOH('OFF ',IOFF,4,4)
50 C
51 C            Set IOBJ to TRACK
52 C
53       IOBJ=2
54 C
55    10 CONTINUE
56       CALL GDCURS(U0,V0,KCHAR)
57       IF (KCHAR.EQ.0) GO TO 130
58 C
59       IF(JXYZ.LE.0)GO TO 130
60       NXYZ=IQ(JXYZ-2)
61       N1  =1
62       N2  =NXYZ
63 C
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  
76 C
77    20 CONTINUE
78       CALL GWORK(MAXWS)
79       ANGEPS=ABS(EPSILO)
80       EPSIL=1.
81       EPS=MAX(PLTRNX,PLTRNY)*EPSIL/20.
82       IBIAS=0
83 C
84    30 CONTINUE
85 C
86       DO 90 I=N1,N2
87 C
88 C             Track is not (yet) a canditate
89 C
90          IFL=0
91          ILOOP=0
92 C
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
104 C
105 C            Is THRZ option set on (R-Z projection)
106 C            and the cut lateral (vertical or horizontal) ?
107 C
108          IF (ITHRZ.NE.IOFF) THEN
109             IF (ICUT.EQ.1.OR.ICUT.EQ.2) ITR3D=-I
110          ELSE
111             ITR3D=0
112          ENDIF
113 C
114          IF (EPSILO.EQ.0) GO TO 60
115 C
116          IF (ILOOP.EQ.0) THEN
117             ILOOP=1
118 C
119             CALL GDFR3D(Q(IPOINT+3*IPF-1),2,U,V)
120             CALL GDFR3D(Q(IPOINT+3*NPOINT-1),1,ULAST,VLAST)
121 C
122             IF (U0.GE.UOR-EPS.AND.U0.LE.UOR+EPS.AND. V0.GE.VOR-EPS.AND.
123      +      V0.LE.VOR+EPS) THEN
124 C
125 C             Pick point too near the origin
126 C
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
131 C
132 C             First track point does not start near the origin
133 C
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
152 C
153 C             First track point near the +PI/-PI edge
154 C
155                   IFL=1
156                   GO TO 60
157                ELSE IF (ANG.GT.ANG0-ANGEPS.AND.ANG.LT.ANG0+ANGEPS) THEN
158 C
159 C             Pick point inside the pick angle
160 C
161                   IFL=1
162                   GO TO 60
163                ELSE IF (ANGLST.LT.ANG-ANGEPS.OR.ANGLST.GT.ANG+ANGEPS)
164      +         THEN
165 C
166 C             Track is too curved
167 C
168                   IFL=1
169                   GO TO 60
170                ENDIF
171             ENDIF
172 C
173          ENDIF
174 C
175 C             Skip completely the track ?
176 C
177          IF (IFL.NE.1) GO TO 90
178 C
179    60    CONTINUE
180 C
181          IF (IBIAS+3*NP.GE.MAXWS) THEN
182             MAXWS=MAXWS*2
183             GO TO 20
184          ENDIF
185 C
186          CALL GDFR3D(Q(IPOINT+3*IPF-1),NP,U,V)
187 C
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
193 C
194          IBIAS=IBIAS+3*NP
195 C
196          IPF=IPL
197          IF(IPF.LT.NPOINT)GO TO 50
198    80    IPOINT=IPOINT+3.*Q(IPOINT)+2.
199          GO TO 40
200 C
201    90 CONTINUE
202 C
203 C
204       IF (IBIAS.EQ.0) THEN
205          ANGEPS=ANGEPS*2.
206          GO TO 30
207       ENDIF
208 C
209       DISMIN=1.
210       DISTPK=1000000.
211       IPK=0
212 C
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
222 C
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
230 C
231       IF (IT.EQ.0) THEN
232 C
233          WRITE (CHMAIL,2000)
234          CALL GMAIL(0,0)
235 C
236       ELSE
237 C
238 C             Draw the picked track point
239 C
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)
253 C
254 C             Print kinematics of the picked track
255 C
256          CALL GPKINE(IT)
257 C
258       ENDIF
259 C
260 C             Restart for another pick operation
261 C
262       GO TO 10
263 C
264   130 CONTINUE
265 C
266 C             Reset ITR3D to 'standard projection'
267 C
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