]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/ggeom/gsdvt2.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / gsdvt2.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
d43b40e2 5* Revision 1.1.1.1 1999/05/18 15:55:17 fca
6* AliRoot sources
7*
fe4da5cc 8* Revision 1.1.1.1 1995/10/24 10:20:56 cernlib
9* Geant
10*
11*
12#include "geant321/pilot.h"
13*CMZ : 3.21/03 06/10/94 18.33.17 by S.Giani
14*-- Author :
15 SUBROUTINE GSDVT2(KNAME,MOTHER,STEP,IAXIS,C0,NUMED,NDVMX)
16C.
17C. ******************************************************************
18C. * *
19C. * Divides MOTHER into divisions called NAME along *
20C. * axis IAXIS starting at coordinate value C0 with step *
21C. * size STEP. *
22C. * The new volume created will have medium number NUMED. *
23C. * If NUMED is 0, NUMED of mother is taken. *
24C. * NDVMX is the expected maximum number of divisions *
25C. * (If 0, no protection tests are performed) *
26C. * *
27C. * JVO=Pointer to MOTHER volume *
28C. * JDIV=LQ(JVO-1) *
29C. * *
30C. * Q(JDIV+1)=IAXIS *
31C. * Q(JDIV+2)=Volume number *
32C. * Q(JDIV+3)=Number of divisions. *
33C. * Q(JDIV+4)=C0 *
34C. * Q(JDIV+5)=STEP *
35C. * *
36C. * ==>Called by : ,USER., GSDVS2, GSDVX *
37C. * Authors F.Bruyant, M.Maire, A.McPherson ********* *
38C. * *
39C. ******************************************************************
40C.
41#include "geant321/gcbank.inc"
42#include "geant321/gcflag.inc"
43#include "geant321/gcnum.inc"
44#include "geant321/gcunit.inc"
45#include "geant321/gcdraw.inc"
46#include "geant321/gcshno.inc"
47 CHARACTER*4 KNAME,MOTHER
d43b40e2 48 DIMENSION PAR(100),ATT(20)
fe4da5cc 49 SAVE ATT
50 DATA ATT /1.,1.,1.,1.,1.,15*0./
51C.
52C. ------------------------------------------------------------------
53C.
54C CHECK IF VOLUME MASTER BANK EXISTS
55C
56 CALL UCTOH(KNAME,NAME,4,4)
57 IF(JVOLUM.GT.0)GO TO 10
58 WRITE(CHMAIL,1000)
59 CALL GMAIL(0,0)
60 GO TO 99
61C
62C CHECK IF MOTHER VOLUME EXISTS
63C
64 10 CALL GLOOK(MOTHER,IQ(JVOLUM+1),NVOLUM,IVO)
65 IF(IVO.GT.0)GO TO 20
66 WRITE(CHMAIL,2000)MOTHER
67 CALL GMAIL(0,0)
68 GO TO 99
69C
70C CHECK IF NAME VOLUME EXISTS
71C
72 20 CALL GLOOK(KNAME,IQ(JVOLUM+1),NVOLUM,IN)
73 IF(IN.LE.0)GO TO 50
74 WRITE(CHMAIL,2000)NAME
75 CALL GMAIL(0,0)
76 GO TO 99
77C
78C CHECK IF MOTHER IS NOT DIVIDED
79C
80 50 JVO=LQ(JVOLUM-IVO)
81 NIN=Q(JVO+3)
82 IF(NIN.EQ.0)GO TO 60
83 WRITE(CHMAIL,4000)MOTHER
84 CALL GMAIL(0,0)
85 GO TO 99
86C
87C CHECK VALIDITY OF AXIS VALUE
88C
89 60 IF(IAXIS.GT.0.AND.IAXIS.LT.4)GO TO 70
90 WRITE(CHMAIL,5000)IAXIS
91 CALL GMAIL(0,0)
92 GO TO 99
93C
94C CHECK VALIDITY OF STEP
95C
96 70 IF(STEP.GT.0.0)GO TO 80
97 WRITE(CHMAIL,6000)STEP
98 CALL GMAIL(0,0)
99 GO TO 99
100C
101C CREATE BANK TO STORE DIVISION PARAMETERS
102C
103 80 CALL MZBOOK(IXCONS,JDIV,JVO,-1,'VODI',0,0,6,3,0)
104 IF(IEOTRI.NE.0)GO TO 95
105 IQ(JDIV-5)=IVO
106C
107C NOW STORE PARAMETERS INTO BANK AREA
108C
109 90 Q(JDIV+1)=IAXIS
110 Q(JDIV+2)=NVOLUM+1
111 Q(JVO+3)=-1
112 IVOM= IVO
113 NWM = IQ(JVO-1)
114 NW = NWM
115 CALL GFIPAR(JVO,0,0,NPAR,NATT,PAR,ATT)
116C
117C CHECK START AND STEP AND FIND AND STORE NDIV.
118C
119 ISH=Q(JVO+2)
120 IF(ISH.NE.1) GO TO 100
121C
122C BOX
123C
124 IF(PAR(IAXIS).LE.0.0) GO TO 920
125 IF(ABS(C0).GT.PAR(IAXIS)) GO TO 910
126 NDIV=(PAR(IAXIS)-C0+0.001)/STEP
127 IF (NDIV.LE.0) GO TO 910
128 PAR(IAXIS)=STEP/2.
129 GO TO 210
130C
131 100 CONTINUE
132 IF(ISH.NE.2) GO TO 110
133C
134C TRAPEZOID WITH ONLY X THICKNESS VARYING WITH Z.
135C
136 IF(IAXIS.EQ.1) GO TO 900
137 IF(PAR(IAXIS+1).LE.0.0) GO TO 920
138 IF(ABS(C0).GT.PAR(IAXIS+1)) GO TO 910
139 NDIV=(PAR(IAXIS+1)-C0+0.001)/STEP
140 IF (NDIV.LE.0) GO TO 910
141 PAR(1)=-1.
142 PAR(2)=-1.
143 PAR(IAXIS+1)=STEP/2.
144 GO TO 210
145C
146 110 CONTINUE
147 IF(ISH.NE.3) GO TO 120
148C
149C TRAPEZOID WITH BOTH X AND Y THICKNESSES VARYING WITH
150C Z
151C
152 IF(IAXIS.NE.3) GO TO 900
153 IF(PAR(5).LE.0.0) GO TO 920
154 IF(ABS(C0).GT.PAR(5)) GO TO 910
155 NDIV=(PAR(5)-C0+0.001)/STEP
156 IF (NDIV.LE.0) GO TO 910
157 PAR(1)=-1.
158 PAR(2)=-1.
159 PAR(3)=-1.
160 PAR(4)=-1.
161 PAR(5)=STEP/2.
162 GO TO 210
163C
164 120 CONTINUE
165 IF(ISH.NE.4) GO TO 125
166 IF(IAXIS.NE.3) GO TO 126
167 IF(PAR(1).LE.0.0) GO TO 920
168 IF(ABS(C0).GT.PAR(1)) GO TO 910
169 NDIV=(PAR(1)-C0+0.001)/STEP
170 IF (NDIV.LE.0) GO TO 910
171 PAR(1)=STEP*0.5
172 PAR(4)=-1.0
173 PAR(5)=-1.0
174 PAR(6)=-1.0
175 PAR(8)=-1.0
176 PAR(9)=-1.0
177 PAR(10)=-1.0
178 GO TO 210
179C
180 126 IF(IAXIS.NE.2) GO TO 900
181 IF(MOD(PAR(3),180.).EQ.0.) GO TO 127
182 WRITE(CHMAIL,10100)
18310100 FORMAT(' Division of TRAP ',A4,
184 + ' along Y only possible when PHI=0,180')
185 CALL GMAIL(0,0)
186 GOTO 99
187 127 IF(PAR(4).EQ.PAR(8)) GO TO 128
188 WRITE(CHMAIL,10200)
18910200 FORMAT(' Division of TRAP ',A4,
190 + ' along Y only possible when H1=H2')
191 CALL GMAIL(0,0)
192 GOTO 99
193 128 CONTINUE
194 IF(PAR(4).LT.0.0) GO TO 920
195 IF(ABS(C0).GE.PAR(4)) GO TO 910
196 NDIV = (PAR(4)-C0+0.001)/STEP
197 IF (NDIV.LE.0) GO TO 910
198 PAR(4) = 0.5*STEP
199 PAR(5) = -1.
200 PAR(6) = -1.
201 PAR(8) = 0.5*STEP
202 PAR(9) = -1.
203 PAR(10) = -1.
204C
205 GO TO 210
206C
207 125 CONTINUE
208 IF(ISH.NE.5.AND.ISH.NE.6.AND.ISH.NE.NSCTUB) GO TO 160
209C
210C Tube, tube segment or cut tube.
211C
212 IF(IAXIS.NE.3) GO TO 130
213 IF(PAR(3).LE.0.0) GO TO 920
214 IF(ABS(C0).GT.PAR(3)) GO TO 910
215 NDIV=(PAR(3)-C0+0.001)/STEP
216 IF (NDIV.LE.0) GO TO 910
217 PAR(3)=STEP/2.
218 GO TO 210
219C
220 130 CONTINUE
221 IF(IAXIS.NE.1) GO TO 140
222 IF(PAR(1).LE.0.0.OR.PAR(2).LE.0.0) GO TO 920
223 IF(C0.LT.PAR(1)) GO TO 910
224 NDIV=(PAR(2)-C0+0.001)/STEP
225 IF (NDIV.LE.0) GO TO 910
226 PAR(1)=-1.
227 PAR(2)=-1.
228 GO TO 210
229C
230 140 CONTINUE
231 IF(ISH.EQ.6) GO TO 150
232 NW=NW+2
233 ISH=6
234 NDIV=360.001/STEP
235 IF (NDIV.LE.0) GO TO 910
236 NPAR=5
237 PAR(4)=-STEP/2.
238 PAR(5)=STEP/2.
239 GO TO 210
240C
241 150 CONTINUE
242 DP=PAR(5)-PAR(4)
243 DC0P = C0-PAR(4)
244 SG = SIGN(1.0,DC0P)
245 DC0P = MOD( ABS(DC0P), 360.0)
246 IF(SG.LE.0.0) DC0P = 360.0-DC0P
247 C0 = PAR(4)+DC0P
248 IF(C0-PAR(4).LT.0.0) C0=C0+360.0
249 IF(C0-PAR(4).GT.DP) GO TO 910
250 DP=PAR(5)-C0
251 IF(DP.LT.0.0) DP=DP+360
252 NDIV=(DP+0.001)/STEP
253 IF (NDIV.LE.0) GO TO 910
254 PAR(4)=-STEP/2.
255 PAR(5)=STEP/2.
256 GO TO 210
257C
258 160 CONTINUE
259C
260 IF(ISH.NE.7.AND.ISH.NE.8) GO TO 190
261 IF(IAXIS.EQ.1) GO TO 165
262 IF(IAXIS.NE.3) GO TO 170
263C
264 IF(PAR(1).LE.0.0) GO TO 920
265 IF(ABS(C0).GT.PAR(1)) GO TO 910
266 NDIV=(PAR(1)-C0+0.001)/STEP
267 IF (NDIV.LE.0) GO TO 910
268 PAR(1)=STEP*0.5
269C
270 165 CONTINUE
271C
272 PAR(2)=-1.0
273 PAR(3)=-1.0
274 PAR(4)=-1.0
275 PAR(5)=-1.0
276 GO TO 210
277C
278 170 CONTINUE
279 IF(IAXIS.EQ.1) GO TO 210
280C
281 IF(ISH.EQ.8) GO TO 180
282 NW=NW+2
283 ISH=8
284 NDIV=360.001/STEP
285 IF (NDIV.LE.0) GO TO 910
286 NPAR=7
287 PAR(6)=-STEP/2.
288 PAR(7)=STEP/2.
289 GO TO 210
290C
291 180 CONTINUE
292 DP=PAR(7)-PAR(6)
293 DC0P = C0-PAR(6)
294 SG = SIGN(1.0,DC0P)
295 DC0P = MOD( ABS(DC0P), 360.0)
296 IF(SG.LE.0.0) DC0P = 360.0-DC0P
297 C0 = PAR(6)+DC0P
298 IF(C0-PAR(6).LT.0.0) C0=C0+360.0
299 IF(C0-PAR(6).GT.DP) GO TO 910
300 DP=PAR(7)-C0
301 IF(DP.LT.0.0) DP=DP+360.0
302 NDIV=(DP+0.001)/STEP
303 IF (NDIV.LE.0) GO TO 910
304 PAR(6)=-STEP/2.
305 PAR(7)=STEP/2.
306 GO TO 210
307C
308 190 CONTINUE
309 IF(ISH.NE.9) GO TO 200
310 IF(IAXIS.NE.1) GO TO 195
311 PAR(1)=-1.0
312 PAR(2)=-1.0
313 195 CONTINUE
314C
315 IF(IAXIS.NE.3) GO TO 210
316 DP=PAR(6)-PAR(5)
317 DC0P = C0-PAR(4)
318 SG = SIGN(1.0,DC0P)
319 DC0P = MOD( ABS(DC0P), 360.0)
320 IF(SG.LE.0.0) DC0P = 360.0-DC0P
321 C0 = PAR(4)+DC0P
322 IF(C0.LT.PAR(5)) C0=C0+360.0
323 IF(C0-PAR(5).GT.DP) GO TO 910
324 DP=PAR(6)-C0
325 IF(DP.LT.0.0) DP=DP+360
326 NDIV=(DP+0.001)/STEP
327 IF (NDIV.LE.0) GO TO 910
328 PAR(3)=-1.
329 PAR(4)=-1.
330 PAR(5)=-0.5*STEP
331 PAR(6)=0.5*STEP
332 GO TO 210
333C
334 200 CONTINUE
335C
336 GO TO 900
337C
338C NOW CREATE THE VOLUME FOR DIVISION
339C
340 210 IF (NDVMX.GT.0) THEN
341 IF (NDIV.GT.NDVMX) THEN
342 WRITE (CHMAIL, 1210) NDIV,NDVMX
343 CALL GMAIL(0,0)
344 1210 FORMAT (' GSDVT2 : NDIV gt NDVMX', 2I8,' truncated')
345 NDIV = NDVMX
346 ENDIF
347 ELSE IF (NDVMX.LT.0) THEN
348* Case when called by GSDVX
349 IF (NDIV.GT.-NDVMX) NDIV = -NDVMX
350 ENDIF
351 Q(JDIV+4)=C0
352 Q(JDIV+5)=STEP
353 Q(JDIV+3)=NDIV
354 NVOLUM=NVOLUM+1
355 NVOL =IQ(JVOLUM-2)
356 IF(NVOLUM.GT.NVOL)CALL MZPUSH(IXCONS,JVOLUM,50,50,'I')
357 CALL MZBOOK(IXCONS,JVO,JVOLUM,-NVOLUM,'VOL1',50,50,NW,3,0)
358 IF(IEOTRI.NE.0)GO TO 95
359 IQ(JVOLUM+NVOLUM)=NAME
360C
361C COPY PARAMETERS IN DATA AREA
362C
363 JVOM=LQ(JVOLUM-IVOM)
364 CALL UCOPY(Q(JVOM+1),Q(JVO+1),NWM)
365 CALL GSIPAR(JVO,0,NPAR,NATT,PAR,ATT)
366 Q(JVO+2)=ISH
367 Q(JVO+3)=0.
368 IF (NUMED.GT.0) Q(JVO+4)=NUMED
369 GO TO 99
370C
371 900 CONTINUE
372C
373C DIVIDE ACTION NOT SUPPORTED.
374C
375 WRITE(CHMAIL,8000)
376 CALL GMAIL(0,0)
377 WRITE(CHMAIL,8001) ISH,IAXIS
378 CALL GMAIL(0,0)
379C
380 GO TO 99
381C
382 910 CONTINUE
383C
384C C0 START OF DIVISION OUT OF OBJECT OR STEP SIZE TOO BIG.
385C
386 WRITE(CHMAIL,9000) C0,STEP
387 CALL GMAIL(0,0)
388C
389 GO TO 99
390 920 CONTINUE
391C
392C +VE DEFINITE PARAMETER IN DIMENSION OF C0 SET -VE OR 0.
393C
394 WRITE(CHMAIL,9010)
395 CALL GMAIL(0,0)
396C
397 GO TO 99
398C
399C NOT ENOUGH SPACE
400C
401 95 WRITE(CHMAIL,7000)NAME,MOTHER
402 CALL GMAIL(0,0)
403C
404 99 CONTINUE
405 1000 FORMAT(' ***** GSDVT2 CALLED AND NO VOLUMES DEFINED *****')
406 2000 FORMAT(' ***** GSDVT2 VOLUME ',A4,' ALREADY EXISTS *****')
407 3000 FORMAT(' ***** GSDVT2 ROTATION MATRIX',I5,' DOES NOT EXIST *****')
408 4000 FORMAT(' ***** GSDVT2 MOTHER ',A4,' ALREADY DIVIDED *****')
409 5000 FORMAT(' ***** GSDVT2 BAD AXIS VALUE ',I5,' *****')
410 6000 FORMAT(' ***** GSDVT2 BAD STEP SIZE ',E15.5,' *****')
411 7000 FORMAT(' ***** GSDVT2 NOT ENOUGH SPACE TO STORE DIVISIONS ',
412 + ' IN ',A4,' *****')
413 8000 FORMAT(' DIVIDE ACTION WITH C0 REQUESTED NOT SUPPORTED',
414 +' AT PRESENT.')
415 8001 FORMAT(' ISH =',I5,' IAXIS =',I5)
416 9000 FORMAT(' ***** GSDVT2 C0',E15.5,' OUT OF OBJECT',
417 +' OR STEP',E15.5,' TOO BIG *****')
418 9010 FORMAT(' ATTEMPT TO SPECIFY C0 WHEN APPROPRIATE DIMENSION',
419 +' OF THE MOTHER IS DEFINED -VE (TO BE SELECTED AT RUN TIME)')
420 END