5 * Revision 1.1.1.1 1995/10/24 10:19:44 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.32 by S.Giani
12 SUBROUTINE CGSLIC(A,SLIC,NMAX,B)
13 ************************************************************************
16 * Author: E. Chernyaev Date: 20.04.89 *
19 * Function: Make slice of CG-object *
21 * References: CGMNMX *
23 * Input: A(*) - CG-object *
24 * SLIC(4) - slicing plane *
25 * NMAX - max size of B-array *
27 * Output: B - resulting CG-object *
31 ************************************************************************
32 #include "geant321/cggpar.inc"
33 #include "geant321/cgdelt.inc"
34 PARAMETER (NWORK=LCGHEA+6*(LCGFAC+4*LCGEDG))
35 REAL A(*),B(*),SLIC(4),ABCD(4)
36 REAL RMN(3),RMX(3),RMID(3),W(NWORK),XYZ(3,8)
39 * T E S T P A R A M E T E R S C O R R E C T N E S S
40 IF (NMAX .LT. LCGHEA) GOTO 999
41 S = SQRT(SLIC(1)*SLIC(1)+SLIC(2)*SLIC(2)+SLIC(3)*SLIC(3))
42 IF (S .LE. EEWOR) GOTO 999
47 CALL CGSCOP(1,A,RMN,RMX)
48 * CALL CGMNMX(A,RMN,RMX)
49 IF (RMN(1) .GT. RMX(1)) GOTO 999
50 * M I N - M A X T E S T
52 IF (NFACE .EQ. 0) GOTO 998
60 DIST = ABCD(1)*A(J+KCGX1)+ABCD(2)*A(J+KCGY1)
61 + +ABCD(3)*A(J+KCGZ1) + ABCD(4)
62 IF (DIST .GT.-EEWOR) NPOS = NPOS + 1
63 IF (DIST .LT.+EEWOR) NNEG = NNEG + 1
67 IF (NPOS .EQ. 0) GOTO 998
68 IF (NNEG .EQ. 0) CALL CGCOPY(A,NMAX,B)
69 IF (NNEG .EQ. 0) GOTO 999
70 * P R E P A R E S L I C I N G O B J E C T
72 IF (ABS(ABCD(2)) .GT. ABS(ABCD(1))) K = 2
73 IF (ABS(ABCD(3)) .GT. ABS(ABCD(K))) K = 3
74 RMID(1) = (RMN(1)+RMX(1)) / 2.
75 RMID(2) = (RMN(2)+RMX(2)) / 2.
76 RMID(3) = (RMN(3)+RMX(3)) / 2.
82 210 XYZ(2,1) = RMID(2) + RY
83 XYZ(3,1) = RMID(3) + RZ
84 XYZ(2,2) = RMID(2) - RY
85 XYZ(3,2) = RMID(3) + RZ
86 XYZ(2,3) = RMID(2) - RY
87 XYZ(3,3) = RMID(3) - RZ
88 XYZ(2,4) = RMID(2) + RY
89 XYZ(3,4) = RMID(3) - RZ
91 XYZ(1,I) = -(ABCD(2)*XYZ(2,I)+ABCD(3)*XYZ(3,I)+ABCD(4))/ABCD(1)
95 220 XYZ(1,1) = RMID(1) + RX
96 XYZ(3,1) = RMID(3) + RZ
97 XYZ(1,2) = RMID(1) - RX
98 XYZ(3,2) = RMID(3) + RZ
99 XYZ(1,3) = RMID(1) - RX
100 XYZ(3,3) = RMID(3) - RZ
101 XYZ(1,4) = RMID(1) + RX
102 XYZ(3,4) = RMID(3) - RZ
104 XYZ(2,I) = -(ABCD(1)*XYZ(1,I)+ABCD(3)*XYZ(3,I)+ABCD(4))/ABCD(2)
108 230 XYZ(1,1) = RMID(1) + RX
109 XYZ(2,1) = RMID(2) + RY
110 XYZ(1,2) = RMID(1) - RX
111 XYZ(2,2) = RMID(2) + RY
112 XYZ(1,3) = RMID(1) - RX
113 XYZ(2,3) = RMID(2) - RY
114 XYZ(1,4) = RMID(1) + RX
115 XYZ(2,4) = RMID(2) - RY
117 XYZ(3,I) = -(ABCD(1)*XYZ(1,I)+ABCD(2)*XYZ(2,I)+ABCD(4))/ABCD(3)
121 250 IF (ABCD(K) .GT. 0) S = -3.
122 IF (ABCD(K) .LT. 0) S = +3.
126 IF (K .EQ. 1) RX = S * (RMX(1)-RMN(1))
127 IF (K .EQ. 2) RY = S * (RMX(2)-RMN(2))
128 IF (K .EQ. 3) RZ = S * (RMX(3)-RMN(3))
130 XYZ(1,I+4) = XYZ(1,I) + RX
131 XYZ(2,I+4) = XYZ(2,I) + RY
132 XYZ(3,I+4) = XYZ(3,I) + RZ
134 CALL CGBOX(XYZ,4,4,NWORK,W)
137 CALL CGSUB(A,W,NMAX,B)
140 998 B(KCGSIZ) = LCGHEA