]> git.uio.no Git - u/mrichter/AliRoot.git/blame - GEANT321/cgpack/cgbtef.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / GEANT321 / cgpack / cgbtef.F
CommitLineData
fe4da5cc 1*
2* $Id$
3*
4* $Log$
5* Revision 1.1.1.1 1995/10/24 10:19:42 cernlib
6* Geant
7*
8*
9#include "geant321/pilot.h"
10*CMZ : 3.21/02 29/03/94 15.41.31 by S.Giani
11*-- Author :
12 SUBROUTINE CGBTEF(IFEXT,IVAR,EDGE,FACE,C)
13************************************************************************
14* *
15* Name: CGBTEF *
16* Author: E. Chernyaev Date: 23.10.88 *
17* Revised: *
18* *
19* Function: Test edge against face *
20* *
21* References: CGBEDG, CGTSOR *
22* *
23* Input: IFEXT - flag for searching external or internal intervals *
24* ( 1 - external, -1 - internal) *
25* IVAR - number of variant *
26* ( 1 - visibility of intervals the same as edge) *
27* ( 2 - intervals are invisible) *
28* EDGE(*) - number of edges in face *
29* FACE(*,*) - face *
30* NMAX - max length of C array *
31* *
32* Output: C(*) - a set of new edges *
33* (C(KCGAF) = -1 if no space) *
34* *
35* Errors: none *
36* *
37************************************************************************
38#include "geant321/cggpar.inc"
39#include "geant321/cgcedg.inc"
40 CHARACTER*2 WHAT
41 REAL EDGE(LCGEDG),FACE(*),C(*),ABCD(4)
42 INTEGER KCG(6)
43 DATA KCG/KCGX1,KCGY1,KCGZ1,KCGX2,KCGY2,KCGZ2/
44*-
45** F I N D I N T E R S E C T I O N P O I N T S
46*
47 IF (IFEXT .LE. 0) WHAT = 'LE'
48 IF (IFEXT .GT. 0) WHAT = 'GE'
49 XD = EDGE(KCGX2) - EDGE(KCGX1)
50 YD = EDGE(KCGY2) - EDGE(KCGY1)
51 ZD = EDGE(KCGZ2) - EDGE(KCGZ1)
52 ALENG = SQRT(XD*XD + YD*YD + ZD*ZD)
53 IF(ALENG.LT.1.0E-4)GOTO 998
54 XD = XD / ALENG
55 YD = YD / ALENG
56 ZD = ZD / ALENG
57 ABCD(1)= YD*FACE(KCGCC) - FACE(KCGBB)*ZD
58 ABCD(2)= ZD*FACE(KCGAA) - FACE(KCGCC)*XD
59 ABCD(3)= XD*FACE(KCGBB) - FACE(KCGAA)*YD
60 ABCD(4)=-(ABCD(1)*EDGE(KCGX1) +
61 + ABCD(2)*EDGE(KCGY1) +
62 + ABCD(3)*EDGE(KCGZ1))
63 CALL CGBFIT(FACE,ABCD,NT)
64 IF (NT .GT. 0) GOTO 100
65 XA = EDGE(KCGX1)
66 YA = EDGE(KCGY1)
67 ZA = EDGE(KCGZ1)
68 XDELT = EDGE(KCGX2) - EDGE(KCGX1)
69 YDELT = EDGE(KCGY2) - EDGE(KCGY1)
70 ZDELT = EDGE(KCGZ2) - EDGE(KCGZ1)
71*
72** P R E P A R E E D G E S
73*
74 100 K = 1
75 IF (ABS(YDELT) .GT. ABS(XDELT)) K = 2
76 IF (ABS(ZDELT) .GT. ABS(DELTA(K))) K = 3
77 TMIN = (EDGE(KCG(K)) - AA(K)) / DELTA(K)
78 TMAX = (EDGE(KCG(K+3)) - AA(K)) / DELTA(K)
79 CALL CGBTTT(WHAT,TMIN,TMAX,NT,NEDGE)
80 IF (NEDGE .EQ. 0) GOTO 999
81 IVIS = EDGE(KCGAE)
82 NMAX = C(KCGAF)
83 NN = C(KCGNE)
84 J = LCGFAC + NN*LCGEDG
85 IF (NMAX .LT. J + NEDGE*LCGEDG) GOTO 998
86 DO 500 NE=1,NEDGE
87 IF (IVAR .EQ. 1) C(J+KCGAE) = IVIS
88 IF (IVAR .EQ. 2) C(J+KCGAE) =-1.
89 IF (ITTT(NE) .NE. 0) C(J+KCGAE) = IVIS
90 C(J+KCGX1) = XA + XDELT*TTT(1,NE)
91 C(J+KCGY1) = YA + YDELT*TTT(1,NE)
92 C(J+KCGZ1) = ZA + ZDELT*TTT(1,NE)
93 C(J+KCGX2) = XA + XDELT*TTT(2,NE)
94 C(J+KCGY2) = YA + YDELT*TTT(2,NE)
95 C(J+KCGZ2) = ZA + ZDELT*TTT(2,NE)
96 J = J + LCGEDG
97 500 CONTINUE
98 C(KCGNE) = C(KCGNE) + NEDGE
99 GOTO 999
100*
101 998 C(KCGAF) =-1.
102 999 RETURN
103 END