]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/gdraw/gdprtr.F
New detector loop split in 2
[u/mrichter/AliRoot.git] / GEANT321 / gdraw / gdprtr.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:20:23 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/04 10/01/95 16.43.07 by S.Giani
11*-- Author :
12 SUBROUTINE GDPRTR(NAME,YLEV,XLEV,SIZE,FACHV,
13 +IDUP,IDRAW,IONL,IDET,ISEEN)
14C.
15C. ******************************************************************
16C. * *
17C. * Draws a box centered in (XLEV,YLEV) of size SIZE. *
18C. * On the top half box draws its name NAME and, if IDUP<>1, *
19C. * on the bottom half draw IDUP preceded by a symbol *
20C. * (IDUP<0 means division, IDUP>1 means multiple position, *
21C. * IDUP=1 means single position). *
22C. * If IDRAW=1 then over the box draws a normal-view of *
23C. * volume NAME (with same seen attributes set by GDSPEC). *
24C. * If IONL<>1 then draw two other boxes, slightly shifted, *
25C. * behind the original one. *
26C. * If IDET=1 then draw another box, slightly larger, *
27C. * around the original one. *
28C. * If ISEEN=0 then draw the box(es) with dashed lines. *
29C. * *
30C. * ==>Called by : GDTREE *
31C. * Author : P.Zanarini ; S.Giani ********* *
32C. * *
33C. ******************************************************************
34C.
35#include "geant321/gcbank.inc"
36#include "geant321/gcnum.inc"
37#include "geant321/gcdraw.inc"
38 DIMENSION X(5),Y(5)
39 DIMENSION NAMT0(16),NAM0(4)
40 DIMENSION PAR(50)
41 DIMENSION NNDM(14),INDM(4,14)
42 DIMENSION ATT(10)
43 CHARACTER*4 NAME,NAMSEE,ISON
44 CHARACTER*14 CHNAM0
45 SAVE NNDM,INDM
46 COMMON/NPILEV/NPILE
47C
48 DATA NNDM/0,0,0,4,0,2,0,2,4,3,4,3,0,0/
49 DATA INDM/0,0,0,0, 0,0,0,0, 0,0,0,0, 2,3,7,11, 0,0,0,0,
50 + 4,5,0,0, 0,0,0,0, 6,7,0,0, 3,4,5,6, 4,5,6,0,
51 + 1,2,3,4, 1,2,3,0, 0,0,0,0, 0,0,0,0/
52C.
53C. ------------------------------------------------------------------
54C.
55 IF (ISEEN.EQ.0) THEN
56 LINSTY=4
57 ELSE
58 LINSTY=1
59 ENDIF
60 CALL MVBITS(LINSTY,0,3,LINATT,10)
61C
62C Compute box vertex
63C
64 SIZ2=SIZE/2.
65 SIZ4=SIZE/4.
66 SIZ8=SIZE/8.
67*** X(1)=XLEV-SIZ2
68 X(1)=XLEV-(SIZ2*2.*FACHV)
69 X(2)=X(1)
70*** X(3)=XLEV+SIZ2
71 X(3)=XLEV+(SIZ2*2.*FACHV)
72 X(4)=X(3)
73 X(5)=X(1)
74 Y(1)=YLEV+SIZ2
75 Y(2)=YLEV-SIZ2
76 Y(3)=Y(2)
77 Y(4)=Y(1)
78 Y(5)=Y(1)
79C
80C Draw box
81C
82 IWTY=IGIWTY(1)
83 CALL IGQWK(0,'HWCO',R)
84 IF(IWTY.GT.10.OR.IWTY.LT.1.OR.R.EQ.2.)THEN
85 LINCOL=1
86 CALL MVBITS(LINCOL,0,8,LINATT,16)
87 CALL GDRAWV(X,Y,5)
88 ELSE
89 CALL IGSET('LWID',1.)
90 CALL UCTOH(NAME,IIIN,4,4)
91 CALL IGPID(1,'Tree',IIIN,' ')
92 CALL IGPAVE(X(1),X(3),Y(1),Y(3),SIZ8,1004,1001,'TRS')
93 ENDIF
94C
95C If volume is also detector draw another box outside
96C
97 IF (IDET.EQ.1) THEN
98 X(1)=X(1)-SIZ8
99 X(2)=X(2)-SIZ8
100 X(3)=X(3)+SIZ8
101 X(4)=X(4)+SIZ8
102 X(5)=X(5)-SIZ8
103 Y(1)=Y(1)+SIZ8
104 Y(2)=Y(2)-SIZ8
105 Y(3)=Y(3)-SIZ8
106 Y(4)=Y(4)+SIZ8
107 Y(5)=Y(5)+SIZ8
108 LINCOL=1
109 CALL MVBITS(LINCOL,0,8,LINATT,16)
110 CALL GDRAWV(X,Y,5)
111 ENDIF
112C
113C If volume is not 'ONLY' draw two other boxes behind
114C
115 IF (IONL.NE.1) THEN
116 X(1)=XLEV+(SIZ2*2.*FACHV)-SIZ8
117 Y(1)=YLEV+SIZ2
118 X(2)=X(1)
119 Y(2)=Y(1)+SIZ8
120 X(3)=X(2)-(SIZE*2.*FACHV)
121 Y(3)=Y(2)
122 X(4)=X(3)
123 Y(4)=Y(3)-SIZE
124 X(5)=X(4)+SIZ8
125 Y(5)=Y(4)
126 LINCOL=1
127 CALL MVBITS(LINCOL,0,8,LINATT,16)
128 CALL GDRAWV(X,Y,5)
129 DO 10 I=1,5
130 X(I)=X(I)-SIZ8
131 Y(I)=Y(I)+SIZ8
132 10 CONTINUE
133 CALL GDRAWV(X,Y,5)
134 ENDIF
135C
136 LINSTY=1
137 CALL MVBITS(LINSTY,0,3,LINATT,10)
138C
139C Draw name
140C
141 YL=YLEV-SIZ2+(SIZ8/2.)
142 IF(FACHV.EQ.1.)YL=YLEV-SIZ8
143 XL=XLEV-(SIZ4*FACHV)+SIZ8
144 IF(FACHV.EQ.1.)XL=XLEV
145 SZ=1.5*SIZ4*2.
146 IF(FACHV.EQ.1.)SZ=1.*SIZ4*2.
147 ITXCOL=5
148 CALL MVBITS(ITXCOL,0,4,ITXATT,3)
149 AITXCO=ITXCOL
150 CALL IGSET('TXCI',AITXCO)
151 CALL IGSET('TXFP',-60.)
152 IWTY=IGIWTY(1)
153 IF(IWTY.GT.10.OR.IWTY.LT.1)CALL IGSET('TXFP',-61.)
154*** CALL IGPID(1,'Tree',NPILE,' ')
155 CALL GDRAWT(XL,YL,NAME,SZ,0.,4,0)
156 CALL IGSET('TXFP',2.)
157 CALL IGSET('TXCI',1.)
158C
159 IF (IDUP.EQ.1) GO TO 20
160C
161C Draw IDUP in bottom half box
162C
163 CALL UCTOH('<"4#>',NAMT0(1),1,5)
164 IF (IDUP.LT.0) CALL UCTOH('F',NAMT0(3),1,1)
165 DUP=FLOAT(IABS(IDUP))
166 CALL HBCDF(DUP,8,NAMT0(6))
167 CALL UCTOH('$',NAMT0(14),1,1)
168 CALL UBUNCH(NAMT0,NAM0,14)
169 CALL UHTOC(NAM0,4,CHNAM0,14)
170 XL=XLEV+(SIZ4*FACHV)+SIZ2
171 IF(FACHV.EQ.1.)XL=XLEV-(3.*SIZ8)
172 YL=YLEV-SIZ4-SIZ8
173 IF(FACHV.EQ.1.)YL=YLEV-SIZ2+(SIZ8/2.)
174 SZ=0.7*SIZ4*2.
175 IF(FACHV.EQ.1.)SZ=0.7*SIZ4*1.5
176 ITXCOL=5
177 CALL MVBITS(ITXCOL,0,4,ITXATT,3)
178 AITXCO=ITXCOL
179 CALL IGSET('TXCI',AITXCO)
180 CALL IGSET('TXFP',2.)
181*** CALL IGPID(1,'Tree',NPILE,' ')
182 CALL GDRAWT(XL,YL,CHNAM0,SZ,0.,10,-1)
183 CALL IGSET('TXCI',1.)
184C
185 20 CONTINUE
186C
187 IF (IDRAW.NE.1) GO TO 999
188C
189C Draw a normal view of the volume
190C
191 CALL GLOOK(NAME,IQ(JVOLUM+1),NVOLUM,IVO)
192 IF(IVO.LE.0) GO TO 999
193C
194 JVO=LQ(JVOLUM-IVO)
195C
196C GET PARAMETERS
197C
198 CALL GFPARA(NAME,1,0,NPAR,NATT,PAR,ATT)
199 IF(NPAR.LE.0) GO TO 999
200C
201 ISHAPE=Q(JVO+2)
202C
203C CHECK parametER SIZES
204C
205 PARMAX=-1.
206 DO 50 I=1,NPAR
207 IF(ISHAPE.GT.14)GO TO 50
208 IF(NNDM(ISHAPE).LE.0) GO TO 40
209C
210 NDM=NNDM(ISHAPE)
211 DO 30 IDM=1,NDM
212C
213 IF(I.EQ.INDM(IDM,ISHAPE)) GO TO 50
214C
215 30 CONTINUE
216 40 CONTINUE
217C
218 ABSPAR=ABS(PAR(I))
219 PARMAX=MAX(PARMAX,ABSPAR)
220 50 CONTINUE
221 XSCALE=SIZE/(3.*PARMAX)
222 YSCALE=XSCALE
223 XPOS=XLEV-(SIZE*FACHV*2)+SIZ8
224 YPOS=YLEV
225* YPOS=YLEV+SIZE
226C
227 CALL GFATT(NAME,'SEEN',KSEEN)
228C
229C Add local value KSEEN 1 to starting node of tree
230C
231 KSEEN=KSEEN+110
232 ISEEN=KSEEN
233 CALL GSATT(NAME,'SEEN',ISEEN)
234C
235 CALL GDNSON(NAME,NSON,IDIV)
236 DO 60 N=1,NSON
237 CALL GDSON(N,NAME,ISON)
238 CALL GFATT(ISON,'SEEN',KSEEN)
239C
240C ISON is a volume with multeplicity;
241C first occurrence has already been set
242C
243 IF (KSEEN.GT.50) GO TO 60
244C
245C Add local value SEEN -2 to each one-level-down node
246C
247 KSEEN=KSEEN+80
248 ISEEN=KSEEN
249 CALL GSATT(ISON,'SEEN',ISEEN)
250 60 CONTINUE
251 CALL GDRAW(NAME,45.,135.,0.,XPOS,YPOS,XSCALE,YSCALE)
252C
253C Reset global SEEN values
254C
255 DO 70 IVO=1,NVOLUM
256 CALL UHTOC(IQ(JVOLUM+IVO),4,NAMSEE,4)
257 CALL GFATT(NAMSEE,'SEEN',KSEEN)
258 IF (KSEEN.LT.50) GO TO 70
259 ISEENL=KSEEN/10.+0.5
260 ISEENG=KSEEN-ISEENL*10.
261 CALL GSATT(NAMSEE,'SEEN',ISEENG)
262 70 CONTINUE
263C
264 999 END