]>
Commit | Line | Data |
---|---|---|
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) | |
13 | C. | |
14 | C. ****************************************************************** | |
15 | C. * * | |
16 | C. * SUBR. GGDSPE (JVO,NPAR,PAR,NL*,NDIV*,ORIG*,STEP*) * | |
17 | C. * * | |
18 | C. * Computes the actual division parameters of the mother volume * | |
19 | C. * at address JVO with actual parameters in NPAR, PAR * | |
20 | C. * Returns the division parameters NDIV, ORIG, STEP and the * | |
21 | C. * number of different division cells NL * | |
22 | C. * * | |
23 | C. * Called by : GGDVLP * | |
24 | C. * Author : S.Banerjee * | |
25 | C. * (Original algorithms of A.McPherson) * | |
26 | C. * * | |
27 | C. ****************************************************************** | |
28 | C. | |
29 | #include "geant321/gcbank.inc" | |
30 | #include "geant321/gcflag.inc" | |
31 | #include "geant321/gcunit.inc" | |
32 | C. | |
33 | PARAMETER (NPAMAX=50) | |
34 | C. | |
35 | DIMENSION PAR(*) | |
36 | C. | |
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/ | |
41 | C. | |
42 | C. ------------------------------------------------------------------ | |
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 |