]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1995/10/24 10:20:50 cernlib | |
6 | * Geant | |
7 | * | |
8 | * | |
9 | #include "geant321/pilot.h" | |
10 | *CMZ : 3.21/02 29/03/94 15.41.29 by S.Giani | |
11 | *-- Author : | |
12 | SUBROUTINE GINME(X,SH,P,IYES) | |
13 | C. | |
14 | C. | |
15 | C. ****************************************************************** | |
16 | 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. * | |
20 | C. * * | |
21 | C. * ==>Called by : GFTRAC, GINVOL, GMEDIA, GMEPOS, GSTRAC, * | |
22 | C. * GTMEDI * | |
23 | C. * Author A.McPherson ********* * | |
24 | C. * * | |
25 | C. ****************************************************************** | |
26 | 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" | |
32 | #endif | |
33 | DIMENSION X(3),P(*) | |
34 | C. | |
35 | C. ------------------------------------------------------------------ | |
36 | C. | |
37 | IYES=0 | |
38 | ISH=SH | |
39 | * | |
40 | IF(ISH.EQ.5) THEN | |
41 | * | |
42 | * Tube axis = Z axis | |
43 | IF (ABS(X(3)).GT.P(3)) GO TO 999 | |
44 | R2=X(1)**2+X(2)**2 | |
45 | IF(R2.LT.P(1)**2) GO TO 999 | |
46 | IF(R2.GT.P(2)**2) GO TO 999 | |
47 | IYES=1 | |
48 | * | |
49 | ELSEIF(ISH.EQ.6) THEN | |
50 | * | |
51 | * Tube segment | |
52 | IF (ABS(X(3)).GT.P(3)) GO TO 999 | |
53 | R2=X(1)**2+X(2)**2 | |
54 | IF(R2.LT.P(1)**2) GO TO 999 | |
55 | IF(R2.GT.P(2)**2) GO TO 999 | |
56 | IYES=1 | |
57 | IF (R2.LT.1.0E - 6) GO TO 999 | |
58 | IYES=0 | |
59 | PHI = ATAN2(X(2),X(1)) * RADDEG | |
60 | DP=P(5)-P(4) | |
61 | IF(DP.LE.0.0) DP=DP+360.0 | |
62 | DDP=PHI-P(4) | |
63 | SG = SIGN(1.0,DDP) | |
64 | DDP = MOD( ABS(DDP), 360. ) | |
65 | IF(SG.LE.0.) DDP = 360.-DDP | |
66 | IF(DDP.GT.DP) GO TO 999 | |
67 | IYES=1 | |
68 | * | |
69 | ELSEIF(ISH.EQ.1) THEN | |
70 | * | |
71 | * Rectilinear box | |
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 | |
75 | IYES=1 | |
76 | * | |
77 | ELSEIF(ISH.EQ.2) THEN | |
78 | * | |
79 | * Rectilinear trapezoidal section with only the X | |
80 | * thickness changing with z | |
81 | DZ =P(4) | |
82 | IF (ABS(X(3)).GT.DZ) GO TO 999 | |
83 | DY = P(3) | |
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 | |
87 | IYES=1 | |
88 | * | |
89 | ELSEIF(ISH.EQ.3) THEN | |
90 | * | |
91 | * Rectilinear trapezoidal section with both X and Y | |
92 | * thicknesses varying with Z | |
93 | DZ =P(5) | |
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 | |
99 | IYES=1 | |
100 | * | |
101 | ELSEIF(ISH.EQ.9) THEN | |
102 | * | |
103 | * Spherical segment | |
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 | |
106 | IYES=1 | |
107 | IF (R2.LT.1.0E -12) GO TO 999 | |
108 | IYES=0 | |
109 | IF (X(1).EQ.0..AND.X(2).EQ.0.) THEN | |
110 | PHI = 0. | |
111 | ELSE | |
112 | PHI = ATAN2(X(2),X(1))*RADDEG | |
113 | ENDIF | |
114 | DP=P(6)-P(5) | |
115 | IF(DP.LE.0.0) DP=DP+360.0 | |
116 | DDP=PHI-P(5) | |
117 | SG = SIGN(1.0,DDP) | |
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 | |
125 | IYES=1 | |
126 | * | |
127 | ELSEIF(ISH.EQ.4) THEN | |
128 | * | |
129 | * General trapezoidal section | |
130 | CALL GINTRP(X,P,IYES) | |
131 | * | |
132 | ELSEIF(ISH.EQ.7) THEN | |
133 | * | |
134 | * Conical tube | |
135 | DZ =P(1) | |
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 | |
141 | IYES=1 | |
142 | * | |
143 | ELSEIF(ISH.EQ.8) THEN | |
144 | * | |
145 | * Conical tube segment | |
146 | DZ =P(1) | |
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 | |
152 | IYES=1 | |
153 | IF (R2.LT.1.0E - 6) GO TO 999 | |
154 | IYES=0 | |
155 | PHI = ATAN2(X(2),X(1)) * RADDEG | |
156 | DP=P(7)-P(6) | |
157 | IF(DP.LE.0.0) DP=DP+360.0 | |
158 | DDP=PHI-P(6) | |
159 | SG = SIGN(1.0,DDP) | |
160 | DDP = MOD( ABS(DDP), 360. ) | |
161 | IF(SG.LE.0.) DDP = 360.-DDP | |
162 | IF(DDP.GT.DP) GO TO 999 | |
163 | IYES=1 | |
164 | * | |
165 | ELSEIF(ISH.EQ.10) THEN | |
166 | * | |
167 | * Parallelepiped | |
168 | CALL GINPAR(X,P,IYES) | |
169 | * | |
170 | ELSEIF(ISH.EQ.11) THEN | |
171 | * | |
172 | * Polygon | |
173 | CALL GINPGO(X,P,IYES) | |
174 | * | |
175 | ELSEIF(ISH.EQ.12) THEN | |
176 | * | |
177 | * Polycone | |
178 | CALL GINPCO(X,P,IYES) | |
179 | * | |
180 | ELSEIF (ISH.EQ.13) THEN | |
181 | * | |
182 | * Elliptical tube | |
183 | IF (ABS(X(3)).GT.P(3)) GOTO 999 | |
184 | A2=P(1)**2 | |
185 | B2=P(2)**2 | |
186 | R2=X(1)**2/A2+X(2)**2/B2 | |
187 | IF (R2.GT.1.0) GOTO 999 | |
188 | IYES=1 | |
189 | * | |
190 | ELSEIF(ISH.EQ.14) THEN | |
191 | * | |
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 | |
198 | IYES=1 | |
199 | * | |
200 | ELSEIF(ISH.EQ.28) THEN | |
201 | * | |
202 | * General twisted trapezoid. | |
203 | CALL GINGTR(X,P,IYES) | |
204 | * | |
205 | ELSEIF( ISH.EQ.NSCTUB) THEN | |
206 | * | |
207 | * Cut tube. | |
208 | CALL GINCTU(X,P,IYES) | |
209 | * | |
210 | ELSE | |
211 | * | |
212 | * User shape ? | |
213 | #if !defined(CERNLIB_USRJMP) | |
214 | CALL GUINME(X,SH,P,IYES) | |
215 | #endif | |
216 | #if defined(CERNLIB_USRJMP) | |
217 | CALL JUMPT4(JUINME,X,SH,P,IYES) | |
218 | #endif | |
219 | * | |
220 | IF(IYES.LT.0) THEN | |
221 | * | |
222 | * Shape number not supported by system nor by user | |
223 | WRITE(CHMAIL,10000) ISH | |
224 | CALL GMAIL(0,0) | |
225 | ENDIF | |
226 | ENDIF | |
227 | * | |
228 | 10000 FORMAT(' *** GINME *** Shape number ',I5,' not yet implemented') | |
229 | 999 END |