5 * Revision 1.1.1.1 1995/10/24 10:20:49 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.28 by S.Giani
12 SUBROUTINE GGDSPE (JVO, NPAR, PAR, NL, NDIV, ORIG, STEP)
14 C. ******************************************************************
16 C. * SUBR. GGDSPE (JVO,NPAR,PAR,NL*,NDIV*,ORIG*,STEP*) *
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 *
23 C. * Called by : GGDVLP *
24 C. * Author : S.Banerjee *
25 C. * (Original algorithms of A.McPherson) *
27 C. ******************************************************************
29 #include "geant321/gcbank.inc"
30 #include "geant321/gcflag.inc"
31 #include "geant321/gcunit.inc"
40 DATA IDTYP / 1, 1, 1, 1, 2, 2, 3, 3, 4, 1, 6, 6/
42 C. ------------------------------------------------------------------
44 * *** Get the division parameters from JVOLUM structure and check if
45 * these have to be developed
57 CALL UCOPY (Q(JVO+7), PARM, NPARM)
60 CALL VFILL (PARM, NPARM, -1.0)
63 * *** Find the actual division parameters
67 * BOX, TRD1, TRD2, TRAP, PARA
71 ELSE IF (ISHM.EQ.10) THEN
74 IPAR = IAXIS + ISHM - 1
76 IF (PARM(IPAR).LT.0.0) ORIG = -PAR(IPAR)
78 STEP = (PAR(IPAR) - ORIG) / NDIV
79 ELSE IF (NDIV.LE.0) THEN
80 NDIV = (PAR(IPAR) - ORIG + 0.001) / STEP
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
89 ELSE IF (IDTY.EQ.4) THEN
93 IF (IAXIS.EQ.1.OR.IAXIS.EQ.2) THEN
96 IF (PARM(IAX1).LT.0.0) ORIG = PAR(IAX1)
98 STEP = (PAR(IAX2) - ORIG) / NDIV
99 ELSE IF (NDIV.LE.0) THEN
100 NDIV = (PAR(IAX2) - ORIG + 0.001) / STEP
102 IF (PARM(IAX1).LT.0.0) ORIG = 0.5*(ORIG+PAR(IAX2)-STEP*NDIV)
105 IF (STEP.LE.0.0.OR.NDIV.LE.0) THEN
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
114 IF (DP.LT.0.0) DP = DP + 360.0
116 NDIV = (DP + 0.001) /STEP
117 IF (NDIV.LE.0) GO TO 920
125 ELSE IF (IDTY.EQ.2.OR.IDTY.EQ.3.OR.IDTY.EQ.6) THEN
127 * TUBE, TUBS, CONE, CONS, PGON, PCON
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
142 IF (PARM(IPAR).LT.0.0) ORIG = -0.5 * STEP * NDIV
154 IF (NDIV.LE.0.OR.STEP.LE.0.0.OR.NZ.GT.0) GO TO 930
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
164 ELSE IF (ISHM.EQ.6.OR.ISHM.EQ.8) THEN
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
177 IF (DP.LT.0.0) DP = DP + 360.0
179 NDIV = (DP + 0.001) / STEP
180 IF (NDIV.LE.0) GO TO 920
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
202 IF (PARM(IAX1).LT.0.0)
203 + ORIG = ORIG + 0.5 * (PAR(IAX2)-ORIG-STEP*NDIV)
206 IF (STEP.LE.0.0.OR.NDIV.LE.0) THEN
223 900 WRITE (CHMAIL, 1001) ISHM, IAXIS
226 910 WRITE (CHMAIL, 1002) ISHM, IAXIS, PMIN, DP, ORIG
229 920 WRITE (CHMAIL, 1003) ISHM, IAXIS, NDIV, DP, STEP
232 930 WRITE (CHMAIL, 1004) ISHM, IAXIS, NDIV, NZ, STEP
234 990 CALL GMAIL (0, 0)
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)