* * $Id: cgwire.F,v 1.1.1.1 1995/10/24 10:19:45 cernlib Exp $ * * $Log: cgwire.F,v $ * Revision 1.1.1.1 1995/10/24 10:19:45 cernlib * Geant * * #include "geant321/pilot.h" *CMZ : 3.21/02 29/03/94 15.41.32 by S.Giani *-- Author : SUBROUTINE CGWIRE(CG,NTRAN,IFHIDE,NMAX,WIRE,ISHAPE,SHADE) ************************************************************************ * * * Name: CGWIRE * * Author: E. Chernyaev Date: 15.04.88 * * Revised by: S.Giani Date: 24.04.91 * * * * Function: Transfer CG-object to WIRE-object * * * * References: CGTSTR, CGFVIS, CGWSOR * * * * Input: CG - CG-object * * NT - number of transformation to screen coordinates * * IFHIDE - flag ( 0 - all edges,-1 - only not hidden) * * NMAX - max-length of WIRE array * * * * Output: WIRE - WIRE-object * * WIRE(1) - length of WIRE-object * * = 0 if error in CG-object structure * * < 0 if no space in WIRE array or error * * in parameters * * Errors: none * * * ************************************************************************ #include "geant321/cggpar.inc" #include "geant321/cgctra.inc" *SG #include "geant321/gcdraw.inc" #include "geant321/gcgobj.inc" #include "geant321/gcspee.inc" *SG REAL CG(*),WIRE(*) INTEGER SHADE(*) *- LLEP=ABS(LEP) WIRE(1)= 0. IF(LLEP.NE.1)SHADE(1)=0. MMM=1 * T E S T P A R A M E T E R S IF (NTRAN .LE. 0) GOTO 999 IF (NTRAN .GT. NTMAX) GOTO 999 IF (NMAX .LE. 0) GOTO 999 CALL CGTSTR(CG,IREP) IF (IREP .LT. 0) GOTO 999 NFACE = CG(KCGNF) *SG IF (NFACE .EQ. 0)THEN WIRE(KCGNF)=0 GOTO 999 ENDIF *SG * I N I T I A L I S A T I O N NWIRE = 0 JCG = LCGHEA JWR = LCGHEA * ** L O O P A L O N G F A C E S *SG NTIM=0 *SG DO 300 NF=1,NFACE JCGFAC = JCG NEDGE = CG(JCG+KCGNE) * D E F I N E V A L U E O F "IFVIS" IFVIS = -1 IF (IFHIDE .NE. 0) GOTO 200 JCG = JCG + LCGFAC DO 100 NE=1,NEDGE IF (CG(JCG+KCGAE) .LT. 0.) GOTO 200 JCG = JCG + LCGEDG 100 CONTINUE IFVIS = 0 GOTO 210 * ** T E S T F A C E V I S I B I L I T Y ** M O V E E D G E S T O W I R E - O B J E C T * 200 CALL CGFARE(NTRAN,CG(JCGFAC+1),IFVIS,ISHAPE) 210 IF (IFHIDE.NE.0 .AND. IFVIS.LT.0) GOTO 290 JCG = JCGFAC AFACE = CG(JCG+KCGAF) JCG = JCG + LCGFAC DO 250 NE=1,NEDGE IF (CG(JCG+KCGAE) .LT. 0.) AEDGE =-AFACE - 1 IF (CG(JCG+KCGAE) .GE. 0.) AEDGE = AFACE IF (AEDGE.LT.0. .AND. IFVIS.LT.0) GOTO 240 IF (NCLAS3+JWR+LCGEDG .GT. NMAX) GOTO 220 WIRE(JWR+KCGAE) = AEDGE WIRE(JWR+KCGX1) = CG(JCG+KCGX1) WIRE(JWR+KCGY1) = CG(JCG+KCGY1) WIRE(JWR+KCGZ1) = CG(JCG+KCGZ1) WIRE(JWR+KCGX2) = CG(JCG+KCGX2) WIRE(JWR+KCGY2) = CG(JCG+KCGY2) WIRE(JWR+KCGZ2) = CG(JCG+KCGZ2) 220 NWIRE = NWIRE + 1 JWR = JWR + LCGEDG 240 JCG = JCG + LCGEDG 250 CONTINUE MMM=MMM+1 IF(LLEP.NE.1)SHADE(MMM)=NWIRE 290 JCG = JCGFAC + LCGFAC + NEDGE*LCGEDG 300 CONTINUE * ** D E L E T E V E R Y S M A L L W I R E S ** S E T N E E D E D D I R E C T I O N ** S O R T W I R E S * *SG * Finding the total number of words needed to build * the whole Wire Structure. * NCLAS3=NCLAS3+JWR IF(NCLAS3.GE.NMAX)THEN KCGST=-8 GOTO 999 ENDIF *SG IF (JWR .GT. NMAX) GOTO 998 *SG LINFIL=IBITS(LINATT,13,3) IF(LINFIL.EQ.0)CALL CGWSOR(NWIRE,WIRE(KCGNF+1)) *SG WIRE(KCGSIZ) = LCGHEA + NWIRE*LCGEDG IF(LLEP.NE.1)SHADE(1)=MMM WIRE(KCGATT) = CG(KCGATT) WIRE(KCGNF) = NWIRE GOTO 999 * 998 WIRE(KCGSIZ) = NMAX - JWR 999 RETURN END