5 * Revision 1.1.1.1 1999/05/18 15:55:03 fca
8 * Revision 1.1.1.1 1995/10/24 10:20:23 cernlib
12 #include "geant321/pilot.h"
13 *CMZ : 3.21/04 10/01/95 16.43.07 by S.Giani
15 SUBROUTINE GDPRTR(NAME,YLEV,XLEV,SIZE,FACHV,
16 +IDUP,IDRAW,IONL,IDET,ISEEN)
18 C. ******************************************************************
20 C. * Draws a box centered in (XLEV,YLEV) of size SIZE. *
21 C. * On the top half box draws its name NAME and, if IDUP<>1, *
22 C. * on the bottom half draw IDUP preceded by a symbol *
23 C. * (IDUP<0 means division, IDUP>1 means multiple position, *
24 C. * IDUP=1 means single position). *
25 C. * If IDRAW=1 then over the box draws a normal-view of *
26 C. * volume NAME (with same seen attributes set by GDSPEC). *
27 C. * If IONL<>1 then draw two other boxes, slightly shifted, *
28 C. * behind the original one. *
29 C. * If IDET=1 then draw another box, slightly larger, *
30 C. * around the original one. *
31 C. * If ISEEN=0 then draw the box(es) with dashed lines. *
33 C. * ==>Called by : GDTREE *
34 C. * Author : P.Zanarini ; S.Giani ********* *
36 C. ******************************************************************
38 #include "geant321/gcbank.inc"
39 #include "geant321/gcnum.inc"
40 #include "geant321/gcdraw.inc"
42 DIMENSION NAMT0(16),NAM0(4)
44 DIMENSION NNDM(14),INDM(4,14)
46 CHARACTER*4 NAME,NAMSEE,ISON
51 DATA NNDM/0,0,0,4,0,2,0,2,4,3,4,3,0,0/
52 DATA INDM/0,0,0,0, 0,0,0,0, 0,0,0,0, 2,3,7,11, 0,0,0,0,
53 + 4,5,0,0, 0,0,0,0, 6,7,0,0, 3,4,5,6, 4,5,6,0,
54 + 1,2,3,4, 1,2,3,0, 0,0,0,0, 0,0,0,0/
56 C. ------------------------------------------------------------------
63 CALL MVBITS(LINSTY,0,3,LINATT,10)
71 X(1)=XLEV-(SIZ2*2.*FACHV)
74 X(3)=XLEV+(SIZ2*2.*FACHV)
86 CALL IGQWK(0,'HWCO',R)
87 IF(IWTY.GT.10.OR.IWTY.LT.1.OR.R.EQ.2.)THEN
89 CALL MVBITS(LINCOL,0,8,LINATT,16)
93 CALL UCTOH(NAME,IIIN,4,4)
94 CALL IGPID(1,'Tree',IIIN,' ')
95 CALL IGPAVE(X(1),X(3),Y(1),Y(3),SIZ8,1004,1001,'TRS')
98 C If volume is also detector draw another box outside
112 CALL MVBITS(LINCOL,0,8,LINATT,16)
116 C If volume is not 'ONLY' draw two other boxes behind
119 X(1)=XLEV+(SIZ2*2.*FACHV)-SIZ8
123 X(3)=X(2)-(SIZE*2.*FACHV)
130 CALL MVBITS(LINCOL,0,8,LINATT,16)
140 CALL MVBITS(LINSTY,0,3,LINATT,10)
144 YL=YLEV-SIZ2+(SIZ8/2.)
145 IF(FACHV.EQ.1.)YL=YLEV-SIZ8
146 XL=XLEV-(SIZ4*FACHV)+SIZ8
147 IF(FACHV.EQ.1.)XL=XLEV
149 IF(FACHV.EQ.1.)SZ=1.*SIZ4*2.
151 CALL MVBITS(ITXCOL,0,4,ITXATT,3)
153 CALL IGSET('TXCI',AITXCO)
154 CALL IGSET('TXFP',-60.)
156 IF(IWTY.GT.10.OR.IWTY.LT.1)CALL IGSET('TXFP',-61.)
157 *** CALL IGPID(1,'Tree',NPILE,' ')
158 CALL GDRAWT(XL,YL,NAME,SZ,0.,4,0)
159 CALL IGSET('TXFP',2.)
160 CALL IGSET('TXCI',1.)
162 IF (IDUP.EQ.1) GO TO 20
164 C Draw IDUP in bottom half box
166 CALL UCTOH('<"4#>',NAMT0(1),1,5)
167 IF (IDUP.LT.0) CALL UCTOH('F',NAMT0(3),1,1)
168 DUP=FLOAT(IABS(IDUP))
169 CALL HBCDF(DUP,8,NAMT0(6))
170 CALL UCTOH('$',NAMT0(14),1,1)
171 CALL UBUNCH(NAMT0,NAM0,14)
172 CALL UHTOC(NAM0,4,CHNAM0,14)
173 XL=XLEV+(SIZ4*FACHV)+SIZ2
174 IF(FACHV.EQ.1.)XL=XLEV-(3.*SIZ8)
176 IF(FACHV.EQ.1.)YL=YLEV-SIZ2+(SIZ8/2.)
178 IF(FACHV.EQ.1.)SZ=0.7*SIZ4*1.5
180 CALL MVBITS(ITXCOL,0,4,ITXATT,3)
182 CALL IGSET('TXCI',AITXCO)
183 CALL IGSET('TXFP',2.)
184 *** CALL IGPID(1,'Tree',NPILE,' ')
185 CALL GDRAWT(XL,YL,CHNAM0,SZ,0.,10,-1)
186 CALL IGSET('TXCI',1.)
190 IF (IDRAW.NE.1) GO TO 999
192 C Draw a normal view of the volume
194 CALL GLOOK(NAME,IQ(JVOLUM+1),NVOLUM,IVO)
195 IF(IVO.LE.0) GO TO 999
201 CALL GFPARA(NAME,1,0,NPAR,NATT,PAR,ATT)
202 IF(NPAR.LE.0) GO TO 999
206 C CHECK parametER SIZES
210 IF(ISHAPE.GT.14)GO TO 50
211 IF(NNDM(ISHAPE).LE.0) GO TO 40
216 IF(I.EQ.INDM(IDM,ISHAPE)) GO TO 50
222 PARMAX=MAX(PARMAX,ABSPAR)
224 XSCALE=SIZE/(3.*PARMAX)
226 XPOS=XLEV-(SIZE*FACHV*2)+SIZ8
230 CALL GFATT(NAME,'SEEN',KSEEN)
232 C Add local value KSEEN 1 to starting node of tree
236 CALL GSATT(NAME,'SEEN',ISEEN)
238 CALL GDNSON(NAME,NSON,IDIV)
240 CALL GDSON(N,NAME,ISON)
241 CALL GFATT(ISON,'SEEN',KSEEN)
243 C ISON is a volume with multeplicity;
244 C first occurrence has already been set
246 IF (KSEEN.GT.50) GO TO 60
248 C Add local value SEEN -2 to each one-level-down node
252 CALL GSATT(ISON,'SEEN',ISEEN)
254 CALL GDRAW(NAME,45.,135.,0.,XPOS,YPOS,XSCALE,YSCALE)
256 C Reset global SEEN values
259 CALL UHTOC(IQ(JVOLUM+IVO),4,NAMSEE,4)
260 CALL GFATT(NAMSEE,'SEEN',KSEEN)
261 IF (KSEEN.LT.50) GO TO 70
263 ISEENG=KSEEN-ISEENL*10.
264 CALL GSATT(NAMSEE,'SEEN',ISEENG)