]>
Commit | Line | Data |
---|---|---|
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) | |
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 |