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