5 * Revision 1.1.1.1 1995/10/24 10:19:42 cernlib
9 #include "geant321/pilot.h"
10 *CMZ : 3.21/02 29/03/94 15.41.31 by S.Giani
12 SUBROUTINE CGBTTT(WHAT,TMIN,TMAX,NT,NEDGE)
13 ************************************************************************
16 * Author: E. Chernyaev Date: 14.03.89 *
19 * Function: Prepare list of T-intervals *
23 * Input: WHAT - flag: what is need ('GT','GE','LT','LE') *
26 * NT - number of T-points *
28 * Output: NEDGE - number of edges *
32 ************************************************************************
33 #include "geant321/cgcedg.inc"
34 #include "geant321/cgdelt.inc"
40 IF (NT .GE. 2) GOTO 100
41 * IF (NT .EQ. 1) PRINT *,' CGBTTT: Number of T=1'
42 IF (WHAT(1:1) .EQ. 'L') GOTO 999
49 ** S O R T I N T E R S E C T I O N P O I N T S
53 IF (TTT(1,J+1) .GE. TTT(1,J)) GOTO 120
63 ** F I N D S I G N O F 1 - S T P O I N T
73 IF (TTT(1,I)-T1 .LE. TDEL) GOTO 210
74 IF (I1NEG .NE. I1POS) GOTO 240
80 210 IF (TTT(2,I) .EQ. -1.) I1NEG = 1
81 IF (TTT(2,I) .EQ. +1.) I1POS = 1
82 IF (TTT(2,I) .EQ. 0.) I1ZBEG = 1
83 IF (TTT(2,I) .EQ. 2.) I1ZEND = 1
85 IF (I1NEG .EQ. I1POS) GOTO 250
86 240 IF (I1NEG .EQ. 1) I1SIGN =-1
87 IF (I1POS .EQ. 1) I1SIGN =+1
88 IF (I1ZEND.EQ.1 .AND. I1ZBEG.EQ.0) I1SIGN =-I1SIGN
91 IF (WHAT(1:1) .EQ. 'L') GOTO 300
96 ** P R E P A R E L I S T O F I N T E R V A L S
103 IF (I1SIGN .LT. 0) I2POS = 1
104 IF (I1SIGN .GT. 0) I2NEG = 1
108 * S T A R T O F S E A R C H F O R N E X T P O I N T
114 320 IF (ITCUR .GT. NNTT) GOTO 600
120 330 IF (TTT(2,ITCUR) .EQ.-1.) I2NEG = 1
121 IF (TTT(2,ITCUR) .EQ.+1.) I2POS = 1
122 IF (TTT(2,ITCUR) .EQ. 0.) I2ZBEG = 1
123 IF (TTT(2,ITCUR) .EQ. 2.) I2ZEND = 1
125 IF (ITCUR .GT. NNTT) GOTO 400
126 IF (TTT(1,ITCUR)-T2 .LE. TDEL) GOTO 330
127 * N E X T P O I N T I S F O U N D E D
128 400 T2 = (T2+TTT(1,ITCUR-1))/2.
129 IF (I1ZBEG .NE. 0) GOTO 410
130 IF (I2ZBEG*I2ZEND .NE. 0) GOTO 420
131 IF (I2POS*I2NEG .NE. 0) GOTO 530
132 IF (I1SIGN.GT.0 .AND. I2POS.GT.0) GOTO 510
133 IF (I1SIGN.LT.0 .AND. I2NEG.GT.0) GOTO 510
134 IF (I1SIGN.GT.0 .AND. I2NEG.GT.0) GOTO 520
135 IF (I1SIGN.LT.0 .AND. I2POS.GT.0) GOTO 520
137 * B O U N D A R Y E D G E
142 IF (I2ZEND .EQ. 0) I2ZBEG = 1
143 405 IF (I1SIGN.GT.0 .AND. I2POS.GT.0) STATUS = 'IN '
144 IF (I1SIGN.LT.0 .AND. I2NEG.GT.0) STATUS = 'IN '
145 IF (I1SIGN.GT.0 .AND. I2NEG.GT.0) STATUS = 'OUT'
146 IF (I1SIGN.LT.0 .AND. I2POS.GT.0) STATUS = 'OUT'
148 * V E R Y S M A L L B O U N D A R Y E D G E
149 420 IF (I2POS+I2NEG .EQ. 0) GOTO 310
156 510 IF (STATUS .EQ. 'IN ') GOTO 511
157 IF (STATUS .EQ. 'OUT') GOTO 512
158 511 IF (WHAT(1:1) .EQ. 'L') GOTO 550
161 IF (WHAT(1:1) .EQ. 'G') GOTO 550
164 520 IF (STATUS .EQ. 'IN ') GOTO 521
165 IF (STATUS .EQ. 'OUT') GOTO 522
167 IF (WHAT(1:1) .EQ. 'L') GOTO 550
169 522 IF (WHAT(1:1) .EQ. 'L') GOTO 550
171 * C O M E I N / O U T
172 530 IF (STATUS .EQ. 'IN ') GOTO 531
173 IF (STATUS .EQ. 'OUT') GOTO 532
174 531 IF (WHAT(1:1) .EQ. 'L') GOTO 550
176 532 IF (WHAT(1:1) .EQ. 'G') GOTO 550
185 ** S K I P B O U N D A R Y E D G E S (I F N E E D)
187 600 IF (NE .EQ. 0) GOTO 999
188 IF (WHAT(2:2) .EQ. 'E') GOTO 700
191 IF (ITTT(I) .EQ. 1) GOTO 610
199 700 IF (NE .EQ. 0) GOTO 999
200 IF (TMIN .GT. TMAX) GOTO 999
203 IF (TTT(2,I) .LE. TMIN) GOTO 710
204 IF (TTT(1,I) .GE. TMAX) GOTO 720
207 IF (T1 .LT. TMIN) T1 = TMIN
208 IF (T2 .GT. TMAX) T2 = TMAX
209 IF (T2-T1 .LT. TDEL) GOTO 710