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 GINPCO(X,P,IYES)
14 C. ******************************************************************
16 C. * ROUTINE TO PERFORM GINME FUNCTION FOR A POLYCONE. *
17 C. * X - A VECTOR DIMENSION 3 GIVING THE POINT. *
18 C. * P - THE VECTOR OF PARAMETERS, (1) = PHIMIN, *
19 C. * (2) = DPHI, (3) = NZ, (4) = Z(1), *
20 C. * (5) = RMIN(1), (6) = RMAX(1), (7) = Z(2), *
21 C. * (8) = RMIN(2), (9) = RMAX(2), ETC. *
22 C. * IYES - RETURNED AS 1 IF POINT IS INSIDE, OTHERWISE 0. *
24 C. * ==>Called by : GINME *
25 C. * Author A.McPherson ********* *
27 C. ******************************************************************
29 #include "geant321/gconsp.inc"
30 #include "geant321/gcpoly.inc"
33 C. ---------------------------------
37 C FIRST CHECK TOTAL Z RANGE.
40 IF(X(3).LT.P(4).OR.X(3).GT.P(NZ*3+1)) GO TO 999
42 C NOW CHECK R(SQUARED). FIRST COMPUTE IT.
44 R2=X(1)*X(1)+X(2)*X(2)
46 C NOW FIND WHICH Z SECTION THE POINT IS IN.
56 IF(IZH-IZL.LE.1) GO TO 40
58 IF(X(3).GT.P(IPT)) GO TO 20
79 C THE POINT IS IN THE SECTION BOUNDED BY THE IZL TH AND THE
82 C NOW COMPUTE RMIN AND RMAX AND TEST THE VALUE OF R SQUARED.
85 IF (P(IPL+2).EQ.0..AND.P(IPH+2).EQ.0.) GO TO 999
87 IF ( (P(IPH).EQ.P(IPL)) .AND. (X(3).EQ.P(IPL)) ) THEN
88 RMN = MAX( P(IPL+1), P(IPH+1) )
89 RMX = MIN( P(IPL+2), P(IPH+2) )
93 RMN=(P(IPL+1)*(DZ-DZ1)+P(IPH+1)*DZ1)/DZ
94 RMX=(P(IPL+2)*(DZ-DZ1)+P(IPH+2)*DZ1)/DZ
97 IF(R2.LT.RMN*RMN.OR.R2.GT.RMX*RMX) GO TO 999
102 IF(X(2).NE.0.0.OR.X(1).NE.0) PHI=ATAN2(X(2),X(1))*RADDEG
103 IF(PHI.LT.P(1)) PHI=PHI+360.0
104 IF(PHI.LT.P(1).OR.PHI-P(1).GT.P(2)) GO TO 999
106 C POINT IS IN POLYCONE.