]>
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 GINPGO(X,P,IYES) | |
13 | C. | |
14 | C. ****************************************************************** | |
15 | C. * * | |
16 | C. * ROUTINE TO PERFORM GINME FUNCTION FOR A POLYGON. * | |
17 | C. * X - A VECTOR DIMENSION 3 GIVING THE POINT. * | |
18 | C. * P - THE VECTOR OF PARAMETERS, (1) = PHIMIN, * | |
19 | C. * (2) = DPHI, (3) = NDIV, (4) = NZ, (5) = Z(1) * | |
20 | C. * (6) = RMIN(1), (7) = RMAX(1), (8) = Z(2), * | |
21 | C. * (9) = RMIN(2), (10) = RMAX(2), ETC. * | |
22 | C. * RMIN IS THE DISTANCE FROM THE ORIGIN TO THE * | |
23 | C. * INSIDE EDGE PROJECTED ALONG THE CENTRE LINE * | |
24 | C. * OF THE DIVISION. RMAX IS THE CORRESPONDING * | |
25 | C. * PROJECTED DISTANCE FOR THE OUTER EDGE. * | |
26 | C. * IYES - RETURNED AS 1 IF POINT IS INSIDE, OTHERWISE 0. * | |
27 | C. * * | |
28 | C. * ==>Called by : GINME * | |
29 | C. * Author A.McPherson ********* * | |
30 | C. * * | |
31 | C. ****************************************************************** | |
32 | C. | |
33 | #include "geant321/gconsp.inc" | |
34 | #include "geant321/gcpoly.inc" | |
35 | #if !defined(CERNLIB_SINGLE) | |
36 | DOUBLE PRECISION XX1,XX2,PHI,DELPHI,PH0,R,DZRAT,DIVPHI | |
37 | DOUBLE PRECISION RMN,RMX,HNDIV | |
38 | #endif | |
39 | DIMENSION P(10),X(3) | |
40 | C. | |
41 | C. --------------------------------- | |
42 | C. | |
43 | IYES=0 | |
44 | C | |
45 | C FIRST CHECK TOTAL Z RANGE. | |
46 | C | |
47 | NZ=P(4) | |
48 | IF(X(3).LT.P(5).OR.X(3).GT.P(NZ*3+2)) GO TO 999 | |
49 | C | |
50 | C Find smallest RMIN and largest RMAX | |
51 | C | |
52 | RMIN=P(6) | |
53 | RMAX=P(7) | |
54 | DO 10 I=2,NZ | |
55 | IP=I*3+3 | |
56 | IF(P(IP).LT.RMIN)RMIN=P(IP) | |
57 | IF(P(IP+1).GT.RMAX) RMAX=P(IP+1) | |
58 | 10 CONTINUE | |
59 | * | |
60 | * *** Check R against RMIN | |
61 | * | |
62 | XX1 = X(1) | |
63 | XX2 = X(2) | |
64 | R = SQRT(XX1**2+XX2**2) | |
65 | IF(R.LT.RMIN)GO TO 999 | |
66 | HNDIV=P(3) | |
67 | DELPHI=P(2) | |
68 | DIVPHI=DELPHI/HNDIV | |
69 | * | |
70 | * *** Find the radius of the outscribed circle | |
71 | * | |
72 | RMAX = RMAX/COS(0.5*DIVPHI*DEGRAD) | |
73 | * | |
74 | * *** Check R against RMAX | |
75 | * | |
76 | IF(R.GT.RMAX)GO TO 999 | |
77 | C | |
78 | C If R sufficiently small ignore phi structure. | |
79 | C | |
80 | IPSEC=1 | |
81 | C | |
82 | IF(R.LT.1.0E-5) GO TO 20 | |
83 | C | |
84 | C NOW CHECK PHI. | |
85 | C | |
86 | PHI=ATAN2(XX2,XX1)*RADDEG | |
87 | IF(PHI.LT.P(1)) PHI=PHI+360.0 | |
88 | IF(PHI.LT.P(1).OR.PHI-P(1).GT.P(2)) GO TO 999 | |
89 | C | |
90 | C NOW FIND PHI DIVISION. | |
91 | C | |
92 | IPSEC=MIN((PHI-P(1))/DIVPHI+1.,HNDIV) | |
93 | C | |
94 | PH0=(P(1)+DIVPHI*(IPSEC-0.5))*DEGRAD | |
95 | C | |
96 | C NOW CHECK PROJECTED DISTANCE. FIRST COMPUTE IT. | |
97 | C | |
98 | R=XX1*COS(PH0)+XX2*SIN(PH0) | |
99 | C | |
100 | 20 CONTINUE | |
101 | C | |
102 | C NOW FIND WHICH Z SECTION THE POINT IS IN. | |
103 | C | |
104 | IZL=1 | |
105 | IZH=NZ | |
106 | IPL=IZL*3+2 | |
107 | IPH=IZH*3+2 | |
108 | C | |
109 | 30 IF(IZH-IZL.GT.1) THEN | |
110 | C | |
111 | IZT=(IZL+IZH)/2 | |
112 | IPT=IZT*3+2 | |
113 | IF(X(3).LE.P(IPT)) THEN | |
114 | C | |
115 | IZH=IZT | |
116 | IPH=IPT | |
117 | ELSE | |
118 | C | |
119 | IZL=IZT | |
120 | IPL=IPT | |
121 | ENDIF | |
122 | C | |
123 | GO TO 30 | |
124 | ENDIF | |
125 | C | |
126 | C THE POINT IS IN THE SECTION BOUNDED BY THE IZL TH AND THE | |
127 | C IZH TH Z VALUES. | |
128 | C | |
129 | C NOW COMPUTE RMIN AND RMAX AND TEST THE VALUE OF R . | |
130 | C | |
131 | IZSEC=IZL | |
132 | DZRAT=X(3)-P(IPL) | |
133 | DZRAT=DZRAT/(P(IPH)-P(IPL)) | |
134 | RMN=P(IPL+1)+DZRAT*(P(IPH+1)-P(IPL+1)) | |
135 | * | |
136 | * *** Is the point inside the 'hole' at the centre of the volume? | |
137 | * | |
138 | IF(R.LT.RMN) GO TO 999 | |
139 | * | |
140 | RMX=P(IPL+2)+DZRAT*(P(IPH+2)-P(IPL+2)) | |
141 | * | |
142 | * *** Is the point outside the volume? | |
143 | * | |
144 | IF(R.GT.RMX) GO TO 999 | |
145 | C | |
146 | C POINT IS IN POLYGON. | |
147 | C | |
148 | IYES=1 | |
149 | C | |
150 | 999 END |