5 * Revision 1.1.1.1 1995/10/24 10:20:50 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.29 by S.Giani
12 SUBROUTINE GINME(X,SH,P,IYES)
15 C. ******************************************************************
17 C. * SUBROUTINE TO COMPUTE WHETHER THE POINT X IS IN THE SHAPE *
18 C. * NUMBER SH WITH PARAMETERS P. *
19 C. * IYES IS SET TO 1 IF SO; TO ZERO IF NOT. *
21 C. * ==>Called by : GFTRAC, GINVOL, GMEDIA, GMEPOS, GSTRAC, *
23 C. * Author A.McPherson ********* *
25 C. ******************************************************************
27 #include "geant321/gcunit.inc"
28 #include "geant321/gconsp.inc"
29 #include "geant321/gcshno.inc"
30 #if defined(CERNLIB_USRJMP)
31 #include "geant321/gcjump.inc"
35 C. ------------------------------------------------------------------
43 IF (ABS(X(3)).GT.P(3)) GO TO 999
45 IF(R2.LT.P(1)**2) GO TO 999
46 IF(R2.GT.P(2)**2) GO TO 999
52 IF (ABS(X(3)).GT.P(3)) GO TO 999
54 IF(R2.LT.P(1)**2) GO TO 999
55 IF(R2.GT.P(2)**2) GO TO 999
57 IF (R2.LT.1.0E - 6) GO TO 999
59 PHI = ATAN2(X(2),X(1)) * RADDEG
61 IF(DP.LE.0.0) DP=DP+360.0
64 DDP = MOD( ABS(DDP), 360. )
65 IF(SG.LE.0.) DDP = 360.-DDP
66 IF(DDP.GT.DP) GO TO 999
72 IF (ABS(X(1)).GT.P(1)) GO TO 999
73 IF (ABS(X(2)).GT.P(2)) GO TO 999
74 IF (ABS(X(3)).GT.P(3)) GO TO 999
79 * Rectilinear trapezoidal section with only the X
80 * thickness changing with z
82 IF (ABS(X(3)).GT.DZ) GO TO 999
84 IF (ABS(X(2)).GT.DY) GO TO 999
85 DX =0.5*(P(2)*(X(3)+DZ)+P(1)*(DZ-X(3)))/DZ
86 IF (ABS(X(1)).GT.DX) GO TO 999
91 * Rectilinear trapezoidal section with both X and Y
92 * thicknesses varying with Z
94 IF (ABS(X(3)).GT.DZ) GO TO 999
95 DX =0.5*(P(2)*(X(3)+DZ)+P(1)*(DZ-X(3)))/DZ
96 IF (ABS(X(1)).GT.DX) GO TO 999
97 DY = 0.5*(P(4)*(X(3)+DZ)+P(3)*(DZ-X(3)))/DZ
98 IF (ABS(X(2)).GT.DY) GO TO 999
101 ELSEIF(ISH.EQ.9) THEN
104 R2 = X(1)**2 + X(2)**2 + X(3)**2
105 IF (R2.LT.P(1)**2.OR.R2.GT.P(2)**2) GO TO 999
107 IF (R2.LT.1.0E -12) GO TO 999
109 IF (X(1).EQ.0..AND.X(2).EQ.0.) THEN
112 PHI = ATAN2(X(2),X(1))*RADDEG
115 IF(DP.LE.0.0) DP=DP+360.0
118 DDP = MOD( ABS(DDP), 360. )
119 IF(SG.LE.0.) DDP = 360.-DDP
120 IF(DDP.GT.DP) GO TO 999
121 R2 = X(1)**2 + X(2)**2
122 IF(R2.GT.0.0) R2=SQRT(R2)
123 THETA = ATAN2(R2,X(3)) * RADDEG
124 IF (THETA.LT.P(3).OR.THETA.GT.P(4)) GO TO 999
127 ELSEIF(ISH.EQ.4) THEN
129 * General trapezoidal section
130 CALL GINTRP(X,P,IYES)
132 ELSEIF(ISH.EQ.7) THEN
136 IF (ABS(X(3)).GT.DZ) GO TO 999
137 R2 =X(1)**2 + X(2)**2
138 RL = 0.5*(P(4)*(X(3)+DZ)+P(2)*(DZ-X(3)))/DZ
139 RH = 0.5*(P(5)*(X(3)+DZ)+P(3)*(DZ-X(3)))/DZ
140 IF (R2.LT.RL**2.OR.R2.GT.RH**2) GO TO 999
143 ELSEIF(ISH.EQ.8) THEN
145 * Conical tube segment
147 IF (ABS(X(3)).GT.DZ) GO TO 999
148 R2 =X(1)**2 + X(2)**2
149 RL = 0.5*(P(4)*(X(3)+DZ)+P(2)*(DZ-X(3)))/DZ
150 RH = 0.5*(P(5)*(X(3)+DZ)+P(3)*(DZ-X(3)))/DZ
151 IF (R2.LT.RL**2.OR.R2.GT.RH**2) GO TO 999
153 IF (R2.LT.1.0E - 6) GO TO 999
155 PHI = ATAN2(X(2),X(1)) * RADDEG
157 IF(DP.LE.0.0) DP=DP+360.0
160 DDP = MOD( ABS(DDP), 360. )
161 IF(SG.LE.0.) DDP = 360.-DDP
162 IF(DDP.GT.DP) GO TO 999
165 ELSEIF(ISH.EQ.10) THEN
168 CALL GINPAR(X,P,IYES)
170 ELSEIF(ISH.EQ.11) THEN
173 CALL GINPGO(X,P,IYES)
175 ELSEIF(ISH.EQ.12) THEN
178 CALL GINPCO(X,P,IYES)
180 ELSEIF (ISH.EQ.13) THEN
183 IF (ABS(X(3)).GT.P(3)) GOTO 999
186 R2=X(1)**2/A2+X(2)**2/B2
187 IF (R2.GT.1.0) GOTO 999
190 ELSEIF(ISH.EQ.14) THEN
192 * HYPErboloid axis = Z axis.
193 IF (ABS(X(3)) .GT. P(3)) GO TO 999
194 R2 = X(1)**2 + X(2)**2
195 DR2 = (X(3) * TAN(P(4)*DEGRAD))**2
196 IF (R2 .LT. P(1)**2 + DR2) GO TO 999
197 IF (R2 .GT. P(2)**2 + DR2) GO TO 999
200 ELSEIF(ISH.EQ.28) THEN
202 * General twisted trapezoid.
203 CALL GINGTR(X,P,IYES)
205 ELSEIF( ISH.EQ.NSCTUB) THEN
208 CALL GINCTU(X,P,IYES)
213 #if !defined(CERNLIB_USRJMP)
214 CALL GUINME(X,SH,P,IYES)
216 #if defined(CERNLIB_USRJMP)
217 CALL JUMPT4(JUINME,X,SH,P,IYES)
222 * Shape number not supported by system nor by user
223 WRITE(CHMAIL,10000) ISH
228 10000 FORMAT(' *** GINME *** Shape number ',I5,' not yet implemented')