C ============================================================ SUBROUTINE VER_SIDETS ( CAGE_NAME,VER_PGON_MAIN,N_CAGE_TYPE ) C ============================================================ IMPLICIT NONE include 'g77trigdef.inc' C C Description:- C ============= C This subroutine defines the geometry for the C Si wafers on a C-cage. Because these get C imbedded in different volumes, their names use C N_CAGE_TYPE to distinguish them. The main volume C name is input (CAGE_NAME). The sub-volumes will C be named VSI1, VSI2, VSI3, ... VSI6, where N is C N_CAGE_TYPE (an integer giving the number of Si C detectors glued to this C-cage -- from 1 to 6.) C The main volume is of geant type PGON and is C specified by VER_PGON_MAIN(10). C C Author:- C ======== C JPSullivan 5-Sep-2000, using some code from the C original MVD PISA simulation written around C 17-April-1992 by Ju Kang. C C Creation Date: 4-Sept-2000 C ========================== C C Revisions:- C =========== C Date Name Description C ---- ---- ---------------------------------------- C C Arguments:- C =========== C CHARACTER*4 CAGE_NAME !name of main volume for cage REAL VER_PGON_MAIN(10) !parameters defining main volume for C-cage INTEGER N_CAGE_TYPE !N Si detectors on this cage (1-6) C C Implicit inputs, outputs, side effects:- C ======================================== C C Called by: VER_CCAGE C Calls : GSVOLU, GSATT, GSPOS, GSROTM C Side effects: Numerous changes to Geants GEOM banks. C C Global Specifications:- C ======================= C include 'gugeom.inc' include 'gcunit.inc' C include 'fstore.inc' include 'sublink.inc' include 'fpvlink.inc' C C External Specifications:- C ========================= C None C C Local Specifications:- C ====================== C C--> Distance from the ladders to the beam axis: C REAL VISLR ! Radius for VISL REAL VOSLR ! Radius for VOSL C C-------------------------------------------------------------------------- C INTEGER COLOR_VER ! Color (visible/invisible) INTEGER MED_VER_ROH ! rohacell C C======================================================================== C Following contains the parameters in the geant hit C structure for silicon vertex detector. C------------------------------------------------------------------------------- C INTEGER IVOLU ! Error flag returned by GSVOLU INTEGER I ! Loop index INTEGER NMED ! Medium number (temp variable) INTEGER MED_VER_SEN ! Silicon sensitive INTEGER MED_VER_INS ! Silicon insensitive C REAL BOX_SI_INNER(3) ! to define a Si wafer (inner) REAL BOX_SI_OUTER(3) ! to define a Si wafer (outer) REAL BOX_SI_INNER_SEN(3) ! to define a Si wafer (inner) -- active part REAL BOX_SI_OUTER_SEN(3) ! to define a Si wafer (outer) -- active part REAL PITCH ! strip pitch INTEGER NSTRIP ! number of strips per wafer INTEGER MYROT ! temp variable to hold rotation matrix number INTEGER MYROT1 ! rotation matrix for bottom Si wafers INTEGER MYROT2 ! rotation matrix for top Si wafers SAVE MYROT1, MYROT2 REAL ANGLE ! temp variable C CHARACTER*4 NAME_SI_INNER ! name of inner Si wafer, the whole thing CHARACTER*4 NAME_SI_INNER_SEN ! name of inner Si wafer, sensitive part CHARACTER*4 NAME_SI_OUTER ! name of outer Si wafer, the whole thing CHARACTER*4 NAME_SI_OUTER_SEN ! name of outer Si wafer, sensitive part CHARACTER*4 NAME_SI ! temp variable to hold a name C INTEGER NSI_POS ! 1 = bottom, 2 = middle, 3 = top C REAL R_SI_DET ! temp variable to position Si wafer REAL X_SI_DET,Y_SI_DET,Z_SI_DET ! temp variables to position a Si wafer C INTEGER IFIRST ! first call flag SAVE IFIRST C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C DATA IFIRST / 0 / C C------------------------------------------------------------------------- C C Executable Statements:- C ======================= IF ( IFIRST.EQ.0 ) THEN IFIRST = 1 C IROT = IROT + 1 MYROT1 = IROT ANGLE = -60. CALL GSROTM( IROT, 90.0, ANGLE, 90.0, 90.0+ANGLE, 0.0,0.0 ) C IROT = IROT + 1 MYROT2 = IROT ANGLE = 60. CALL GSROTM( IROT, 90.0, ANGLE, 90.0, 90.0+ANGLE, 0.0,0.0 ) END IF C C Extract the relevant information codes from the Zebra bank C MED_VER_SEN = QF(LFV_PARA + OFVA_MED_SEN) MED_VER_INS = QF(LFV_PARA + OFVA_MED_INS) VISLR = QF(LFV_PARA + OFVA_VISLR) VOSLR = QF(LFV_PARA + OFVA_VOSLR) C C protect against illegal input values of N_CAGE_TYPE C IF ( N_CAGE_TYPE.LT.0 ) THEN WRITE ( LOUT, * ) 'ver_sidets: N_CAGE_TYPE=',N_CAGE_TYPE , x ' change it to 0' N_CAGE_TYPE=0 ELSE IF ( N_CAGE_TYPE.GT.6 ) THEN WRITE ( LOUT, * ) 'ver_sidets: N_CAGE_TYPE=',N_CAGE_TYPE , x ' change it to 6' N_CAGE_TYPE=6 END IF C C If N_CAGE_TYPE = 0, there is no Si on this cage, so just return C without doing anything C IF ( N_CAGE_TYPE.EQ.0 ) RETURN C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C BOX_SI_INNER(1) = QF(LFV_PARA + OFVA_DVWR1) BOX_SI_INNER(2) = QF(LFV_PARA + OFVA_DVWR1+1) BOX_SI_INNER(3) = QF(LFV_PARA + OFVA_DVWR1+2) BOX_SI_OUTER(1) = QF(LFV_PARA + OFVA_DVWR2) BOX_SI_OUTER(2) = QF(LFV_PARA + OFVA_DVWR2+1) BOX_SI_OUTER(3) = QF(LFV_PARA + OFVA_DVWR2+2) PITCH = QF(LFV_PARA + OFVA_PITCH) NSTRIP = NINT(QF(LFV_PARA + OFVA_NSTRIP)) BOX_SI_INNER_SEN(1) = BOX_SI_INNER(1) BOX_SI_INNER_SEN(2) = BOX_SI_INNER(2) BOX_SI_INNER_SEN(3) = FLOAT(NSTRIP)*PITCH/2. BOX_SI_OUTER_SEN(1) = BOX_SI_OUTER(1) BOX_SI_OUTER_SEN(2) = BOX_SI_OUTER(2) BOX_SI_OUTER_SEN(3) = FLOAT(NSTRIP)*PITCH/2. C C construct the name of the volume(s) for the Si wafer(s) and C then define the volume(s) C C first the inner strip detectors: C IF ( N_CAGE_TYPE.GT.0 ) THEN WRITE ( NAME_SI_INNER, 10 ) N_CAGE_TYPE 10 FORMAT ( 'VSI',I1 ) WRITE ( NAME_SI_INNER_SEN, 11 ) N_CAGE_TYPE 11 FORMAT ( 'VAI',I1 ) C NMED = MED_VER_INS ! Silicon C CALL GSVOLU( NAME_SI_INNER, 'BOX ', NMED, x BOX_SI_INNER, 3, IVOLU ) CALL GSATT ( NAME_SI_INNER, 'SEEN', 1 ) CALL GSATT ( NAME_SI_INNER, 'COLO', COLOR_VER ) C NMED = MED_VER_SEN ! Silicon (Sensitive) CALL GSVOLU( NAME_SI_INNER_SEN, 'BOX ', NMED, x BOX_SI_INNER_SEN, 3, IVOLU ) CALL GSATT ( NAME_SI_INNER_SEN, 'SEEN', 1 ) CALL GSATT ( NAME_SI_INNER_SEN, 'COLO', COLOR_VER ) CALL GSPOS ( NAME_SI_INNER_SEN, 1, NAME_SI_INNER, x 0.0,0.0,0.0, 1, 'ONLY' ) END IF C C The outer Si strip strips are longer than the inner ones: C IF ( N_CAGE_TYPE.GT.1 ) THEN WRITE ( NAME_SI_OUTER, 12 ) N_CAGE_TYPE 12 FORMAT ( 'VSO',I1 ) WRITE ( NAME_SI_OUTER_SEN, 13 ) N_CAGE_TYPE 13 FORMAT ( 'VAO',I1 ) C NMED = MED_VER_INS ! Silicon C CALL GSVOLU( NAME_SI_OUTER, 'BOX ', NMED, x BOX_SI_OUTER, 3, IVOLU ) CALL GSATT ( NAME_SI_OUTER, 'SEEN', 1 ) CALL GSATT ( NAME_SI_OUTER, 'COLO', COLOR_VER ) C NMED = MED_VER_SEN ! Silicon (Sensitive) CALL GSVOLU( NAME_SI_OUTER_SEN, 'BOX ', NMED, x BOX_SI_OUTER_SEN, 3, IVOLU ) CALL GSATT ( NAME_SI_OUTER_SEN, 'SEEN', 1 ) CALL GSATT ( NAME_SI_OUTER_SEN, 'COLO', COLOR_VER ) CALL GSPOS ( NAME_SI_OUTER_SEN, 1, NAME_SI_OUTER, x 0.0,0.0,0.0, 1, 'ONLY' ) C END IF C C position the detector wafers: C DO I=1,N_CAGE_TYPE IF ( I.EQ.1 ) THEN C C inner bottom: C ANGLE = -60. R_SI_DET = VISLR MYROT = MYROT1 NAME_SI = NAME_SI_INNER NSI_POS = 1 ELSE IF ( I.EQ.2 ) THEN C C outer bottom: C ANGLE = -60. R_SI_DET = VOSLR MYROT = MYROT1 NAME_SI = NAME_SI_OUTER NSI_POS = 1 ELSE IF ( I.EQ.3 ) THEN C C inner middle: C ANGLE = 0. R_SI_DET = VISLR MYROT = IROTNULL NAME_SI = NAME_SI_INNER NSI_POS = 2 ELSE IF ( I.EQ.4 ) THEN C C inner top: C ANGLE = 60. R_SI_DET = VISLR MYROT = MYROT2 NAME_SI = NAME_SI_INNER NSI_POS = 3 ELSE IF ( I.EQ.5 ) THEN C C outer middle: C ANGLE = 0. R_SI_DET = VOSLR MYROT = IROTNULL NAME_SI = NAME_SI_OUTER NSI_POS = 2 ELSE C C outer top: C ANGLE = 60. R_SI_DET = VOSLR MYROT = MYROT2 NAME_SI = NAME_SI_OUTER NSI_POS = 3 END IF C X_SI_DET = R_SI_DET*COSD(ANGLE) Y_SI_DET = R_SI_DET*SIND(ANGLE) Z_SI_DET = 0. C CALL GSPOS ( NAME_SI, NSI_POS, CAGE_NAME, x X_SI_DET,Y_SI_DET,Z_SI_DET, MYROT,'ONLY' ) C END DO C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C RETURN END