C ============================================================ SUBROUTINE VER_ROCAGE ( 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 rohacell part of 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 VRN1, VRN2, VRN3, VRN4, VRN5, 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 genat type PGON and is C specified by VER_PGON_MAIN(10). C C Author:- C ======== C JPSullivan 23-Aug-2000, using some code from the C original MVD PISA simulation written around C 17-April-1992 by Ju Kang. C C Creation Date: 23-Aug-2000 C ========================== C C Revisions:- C =========== C Date Name Description C ---- ---- ---------------------------------------- C C Arguments:- 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 Following contains the geometry data for a single C-cage C which cointains 2 Si detectors. C C One C-cage in the MVD contains up to 6 Si detector wafers. C This subroutine creates a C-cage with Si on the inner and C outer bottom positions. The others are empty. C 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 INTEGER IVOLU ! Error flag returned by GSVOLU INTEGER I ! Loop index INTEGER NMED ! Medium number C REAL VER_PGON_RIB1(10) ! ribs +-z ends, inner REAL VER_PGON_RIB2(10) ! ribs +-z ends, outer REAL VER_PARA_RIB3(6) ! cross ribs, top and bottom REAL VER_PGON_RIB4(10) ! inner, central cross ribs REAL VER_PARA_RIB5(6) ! radial ribs REAL WDVROH ! thickness of rohacell ribs, cm REAL CCAGE_DZ2 ! half-length (beam direction of a c cage) REAL SI_R1_THICK ! thickness (radial direction), inner Si REAL SI_R2_THICK ! thickness (radial direction), outer Si REAL X_OF_RIB ! temp variable for positioning ribs REAL Y_OF_RIB ! temp variable for positioning ribs REAL Z_OF_RIB ! temp variable for positioning ribs INTEGER MYROT ! local copy of rotation matrix number REAL DELY_TMP ! temp variable REAL DR_TEMP ! temp variables REAL R_OF_RIB4 ! temp variable to position rib4 REAL XTEMP,YTEMP,RTEMP ! more temp variables C CHARACTER*4 NAME_RIB(5) ! name of volume for "ribs" 1-5 C C------------------------------------------------------------------------- C C Executable Statements:- C ======================= C C Extract the relevant information codes from the Zebra bank C MED_VER_ROH = QF(LFV_PARA + OFVA_MED_ROH) VISLR = QF(LFV_PARA + OFVA_VISLR) VOSLR = QF(LFV_PARA + OFVA_VOSLR) CCAGE_DZ2 = QF(LFV_PARA + OFVA_DVWR1+2) SI_R1_THICK = QF(LFV_PARA + OFVA_DVWR1) SI_R2_THICK = QF(LFV_PARA + OFVA_DVWR2) WDVROH = QF(LFV_PARA + OFVA_WDVROH) ! width of rohacell ribs C C construct the names of the volumes for the different types C of "ribs" C IF ( N_CAGE_TYPE.LT.0 ) THEN WRITE ( LOUT, * ) 'ver_rocage: 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_rocage: N_CAGE_TYPE=',N_CAGE_TYPE , x ' change it to 6' N_CAGE_TYPE=6 END IF C DO I=1,5 WRITE ( NAME_RIB(I), 10 ) N_CAGE_TYPE,I 10 FORMAT ( 'VR',2I1 ) END DO C C--> Define ribs on the +-z sides, inner part of a C-cage. C VER_PGON_RIB1(1) = -90. ! phi1 VER_PGON_RIB1(2) = 180. ! dphi VER_PGON_RIB1(3) = 3. ! N phi segments VER_PGON_RIB1(4) = 2. ! N z values VER_PGON_RIB1(5) = -WDVROH/2. ! Z1 VER_PGON_RIB1(6) = VISLR + SI_R1_THICK ! R1 VER_PGON_RIB1(7) = VER_PGON_RIB1(6) + WDVROH ! R2 VER_PGON_RIB1(8) = WDVROH/2. ! Z2 VER_PGON_RIB1(9) = VER_PGON_RIB1(6) ! R1 VER_PGON_RIB1(10)= VER_PGON_RIB1(7) ! R2 C NMED = MED_VER_ROH ! Rohacell C CALL GSVOLU( NAME_RIB(1), 'PGON', NMED, VER_PGON_RIB1, 10, IVOLU ) CALL GSATT ( NAME_RIB(1), 'SEEN', 1 ) CALL GSATT ( NAME_RIB(1), 'COLO', COLOR_VER ) C C--> Define ribs on the +-z sides, outer part of a C-cage. C VER_PGON_RIB2(1) = -90. !initial phi value VER_PGON_RIB2(2) = 180. !delta-phi VER_PGON_RIB2(3) = 3. !N phi segments VER_PGON_RIB2(4) = 2. !N z values VER_PGON_RIB2(5) = -WDVROH/2. !Z1 VER_PGON_RIB2(7) = VOSLR - SI_R1_THICK !R2 (note 6, 7 VER_PGON_RIB2(6) = VER_PGON_RIB2(7) - WDVROH !R1 backwards here) VER_PGON_RIB2(8) = WDVROH/2. !Z2 VER_PGON_RIB2(9) = VER_PGON_RIB2(6) !R1 VER_PGON_RIB2(10)= VER_PGON_RIB2(7) !R2 C NMED = MED_VER_ROH ! Rohacell C CALL GSVOLU( NAME_RIB(2), 'PGON', NMED, VER_PGON_RIB2, 10, IVOLU ) CALL GSATT ( NAME_RIB(2), 'SEEN', 1 ) CALL GSATT ( NAME_RIB(2), 'COLO', COLOR_VER ) C C--> Define cross ribs (i.e. the are parallel to the beam pipe) , C these 4 are on the top and bottom. C VER_PARA_RIB3(1) = WDVROH/2. !dx/2 VER_PARA_RIB3(2) = WDVROH/2. !dy/2 VER_PARA_RIB3(3) = CCAGE_DZ2 - WDVROH !dz/2 VER_PARA_RIB3(4) = 30. !alpha VER_PARA_RIB3(5) = 0. !theta VER_PARA_RIB3(6) = 0. !phi C NMED = MED_VER_ROH ! Rohacell C CALL GSVOLU( NAME_RIB(3), 'PARA', NMED, VER_PARA_RIB3, 6, IVOLU ) CALL GSATT ( NAME_RIB(3), 'SEEN', 1 ) CALL GSATT ( NAME_RIB(3), 'COLO', COLOR_VER ) C R_OF_RIB4 = WDVROH*COSD(30.) C VER_PGON_RIB4(1) = -60. !initial phi VER_PGON_RIB4(2) = 120. !delta-phi VER_PGON_RIB4(3) = 2. !N phi segments VER_PGON_RIB4(4) = 2. !N z values VER_PGON_RIB4(5) = -CCAGE_DZ2 + WDVROH !Z1 VER_PGON_RIB4(6) = R_OF_RIB4 !R1 VER_PGON_RIB4(7) = R_OF_RIB4 + WDVROH !R2 VER_PGON_RIB4(8) = CCAGE_DZ2 - WDVROH !Z2 VER_PGON_RIB4(9) = VER_PGON_RIB4(6) !R1 VER_PGON_RIB4(10)= VER_PGON_RIB4(7) !R2 C NMED = MED_VER_ROH ! Rohacell C CALL GSVOLU( NAME_RIB(4), 'PGON', NMED, VER_PGON_RIB4, 10, IVOLU ) CALL GSATT ( NAME_RIB(4), 'SEEN', 1 ) CALL GSATT ( NAME_RIB(4), 'COLO', COLOR_VER ) C C--> Define radial (from inner to out layer) ribs near x=0 C in the Cage (and Phenix) coordinate systems. C VER_PARA_RIB5(1) = ((VER_PGON_RIB2(6)/COSD(30.)) - x (VER_PGON_RIB1(7)/COSD(30.)))/2. VER_PARA_RIB5(2) = WDVROH/2. !dy/2 VER_PARA_RIB5(3) = WDVROH/2. !dz/2 VER_PARA_RIB5(4) = 30. !alpha VER_PARA_RIB5(5) = 0. !theta VER_PARA_RIB5(6) = 0. !phi C NMED = MED_VER_ROH ! Rohacell C CALL GSVOLU( NAME_RIB(5), 'PARA', NMED, VER_PARA_RIB5, 6, IVOLU ) CALL GSATT ( NAME_RIB(5), 'SEEN', 1 ) CALL GSATT ( NAME_RIB(5), 'COLO', COLOR_VER ) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C C Now, position the various volumes C DO I=1,2 IF ( I.EQ.1 ) THEN Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. ELSE Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. END IF CALL GSPOS ( NAME_RIB(1), I, CAGE_NAME,0.0,0.0,Z_OF_RIB, x IROTNULL, 'ONLY' ) CALL GSPOS ( NAME_RIB(2), I, CAGE_NAME,0.0,0.0,Z_OF_RIB, x IROTNULL, 'ONLY' ) END DO C X_OF_RIB = WDVROH/2. Z_OF_RIB = 0. DELY_TMP = 0.5*WDVROH*TAND(30.) DO I=1,4 IF ( I.EQ.1 ) THEN IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,270.,90.,180.,180.,0. ) Y_OF_RIB = DELY_TMP + WDVROH/2. - x (VER_PGON_RIB2(7)/COSD(30.)) ELSE IF ( I.EQ.2 ) THEN Y_OF_RIB = DELY_TMP - WDVROH/2. - x (VER_PGON_RIB1(6)/COSD(30.)) ELSE IF ( I.EQ.3 ) THEN IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,270.,90.,0.,0.,0. ) Y_OF_RIB = -DELY_TMP + WDVROH/2. + x (VER_PGON_RIB1(6)/COSD(30.)) ELSE IF ( I.EQ.4 ) THEN Y_OF_RIB = -DELY_TMP - WDVROH/2. + x (VER_PGON_RIB2(7)/COSD(30.)) END IF CALL GSPOS ( NAME_RIB(3), I, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) END DO C DO I=1,4 IF ( I.EQ.1 ) THEN DR_TEMP = (VISLR + SI_R1_THICK)/COSD(30.) - WDVROH X_OF_RIB = DR_TEMP*COSD(30.) Y_OF_RIB = DR_TEMP*SIND(30.) Z_OF_RIB = 0. IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,30.,90.,120.,0.,0. ) ELSE IF ( I.EQ.2 ) THEN DR_TEMP = (VOSLR - SI_R2_THICK)/COSD(30.) - x WDVROH - WDVROH/COSD(30.) X_OF_RIB = DR_TEMP*COSD(30.) Y_OF_RIB = DR_TEMP*SIND(30.) Z_OF_RIB = 0. ELSE IF ( I.EQ.3 ) THEN DR_TEMP = (VISLR + SI_R1_THICK)/COSD(30.) - WDVROH X_OF_RIB = DR_TEMP*COSD(30.) Y_OF_RIB = -DR_TEMP*SIND(30.) Z_OF_RIB = 0. IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,330.,90.,60.,0.,0. ) ELSE DR_TEMP = (VOSLR - SI_R2_THICK)/COSD(30.) - x WDVROH - WDVROH/COSD(30.) X_OF_RIB = DR_TEMP*COSD(30.) Y_OF_RIB = -DR_TEMP*SIND(30.) Z_OF_RIB = 0. END IF C CALL GSPOS ( NAME_RIB(4), I, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) END DO C C radial ribs near x=0 C X_OF_RIB = WDVROH/2. DELY_TMP = 0.5*WDVROH*TAND(30.) DO I=1,4 IF ( I.EQ.1 ) THEN IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,270.,90.,0.,0.,0. ) Y_OF_RIB = - DELY_TMP + x ((VER_PGON_RIB2(7)/COSD(30.)) + x (VER_PGON_RIB1(6)/COSD(30.)))/2. Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. ELSE IF ( I.EQ.2 ) THEN Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. ELSE IF ( I.EQ.3 ) THEN IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,270.,90.,180.,180.,0. ) Y_OF_RIB = - Y_OF_RIB Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. ELSE IF ( I.EQ.4 ) THEN Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. END IF CALL GSPOS ( NAME_RIB(5), I, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) END DO C RTEMP = ((VER_PGON_RIB2(7)/COSD(30.)) + x (VER_PGON_RIB1(6)/COSD(30.)))/2. XTEMP = RTEMP*COSD(30.) YTEMP = RTEMP*SIND(30.) IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,30.,90.,120.,0.,0. ) C X_OF_RIB = XTEMP Y_OF_RIB = YTEMP - WDVROH/(2.*COSD(30.)) Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. CALL GSPOS ( NAME_RIB(5), 5, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. CALL GSPOS ( NAME_RIB(5), 6, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,210.,90.,120.,180.,0. ) C X_OF_RIB = XTEMP - WDVROH/2. Y_OF_RIB = YTEMP + TAND(30.)*WDVROH/2. Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. CALL GSPOS ( NAME_RIB(5), 7, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. CALL GSPOS ( NAME_RIB(5), 8, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,150.,90.,240.,0.,0. ) C X_OF_RIB = XTEMP - WDVROH/2. Y_OF_RIB =-YTEMP - TAND(30.)*WDVROH/2. Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. CALL GSPOS ( NAME_RIB(5), 9, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. CALL GSPOS ( NAME_RIB(5),10, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C IROT = IROT + 1 MYROT = IROT CALL GSROTM(IROT,90.,150.,90.,60.,180.,0. ) C X_OF_RIB = XTEMP Y_OF_RIB = -YTEMP + WDVROH/(2.*COSD(30.)) Z_OF_RIB = VER_PGON_MAIN(5) + WDVROH/2. CALL GSPOS ( NAME_RIB(5), 11, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C Z_OF_RIB = VER_PGON_MAIN(8) - WDVROH/2. CALL GSPOS ( NAME_RIB(5),12, CAGE_NAME, X_OF_RIB, Y_OF_RIB, z Z_OF_RIB, MYROT, 'ONLY' ) C CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC C RETURN END