]> git.uio.no Git - u/mrichter/AliRoot.git/blob - GEANT321/ggeom/ginme.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / ggeom / ginme.F
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