]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/ggeom/ggdspe.F
Allow any Cherenkov-like particle to be transported
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / ggdspe.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:20:49 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.28 by S.Giani
11*-- Author :
12 SUBROUTINE GGDSPE (JVO, NPAR, PAR, NL, NDIV, ORIG, STEP)
13C.
14C. ******************************************************************
15C. * *
16C. * SUBR. GGDSPE (JVO,NPAR,PAR,NL*,NDIV*,ORIG*,STEP*) *
17C. * *
18C. * Computes the actual division parameters of the mother volume *
19C. * at address JVO with actual parameters in NPAR, PAR *
20C. * Returns the division parameters NDIV, ORIG, STEP and the *
21C. * number of different division cells NL *
22C. * *
23C. * Called by : GGDVLP *
24C. * Author : S.Banerjee *
25C. * (Original algorithms of A.McPherson) *
26C. * *
27C. ******************************************************************
28C.
29#include "geant321/gcbank.inc"
30#include "geant321/gcflag.inc"
31#include "geant321/gcunit.inc"
32C.
33 PARAMETER (NPAMAX=50)
34C.
35 DIMENSION PAR(*)
36C.
37 REAL PARM(NPAMAX)
38 INTEGER IDTYP(12)
39 SAVE IDTYP
40 DATA IDTYP / 1, 1, 1, 1, 2, 2, 3, 3, 4, 1, 6, 6/
41C.
42C. ------------------------------------------------------------------
43*
44* *** Get the division parameters from JVOLUM structure and check if
45* these have to be developed
46*
47 JIN = LQ(JVO-1)
48 IAXIS = Q(JIN+1)
49 NDIV = Q(JIN+3)
50 ORIG = Q(JIN+4)
51 STEP = Q(JIN+5)
52*
53 ISHM = Q(JVO+2)
54 IDTY = IDTYP(ISHM)
55 NPARM = Q(JVO+5)
56 IF (NPARM.GT.0) THEN
57 CALL UCOPY (Q(JVO+7), PARM, NPARM)
58 ELSE
59 NPARM = NPAR
60 CALL VFILL (PARM, NPARM, -1.0)
61 ENDIF
62*
63* *** Find the actual division parameters
64*
65 IF (IDTY.EQ.1) THEN
66*
67* BOX, TRD1, TRD2, TRAP, PARA
68*
69 IF (ISHM.EQ.4) THEN
70 IPAR = 1
71 ELSE IF (ISHM.EQ.10) THEN
72 IPAR = IAXIS
73 ELSE
74 IPAR = IAXIS + ISHM - 1
75 ENDIF
76 IF (PARM(IPAR).LT.0.0) ORIG = -PAR(IPAR)
77 IF (STEP.LE.0.0) THEN
78 STEP = (PAR(IPAR) - ORIG) / NDIV
79 ELSE IF (NDIV.LE.0) THEN
80 NDIV = (PAR(IPAR) - ORIG + 0.001) / STEP
81 ENDIF
82 IF (PARM(IPAR).LT.0.0) ORIG = -0.5 * STEP * NDIV
83 IF (ISHM.EQ.1.OR.ISHM.EQ.10.OR.(ISHM.EQ.2.AND.IAXIS.EQ.2)) THEN
84 NL = 1
85 ELSE
86 NL = NDIV
87 ENDIF
88*
89 ELSE IF (IDTY.EQ.4) THEN
90*
91* SPHE
92*
93 IF (IAXIS.EQ.1.OR.IAXIS.EQ.2) THEN
94 IAX1 = 2*IAXIS - 1
95 IAX2 = IAX1 + 1
96 IF (PARM(IAX1).LT.0.0) ORIG = PAR(IAX1)
97 IF (STEP.LE.0.0) THEN
98 STEP = (PAR(IAX2) - ORIG) / NDIV
99 ELSE IF (NDIV.LE.0) THEN
100 NDIV = (PAR(IAX2) - ORIG + 0.001) / STEP
101 ENDIF
102 IF (PARM(IAX1).LT.0.0) ORIG = 0.5*(ORIG+PAR(IAX2)-STEP*NDIV)
103 NL = NDIV
104 ELSE
105 IF (STEP.LE.0.0.OR.NDIV.LE.0) THEN
106 DP = PAR(6) - PAR(5)
107 IF (DP.LT.0.0) DP = DP + 360.0
108 IF (ORIG.LT.PAR(5)) ORIG = ORIG + 360.0
109 IF (ORIG-PAR(5).GT.DP) THEN
110 PMIN = PAR(5)
111 GO TO 910
112 ENDIF
113 DP = PAR(6) - ORIG
114 IF (DP.LT.0.0) DP = DP + 360.0
115 IF (NDIV.LE.0) THEN
116 NDIV = (DP + 0.001) /STEP
117 IF (NDIV.LE.0) GO TO 920
118 ELSE
119 STEP = DP / NDIV
120 ENDIF
121 ENDIF
122 NL = 1
123 ENDIF
124*
125 ELSE IF (IDTY.EQ.2.OR.IDTY.EQ.3.OR.IDTY.EQ.6) THEN
126*
127* TUBE, TUBS, CONE, CONS, PGON, PCON
128*
129 IF (IAXIS.EQ.3) THEN
130 IF (IDTY.NE.6) THEN
131 IF (IDTY.EQ.2) THEN
132 IPAR = 3
133 ELSE
134 IPAR = 1
135 ENDIF
136 IF (PARM(IPAR).LT.0.0) ORIG = -PAR(IPAR)
137 IF (STEP.LE.0.0) THEN
138 STEP = (PAR(IPAR) - ORIG) / NDIV
139 ELSE IF (NDIV.LE.0) THEN
140 NDIV = (PAR(IPAR) - ORIG + 0.001) / STEP
141 ENDIF
142 IF (PARM(IPAR).LT.0.0) ORIG = -0.5 * STEP * NDIV
143 IF (IDTY.EQ.2) THEN
144 NL = 1
145 ELSE
146 NL = NDIV
147 ENDIF
148 ELSE
149 IF (ISHM.EQ.11) THEN
150 NZ = PAR(4)
151 ELSE
152 NZ = PAR(3)
153 ENDIF
154 IF (NDIV.LE.0.OR.STEP.LE.0.0.OR.NZ.GT.0) GO TO 930
155 NL = NDIV
156 ENDIF
157*
158 ELSE IF (IAXIS.EQ.2) THEN
159 IF (STEP.LE.0.0.OR.NDIV.LE.0) THEN
160 IF (ISHM.EQ.5.OR.ISHM.EQ.7) THEN
161 PMIN = ORIG
162 PMAX = ORIG + 360.0
163 DP = 360.0
164 ELSE IF (ISHM.EQ.6.OR.ISHM.EQ.8) THEN
165 PMIN = PAR(NPAR-1)
166 PMAX = PAR(NPAR)
167 DP = PMAX - PMIN
168 ELSE
169 PMIN = PAR(1)
170 DP = PAR(2)
171 PMAX = PMIN + DP
172 ENDIF
173 IF (DP.LT.0.0) DP = DP + 360.0
174 IF (ORIG.LT.PMIN) ORIG = ORIG + 360.0
175 IF (ORIG-PMIN.GT.DP) GO TO 910
176 DP = PMAX - ORIG
177 IF (DP.LT.0.0) DP = DP + 360.0
178 IF (NDIV.LE.0) THEN
179 NDIV = (DP + 0.001) / STEP
180 IF (NDIV.LE.0) GO TO 920
181 ELSE
182 STEP = DP / NDIV
183 ENDIF
184 ENDIF
185 NL = 1
186*
187 ELSE
188 IF (IDTY.NE.6) THEN
189 IF (IDTY.EQ.2) THEN
190 IAX1 = 1
191 IAX2 = 2
192 ELSE
193 IAX1 = 2
194 IAX2 = 3
195 ENDIF
196 IF (PARM(IAX1).LT.0.0) ORIG = PAR(IAX1)
197 IF (STEP.LE.0.0) THEN
198 STEP = (PAR(IAX2) - ORIG) / NDIV
199 ELSE IF (NDIV.LE.0) THEN
200 NDIV = (PAR(IAX2) - ORIG + 0.001) / STEP
201 ENDIF
202 IF (PARM(IAX1).LT.0.0)
203 + ORIG = ORIG + 0.5 * (PAR(IAX2)-ORIG-STEP*NDIV)
204 NL = NDIV
205 ELSE
206 IF (STEP.LE.0.0.OR.NDIV.LE.0) THEN
207 IF (ISHM.EQ.11) THEN
208 NZ = PAR(4)
209 ELSE
210 NZ = PAR(3)
211 ENDIF
212 GO TO 930
213 ENDIF
214 NL = NDIV
215 ENDIF
216 ENDIF
217*
218 ELSE
219 GO TO 900
220 ENDIF
221 GO TO 999
222*
223 900 WRITE (CHMAIL, 1001) ISHM, IAXIS
224 GO TO 990
225*
226 910 WRITE (CHMAIL, 1002) ISHM, IAXIS, PMIN, DP, ORIG
227 GO TO 990
228*
229 920 WRITE (CHMAIL, 1003) ISHM, IAXIS, NDIV, DP, STEP
230 GO TO 990
231*
232 930 WRITE (CHMAIL, 1004) ISHM, IAXIS, NDIV, NZ, STEP
233*
234 990 CALL GMAIL (0, 0)
235 IEORUN = 1
236*
237 1001 FORMAT (' GGDSPE : Invalid call ISHM,IAXIS=',2I5)
238 1002 FORMAT (' GGDSPE : Error ISHM,IAXIS,PMIN,DP,ORIG=',2I5,3G12.4)
239 1003 FORMAT (' GGDSPE : Error ISHM,IAXIS,NDIV,DP,STEP=',3I5,2G12.4)
240 1004 FORMAT (' GGDSPE : Error ISHM,IAXIS,NDIV,NZ,STEP=',4I5,G12.4)
241* END GGDSPE
242 999 END