5 * Revision 1.1.1.1 1995/10/24 10:20:29 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.27 by S.Giani
12 SUBROUTINE GDTREE(KNAME,LEVMAX,ISEL)
14 C. ******************************************************************
16 C. * Draw the tree of geometric data structure starting *
17 C. * from object KNAME, for LEVMAX depth levels (0=all) *
19 C. * If ISEL= 0 then draw only node name; *
20 C. * if ISEL=xxxxxx1 then add multiplicity; *
21 C. * if ISEL=xxxxx1x then add 'ONLY' information; *
22 C. * if ISEL=xxxx1xx then add 'DET ' information; *
23 C. * if ISEL=xxx1xxx then add 'SEEN' information; *
24 C. * if ISEL=xx1xxxx then add little picture of volume; *
25 C. * if ISEL=x1xxxxx then add graphics cursor and *
26 C. * returns in IPICK the node picked; *
28 C. * For very big trees, the attribute SEEN -3 can be applied *
29 C. * to any node in the level that has too many different *
30 C. * nodes (each with a different volume name) : the routine *
31 C. * GDTREE will draw only the first, the last, and one *
32 C. * dummy node in the middle that tells how many nodes *
33 C. * does it stand for. *
35 C. * ==>Called by : <USER>, <GXINT> *
36 C. * Authors : P.Zanarini ; S.Giani ********* *
38 C. ******************************************************************
40 #include "geant321/gcunit.inc"
41 #include "geant321/gcbank.inc"
42 #include "geant321/gcnum.inc"
43 #include "geant321/gcdraw.inc"
44 #include "geant321/gchil2.inc"
45 #include "geant321/gccurs.inc"
46 #include "geant321/gcursb.inc"
48 CHARACTER*4 KNAME,NAME,NAME1,MOTH
49 DIMENSION U(4),V(4),UUU(15),VVV(15),SVVX(3),SVVY(3)
50 SAVE SAVTHE,SAVPHI,SAVU0,SAVV0,SAVSCU,SAVSCV,SVGZUA,SVGZVA
51 SAVE SVGZUB,SVGZVB,SVGZUC,SVGZVC
55 C. ------------------------------------------------------------------
57 C Is NAME an existing volume ?
59 * CALL IGSET('SYNC',1.)
61 CALL UHTOC(IQ(JVOLUM+1),4,NAME,4)
64 IF (KNAME.EQ.' ') THEN
65 CALL UHTOC(IQ(JVOLUM+1),4,NAME,4)
68 CALL GLOOK(KNAME,IQ(JVOLUM+1),NVOLUM,IVO)
69 IF (IVO.LE.0) GO TO 180
73 C Build tree structure using view bank 11
76 CALL UCTOH (NAME, IROOT, 4, 4)
77 CALL GDTR0 (IVTREE, IROOT, LEVMAX, IER)
78 IF (IER.NE.0) GO TO 170
95 C Save GDRAW calling parameters
96 C and ZOOM internal parameters
121 C Fill arrays Q(JULEV) and Q(JVLEV)
135 SIZE=PLTVER/(4.*MLEVV)
136 *** SIZE=PLTVER/(4.*MLEVV)
138 C Compute user coordinates boundaries of tree picture
142 IF(MLEVH.GT.MLEVV)THEN
143 SIZ4=(MLEVH*SIZ2)/MLEVV
144 FACHV=(MLEVH/2.)/MLEVV
145 IF(FACHV.LT.2.)FACHV=1.
154 C Save current ranges and store new ones
162 CALL IGRNG(YPLT,XPLT)
163 * CALL IGRNG(XPLT,YPLT)
173 IF (IQ(JSCA1+J).NE.0) THEN
174 CALL UHTOC(IQ(JNAM1+J),4,NAME,4)
179 CALL MZLINT(IXDIV,'/GCHIL2/',LARETT,JMYMOT,LARETT)
181 IF(JTICK.NE.0) CALL MZDROP(IXSTOR, JTICK, ' ')
182 IF(JMYLL.NE.0) CALL MZDROP(IXSTOR, JMYLL, ' ')
185 CALL MZNEED(IXDIV,NEES,'G')
186 CALL MZBOOK(IXDIV,JTICK,JTICK,1,'TTT',0,0,NEE,2,-1)
187 CALL MZBOOK(IXDIV,JMYLL,JMYLL,1,'MMM',0,0,NEE,2,-1)
188 IF(JFIMOT.NE.0) CALL MZDROP(IXSTOR, JFIMOT, ' ')
189 IF(JFISCA.NE.0) CALL MZDROP(IXSTOR, JFISCA, ' ')
190 IF(JFINAM.NE.0) CALL MZDROP(IXSTOR, JFINAM, ' ')
192 CALL MZNEED(IXDIV,NEES,'G')
193 CALL MZBOOK(IXDIV,JFIMOT,JFIMOT,1,'FIMO',0,0,NEE,2,-1)
194 CALL MZBOOK(IXDIV,JFISCA,JFISCA,1,'FISC',0,0,NEE,2,-1)
195 CALL MZBOOK(IXDIV,JFINAM,JFINAM,1,'FINA',0,0,NEE,2,-1)
208 * IF(INTSPI.NE.1)THEN
212 * IQ(JNAM1+JI)=IQ(JAASS3+JI)
213 * IQ(JSCA1+JI)=IQ(JAASS4+JI)
214 * IQ(JMOT1+JI)=IQ(JMYMOT+JI)
218 CALL GDTR8(NAME,MOTH,IONL)
219 IF(MOTH.EQ.KNAME)THEN
220 IQ(JMYLL+J)=LL+1+IADDI
226 * IF(INTSPI.NE.1)NUMND1=NUMNDA
231 Q(JULEV+J) = (Q(JULEV+J)-1.)*SIZ2 + SIZE
232 *** Q(JVLEV+J) = YPLT - (Q(JVLEV+J)-1.)*SIZ4 - SIZ2
233 Q(JVLEV+J) = (Q(JVLEV+J)-1.)*SIZ4 + SIZ2
234 IF (ISEL0.NE.0) IDUP=IQ(JDUP1+J)
235 IF (ISEL1.NE.0) CALL GDTR8(NAME,MOTH,IONL)
239 CALL GFATT(NAME,'DET ',KVAL)
240 IF (KVAL.GT.0) IDET=1
244 CALL GFATT(NAME,'SEEN',KVAL)
245 IF (KVAL.EQ.1.OR.KVAL.EQ.-2) THEN
255 CALL UHTOC(IQ(JNAM1+JM),4,NAME1,4)
256 CALL GFATT(NAME1,'SEEN',KVALM)
261 IF (JM.NE.1) GO TO 40
264 ***** CALL GDPRTR(NAME,Q(JVLEV+J),Q(JULEV+J),SIZE,IDUP,IDRAW,
265 ***** + IONL, IDET,ISEEN)
267 CALL GDPRTR(NAME,Q(JULEV+J),Q(JVLEV+J),SIZE,FACHV,IDUP,
268 + IDRAW, IONL, IDET,ISEEN)
275 IF(INTFLA.EQ.1)GOTO 160
277 CALL MVBITS(LINCOL,0,8,LINATT,16)
278 IF (IQ(JMOT1+1).NE.0) THEN
281 V(2)=Q(JVLEV+1)-(SIZD2*2.*FACHV)
282 V(1)=V(2)-(SIZE*2.*FACHV)
284 *** CALL GDRAWV(U,V,2)
289 IF (IQ(JSCA1+J).EQ.1) THEN
291 70 IF (JX.EQ.0) GO TO 120
294 * V(1)=Q(JVLEV+J)+(SIZD2*2.*FACHV)
295 * V(2)=Q(JVLEV+JX)-(SIZD2*2.*FACHV)
300 V(1)=Q(JVLEV+J)+(SIZD2*2.*FACHV)
301 V(4)=Q(JVLEV+JX)-(SIZD2*2.*FACHV)
304 IF(J.EQ.1)HALF=V(4)-V(3)
306 CALL IGPID(1,' ',J,' ')
311 ARROWS=(SIZD2*2.*FACHV)/10.
315 VVV(KJI)=V(1)-(FRA/2.)+(FRA*KJI)
321 SVVX(1)=VVV(KJI)-ARROWS
322 SVVX(2)=VVV(KJI)-ARROWS
323 SVVX(3)=VVV(KJI)+ARROWS
324 SVVY(1)=UUU(KJI)+ARROWS
325 SVVY(2)=UUU(KJI)-ARROWS
328 CALL IGPID(1,'Tree',IQ(JNAM1+J),' ')
329 CALL IGPID(2,'Arrow',KJI+1,' ')
331 CALL IFA(3,SVVX,SVVY)
333 *** CALL GDRAWV(U,V,2)
337 VVV(KJI)=V(3)-(FRA/2.)+(FRA*KJI)
346 SVVX(1)=VVV(KJI)+ARROWS
347 SVVX(2)=VVV(KJI)+ARROWS
348 SVVX(3)=VVV(KJI)-ARROWS
349 SVVY(1)=UUU(KJI)+ARROWS
350 SVVY(2)=UUU(KJI)-ARROWS
353 CALL IGPID(1,'Tree',IQ(JNAM1+IGREEN),' ')
354 CALL IGPID(2,'Arrow',-IORGO,' ')
356 CALL IFA(3,SVVX,SVVY)
363 ELSE IF (IQ(JSCA1+J).EQ.-1) THEN
365 ARROWS=(SIZD2*2.*FACHV)/10.
368 V(1)=Q(JVLEV+J)+(SIZD2*2.*FACHV)
369 V(2)=V(1)+(SIZE*2.*FACHV)
372 FRA=(V(2)-V(1))/(NPO*2.)
374 VVV(KJI)=V(1)-(FRA/2.)+(FRA*KJI)
380 SVVX(1)=VVV(KJI)-ARROWS
381 SVVX(2)=VVV(KJI)-ARROWS
382 SVVX(3)=VVV(KJI)+ARROWS
383 SVVY(1)=UUU(KJI)+ARROWS
384 SVVY(2)=UUU(KJI)-ARROWS
387 CALL IGPID(1,'Tree',IQ(JNAM1+J),' ')
388 CALL IGPID(2,'Arrow',KJI+1,' ')
390 CALL IFA(3,SVVX,SVVY)
392 *** CALL GDRAWV(U,V,2)
397 C Restore GDRAW calling parameters
398 C and ZOOM internal parameters
417 C Restore original ranges previously saved
422 ************ CALL IGRNG(PLTRNX,PLTRNY)
424 C Delete tree structure on view bank 11
426 170 CALL GDTR99(IVTREE)
429 180 WRITE(CHMAIL,10000)KNAME
431 10000 FORMAT(' GDTREE: VOLUME ',A4,' DOES NOT EXIST')