C$Id: svx.f,v 1.58 2014/02/10 22:57:15 hubert Exp $ C File name: svx.f ( was previously inr.f) C ------xxx---------- C C Original author: Shaheen Tonse (LLNL) C Creation date: March 18, 1993 C C Purpose: Set up the Silicon Vertex Detector (SVX) C C Revision History: c """""""""""""""" C C.F. Maguire June 28, 2001 Convert to use for PHENIX upgrades group c c V. L. Rykov 26-Aug-2003: c 1) The vertex detector encloser ("envelope", cooling bag) c is introduced. c 2) For the barrel VTX, "plain" Si cylinders are replaced with c something more realistic (ladders and sensors). c 3) Set of hit components extended with the "wish list", but, c for the time being, only 8 the first components are stored. c 4) The gains for position resolution set for resolution 0.1 mkm. c V. L. Rykov 03-Sep-2003: c Using the full (extended) set for hit components. c V. L. Rykov 19-Feb-2004: c inrORIG & inrFACT adjusted for geting rid of the bad diagnostic c due to endcap, which still is not splitted into sensors. c V. L. Rykov 29-Mar-2004: c Fixed the bug in the passive layer definition. c V. L. Rykov 16-Apr-2004: c SVX cage and barrel parameters along with the sensor rotation c matrices and translation vestors are written into the c svxPISA.par file. c V. L. Rykov 21-Apr-2004: c Fixed some strange volume interference of SVX & MUI first c reported by Hua Pei on 04/19/2004. c c Hubert van Hecke, Aug/Sep 2004: replaced endcap geometry with detailed lampshade c description from Gerd Kunde, Michael Malik and Jan Boissevain c Moved the material/medium numbers into the MVD range c Hubert van Hecke, Jan 2005: shrunk middle 4 endcaps, added support lampshadeshade c (SISR) with pipes and cables. Added cooling tubes to the barrel. c Hubert: added a 'dummy silicon plane' in the location of South and North Mutr c stations 1. This allows simple cuts on surviving particles. c Switched on/off with new phnx.par variable station1_dummy. Aug 2005 c Hubert: added option to install only 1/4 of the North endcaps, switched with c variable quarter_section in the phenx.par file c Hubert: Bug fix: declared SIP(S,M,B) to be 'MANY', since they are overlapping c Hubert: Added switch (sili_endcap_type) to make 'flat' endcaps. c 0=no endcaps, 1=umbrella endcaps, 1=flat endcaps. 06 Jan 2006 (w/ Sasha) c 3=titlted endcap pixel ('ldrd') pixel planes, 4=flat ldrd planes c Sasha L: Added misalignment for the barrel (07 September 2006) c Hubert: Added global in/out coordinates to the output (18 sep 2006) c Sasha L: staggered geometry for barrel strips (layers 3 and 4) c Hubert: removed 'station1' option, replaced by 'stagger' option to give stations c small, staggered rotations. (13 Dec 2006). c Hubert: Fixed S support cone orientation (sisr#2), moved cooling tubes to central c up/down sectors. c Hubert: Removed cooling tubes from SISR, 1 of 2 SJCC, SIIC, SBX1,2,3. Enlarged c SISP, thinned SICB,M,S 3->2mm. Enlarged SISP's. SICT 3->4mm. Jan 2007 c Added support posts SISQ for SISP's, and cooling manifolds SJSP and SJSQ c Removed code for sili_endcap_type = 1 c Introduced material 'honeycomb-1' for support structures. c Hubert: Enlarged the master volume SIEN to hold the readout wheels at +-Z. Added c readout wheel volume SIWH, with pc boards, connectors, cables rohacell. c Dave Lee FVTX geometry updated to reflect TDR 9-10-07 Type 1 = FVTX, type C 2 = LDRD C Hubert: Lifted out the FVTX into svx_fvtx.f, and IFVTX into svx_ifvtx.f. This file c now constructs the barrels only, plus common support structures, plus c the big readout wheels. c Maki Kurosawa constructed the no-tilt layers 3,4, plus new cooling and omega c pieces. March-April 2008 c Hubert: Redefine endcap cage, according to apr 08 drawings. c Maki: 21-Jun-2008: Implemented realistic ROC3 material for strips (layer 3 and 4) c Maki: 18-Aug-2008: Implemented realistic material for pixels (layer 1 and 2) c Modified coolant medium and the shape of omega piece c Maki: 29-Jun-2009: Implemented realistic geometry of stave for strips (layer 3 and 4) c Maki: 25-Aug-2009: Fixed insensitive area at outer stripixel layers (layer 3 and 4) c Maki: 27-Jul-2010: Symmetrize about y-z plane c Hubert: 8 Nov 11: move SLCC (FVTX cage) to svx_fvtx.f c Hubert: Jan 2012 Overlap fixes: SJCC-SCMN, SJSQ-SJSP c Hubert: Feb 2014 Added vtx_shiftx,y,z to allow small shifts of the 4 barrels. c Hubert: Mar 2014 Reorganized the the volumes to encapsulate all ladder elements *===================================================================================== SUBROUTINE SVX(FULL,NH) Implicit none C--- Formal Argument Declarations C ---------------------------- c... Input (?): character*4 full ! set before call in gugeom C... Output: number of components of a hit integer*4 nh ! set before call in gugeom C C--- External Functions C ------------------ C C ================================================================ C--- Global Declarationa C ================================================================ #include "guphnx.inc" #include "gclist.inc" #include "gconst.inc" #include "gcflag.inc" #include "gugeom.inc" #include "gcvolu.inc" C need to access zebra to write parameters to FZOUT file #include "fstore.inc" #include "sublink.inc" #include "fpdlink.inc" C C ================================================================ C--- Local declarations of the input data from phnx.par file C ================================================================ c--- Run Number c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Integer sili_run /11/ ! Run Number namelist /sili_run_par/ sili_run c--- VTX Envelope/Cage parameters: Volumes SIEN(outer)/SICG(inner) c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Real sili_cg_rmn /2.2/ ! Inner cage radius, cm Real sili_cg_thck /0.5/ ! Cage wall thickness, cm Real sili_cg_inthck /0.2/ ! Thickness of the beam pipe ins., cm Real sili_cg_tempc /0.0/ ! Temperature inside the Cage, deg. C Integer sili_cg_npcon /6/ ! Number of corners for SIEN's PCON Real sili_cg_z(6) /6*0.0/ ! z-pos. of the Cage corners Real sili_cg_rmx(10)/10*0.0/ ! Outer SIEN radii at the corners, cm Real sili_cg_xdisp /0.0/ ! x-displacement of SIEN in HALL, cm Real sili_cg_ydisp /0.0/ ! y-displacement of SIEN in HALL, cm Real sili_cg_zdisp /0.0/ ! z-displacement of SIEN in HALL, cm real sili_cg_rinner ! part of fvtx cage definition real sili_cg_swedge_len ! '' note thet these are copied from real sili_cg_bwedge_len ! '' the endcap namelist. real sili_cg_support_thk ! '' Integer sili_endcap_config ! fvtx (1), ifvtx (2) or none (0) real fcg_z1, fcg_z2, fcg_z3, fcg_r1, fcg_r2, fcg_t, fcg_alpha, & fcg_sina, fcg_cosa, fcg_tana, fcg_z ! forward vertex cage variables namelist /sili_cg_par/ sili_cg_npcon,sili_cg_z & ,sili_cg_rmn,sili_cg_rmx,sili_cg_thck,sili_cg_inthck & ,sili_cg_xdisp,sili_cg_ydisp,sili_cg_zdisp & ,sili_cg_tempc, sili_cg_rinner, sili_cg_swedge_len, & sili_cg_bwedge_len, sili_cg_support_thk, & fcg_z1, fcg_z2, fcg_z3, fcg_r1, fcg_r2, fcg_t, fcg_z, & sili_endcap_config c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" c--- VTX Gas Enclosure parameters: c SISF Real sili_ec_sf_z(2) /-19.68, 19.68/ ! z-pos. of support frame, cm Real sili_ec_sf_rmn /21.68/ ! Inner support frame radius Real sili_ec_sf_rmx /21.79/ ! Outer support frame radius c SIPL Real sili_ec_pl_rmn /21.81/ ! Outer polyeth radius Real sili_ec_pl_thk /0.01524/ ! Thickness of Polyethylene c SIER Real sili_ec_rh_thk /0.3175/ ! Thickness of rohacell c SIAM Real sili_ec_alm_thk /0.00508/ ! Thickness of aluminum mylar namelist /sili_ec_par/ sili_ec_sf_z,sili_ec_sf_rmn & ,sili_ec_sf_rmx,sili_ec_pl_rmn,sili_ec_pl_thk & ,sili_ec_rh_thk,sili_ec_alm_thk c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" c--- VTX Barrel parameters c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Integer sili_br_nlayers /8/ ! Number of barrel layers Real sili_br_snhalfx(20) /.696,19*1.71555/ ! Si sensor width, cm Real sili_br_snhalfy(20) /0.01,19*0.02/ ! Si sensor thickness, cm Real sili_br_snhalfz(20) /2.836,19*3.2291/ ! Si sensor length, cm Real sili_br_bp_thk /0.0017/ ! ROC3 bias plane thickness cm Real sili_br_psv_thk /0.12/ ! ROC3 insulator thickness cm Real sili_br_k3_thk(2) /0.09,0.33/ ! K3 thickness cm Real sili_br_tb_thk(2) /0.0381, 0.028/ ! Cooling u-tube thickness for stripixel cm Real sili_br_stv_thk(3) /0.05, 0.0410, 0.0408/ ! ROC3 stave thickness cm Real sili_br_bus_thk(2) /0.0178, 0.0054/ ! BUS thickness for stripixel cm Real sili_br_rcc_thk(2) /0.1484, 0.0027/ ! RCC thickness for stripixel cm Real sili_br_tap_thk(2) /0.0127, 0.0027/ ! TAPER thickness for stripixel cm Real sili_br_rsn_thk /0.01/ ! CFC resin thickness cm Real sili_br_x0add(20) /20*0.01/ ! Passive material thickness c ! in the ladders added on top c ! of Si sensor, RadLength X0 Real sili_br_snzgap(20) /20*0./ ! Sensor z-gap (if >=0) or c ! sensor z-overlap (if <0), cm Real sili_br_tilt(20) /7.8,7.0,0.0,0.0,16*0./ ! Ladder tilts Integer sili_br_nsn(20) /4,19*5/ ! Number of Si sensors/ladder Real sili_br_r(20) /2.5,5.,10.,14.,0.3,15*0./ ! Radial positions ... c ! (read carefully!!!) c ! of the center line, c ! x=y=0 (loca Si sensor c ! coordinates), of the Si c ! sensors in the layers c ! The fifth parameter is staggering c ! in strip layers 3 and 4. c ! Set it to 0 to get old geometry Real sili_br_z(20) /20*0./ ! Z-pos. of the ladder centers in SICG Real sili_br_dphi(20) /29.40,29.40 ! Azim. spacing of ladders, deg. * ,22.87,18.71 * ,16*0./ Real sili_br_stdphi(5,4) /10*0. * ,28.20, 18.04, 17.36, 16.06, 30.84 * ,24.86, 12.40, 11.60, 12.06, 22.96/ Integer sili_br_nsec(20) /20*2/ ! Number of cont. phi-sections/layer Real sili_br_phic(5,20) /0.,180.,3*0. ! Sect. center azimuth pos. * ,0.,180.,3*0. * ,0.,180.,3*0. * ,0.,180.,3*0. * ,80*0./ Integer sili_br_nlad(5,20) /5*5 ! Number of ladders/phi-section * ,5*5 * ,5*7 * ,5*9 * ,80*1/ real sili_br_misalignment(8) /8*0./ ! misalignment in X-Y plane (cm), east arm first real sili_br_shiftstag logical lbarrel /.true./ ! allows the barrel to be switched on/off integer sili_wheel_yesno /1/ ! build readout wheels or not c ====================================================================== c The parameters are for support rings at the end of the ladders Integer sili_br_nspring /2/ ! Number of rings Real sili_br_spz(20) /-17.,17.,18*0./ ! Z-positions, cm Real sili_br_sprin(20) /20*2.4/ ! Inner radii, cm Real sili_br_sprout(20) /20*10./ ! Outer radii, cm Real sili_br_spthck(20) /20*0.25/ ! Half-hickness, cm Real sili_br_manz(20) /-17.,17.,18*0./ ! Z-positions cooling manifold Real sili_br_manr(20) /20*2.4/ ! mean radius cooling manifold Real sili_br_mandia(20) /20*10./ ! diameter cooling manifold real pixel_hdi_thk/.01/ real pixel_hdi_phimin/100./ real pixel_hdi_phimax/260./ real siwh_ppcb_half(3) ! pixel pcb half-thickness = 1/32" real siwh_spcb_half(3) ! strip pcb half-thickness = 1/32" real siwh_fpcb_thick ! fvtx pcb half-thickness = 1/32" real siwh_pcb_z(10) ! pcb center positions real siwh_pcb_rmax ! pcb max radius real siwh_pcb_connz ! pcb connector half-z real siwh_pcb_suppz(10) ! pcb support/cooling half-z real siwh_roha1_thick ! inner rohacell cover half-thickness real sili_br_ct_radius ! cooling tube radius real sili_endcap_z(8) ! to place barrel cables, endcap roha cage c ====================================================================== namelist /sili_br_par/ sili_br_nlayers,sili_br_r,sili_br_z $ ,sili_br_nsn,sili_br_snhalfx,sili_br_snhalfy,sili_br_snhalfz $ ,sili_br_bp_thk,sili_br_psv_thk,sili_br_k3_thk,sili_br_tb_thk $ ,sili_br_stv_thk,sili_br_bus_thk,sili_br_rcc_thk $ ,sili_br_tap_thk,sili_br_rsn_thk,sili_br_x0add,sili_br_snzgap $ ,sili_br_nsec,sili_br_nlad,sili_br_phic,sili_br_dphi $ ,sili_br_stdphi,sili_br_tilt $ ,sili_br_nspring,sili_br_spz,sili_br_sprin $ ,sili_br_sprout,sili_br_spthck & ,sili_br_manz,sili_br_manr ,sili_br_mandia $ ,sili_br_misalignment, & sili_wheel_yesno,siwh_ppcb_half,siwh_spcb_half, & siwh_fpcb_thick, siwh_pcb_z, siwh_pcb_rmax, & siwh_pcb_connz, siwh_pcb_suppz, siwh_roha1_thick, & sili_br_ct_radius, sili_endcap_z, & vtx_shiftx, vtx_shifty, vtx_shiftz real vtx_shiftx, vtx_shifty, vtx_shiftz C ================================================================ C--- Local definitions C ================================================================ c Input filename character*50 svxpar_file /'svxPISA.par'/ ! Output file for parameters character*4 set_id /'SVX '/ ! Detector/hit set ID c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" c VTX cage volume names character*4 siliEnvelope/'SIEN'/ ! Envelope (outer cage surface) character*4 siliCage /'SICG'/ ! Cage inner surface character*4 siliSupport /'SISP'/ ! Barrel support rings character*4 siliEcSppFr /'SISF'/ ! Gas Enclosure - Support frame character*4 siliEcPoly /'SIPL'/ ! Gas Enclosure - Polyethylene character*4 siliEcRoha /'SIER'/ ! Gas Enclosure - Rohacell character*4 siliAlMylar /'SIML'/ ! Gas Enclosure - Aluminum Mylar character*4 siliPCB /'SIPB'/ ! PCB on Big Wheel c VTX, FVTX layer names (for barrel, names of ladders in a layer) character*4 siljNames(28) /'SJ01', 'SJ02', 'SJ03', 'SJ04', ! SJ01-04: silicon & 'SJ05', 'SJ06', 'SJ07', 'SJ08', ! holder volumes. & 'SJ09', 'SJ10', 'SJ11', 'SJ12', & 'SJ13', 'SJ14', 'SJ15', 'SJ16', ! & 'SJ17', 'SJ18', 'SJ19', 'SJ20', ! SI05-SI20 are FVTX & 'SJ21', 'SJ22', 'SJ23', 'SJ24', ! half-disks (16) & 'SJ25', 'SJ26', 'SJ27', 'SJ28'/ ! character*4 siliNames(28) /20*'xxxx', & 'SI21', 'SI22', 'SI23', 'SI24', ! These are the whole ladders. & 'SI25', 'SI26', 'SI27', 'SI28'/ character*4 siliStSupp(4) /'SP01', 'SP02', 'SP03', 'SP04'/ ! only sp03,4 exist character*4 siliBrSensor /'SISN'/ ! Barrel sensor name character*4 siliBrRead /'SIRC'/ ! Barrel readout chip character*4 siliBrResin /'SIRS'/ ! Barrel resin character*4 siliBrResinn /'SIRR'/ ! Barrel resin character*4 siliBrK3 /'SIK3'/ ! Barrel k3 side character*4 siliBrTube /'SITB'/ ! Barrel cooling tube character*4 siliBrCool /'SICL'/ ! Barrel cooling tube character*4 siliBrBusp /'SIBS'/ ! Barrel Bus (Pixe) character*4 siliBrBus1 /'SIB1'/ ! Barrel Bus (Strip) character*4 siliBrBus2 /'SIB2'/ ! Barrel Bus (Strip) character*4 siliBrRCC1 /'SIR1'/ ! Barrel RCC character*4 siliBrRCC2 /'SIR2'/ ! Barrel RCC character*4 siliBrRCC3 /'SIR3'/ ! Barrel RCC character*4 siliBrRCC4 /'SIR4'/ ! Barrel RCC character*4 siliBrRCC5 /'SIR5'/ ! Barrel RCC character*4 siliBrStave /'SIST'/ ! Barrel stave character*4 siliBrBPlane /'SIBP'/ ! Barrel bias plane character*4 siliBrAPlane /'SIAP'/ ! Barrel analog ground and power plane character*4 siliBrDPlane /'SIDP'/ ! Barrel digital ground plane character*4 siliBrPassive /'SIPV'/ ! Barrel strips passive material name character*4 siliBrPassivePix /'SIPP'/ ! Barrel pixels passive material name (does not exist?) character*4 siliBrVGPlane /'SIVG'/ ! Barrel vdd and digital plane material name character*4 siliBrSGPlane /'SISG'/ ! Barrel signal plane material name character*4 siliBrOmega /'SIOM'/ ! Barrel omega shape name character*4 siliBrOmegap /'SIOP'/ ! Barrel omega piece name character*4 siliBrSVX4 /'SVX4'/ ! Barrel svx4 name c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" c The following are used in GSDET: namesv(4) is to be replaced with c 'SJ01', 'SJ02', ... at running time c Integer nwpa /500/ ! Init. size of HITS banks Integer nwsa /500/ ! Init. size of DIGI banks Integer idtype /2001/ ! User def. detector type Integer nbrv /5/ ! Num. of br. vol. desc. Integer necv /9/ ! Num. of endcap vol. desc. Integer nv /8/ ! max(nbrv,necv) Integer nbitsv(7) /7*8/ ! Bits to pack vol. copy # Character*4 namesv(8) /'HALL','SIEN','SICG', * 'SVXx','Lx_x','SI0x','SJxx','SISN'/ ! Volume names, barrel c Character*4 namesw(7) /'HALL','SIEN','SICG' ! moved to svx_fvtx.f c * ,'SIxx','SIPx','SISx','SSSx'/ ! Volume names, endcaps c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" c The following are used in GSDETH c """""""""""""""""""""""""""""""" c Hit parameters will be global position(3), energy loss, time of flight, c particle type and c entry momentum(3), local in & out positions(6), c Integer nhh /21/ ! Number of hit components integer*4 inrNBITSH(21) /21*32/ ! Bits for packing the hits c Hit component names character*4 inrNMSH(21) /'POSX','POSY','POSZ' ! Global positions & ,'DELE','TOFL' ! Energy loss & TOF & ,'P_ID','MOMX', 'MOMY', 'MOMZ' ! Particle ID & Entry mom. & ,'XILC','YILC','ZILC','XOLC','YOLC','ZOLC' ! Local entry & exit & ,'XIGL','YIGL','ZIGL','XOGL','YOGL','ZOGL'/ ! global entry & exit c Default setting of offsets and gains REAL inrORIG(21) /3*1000.,3*0.,3*1000.,6*1000.,6*1000./ ! offsets REAL inrFACT(21) /3*100000.,1.E7,1.e12,1.0,3*100000. & ,6*100000.,6*100000./ ! gains c c The above gains give c - 0.1 keV energy deposition resolution c - 0.0001 mm position resolution c - 0.01 MeV/c momentum resolution c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" c Rotation matrices c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" Integer irot_cage ! Cage (SIEN) rotation matrix # C ================================================================ C--- Local definitions of materials/media C ================================================================ Integer sili_med_silicon /10/ ! Sensitive silicon nmed (nmat=50,Si) Integer sili_med_passilicon /11/ ! Passive silicon nmed (nmat=50,Si) Integer sili_med_copper /15/ ! Ladder passive nmed (nmat=11,Cu) Integer sili_med_passive /26/ ! Ladder passive nmed (nmat=09,Al) Integer sili_med_cg /120/ ! Cage (SIEN-SICG) nmat/nmed (Rohacell) Integer sili_med_coldair /121/ ! Gas inside the SICG (cold air) Integer sili_med_gfrp /122/ ! GFRP for the fake support integer sili_med_carbon /123/ ! carbon-carbon composite integer sili_med_coolant /124/ ! C5F12 liquid coolant integer sili_med_honeycomb /125/ ! 1/4" honeycomb, .5mm c-c skin, Al core integer sili_med_m55j /126/ ! M55J integer sili_med_hdi /108/ ! integer sili_med_resin /127/ ! CFC resin integer sili_med_cfiber /128/ ! carbon-fiber integer sili_med_kapton /129/ ! kapton integer sili_med_k3 /130/ ! Allcomp K3 integer sili_med_poly /131/ ! Polyethylene c Material for the cage, volumes SIEN-SICG c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" C Copied from pisa200/src/ver/vermatdef.f, Rev 1.2 C Rohacell(H11-C8-N1-O12) Mixture Parameters for the vertex detector: REAL AROHA(4)/ 1.008 , 12.01 , 14.008 , 16. / ! A for Rohacell REAL ZROHA(4)/ 1. , 6. , 7. , 8. / ! Z for Rohacell REAL WROHA(4)/ 11. , 8. , 1. , 2. / ! Weights for Rohacell c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ! kapton cable mixture: REAL ACABLE(5) / 12.01, 14.008, 16.00, 1.008, 63.54 / REAL ZCABLE(5) / 6. , 7. , 8. , 1. , 29. / REAL WCABLE(5) / .21 , .03 , .091 , .013 , .655 / REAL DENCABLE / 2.74/ C C ================================================================ c--- Local work variables (counters, etc) C ================================================================ CHARACTER*20 NAMTMED INTEGER NMAT, ISVOL, IFIELD, NWBUF, LNAM(6) integer LNUM(6) /1,1,1,1,1,1/ REAL FIELDM,TMAXFD,DMAXMS,DEEMAX,EPSIL,STMIN & ,WMAT(4),UBUF(1),ANUMB,ZNUMB,DENS,RADL,ABSL CHARACTER*80 CHFORM character*4 v_m_name,v_i_name, v_j_name, sil_name, name_ew, & shell(8) data shell/'L1_W','L2_W','L3_W','L4_W', & 'L1_E','L2_E','L3_E','L4_E'/ integer iLayer, iPoint, icnt, nr, npar, nmed, ivolu, iset, idet, & iod, wedges, nladd, iladd, isec, isen, nsensors, ivol1, ierr, & icopy, irottop, irotbot, irot1, irot2, irot3, irotrcc, i, & nsvx, nsvxr, nstvr, nk3r, ntbr, nclr, nbusr, nrccr, irotSICT, & iew, ishell real dim_sili(30), philadd, dphid, dphir, dphit, sgn, & phisupp, dthck, phirotladd, rladd, xladd, yladd, zladd, & rsupp, xsupp, ysupp, & rjsupp, xjsupp, yjsupp, crrcc, xrcc, yrcc, & zrcc, & xrccd, yrccd,phirotladdtmp,zrotladd, & ladd_halfx, ladd_halfthck, supp_halfthck, & ladd_halfz, pasv_radl, pasv_halfy, & b_halfx,agv_halfx,dg_halfx,s_halfx,r_halfx,sig_halfx,vg_halfx, & b_halfy,agv_halfy,dg_halfy,s_halfy(3),r_halfy,sig_halfy,vg_halfy, & bus_halfx, bus_halfy(2), rcc_halfx, rcc_halfy(2), & tap_halfx, tap_halfy(2), & k31_halfx, k32_halfx, k33_halfx, k34_halfx, & k31_halfy, k32_halfy, k33_halfy, k34_halfy, & tb1_halfx, tb2_halfx, tb3_halfx, tb4_halfx, & tb1_halfy, tb2_halfy, tb3_halfy, tb4_halfy, & sen_y(2), par(20), rcool, a_cool(4), z_cool(4), & posx, posy, a_honey(2), z_honey(2), & siwh_rmin, siwh_rmax, bwedge_lowx, bwedge_highx, swedge_lowx, & swedge_highx, aangle, bangle, cstep, ssil_lowx, ssil_highx, & ssil_len, wedge_thk, back_planthk, hdithk, silthk, routerb, & routers, stationzthick, bsil_lowx, bsil_highx, bsil_len, & z_disk, sens_off, & phictladd(2),dphict(2),rctladd(2),xctladd(2),yctladd(2), & phiomladd(4),dphiom(4),romladd(4),xomladd(4),yomladd(4), & shiftstag(2),phitmpladd,ctdist, & xomega(2), yomega(2), romega(2), a_omega(4), z_omega(4), & xomegap(2), yomegap(2), romegap(2), phiompladd(2),dphiomp(2), & a_kapton(4), z_kapton(4), a_poly(2), z_poly(2), & sir4x, sir4y, sir4z, sir5x, sir5y, sir5z, sj12_y, & rholder(5) data rholder/2.3, 4.0, 9.0, 14.7, 19.7/ real rmyres,rmyrndm,rmydum integer rmyrndmi integer itf_lun ! geometry description logical unit common /interface/itf_lun integer skip_sector, skip_ladder integer sec_flag, lad_flag C======================================================================! C*************************** EXECUTABLE CODE***************************! C======================================================================! C c>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> c BEGIN c>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> c c Read the geometry file segments c write( *,* ) 'svx - reading parameter from common interface' rewind( unit = itf_lun ) read( itf_lun, nml = sili_run_par, err = 996 ) read( itf_lun, nml = sili_cg_par, err = 998 ) read( itf_lun, nml = sili_ec_par, err = 999 ) read( itf_lun, nml = sili_br_par, err = 997 ) C C only book volumes if input parameters are OK C write(*,'(a16,5a5)') 'SVX CVOLU_OPT = ', & CVOLU_OPT(1,3),CVOLU_OPT(2,3),CVOLU_OPT(3,3), & CVOLU_OPT(4,3),CVOLU_OPT(5,3) IF(CVOLU_OPT(1,3).EQ.'BARR') continue write(*,*) ' sili_endcap_config = ', sili_endcap_config IF(CVOLU_OPT(1,3).EQ.'FULL'.OR. & CVOLU_OPT(1,3).EQ.'VOLS'.OR. & CVOLU_OPT(1,3).EQ.'BARR') THEN NH = nhh ! Number of hit components to NH output parameter nv = max(nbrv, necv) ! Number of volume descriptors C********+*********+*********+*********+*********+*********+*********+** C Define mixture ROHACELL for the SIEN C Copied from pisa200/src/ver/vermatdef.f, Rev 1.2 C nwbuf = 1 ! number of user words in GSMATE calls NMAT = sili_med_cg ! Rohacell CALL GSMIXT (NMAT,' ROHACELL$',AROHA,ZROHA,0.075,-4,WROHA) C C Tracking media # sili_cg_wall - Rohacell C NMED = sili_med_cg ! Rohacell ISVOL = 0 ! Not sensitive IFIELD = 1 ! Magnetic field FIELDM = 10.0 ! max field TMAXFD = 45.0 ! maximum angle due to field (one step) in deg DMAXMS = 0.2 ! max disp. due to mulsct. in one step (cm) DEEMAX = 0.1 ! max fractional energy loss in one step EPSIL = .001 ! tracking precision (cm) STMIN = 0.5 ! min step due to e loss or mulsct. (cm) UBUF(1) = 0. ! tracking stop switch CALL GSTMED(NMED,'Rohacell$',NMAT,ISVOL,IFIELD 1 ,FIELDM,TMAXFD,DMAXMS,DEEMAX,EPSIL,STMIN,UBUF,NWBUF) NMAT = sili_med_hdi ! 108 Kapton cables CALL GSMIXT (NMAT,' ROHACELL$',ACABLE,ZCABLE,DENCABLE,5,WCABLE) C C Tracking media # 108 -- MVD/VTX/FVTX/IFVTX cables (kapton + copper) C NMED = sili_med_HDI ! HDI ISVOL = 0 ! Not sensitive IFIELD = 1 ! Magnetic field FIELDM = 5.0 ! max field TMAXFD = 45.0 ! maximum angle due to field (one step) in degrees DMAXMS = 0.2 ! max disp. due to mulsct. in one step (cm) DEEMAX = 0.1 ! max fractional energy loss in one step EPSIL = .001 ! tracking precision (cm) STMIN = 0.5 ! min step due to e loss or mulsct. (cm) UBUF(1) = 0. ! tracking stop switch CALL GSTMED(NMED,'HDI$',NMAT,ISVOL,IFIELD,FIELDM,TMAXFD, & DMAXMS,DEEMAX,EPSIL,STMIN,UBUF,NWBUF) c Define material 'AIRCOLD' at 0C nmat = sili_med_coldair CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: * write (6,*)' aircold:' if (anumb.ne. -1.0) goto 993 ! if so, abort. anumb = 14.61 znumb = 7.3 dens = 1.293e-3*273./(sili_cg_tempc+273.) radl = 0.283e5*(sili_cg_tempc+273.)/273 absl = 0.696e5*(sili_cg_tempc+273.)/273. ubuf(1) = sili_cg_tempc nwbuf = 1 CALL GSMATE(nmat,'AIRCOLD',anumb,znumb, 1 dens,radl,absl,ubuf,nwbuf) nmed = sili_med_coldair ! Air at temperature sili_cg_tempc C isvol = 0 ! Not sensitive ifield = 1 ! magnetic field fieldm = 10. ! max field, kGs tmaxfd = 0.2 ! max angle due to field (one step) in degrees dmaxms = 0.1 ! max disp. due to mulsct. in one step, cm deemax = 0.01 ! max fractional energy loss in one step epsil = 0.001 ! tracking precision, cm stmin = 0.1 ! min step due to e-loss or multsct., cm ubuf(1) = 0. ! tracking stop switch CALL GSTMED(nmed,'AIRCOLD$',nmat,isvol,ifield,fieldm * ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'GFRP' (slightly modified G10 from ../itr/pc1gem.f) nmat = sili_med_gfrp ! CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: if (anumb.ne. -1.0) goto 993 ! if so, abort. anumb = 18.14 ! NOTE that an unsuccessful znumb = 9.065 ! call to GFMATE can clobber dens = 1.68 ! the returned variables, so we radl = 25. ! set them all AFTER calling GFMATE absl = 56.7 ! Jan 2007 HvH ubuf(1) = 0. nwbuf = 1 CALL GSMATE(nmat,'GFRP',anumb,znumb,dens 1 ,radl,absl,ubuf,nwbuf) nmed = sili_med_gfrp isvol = 0 ! Not sensitive ifield = 1 ! magnetic field fieldm = 10. ! max field, kGs tmaxfd = 0.2 ! max angle due to field (one step) in degrees dmaxms = 0.1 ! max disp. due to mulsct. in one step, cm deemax = 0.01 ! max fractional energy loss in one step epsil = 0.001 ! tracking precision, cm stmin = 0.1 ! min step due to e-loss or multsct., cm ubuf(1) = 0. ! tracking stop switch CALL GSTMED(nmed,'GFRP$',nmat,isvol,ifield,fieldm * ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'Carbon-carbon', for endcap composite panels nmat = sili_med_carbon ! = 123 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: * write (6,*)' carbon:',ubuf,nwbuf if (anumb.ne. -1.0) goto 993 ! if so, abort. anumb = 12.01 ! from call to gpmate(0) znumb = 6.00 ! dens = 1.78 ! from Hytec report (default=2.265) radl = 23.9 ! scaled up from density absl = 63.5 ! scaled up from density ubuf(1) = 0. nwbuf = 1 CALL GSMATE(nmat,'Carbon-carbon$',anumb,znumb,dens & ,radl,absl,ubuf,nwbuf) nmed = sili_med_carbon isvol = 0 ! Not sensitive ifield = 1 ! magnetic field fieldm = 10. ! max field, kGs tmaxfd = 0.2 ! max angle due to field (one step) in degrees dmaxms = 0.1 ! max disp. due to mulsct. in one step, cm deemax = 0.01 ! max fractional energy loss in one step epsil = 0.001 ! tracking precision, cm stmin = 0.1 ! min step due to e-loss or multsct., cm ubuf(1) = 0. ! tracking stop switch CALL GSTMED(nmed,'Carbon-carbon$',nmat,isvol,ifield,fieldm * ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'Freon-coolant' ! H5C6OF9 (NOVEC 7200) nmat = sili_med_coolant! = 124 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: * write (6,*)' coolant:' if (anumb.ne. -1.0) goto 993 ! if so, abort. If not, define: a_cool(1) = 1.008 ! Hydrogen z_cool(1) = 1.000 ! wmat (1) = 5 ! a_cool(2) = 12.010 ! Carbon z_cool(2) = 6.000 ! wmat (2) = 6 ! a_cool(3) = 15.999 ! Oxygen z_cool(3) = 8.000 ! wmat (3) = 1 ! a_cool(4) = 18.998 ! Fluor z_cool(4) = 9.000 ! wmat (4) = 9 ! dens = 1.43 ! NOVEC 7200 CALL GSMIXT(nmat,'Freon-coolant$', a_cool, z_cool, dens,-2,wmat) nmed = sili_med_coolant ! use parameters from carbon-carbon CALL GSTMED(nmed,'Freon-coolant$',nmat,isvol,ifield,fieldm & ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) * write (6,*)' honeycomb:' nmat = sili_med_honeycomb ! = 125 a_honey(1) = 12.010 ! Carbon z_honey(1) = 6.000 ! wmat (1) = 0.97 ! 97% by weigh a_honey(2) = 26.98 ! Aluminum z_honey(2) = 13.000 ! wmat (2) = 0.03 ! 3% by weight dens = 0.251 ! scaled from c-c CALL GSMIXT(nmat,'Honeycomb-1$', a_honey, z_honey, dens,2,wmat) nmed = sili_med_honeycomb ! use parameters from carbon-carbon CALL GSTMED(nmed,'Honeycomb-1$',nmat,isvol,ifield,fieldm & ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'M55J-omega' ! M55J (from Hytec report) nmat = sili_med_m55j ! = 126 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: if (anumb.ne. -1.0) goto 993 ! if so, abort. If not, define: a_omega(1) = 12.010 ! Carbon z_omega(1) = 6.000 ! wmat (1) = 0.91 ! a_omega(2) = 14.0067 ! Nitrogen z_omega(2) = 7.000 ! wmat (2) = 0.01 ! a_omega(3) = 15.9994 ! Oxygen z_omega(3) = 8.000 ! wmat (3) = 0.055 ! a_omega(4) = 1.00794 ! Hydrogen z_omega(4) = 1.000 ! wmat (4) = 0.025 ! dens = 1.63 ! from Hytec report CALL GSMIXT(nmat,'M55J-omega$', a_omega, z_omega, dens,4,wmat) nmed = sili_med_m55j CALL GSTMED(nmed,'M55J-omega$',nmat,isvol,ifield,fieldm & ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'CFC resin', for resin between insulator and stave nmat = sili_med_resin ! = 127 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: if (anumb.ne. -1.0) goto 993 ! if so, abort. anumb = 12.01 ! from call to gpmate(0) znumb = 6.00 ! dens = 1.2 ! default=2.265 radl = 35.5 ! scaled up from density absl = 94.2 ! scaled up from density ubuf(1) = 0. nwbuf = 1 CALL GSMATE(nmat,'Resin$',anumb,znumb,dens & ,radl,absl,ubuf,nwbuf) nmed = sili_med_resin isvol = 0 ! Not sensitive ifield = 1 ! magnetic field fieldm = 10. ! max field, kGs tmaxfd = 0.2 ! max angle due to field (one step) in degrees dmaxms = 0.1 ! max disp. due to mulsct. in one step, cm deemax = 0.01 ! max fractional energy loss in one step epsil = 0.001 ! tracking precision, cm stmin = 0.1 ! min step due to e-loss or multsct., cm ubuf(1) = 0. ! tracking stop switch CALL GSTMED(nmed,'Resin$',nmat,isvol,ifield,fieldm * ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'Carbon-fiber', for endcap composite panels nmat = sili_med_cfiber ! = 128 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: * write (6,*)' carbon:',ubuf,nwbuf if (anumb.ne. -1.0) goto 993 ! if so, abort. anumb = 12.01 ! from call to gpmate(0) znumb = 6.00 ! dens = 1.60 ! from Hytec report (default=2.265) 2008/08/06 radl = 26.6 ! scaled up from density absl = 70.6 ! scaled up from density ubuf(1) = 0. nwbuf = 1 CALL GSMATE(nmat,'Carbon-fiber$',anumb,znumb,dens & ,radl,absl,ubuf,nwbuf) nmed = sili_med_cfiber isvol = 0 ! Not sensitive ifield = 1 ! magnetic field fieldm = 10. ! max field, kGs tmaxfd = 0.2 ! max angle due to field (one step) in degrees dmaxms = 0.1 ! max disp. due to mulsct. in one step, cm deemax = 0.01 ! max fractional energy loss in one step epsil = 0.001 ! tracking precision, cm stmin = 0.1 ! min step due to e-loss or multsct., cm ubuf(1) = 0. ! tracking stop switch CALL GSTMED(nmed,'Carbon-fiber$',nmat,isvol,ifield,fieldm * ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media 'Kapton' ! Kapton Polyimide nmat = sili_med_kapton ! = 129 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: if (anumb.ne. -1.0) goto 993 ! if so, abort. If not, define: a_kapton(1) = 1.00794 ! Hydrogen z_kapton(1) = 1.000 ! wmat (1) = 0.026362 ! a_kapton(2) = 12.010 ! Carbon z_kapton(2) = 6.000 ! wmat (2) = 0.691133 ! a_kapton(3) = 14.0067 ! Nitrogen z_kapton(3) = 7.000 ! wmat (3) = 0.07327 ! a_kapton(4) = 15.9994 ! Oxygen z_kapton(4) = 8.000 ! wmat (4) = 0.209235 ! dens = 1.43 ! CALL GSMIXT(nmat,'Kapton$', a_kapton, z_kapton, dens,4,wmat) nmed = sili_med_kapton CALL GSTMED(nmed,'Kapton$',nmat,isvol,ifield,fieldm & ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media Allcomp K3 nmat = sili_med_k3 ! = 130 CALL GFMATE(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: if (anumb.ne. -1.0) goto 993 ! if so, abort. anumb = 12.01 ! from call to gpmate(0) znumb = 6.00 ! dens = 0.2 ! radl = 213 ! scaled up from density absl = 565.2 ! scaled up from density ubuf(1) = 0. nwbuf = 1 CALL GSMATE(nmat,'K3$',anumb,znumb,dens & ,radl,absl,ubuf,nwbuf) nmed = sili_med_k3 isvol = 0 ! Not sensitive ifield = 1 ! magnetic field fieldm = 10. ! max field, kGs tmaxfd = 0.2 ! max angle due to field (one step) in degrees dmaxms = 0.1 ! max disp. due to mulsct. in one step, cm deemax = 0.01 ! max fractional energy loss in one step epsil = 0.001 ! tracking precision, cm stmin = 0.1 ! min step due to e-loss or multsct., cm ubuf(1) = 0. ! tracking stop switch CALL GSTMED(nmed,'K3$',nmat,isvol,ifield,fieldm * ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) c Define material/media Polyethylene nmat = sili_med_poly ! = 131 C2H4H2 call gfmate(nmat,sil_name,anumb,znumb, ! First check if this material & dens,radl,absl,ubuf,nwbuf) ! number has already been used: if (anumb.ne. -1.0) goto 993 ! if so, abort. a_poly(1) = 1.00794 ! Hydrogen z_poly(1) = 1.000 wmat(1) = 0.75 a_poly(2) = 12.010 ! Carbon z_poly(2) = 6.000 wmat(2) = 0.25 dens = 0.941 ! g/cm3 CALL gsmixt(nmat,'Polyethylene$',a_poly,z_poly,dens,2,wmat) nmed = sili_med_poly call gstmed(nmed,'Polyethylene$',nmat,isvol,ifield,fieldm & ,tmaxfd,dmaxms,deemax,epsil,stmin,ubuf,nwbuf) cxx call gpmate(0) ! print all materials cxx cxx call gptmed(0) ! print all media C********+*********+*********+*********+*********+*********+*********+** C... Create outer envelope SIEN of the VTX/FVTX, including the 'big wheels' dim_sili(1) = 0. dim_sili(2) = 360. dim_sili(3) = sili_cg_npcon npar = 3 Do icnt = 1, sili_cg_npcon npar = npar + 1 dim_sili(npar) = sili_cg_z(icnt) npar = npar + 1 dim_sili(npar) = sili_cg_rmn npar = npar + 1 dim_sili(npar) = sili_cg_rmx(icnt) Enddo v_m_name = 'HALL' v_i_name = siliEnvelope ! = SIEN nr = 1 call gsvolu(v_i_name,'PCON',sili_med_cg,dim_sili,npar,ivolu) call gsatt(v_i_name,'SEEN',1) call gspos(v_i_name,nr,v_m_name, * sili_cg_xdisp,sili_cg_ydisp,sili_cg_zdisp, * irotnull,'ONLY') C... Create inner volume SICG for the VTX/FVTX, a cylinder with a hole for the beampipe. dim_sili(1) = 0.0 dim_sili(2) = 360.0 dim_sili(3) = 2 dim_sili(4) = sili_cg_z(1) + sili_cg_thck dim_sili(5) = sili_cg_rmn dim_sili(6) = sili_cg_rmx(3) - sili_cg_thck dim_sili(7) = sili_cg_z(6) - sili_cg_thck dim_sili(8) = sili_cg_rmn dim_sili(9) = sili_cg_rmx(3) - sili_cg_thck nmed = sili_med_coldair ! Air at temperature sili_cg_tempc C v_m_name = siliEnvelope v_i_name = siliCage nr = 1 call gsvolu(v_i_name,'PCON',nmed,dim_sili,9,ivolu) call gsatt(v_i_name,'SEEN',1) call gspos(v_i_name,nr,v_m_name,0.,0.,0.,irotnull,'ONLY') ! Make holder volumes for the East VTX and the West VTX ladd_halfz = sili_br_nsn(4)*sili_br_snhalfz(4) * + 0.5*sili_br_snzgap(4)*(sili_br_nsn(4)-1) ! layer 4 Length/2 dim_sili(1) = -85 ! layer 3,4 West holder volumes dim_sili(2) = 170 ! phi, dphi dim_sili(3) = 2 ! nz dim_sili(4) = -ladd_halfz - 0.1 ! z1 dim_sili(5) = rholder(1) + 0.2 ! rmin dim_sili(6) = rholder(5) ! rmax dim_sili(7) = +ladd_halfz + 0.2 ! z2 dim_sili(8) = dim_sili(5) ! rmin dim_sili(9) = dim_sili(6) ! rmax ! Make shells to hold the ladders do isec = 1, 2 ! 2 sectors: West, East if (isec.eq.1) then ! dim_sili(1) = -85 name_ew = 'SVXW' call gsvolu(name_ew,'PCON', nmed, dim_sili, 9, ivolu) call GSATT (name_ew,'SEEN',1) call GSATT (name_ew,'COLO',6) ! 2=red call GSPOS (name_ew,1,'SICG',0,0,0,irotnull,'ONLY') else dim_sili(1) = 95 name_ew = 'SVXE' call gsvolu(name_ew,'PCON', nmed, dim_sili, 9, ivolu) call GSATT (name_ew,'SEEN',1) call GSATT (name_ew,'COLO',6) ! 2=red call GSPOS (name_ew,1,'SICG',0,0,0,irotnull,'ONLY') endif write (6,*)' made half-shell ',name_ew enddo C... Create Gas Enclosure c Space Frame nmed = sili_med_gfrp ! G-10 v_m_name = siliEnvelope v_i_name = siliEcSppFr dim_sili(1) = 0.0 dim_sili(2) = 360.0 dim_sili(3) = 2 dim_sili(4) = sili_ec_sf_z(1) dim_sili(5) = sili_ec_sf_rmn dim_sili(6) = sili_ec_sf_rmx dim_sili(7) = sili_ec_sf_z(2) dim_sili(8) = sili_ec_sf_rmn dim_sili(9) = sili_ec_sf_rmx call gsvolu(v_i_name,'PCON',nmed,dim_sili,9,ivolu) call gsatt(v_i_name,'SEEN',1) call gsatt(v_i_name,'COLO',4) nr = 1 call gspos(v_i_name,nr,v_m_name,0.,0.,0.,irotnull,'ONLY') c HDPE nmed = sili_med_poly ! HDPE v_m_name = siliEnvelope v_i_name = siliEcPoly dim_sili(1) = 0.0 dim_sili(2) = 360.0 dim_sili(3) = 2 dim_sili(4) = sili_ec_sf_z(1) dim_sili(5) = sili_ec_pl_rmn dim_sili(6) = sili_ec_pl_rmn + sili_ec_pl_thk dim_sili(7) = sili_ec_sf_z(2) dim_sili(8) = dim_sili(5) dim_sili(9) = dim_sili(6) call gsvolu(v_i_name,'PCON',nmed,dim_sili,9,ivolu) call gsatt(v_i_name,'SEEN',1) call gsatt(v_i_name,'COLO',2) nr = 1 call gspos(v_i_name,nr,v_m_name,0.,0.,0.,irotnull,'ONLY') c Rohacell nmed = sili_med_cg v_m_name = siliEnvelope v_i_name = siliEcRoha dim_sili(1) = 0.0 dim_sili(2) = 360.0 dim_sili(3) = 2 dim_sili(4) = sili_ec_sf_z(1) dim_sili(5) = dim_sili(6) dim_sili(6) = dim_sili(5) + sili_ec_rh_thk dim_sili(7) = sili_ec_sf_z(2) dim_sili(8) = dim_sili(5) dim_sili(9) = dim_sili(6) call gsvolu(v_i_name,'PCON',nmed,dim_sili,9,ivolu) call gsatt(v_i_name,'SEEN',1) call gsatt(v_i_name,'COLO',5) nr = 1 call gspos(v_i_name,nr,v_m_name,0.,0.,0.,irotnull,'ONLY') c Aluminum Mylar nmed = sili_med_passive v_m_name = siliEnvelope v_i_name = siliAlMylar dim_sili(1) = 0.0 dim_sili(2) = 360.0 dim_sili(3) = 2 dim_sili(4) = sili_ec_sf_z(1) dim_sili(5) = dim_sili(6) dim_sili(6) = dim_sili(5) + sili_ec_alm_thk dim_sili(7) = sili_ec_sf_z(2) dim_sili(8) = dim_sili(5) dim_sili(9) = dim_sili(6) call gsvolu(v_i_name,'PCON',nmed,dim_sili,9,ivolu) call gsatt(v_i_name,'SEEN',1) call gsatt(v_i_name,'COLO',2) nr = 1 call gspos(v_i_name,nr,v_m_name,0.,0.,0.,irotnull,'ONLY') C... Create Support rings. // Should be changed. nmed = sili_med_gfrp ! G-10 describing the clip blocks v_m_name = siliCage v_i_name = siliSupport ! SISP are support rings call gsvolu(v_i_name,'TUBE',nmed,dim_sili,0,ivolu) call gsatt(v_i_name,'SEEN',1) ! nmed = sili_med_honeycomb ! SISQ are posts that connect rings to outside frame call gsvolu('SISQ','TRD1',nmed,dim_sili,0,ivolu) call gsatt(v_i_name,'SEEN',1) nmed = sili_med_coolant call gsvolu('SJSP','TUBE',nmed,dim_sili,0,ivolu) ! cooling tube circle call gsatt(v_i_name,'SEEN',1) call gsvolu('SJSQ','TUBE',nmed,dim_sili,0,ivolu) ! cooling tube feeds call gsatt(v_i_name,'SEEN',1) npar = 3 irot = irot+1 ! for top SISQ posts call gsrotm(irot,90.,0.,180.,0.,90.,90.) irottop = irot irot = irot+1 ! for bottom SISQ posts call gsrotm(irot,90.,0.,0.,0.,90.,-90.) irotbot = irot Do nr = 1, sili_br_nspring ! loop over 8 rings dim_sili(1) = sili_br_sprin(nr) ! support rings dim_sili(2) = sili_br_sprout(nr) dim_sili(3) = sili_br_spthck(nr) if (lbarrel) then call gsposp(v_i_name,nr,v_m_name,0.,0., & sili_br_spz(nr), & irotnull,'ONLY',dim_sili,npar) ! endif dim_sili(1) = 0.14* sili_br_sprout(nr) ! ring support posts/wedges dim_sili(2) = 2.56 ! = sili_cg_rmx(1)*tan(8 degrees) dim_sili(3) = sili_br_spthck(nr) dim_sili(4) = (sili_cg_rmx(3) -0.5 -sili_br_sprout(nr))/2-0.12 if (nr.eq.1.or.nr.eq.5) then ! special for innermost rings dim_sili(2) = 0.14*sili_br_sprin(2) ! shared support dim_sili(4) = (sili_br_sprin(2) - sili_br_sprout(1))/2-0.05 endif posy = sili_br_sprout(nr) + dim_sili(4) if (lbarrel) then call gsposp('SISQ',nr,v_m_name,0.,posy, & sili_br_spz(nr), & irottop,'ONLY',dim_sili,4) ! call gsposp('SISQ',nr+8,v_m_name,0.,-posy, & sili_br_spz(nr), & irotbot,'ONLY',dim_sili,4) ! endif dim_sili(1) = sili_br_manr(nr) - 0.443*sili_br_mandia(nr) ! cooling manifolds - rings dim_sili(2) = sili_br_manr(nr) + 0.443*sili_br_mandia(nr) dim_sili(3) = 0.443*sili_br_mandia(nr) if (lbarrel) then call gsposp('SJSP',nr,v_m_name,0.,0., & sili_br_manz(nr), & irotnull,'ONLY',dim_sili,npar) ! endif dim_sili(1) = 0.0 ! cooling manifolds - supply pipes dim_sili(2) = 0.5*sili_br_mandia(nr) dim_sili(3) = (sili_cg_rmx(3) - sili_br_manr(nr) - & sili_cg_thck - 0.443*sili_br_mandia(nr))/2.0-0.1 posx = 1.0 posy = sili_br_manr(nr) +0.443*sili_br_mandia(nr)+ dim_sili(3) if (lbarrel.and.(nr.ne.1).and.(nr.ne.5)) then call gsposp('SJSQ',nr ,v_m_name, posx, posy, & sili_br_manz(nr), & irottop,'ONLY',dim_sili,4) ! call gsposp('SJSQ',nr+8 ,v_m_name, posx,-posy, & sili_br_manz(nr), & irotbot,'ONLY',dim_sili,4) ! call gsposp('SJSQ',nr+16,v_m_name,-posx, posy, & sili_br_manz(nr), & irottop,'ONLY',dim_sili,4) ! call gsposp('SJSQ',nr+24,v_m_name,-posx,-posy, & sili_br_manz(nr), & irotbot,'ONLY',dim_sili,4) ! endif Enddo ! loop over 8 rings C... Build barrel VTX C (4b) cooling tube (copied from further down, since copies are used in the barrel) call gsvolu( 'SICT', 'TUBS', sili_med_coolant, par, 0, ivol1) c Create omega shape behind the passive material nmed = sili_med_m55j ! M55J npar = 0 call gsvolu(siliBrOmega,'TUBS',nmed,dim_sili,npar,ivolu) call GSATT (siliBrOmega,'SEEN',1) call GSATT (siliBrOmega,'COLO',4) c Create omega shape behind the passive material nmed = sili_med_m55j ! M55J npar = 0 call gsvolu(siliBrOmegap,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrOmegap,'SEEN',1) call GSATT (siliBrOmegap,'COLO',4) c Create a Bus material nmed = sili_med_kapton ! Kapton npar = 0 call gsvolu(siliBrBusp,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrBusp,'SEEN',1) call GSATT (siliBrBusp,'COLO',37) c Create SVX4 behind the passive material nmed = sili_med_passilicon ! Passive Silicon npar = 0 call gsvolu(siliBrSVX4,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrSVX4,'SEEN',1) call GSATT (siliBrSVX4,'COLO',4) c Create a bias plane of ROC3 behind the sensor nmed = sili_med_copper ! Copper npar = 0 call gsvolu(siliBrBPlane,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrBPlane,'SEEN',1) call GSATT (siliBrBPlane,'COLO',5) c Create a analog plane of ROC3 behind the sensor nmed = sili_med_copper ! Copper npar = 0 call gsvolu(siliBrAPlane,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrAPlane,'SEEN',1) call GSATT (siliBrAPlane,'COLO',4) c Create a digital plane of ROC3 behind the sensor nmed = sili_med_copper ! Copper npar = 0 call gsvolu(siliBrDPlane,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrDPlane,'SEEN',1) call GSATT (siliBrDPlane,'COLO',4) c Create a layer of passive material behind the sensor (strips) nmed = sili_med_gfrp ! G10 npar = 0 call gsvolu(siliBrPassive,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrPassive,'SEEN',1) call GSATT (siliBrPassive,'COLO',3) c Create a vdd and gnd plane material behind the sensor nmed = sili_med_passive ! Al npar = 0 call gsvolu(siliBrVGPlane,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrVGPlane,'SEEN',1) call GSATT (siliBrVGPlane,'COLO',4) c Create a vdd and gnd plane material behind the sensor nmed = sili_med_copper ! Coppper npar = 0 call gsvolu(siliBrSGPlane,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrSGPlane,'SEEN',1) call GSATT (siliBrSGPlane,'COLO',4) c Create a K3 material nmed = sili_med_k3 ! Allcomp K3 npar = 0 call gsvolu(siliBrK3,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrK3,'SEEN',1) call GSATT (siliBrK3,'COLO',7) c Create a Tube material for Stripixel Layer nmed = sili_med_passive ! Al npar = 0 call gsvolu(siliBrTube,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrTube,'SEEN',1) call GSATT (siliBrTube,'COLO',1) c Create a Coolant material for Stripixel Layer nmed = sili_med_coolant ! C5F12 liquid coolant npar = 0 call gsvolu(siliBrCool,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrCool,'SEEN',1) call GSATT (siliBrCool,'COLO',1) c Create a Bus material 1 nmed = sili_med_kapton ! Kapton npar = 0 call gsvolu(siliBrBus1,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrBus1,'SEEN',1) call GSATT (siliBrBus1,'COLO',37) c Create a Bus material 2 nmed = sili_med_copper ! Copper npar = 0 call gsvolu(siliBrBus2,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrBus2,'SEEN',1) call GSATT (siliBrBus2,'COLO',37) c Create a RCC material 1 nmed = sili_med_gfrp ! G10 npar = 0 call gsvolu(siliBrRCC1,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrRCC1,'SEEN',1) call GSATT (siliBrRCC1,'COLO',3) c Create a RCC material 2 nmed = sili_med_copper ! Copper npar = 0 call gsvolu(siliBrRCC2,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrRCC2,'SEEN',1) call GSATT (siliBrRCC2,'COLO',3) c Create a RCC material 3 nmed = sili_med_kapton ! Kapton npar = 0 call gsvolu(siliBrRCC3,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrRCC3,'SEEN',1) call GSATT (siliBrRCC3,'COLO',3) c Create a RCC material 4 nmed = sili_med_gfrp ! G10 npar = 0 call gsvolu(siliBrRCC4,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrRCC4,'SEEN',1) call GSATT (siliBrRCC4,'COLO',3) ! 3-green c Create a RCC material 5 nmed = sili_med_copper ! Copper npar = 0 call gsvolu(siliBrRCC5,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrRCC5,'SEEN',1) call GSATT (siliBrRCC5,'COLO',6) ! 6=magenta c Create a stave material behind the sensor nmed = sili_med_cfiber ! Carbon Fiber npar = 0 call gsvolu(siliBrStave,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrStave,'SEEN',1) call GSATT (siliBrStave,'COLO',4) c Create a resin material behind the sensor nmed = sili_med_resin ! CFC npar = 0 call gsvolu(siliBrResin,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrResin,'SEEN',1) call GSATT (siliBrResin,'COLO',5) c Create a resin material behind the sensor nmed = sili_med_resin ! CFC npar = 0 call gsvolu(siliBrResinn,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrResinn,'SEEN',1) call GSATT (siliBrResinn,'COLO',5) c Create a sread out chip material behind the sensor nmed = sili_med_passilicon ! Passive Silicon npar = 0 call gsvolu(siliBrRead,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrRead,'SEEN',1) call GSATT (siliBrRead,'COLO',2) c Create Si sensors SISN nmed = sili_med_silicon ! Silicon npar = 0 call gsvolu(siliBrSensor,'BOX ',nmed,dim_sili,npar,ivolu) call GSATT (siliBrSensor,'SEEN',1) call GSATT (siliBrSensor,'COLO',2) call GSATT (siliBrSensor,'WORK',1) ! Make volume sensitive c--- Cycle over the layers ( 4 barrel layers ) --------------------------------------- if(sili_br_r(5).gt.0.) then write(*,*) ' SVX BARREL uses Staggerd Geometry: ', * sili_br_r(5) endif icopy = 0 ! for cooling tube SICT Do iLayer = 1, sili_br_nlayers ! loop over nlayers : 4 layers c... Define ladder volume ! (here we are not inside v_m_name = siljNames(iLayer) ! the isec=1,2 loop) c Define ladder dimensions ladd_halfx = sili_br_snhalfx(iLayer) ! Width/2 if((iLayer.eq.1).or.(iLayer.eq.2)) then ! Pixel Layer pasv_halfy = 0.5*0.025 ! GFRP (BUS) Thick/2 vg_halfy = 0.5*0.01 ! Al (VDD + GND) Thick/2 sig_halfy = 0.5*0.0006 ! Copper Thick/2 r_halfy = 0.5*sili_br_rsn_thk ! CFC Thick/2 b_halfy = 0.5*0.015 ! Silicon (ROC) Thick/2 s_halfy(1) = 0.5*sili_br_stv_thk(1) ! CF Thick/2 ladd_halfx = sili_br_snhalfx(iLayer) ! Width/2 vg_halfx = ladd_halfx sig_halfx = ladd_halfx r_halfx = ladd_halfx b_halfx = ladd_halfx s_halfx = ladd_halfx ladd_halfthck = pasv_halfy + sig_halfy + vg_halfy * + 2*r_halfy + b_halfy * + s_halfy(1) + sili_br_snhalfy(iLayer) ! Thick/2 else if((iLayer.eq.3).or.(iLayer.eq.4)) then ! Strip Layer b_halfy = 0.5*sili_br_bp_thk ! Cu Thick/2 c b_halfy = 0.5*sili_br_bp_thk/2 ! Cu Thick/2 agv_halfy = 0.5*2*sili_br_bp_thk ! Cu Thick/2 dg_halfy = 0.5*sili_br_bp_thk ! Cu Thick/2 c dg_halfy = 0.5*sili_br_bp_thk/2 pasv_halfy = 0.5*(sili_br_psv_thk - b_halfy ! ROC Board G10 Thick/2 * - agv_halfy - dg_halfy) k31_halfy = 0.5*sili_br_k3_thk(1) ! Carbon Foam K3 Thick/2 k32_halfy = 0.5*sili_br_k3_thk(2) ! Carbon Foam K3 Thick/2 k33_halfy = 0.5*sili_br_k3_thk(2) ! Carbon Foam K3 Thick/2 k34_halfy = 0.5*sili_br_k3_thk(2) ! Carbon Foam K3 Thick/2 tb1_halfy = 0.5*sili_br_tb_thk(1) ! U-Tube Al Thick/2 tb2_halfy = 0.5*sili_br_tb_thk(2) ! U-Tube Al Thick/2 tb3_halfy = tb1_halfy ! U-Tube Al Thick/2 tb4_halfy = tb2_halfy ! U-Tube Al Thick/2 s_halfy(2) = 0.5*sili_br_stv_thk(2) ! Stave Face (TOP) C Thick/2 s_halfy(3) = 0.5*sili_br_stv_thk(3) ! Stave Face (BOTTOM) C Thick/2 bus_halfy(1) = 0.5*sili_br_bus_thk(1) ! Bus Kapton Thick/2 bus_halfy(2) = 0.5*sili_br_bus_thk(2) ! Bus Copper Thick/2 rcc_halfy(1) = 0.5*sili_br_rcc_thk(1) ! RCC Board Thick/2 rcc_halfy(2) = 0.5*sili_br_rcc_thk(2) ! RCC Board Thick/2 tap_halfy(1) = 0.5*sili_br_tap_thk(1) ! RCC Cable Kapton Thick/2 tap_halfy(2) = 0.5*sili_br_tap_thk(2) ! RCC Cable Copper Thick/2 r_halfy = 0.5*sili_br_rsn_thk ! Resin CFC Thick/2 b_halfx = ladd_halfx - 0.18 agv_halfx = ladd_halfx + 0.1 + 2*0.43625 dg_halfx = ladd_halfx + 2.255 k31_halfx = 0.5*3.61 k32_halfx = 0.5*1.714 k33_halfx = 0.5*0.288 k34_halfx = 0.5*3.034 tb1_halfx = 0.5*(0.635+0.025) tb2_halfx = tb1_halfy tb3_halfx = k32_halfx tb4_halfx = k32_halfx s_halfx = k31_halfx bus_halfx = k31_halfx rcc_halfx = 0.5*1.6742 !!! TO BE CHANGED tap_halfx = 0.5*sqrt(2.)*(dg_halfx - 2*rcc_halfx * - k31_halfx) ladd_halfx = dg_halfx r_halfx = dg_halfx ladd_halfthck = sili_br_snhalfy(iLayer) * + b_halfy + agv_halfy + dg_halfy + pasv_halfy supp_halfthck = s_halfy(2) + k31_halfy + k32_halfy * + s_halfy(3) + bus_halfy(1) + bus_halfy(2) * + rcc_halfy(1) + rcc_halfy(2) endif If(sili_br_snzgap(iLayer) .LT. 0.) Then ladd_halfthck = 2.*ladd_halfthck Endif ! Make shells to hold the ladders do isec = 1, sili_br_nsec(iLayer) ! 2 sectors: West, East c--------- L1_W - L4_E ---------------------------------------------------------------------------------- ! Make a holder shell for each of the SVX layers, ! separately for East and West, and place them in the SVXE and SVXW ! holder volumes defined above. ladd_halfz = sili_br_nsn(iLayer)*sili_br_snhalfz(iLayer) * + 0.5*sili_br_snzgap(iLayer)*(sili_br_nsn(iLayer)-1) ! Length/2 dim_sili(1) = -85 ! layer 3,4 West holder volumes dim_sili(2) = 170 dim_sili(3) = 2 dim_sili(4) = -ladd_halfz - 0.1 ! z1 dim_sili(5) = rholder(ilayer) + 0.2 ! rmin dim_sili(6) = rholder(ilayer+1) ! rmax dim_sili(7) = +ladd_halfz + 0.1 ! z2 dim_sili(8) = dim_sili(5) dim_sili(9) = dim_sili(6) if (isec.eq.1) then ! First the half-detector dim_sili(1) = -85 ! volumes SVXW and SVXE v_i_name = 'SVXW' else dim_sili(1) = 95 v_i_name = 'SVXE' endif name_ew = shell((isec-1)*4+ilayer) write (6,*)' name_ew ',name_ew,' into v_i_name ', v_i_name call gsvolu(name_ew,'PCON', nmed, dim_sili, 9, ivolu) call GSATT (name_ew,'SEEN',1) call GSATT (name_ew,'COLO',2) ! 2=red call GSPOS (name_ew,1,v_i_name,0,0,0,irotnull,'ONLY') c-------- Create a ladder holder volume SJnn made of cold air (SJ21 - SJ28) nmed = sili_med_coldair dim_sili(1) = ladd_halfx sj12_y = yomegap(1) + sili_br_ct_radius sj12_y = sili_br_ct_radius + 0.05 if (ilayer.le.2) then dim_sili(2) = ladd_halfthck + supp_halfthck + sj12_y/2. ! xxx else dim_sili(2) = ladd_halfthck + supp_halfthck ! xxx endif ladd_halfz = sili_br_nsn(iLayer)*sili_br_snhalfz(iLayer) * + 0.5*sili_br_snzgap(iLayer)*(sili_br_nsn(iLayer)-1) ! Length/2 dim_sili(3) = ladd_halfz v_i_name = siliNames(20+2*(ilayer-1)+isec) call gsvolu(v_i_name,'BOX ', nmed, dim_sili, 3, ivolu) call GSATT (v_i_name,'SEEN',1) call GSATT (v_i_name,'COLO',2) write (6,*)' made volume ', v_i_name *--------- Create a ladder holder volume SInn made of cold air (SI21 - SI28) ---------------------------------- if (isec.eq.1) then npar = 3 nmed = sili_med_coldair dim_sili(1) = ladd_halfx dim_sili(2) = ladd_halfthck ladd_halfz = sili_br_nsn(iLayer)*sili_br_snhalfz(iLayer) * + 0.5*sili_br_snzgap(iLayer)*(sili_br_nsn(iLayer)-1) ! Length/2 dim_sili(3) = ladd_halfz v_m_name = siljNames(ilayer) v_i_name = siliNames(20+2*(ilayer-1)+isec) call gsvolu(v_m_name,'BOX ', nmed, dim_sili, npar, ivolu) call GSATT(v_m_name,'SEEN',0) call GSATT(v_m_name,'COLO',4) if (ilayer.eq.3 .or. ilayer.eq.4) then irot = irot+1 ! flip it upside down call gsrotm(irot,90.,180.,90.,270.,0.,0.) call gspos(v_m_name,isec,v_i_name, ! place the strip supports SI25, SI27 into SJ25,27 & 0,-supp_halfthck,0,irot,'ONLY') write (6,*)ilayer,'(1)placing ',v_m_name,' into ',v_i_name else ! layers 1 an 2 call gspos(v_m_name,isec,v_i_name, ! place the strip supports SI21, SI23 into SJ21, 23 & 0,sj12_y/2.,0,irotnull,'ONLY') ! xxx test write (6,*)ilayer,'(3)placing ',v_m_name,' into ',v_i_name endif endif if (ilayer.eq.1.or.ilayer.eq.2) then *--------- Cooling tube (coolant) SICT into the holder volume SJ01, Sj02 ------------------------------------- par(1) = 0.0 par(2) = sili_br_ct_radius par(3) = ladd_halfz ! this depends on the layer par(4) = 0.0 par(5) = 180.0 ctdist = 1.0 irot = irot+1 ! place the coolant call gsrotm(irot,90.,180.,90.,270.,0.,0.) ! flip around z call gsposp('SICT', 1, v_i_name, !xxxj-i ? no & 0,-ladd_halfthck-supp_halfthck+sj12_y/2,0, & irot, 'ONLY', par, 5) *--------- Top of the Omega piece SIOM into holder volume SJ01, SJ02 ------------------------------------------- c dim_sili(1) = sili_br_ct_radius ! inner diameter dim_sili(2) = sili_br_ct_radius + 0.05 ! outer diameter dim_sili(3) = ladd_halfz dim_sili(4) = 20. dim_sili(5) = dim_sili(4) + 140. ! end call gsposp(siliBrOmega, 1, v_i_name, & 0,-ladd_halfthck-supp_halfthck+sj12_y/2,0, & irot, 'ONLY', dim_sili, 5) *---------- Side omega shape 1 SIOM into holder volume SJ01, SJ02 xomladd(1) = sili_br_ct_radius*cos(DEGRAD*20) + & cos(DEGRAD*20)*sili_br_ct_radius*sin(DEGRAD*20)/ & (1. - sin(DEGRAD*20)) dim_sili(1) = sili_br_ct_radius*sin(DEGRAD*20)/ * (1. - sin(DEGRAD*20)) - 0.05 dim_sili(2) = sili_br_ct_radius*sin(DEGRAD*20)/ * (1. - sin(DEGRAD*20)) dim_sili(3) = ladd_halfz dim_sili(4) = 270. dim_sili(5) = dim_sili(4) + 70. call gsposp(siliBrOmega, 2, v_i_name, & xomladd(1), & -ladd_halfthck-supp_halfthck+sj12_y/2-dim_sili(2),0, & irot, 'ONLY', dim_sili, 5) *---------- Side omega shape 2 SIOM into holder volume SJ01, SJ02 xomladd(1) = sili_br_ct_radius*cos(DEGRAD*20) + & cos(DEGRAD*20)*sili_br_ct_radius*sin(DEGRAD*20)/ & (1. - sin(DEGRAD*20)) dim_sili(1) = sili_br_ct_radius*sin(DEGRAD*20)/ * (1. - sin(DEGRAD*20)) - 0.05 dim_sili(2) = sili_br_ct_radius*sin(DEGRAD*20)/ * (1. - sin(DEGRAD*20)) dim_sili(3) = ladd_halfz dim_sili(4) = 90. dim_sili(5) = dim_sili(4) + 70. irot = irot+1 ! flip around z and x call gsrotm(irot,90.,180.,90.,90.,180.,0.) call gsposp(siliBrOmega, 3, v_i_name, & -xomladd(1), & -ladd_halfthck-supp_halfthck+sj12_y/2-dim_sili(2),0, & irot, 'ONLY', dim_sili, 5) *---------- Flat omega shape SIOP, one on each side, into holder volume SJ01, SJ02 dim_sili(1) = (2*sili_br_snhalfx(iLayer) * - 2*(sili_br_ct_radius*cos(DEGRAD*20)/ * (1. - sin(DEGRAD*20))))/4 dim_sili(2) = 0.025 dim_sili(3) = ladd_halfz call gsposp(siliBrOmegap, 1, v_i_name, & xomladd(1)+dim_sili(1), & -ladd_halfthck-supp_halfthck+sj12_y/2 & -dim_sili(2), & 0, & irotnull, 'ONLY' ,dim_sili, 3) call gsposp(siliBrOmegap, 2, v_i_name, & -xomladd(1)-dim_sili(1), & -ladd_halfthck-supp_halfthck+sj12_y/2 & -dim_sili(2), & 0, & irotnull, 'ONLY' ,dim_sili, 3) c*-------- Create a support volume SPnn made of cold air (SP03, SP04) ------------------------------------- elseif (ilayer.eq.3 .or. ilayer.eq.4) then if (isec.eq.1) then ! xxx v_m_name = siliStSupp(iLayer) ! (SP03,4 in turn hold lots of pieces) dim_sili(1) = 3.1629-0.5*1.6742 dim_sili(2) = supp_halfthck ladd_halfz = sili_br_nsn(iLayer)*sili_br_snhalfz(iLayer) & + 0.5*sili_br_snzgap(iLayer)*(sili_br_nsn(iLayer)-1) ! Length/2 dim_sili(3) = ladd_halfz call gsvolu(v_m_name,'BOX ', nmed, dim_sili, npar,ivolu) call GSATT(v_m_name,'SEEN',0) call GSATT(v_m_name,'COLO',2) ! and place it in the holder volume: endif call gspos(v_m_name,1,v_i_name, ! place the strip supports SP03, SP04 & 0,ladd_halfthck,0,irotnull,'ONLY') ! into SJ03, SJ04 write (6,*) 'ilayer = ',ilayer,' isec= ',isec write (6,*)' SPxx placing ',silistsupp(ilayer), & ' in ',v_i_name cxx endif *----------- Add rcc4 (SIR4) to the ladder, 5 or 6 on each side ------------------------------------------- dim_sili(1) = rcc_halfx dim_sili(2) = rcc_halfy(1) dim_sili(3) = 0.5*2.3 sir4x = -3.1629 sir4y = rcc_halfy(1) + ladd_halfthck - supp_halfthck sir4z = sili_br_snhalfz(iLayer) - ladd_halfz + vtx_shiftz icopy = 0 Do nrccr = 1, sili_br_nsn(iLayer) ! loop over 5 or 6 sensors/stave icopy = icopy+1 call gsposp(siliBRrcc4,icopy,v_i_name,sir4x,sir4y, & sir4z, irotnull,'ONLY',dim_sili,3) icopy = icopy+1 call gsposp(siliBRrcc4,icopy,v_i_name,-sir4x,sir4y, & sir4z, irotnull,'ONLY',dim_sili,3) sir4z = sir4z + 2.*sili_br_snhalfz(iLayer) & + sili_br_snzgap(iLayer) enddo zrcc = sili_br_snhalfz(iLayer) - ladd_halfz + vtx_shiftz icopy = 0 Do nrccr = 1, sili_br_nsn(iLayer) ! loop over 5 or 6 sensors/stave dim_sili(1) = rcc_halfx ! SIR5 dim_sili(2) = rcc_halfy(2) dim_sili(3) = 0.5*2.3 sir5x = -3.1629 sir5y = -supp_halfthck + ladd_halfthck + & rcc_halfy(2) +2*rcc_halfy(1) sir5z = zrcc icopy = icopy+1 call gsposp(siliBrRCC5,icopy,v_i_name, sir5x, sir5y, sir5z, & irotnull, 'ONLY', dim_sili,3) icopy = icopy+1 call gsposp(siliBrRCC5,icopy,v_i_name,-sir5x, sir5y, sir5z, & irotnull, 'ONLY', dim_sili,3) zrcc = zrcc + 2.*sili_br_snhalfz(iLayer) & + sili_br_snzgap(iLayer) Enddo ! Do nrccr = 1, sili_br_nsn(iLayer)ladd line 2383 endif ! layer 3,4 support enddo !end isec loop over W, E sectors write (6,*)' end loop over e,w sectors' *-------- Fill the ladded holder volumes ---------------------------------------------------------------------- c Position sensors SISN and passive layers in the ladder SInn dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz cc----- Special treatment to invert z-axis if((iLayer.eq.1).or.(iLayer.eq.2)) then ! Pixel Layer dim_sili(2) = -sili_br_snhalfz(iLayer) + ladd_halfz endif cc----- npar = 3 dim_sili(3) = sili_br_snhalfx(iLayer) dim_sili(5) = sili_br_snhalfz(iLayer) sen_y(1) = sili_br_snhalfy(iLayer) - ladd_halfthck If(sili_br_snzgap(iLayer) .GE. 0.) Then sen_y(2) = sen_y(1) Else sen_y(2) = sen_y(1) + * 2.*(sili_br_snhalfy(iLayer) + pasv_halfy) Endif c Cooling tube parameters: par(1) = 0.0 par(2) = sili_br_ct_radius par(3) = ladd_halfz ! this depends on the layer par(4) = 0.0 par(5) = 180.0 ctdist = 1.0 Do nr = 1, sili_br_nsn(iLayer) ! loop over sensors/stave ! = 4, 4, 5, 6 C##############C C Pixel C C##############C if((iLayer.eq.1).or.(iLayer.eq.2)) then ! Pixel Layer C===================================== C Passive layer (Pixel) C===================================== v_i_name = siliBrBusp c-TH20110221 dim_sili(1) = pasv_halfy - ladd_halfthck ! BUS Kapton dim_sili(1) = -pasv_halfy + ladd_halfthck ! BUS Kapton dim_sili(4) = pasv_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C============================ C signal plane (Pixel) C============================ v_i_name = siliBrSGPlane c-TH20110221 dim_sili(1) = dim_sili(1) + pasv_halfy + sig_halfy dim_sili(1) = dim_sili(1) - pasv_halfy - sig_halfy dim_sili(3) = sig_halfx dim_sili(4) = sig_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C============================== C VDD + GND plane (Pixel) C============================== v_i_name = siliBrVGPlane c-TH20110221 dim_sili(1) = dim_sili(1) + sig_halfy + vg_halfy dim_sili(1) = dim_sili(1) - sig_halfy - vg_halfy dim_sili(3) = vg_halfx dim_sili(4) = vg_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C======================== C CFC resin (Pixel) C======================== v_i_name = siliBrResin c-TH20110221 dim_sili(1) = dim_sili(1) + vg_halfy + r_halfy dim_sili(1) = dim_sili(1) - vg_halfy - r_halfy dim_sili(3) = r_halfx dim_sili(4) = r_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C===================== C Sensor (Pixel) C===================== v_i_name = siliBrSensor c-TH20110221 dim_sili(1) = dim_sili(1) + r_halfy c-TH20110221 * + sili_br_snhalfy(iLayer) dim_sili(1) = dim_sili(1) - r_halfy * - sili_br_snhalfy(iLayer) dim_sili(3) = sili_br_snhalfx(iLayer) dim_sili(4) = sili_br_snhalfy(iLayer) dim_sili(5) = sili_br_snhalfz(iLayer) * + 0.5*sili_br_snzgap(iLayer) call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C=========================== C Readout Chip (Pixel) C=========================== v_i_name = siliBrRead c-TH20110221 dim_sili(1) = dim_sili(1) + sili_br_snhalfy(iLayer) c-TH20110221 * + b_halfy dim_sili(1) = dim_sili(1) - sili_br_snhalfy(iLayer) * - b_halfy dim_sili(3) = b_halfx dim_sili(4) = b_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C======================== C CFC resin (Pixel) C======================== v_i_name = siliBrResinn c-TH20110221 dim_sili(1) = dim_sili(1) + b_halfy + r_halfy dim_sili(1) = dim_sili(1) - b_halfy - r_halfy dim_sili(3) = r_halfx dim_sili(4) = r_halfy dim_sili(5) = sili_br_snhalfz(iLayer) * + 0.5*sili_br_snzgap(iLayer) call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C==================== C Stave (Pixel) C==================== v_i_name = siliBrStave c-TH20110221 dim_sili(1) = dim_sili(1) + r_halfy + s_halfy(1) dim_sili(1) = dim_sili(1) - r_halfy - s_halfy(1) dim_sili(3) = s_halfx dim_sili(4) = s_halfy(1) call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C##############C C Strip C C##############C else if((iLayer.eq.3).or.(iLayer.eq.4)) then ! Strip Layer C================= C Sensor C================= v_i_name = siliBrSensor c active area is 3.6 mm narrower than passive layer v_m_name = siljNames(iLayer) c-TH20110222 dim_sili(1) = sen_y(mod(nr-1,2)+1) dim_sili(1) = -sen_y(mod(nr-1,2)+1) dim_sili(3) = sili_br_snhalfx(iLayer)-0.18 dim_sili(4) = sili_br_snhalfy(iLayer) call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C===================== c Bias Plate C===================== v_i_name = siliBrBPlane c-TH20110222 dim_sili(1) = sen_y(mod(nr-1,2)+1) c-TH20110222 * + sili_br_snhalfy(iLayer) + b_halfy dim_sili(1) = dim_sili(1) * - sili_br_snhalfy(iLayer) - b_halfy dim_sili(3) = b_halfx dim_sili(4) = b_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C================================== C Analog GND and VDD Plate C================================== v_i_name = siliBrAPlane c-TH20110222 dim_sili(1) = dim_sili(1) + b_halfy + agv_halfy dim_sili(1) = dim_sili(1) - b_halfy - agv_halfy dim_sili(3) = agv_halfx dim_sili(4) = agv_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C============================ C Digital GND Plate C============================ v_i_name = siliBrDPlane c-TH20110222 dim_sili(1) = dim_sili(1) + agv_halfy + dg_halfy dim_sili(1) = dim_sili(1) - agv_halfy - dg_halfy dim_sili(3) = dg_halfx dim_sili(4) = dg_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C===================================== C Passive layer (Insulator) C===================================== v_i_name = siliBrPassive c-TH20110222 dim_sili(1) = dim_sili(1) + dg_halfy + pasv_halfy dim_sili(1) = dim_sili(1) - dg_halfy - pasv_halfy dim_sili(3) = sili_br_snhalfx(iLayer) + 2.255 dim_sili(4) = pasv_halfy call gsposp(v_i_name,nr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C============== C SVX4 C============== Do nsvx = 1, 12 nsvxr = (nr-1)*12 + nsvx if(nsvx.lt.7) then dim_sili(6) = sili_br_snhalfx(iLayer) * + 0.1 + 0.43625 else dim_sili(6) = -(sili_br_snhalfx(iLayer) * + 0.1 + 0.43625) endif c-TH20110222 dim_sili(1) = sen_y(mod(nr-1,2)+1) c-TH20110222 * + sili_br_snhalfy(iLayer) c-TH20110222 * + 2*b_halfy - 0.015 dim_sili(1) = -sen_y(mod(nr-1,2)+1) * - sili_br_snhalfy(iLayer) * - 2*b_halfy + 0.015 if((nsvx.eq.1).or.(nsvx.eq.7)) then dim_sili(7) = dim_sili(2) - 2.6027 else if((nsvx.eq.2).or.(nsvx.eq.8)) then dim_sili(7) = dim_sili(2) - 1.7527 else if((nsvx.eq.3).or.(nsvx.eq.9)) then dim_sili(7) = dim_sili(2) - 0.9027 else if((nsvx.eq.4).or.(nsvx.eq.10)) then dim_sili(7) = dim_sili(2) + 0.9027 else if((nsvx.eq.5).or.(nsvx.eq.11)) then dim_sili(7) = dim_sili(2) + 1.7527 else if((nsvx.eq.6).or.(nsvx.eq.12)) then dim_sili(7) = dim_sili(2) + 2.6027 endif dim_sili(8) = 0.43625 dim_sili(9) = 0.015 dim_sili(10) = 0.335 v_i_name = siliBrSVX4 call gsposp(v_i_name,nsvxr,v_m_name * ,dim_sili(6),dim_sili(1),dim_sili(7),irotnull, * 'ONLY',dim_sili(8),npar) Enddo C======================== C Top Stave Face C======================== v_m_name = siliStSupp(iLayer) v_i_name = siliBrStave dim_sili(1) = s_halfy(2) - supp_halfthck dim_sili(3) = s_halfx dim_sili(4) = s_halfy(2) nstvr = nstvr + 1 call gsposp(v_i_name,nstvr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C==================================== C Carbon Foam (Allcomp K3) C==================================== v_i_name = siliBrK3 dim_sili(11) = dim_sili(1) + s_halfy(2) dim_sili(1) = dim_sili(11) + k32_halfy if(nr.eq.1) then c CORE dim_sili(2) = dim_sili(2) + 0.5*(0.66 + 0.3) dim_sili(3) = k32_halfx dim_sili(4) = k32_halfy dim_sili(5) = dim_sili(5) - 0.5*(0.66 + 0.3) nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c SIDE dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz dim_sili(3) = k33_halfx dim_sili(4) = k33_halfy dim_sili(5) = sili_br_snhalfz(iLayer) nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,-1.661,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,1.661,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c EDGE dim_sili(2) = 0.5*0.3 - ladd_halfz dim_sili(3) = k34_halfx dim_sili(4) = k34_halfy dim_sili(5) = 0.5*0.3 nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz dim_sili(5) = sili_br_snhalfz(iLayer) else c CORE dim_sili(3) = k32_halfx dim_sili(4) = k32_halfy nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c SIDE dim_sili(3) = k33_halfx dim_sili(4) = k33_halfy nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,-1.661,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,1.661,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) endif c SURFACE dim_sili(1) = dim_sili(1) + k32_halfy + k31_halfy dim_sili(3) = k31_halfx dim_sili(4) = k31_halfy nk3r = nk3r + 1 call gsposp(v_i_name,nk3r,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C================ C U-TUBE C================ v_i_name = siliBrTube if(nr.eq.1) then c LONG-BOTTOM dim_sili(1) = dim_sili(11) + tb1_halfy dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz * + 0.5*0.3 dim_sili(3) = tb1_halfx dim_sili(4) = tb1_halfy dim_sili(5) = dim_sili(5) - 0.5*0.3 ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c SHORT-BOTTOM dim_sili(2) = 0.3 + 0.5*(0.635+0.025) - ladd_halfz dim_sili(3) = tb3_halfx dim_sili(4) = tb3_halfy dim_sili(5) = 0.5*(0.635+0.025) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c OUTER-LONG-SIDE dim_sili(1) = dim_sili(1) + tb1_halfy + tb2_halfy dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz * + 0.5*0.3 dim_sili(3) = tb2_halfx dim_sili(4) = tb2_halfy dim_sili(5) = sili_br_snhalfz(iLayer) - 0.5*0.3 ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-1.49795,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,1.49795,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c OUTER-SHORT-SIDE dim_sili(2) = 0.3 + tb1_halfy - ladd_halfz dim_sili(3) = tb4_halfx + 0.635+0.025-2*tb1_halfy dim_sili(4) = tb4_halfy dim_sili(5) = tb1_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c INNER-LONG-SIDE dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz * + 0.5*(0.3+0.635+0.025)-tb1_halfy dim_sili(3) = tb2_halfx dim_sili(4) = tb2_halfy dim_sili(5) = sili_br_snhalfz(iLayer) * - 0.5*(0.3+0.635+0.025) + tb1_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-0.87605,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,0.87605,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c INNER-SHORT-SIDE dim_sili(2) = 0.3 + 0.635+0.025 - tb1_halfy * - ladd_halfz dim_sili(3) = tb4_halfx dim_sili(4) = tb4_halfy dim_sili(5) = tb1_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c LONG-TOP dim_sili(1) = dim_sili(1) + tb2_halfy + tb1_halfy dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz * + 0.5*0.3 dim_sili(3) = tb1_halfx dim_sili(4) = tb1_halfy dim_sili(5) = sili_br_snhalfz(iLayer) - 0.5*0.3 ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c SHORT-TOP dim_sili(2) = 0.3 + 0.5*(0.635+0.025) - ladd_halfz dim_sili(3) = tb3_halfx dim_sili(4) = tb3_halfy dim_sili(5) = 0.5*(0.635+0.025) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz dim_sili(5) = sili_br_snhalfz(iLayer) else c LONG-BOTTOM dim_sili(1) = dim_sili(11) + tb1_halfy dim_sili(3) = tb1_halfx dim_sili(4) = tb1_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c OUTER-LONG-SIDE dim_sili(1) = dim_sili(1) + tb1_halfy + tb2_halfy dim_sili(3) = tb2_halfx dim_sili(4) = tb2_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-1.49795,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,1.49795,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c INNER-LONG-SIDE dim_sili(3) = tb2_halfx dim_sili(4) = tb2_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-0.87605,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,0.87605,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c LONG-TOP dim_sili(1) = dim_sili(1) + tb2_halfy + tb1_halfy dim_sili(3) = tb1_halfx dim_sili(4) = tb1_halfy ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,-1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) ntbr = ntbr + 1 call gsposp(v_i_name,ntbr,v_m_name * ,1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) endif C================================= C Coolant for Stripixel C================================= v_i_name = siliBrCool dim_sili(1) = dim_sili(11) + 2*tb1_halfy * + tb2_halfy if(nr.eq.1) then c LONG dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz * + 0.5*0.3 + tb1_halfy dim_sili(3) = tb1_halfx - 2*tb1_halfy dim_sili(4) = tb2_halfy dim_sili(5) = dim_sili(5) - 0.5*0.3 + 2*tb1_halfy nclr = nclr + 1 call gsposp(v_i_name,nclr,v_m_name * ,-1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) nclr = nclr + 1 call gsposp(v_i_name,nclr,v_m_name * ,1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) c SHORT dim_sili(2) = 0.3 + 0.5*(0.635+0.025) - ladd_halfz dim_sili(3) = tb3_halfx dim_sili(4) = tb2_halfy dim_sili(5) = 0.5*(0.635+0.025) - 2*tb1_halfy nclr = nclr + 1 call gsposp(v_i_name,nclr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) dim_sili(2) = sili_br_snhalfz(iLayer) - ladd_halfz dim_sili(5) = sili_br_snhalfz(iLayer) else c LONG dim_sili(3) = tb1_halfx - 2*tb1_halfy dim_sili(4) = tb2_halfy nclr = nclr + 1 call gsposp(v_i_name,nclr,v_m_name * ,-1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) nclr = nclr + 1 call gsposp(v_i_name,nclr,v_m_name * ,1.187,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) endif C============================ C Bottom Stave Face C============================ v_i_name = siliBrStave c dim_sili(1) = dim_sili(1) + r_halfy + s_halfy dim_sili(1) = dim_sili(1) + 2*k31_halfy * + k32_halfy + s_halfy(3) dim_sili(3) = s_halfx dim_sili(4) = s_halfy(3) nstvr = nstvr + 1 call gsposp(v_i_name,nstvr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C============= C BUS C============= v_i_name = siliBrBus1 dim_sili(1) = dim_sili(1) + s_halfy(3) + bus_halfy(1) dim_sili(3) = bus_halfx dim_sili(4) = bus_halfy(1) nbusr = nbusr + 1 call gsposp(v_i_name,nbusr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) v_i_name = siliBrBus2 dim_sili(1) = dim_sili(1) + bus_halfy(1) + bus_halfy(2) dim_sili(3) = bus_halfx dim_sili(4) = bus_halfy(2) nbusr = nbusr + 1 call gsposp(v_i_name,nbusr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C================== C RCC Board C================== c CORE rcc2 top flat piece v_i_name = siliBrRCC1 dim_sili(1) = dim_sili(1) + bus_halfy(2) + rcc_halfy(1) dim_sili(3) = bus_halfx dim_sili(4) = rcc_halfy(1) nrccr = nrccr + 1 call gsposp(v_i_name,nrccr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) v_i_name = siliBrRCC2 dim_sili(1) = dim_sili(1) + rcc_halfy(1) + rcc_halfy(2) dim_sili(3) = bus_halfx dim_sili(4) = rcc_halfy(2) nrccr = nrccr + 1 call gsposp(v_i_name,nrccr,v_m_name * ,0.,dim_sili(1),dim_sili(2),irotnull,'ONLY' * ,dim_sili(3),npar) C=================== C RCC Cable rcc2 side slanted pieces C=================== v_i_name = siliBrRCC3 irot = irot + 1 CALL GSROTM(irot,90.,45.,90. * ,45.+90.,0.,0.) irotrcc = irot dim_sili(1) = dim_sili(11) - 2*s_halfy(2) * + 2*rcc_halfy(1) + tap_halfx/sqrt(2.) dim_sili(3) = tap_halfx dim_sili(4) = tap_halfy(1) nrccr = nrccr + 1 call gsposp(v_i_name,nrccr,v_m_name * ,-2.0654,dim_sili(1),dim_sili(2),irotrcc,'ONLY' * ,dim_sili(3),npar) v_i_name = siliBrRCC2 dim_sili(1) = dim_sili(1) * + (tap_halfy(1) + tap_halfy(2))/sqrt(2.) dim_sili(3) = tap_halfx dim_sili(4) = tap_halfy(2) nrccr = nrccr + 1 call gsposp(v_i_name,nrccr,v_m_name * ,-2.070844722,dim_sili(1),dim_sili(2),irotrcc,'ONLY' * ,dim_sili(3),npar) v_i_name = siliBrRCC3 irot = irot + 1 CALL GSROTM(irot,90.,-45.,90. * ,-45.+90.,0.,0.) irotrcc = irot dim_sili(1) = dim_sili(11) - 2*s_halfy(2) * + 2*rcc_halfy(1) + tap_halfx/sqrt(2.) dim_sili(3) = tap_halfx dim_sili(4) = tap_halfy(1) nrccr = nrccr + 1 call gsposp(v_i_name,nrccr,v_m_name * ,2.0654,dim_sili(1),dim_sili(2),irotrcc,'ONLY' * ,dim_sili(3),npar) v_i_name = siliBrRCC2 dim_sili(1) = dim_sili(1) * + (tap_halfy(1) + tap_halfy(2))/sqrt(2.) dim_sili(3) = tap_halfx dim_sili(4) = tap_halfy(2) nrccr = nrccr + 1 call gsposp(v_i_name,nrccr,v_m_name * ,2.070844722,dim_sili(1),dim_sili(2),irotrcc,'ONLY' * ,dim_sili(3),npar) dim_sili(5) = sili_br_snhalfz(iLayer) endif ! if layer 1,2 line ~1410 c--------- c-TH20110221 dim_sili(2) = dim_sili(2) + 2.*sili_br_snhalfz(iLayer) c-TH20110221 * + sili_br_snzgap(iLayer) ccTH20110221----- Special treatment to invert z-axis if((iLayer.eq.1).or.(iLayer.eq.2)) then ! Pixel Layer dim_sili(2) = dim_sili(2) - 2.*sili_br_snhalfz(iLayer) * - sili_br_snzgap(iLayer) else dim_sili(2) = dim_sili(2) + 2.*sili_br_snhalfz(iLayer) * + sili_br_snzgap(iLayer) endif ccTH20110221----- Enddo ! Do nr = 1, sili_br_nsn(iLayer) loop over sensors c--- Place ladders SI01 - SI04 in the cage SICG xxx obsolete section ??? if((iLayer.eq.3).or.(iLayer.eq.4)) then ! Strip Layer C--- iLayer = 3 and 4 v_m_name = siljNames(iLayer) rladd = sili_br_r(iLayer) dphit = DEGRAD*sili_br_tilt(iLayer) xladd = ladd_halfthck - sili_br_snhalfy(iLayer) ! partial thickness yladd = rladd + xladd*COS(dphit) xladd = xladd*SIN(dphit) rladd = sqrt(xladd*xladd + yladd*yladd) c rcool = rladd + ladd_halfthck + sili_br_ct_radius ! tube on the outside of the ladder - No Use rsupp = sili_br_r(iLayer) xsupp = 2*ladd_halfthck + supp_halfthck * - sili_br_snhalfy(iLayer) ! partial thickness ysupp = rsupp + xsupp*COS(dphit) xsupp = xsupp*SIN(dphit) rsupp = sqrt(xsupp*xsupp + ysupp*ysupp) rjsupp = sili_br_r(iLayer) xjsupp = ladd_halfthck + supp_halfthck ! xxx new holder box * - sili_br_snhalfy(iLayer) ! partial thickness yjsupp = rjsupp + xjsupp*COS(dphit) xjsupp = xjsupp*SIN(dphit) rjsupp = sqrt(xjsupp*xjsupp + yjsupp*yjsupp) endif dphid = sili_br_dphi(iLayer) dphir = DEGRAD*dphid v_i_name = v_m_name v_m_name = siliCage nr = 1 ! Note: we are inside of a loop over 4 layers Do isec = 1, sili_br_nsec(iLayer) ! 2 sectors: East, West c Remove EAST tower in Run13 sec_flag = skip_sector(sili_run,isec) if(sec_flag.eq.1) then cycle endif nladd = sili_br_nlad(isec,iLayer) ! ladders per sector if((iLayer.eq.1).or.(iLayer.eq.2)) then ! Pixel Layer C--- iLayer = 1 and 2 rladd = sili_br_r(iLayer) if(isec.eq.2) then sili_br_tilt(iLayer) = -sili_br_tilt(iLayer) endif dphit = DEGRAD*sili_br_tilt(iLayer) xladd = ladd_halfthck - sili_br_snhalfy(iLayer) ! partial thickness * - 2*(b_halfy + r_halfy + s_halfy(1)) yladd = rladd - xladd*COS(dphit) xladd = 0. - xladd*SIN(dphit) rladd = sqrt(xladd*xladd + yladd*yladd) c rcool = rladd + ladd_halfthck + sili_br_ct_radius ! tube on the outside of the ladder - No Use c Cooling tube xctladd(1) = 2*ladd_halfthck - sili_br_snhalfy(iLayer) * - 2*(r_halfy+sig_halfy+vg_halfy+pasv_halfy) yctladd(1) = sili_br_r(iLayer) + xctladd(1)*COS(dphit) xctladd(1) = xctladd(1)*SIN(dphit) rctladd(1) = sqrt(xctladd(1)*xctladd(1) * + yctladd(1)*yctladd(1)) c rcool = rctladd(1) ! No Use dphit = RADDEG*ASIN(xladd/rladd) dphict(1) = RADDEG*ASIN(xctladd(1)/rctladd(1)) dphiom(1) = -RADDEG*ASIN(xomladd(1)/romladd(1)) dphiom(2) = -RADDEG*ASIN(xomladd(2)/romladd(2)) dphiomp(1) = -RADDEG*ASIN(xomegap(1)/romegap(1)) dphiomp(2) = -RADDEG*ASIN(xomegap(2)/romegap(2)) c Cooling tube phictladd(1) = sili_br_phic(isec,iLayer) + dphict(1) * - (0.5*dphid)*(nladd-1) phictladd(1) = DEGRAD*phictladd(1) c Omega shape phiomladd(1) = sili_br_phic(isec,iLayer) + dphiom(1) * - (0.5*dphid)*(nladd-1) phiomladd(2) = sili_br_phic(isec,iLayer) + dphiom(2) * - (0.5*dphid)*(nladd-1) phiomladd(1) = DEGRAD*phiomladd(1) phiomladd(2) = DEGRAD*phiomladd(2) c Omega piece phiompladd(1) = sili_br_phic(isec,iLayer) + dphiomp(1) * - (0.5*dphid)*(nladd-1) phiompladd(2) = sili_br_phic(isec,iLayer) + dphiomp(2) * - (0.5*dphid)*(nladd-1) phiompladd(1) = DEGRAD*phiompladd(1) phiompladd(2) = DEGRAD*phiompladd(2) c Angle between sensor position and x axis phitmpladd = sili_br_phic(isec,iLayer) * - (0.5*dphid)*(nladd-1) c Angle between ladder position and x axis philadd = sili_br_phic(isec,iLayer) + dphit * - (0.5*dphid)*(nladd-1) phirotladd = -90.+sili_br_tilt(iLayer) + philadd else if((iLayer.eq.3).or.(iLayer.eq.4)) then ! Strip Layer c Angle between ladder position and x axis if(isec.eq.1) then philadd = sili_br_phic(isec,iLayer) + dphit * -90. + sili_br_stdphi(1,iLayer) else if(isec.eq.2) then philadd = sili_br_phic(isec,iLayer) + dphit * -90. + sili_br_stdphi(5,iLayer) endif phirotladd = -90.+sili_br_tilt(iLayer) + philadd endif philadd = DEGRAD*philadd DO iladd = 1, nladd ! loop over ladders in this sector C C------------ staggered geometry ----------------------------------------- C shiftstag(1) = 0. ! This section takes care of the 123 123 123 staggering shiftstag(2) = 0. ! in radius for the strip ladders. if((iLayer.eq.3).or.(iLayer.eq.4)) then ! Strip Layer if(iLayer.eq.3) then if((iladd.eq.2).or.(iladd.eq.5).or.(iladd.eq.8)) then if(isec.eq.1) then sili_br_shiftstag = -(sili_br_r(5) + 0.191) else if(isec.eq.2) then sili_br_shiftstag = 0 endif else if((iladd.eq.1).or.(iladd.eq.4).or. * (iladd.eq.7)) then if(isec.eq.1) then sili_br_shiftstag = 0. else if(isec.eq.2) then sili_br_shiftstag = -(sili_br_r(5) + 0.191) endif else sili_br_shiftstag = (sili_br_r(5) - 0.131) endif else ! layer 4 if((iladd.eq.3).or.(iladd.eq.6).or. * (iladd.eq.9).or.(iladd.eq.12)) then if(isec.eq.1) then sili_br_shiftstag = sili_br_r(5) else if(isec.eq.2) then sili_br_shiftstag = -sili_br_r(5) endif else if((iladd.eq.2).or.(iladd.eq.5).or. * (iladd.eq.8).or.(iladd.eq.11)) then sili_br_shiftstag = 0. else if(isec.eq.1) then sili_br_shiftstag = -sili_br_r(5) else if(isec.eq.2) then sili_br_shiftstag = sili_br_r(5) endif endif endif ! layer 3 or layer 4 shiftstag(1) = sili_br_shiftstag*cos(philadd) shiftstag(2) = sili_br_shiftstag*sin(philadd) endif ! if layer 3 or 4 C C------------------------------------------------------------------------- C c c------------------------------------------------------------------------- c add misalignment rmyres = sili_br_misalignment((isec-1)*4+iLayer) ! resolution in cm if(rmyres.gt.0.) then rmydum = 10000. call gpoiss(rmydum,rmyrndmi,1) ! gaussian with mean 10000 and sigma 100 rmyrndm = rmyrndmi ! convert to real rmyrndm = (rmyrndm-10000.)/100. ! gaussian with mean 0 and sigma 1 rmyrndm = rmyrndm * rmyres ! random shift in cm, assuming rmyres alignment accuracy rmyrndm = rmyrndm / sili_br_r(iLayer) ! random shift in radians ... philadd = philadd + rmyrndm ! shifted angle for each ladder write(*,*) ' SVX BARREL IS MISALLIGNED : ', * isec, iLayer, iladd, rmyrndm phictladd(1) = phictladd (1)+ rmyrndm ! shifted angle for each ladder phictladd(2) = phictladd (2)+ rmyrndm ! shifted angle for each ladder phiomladd(1) = phiomladd (1)+ rmyrndm ! shifted angle for each ladder phiomladd(2) = phiomladd (2)+ rmyrndm ! shifted angle for each ladder phiomladd(3) = phiomladd (3)+ rmyrndm ! shifted angle for each ladder phiomladd(4) = phiomladd (4)+ rmyrndm ! shifted angle for each ladder endif c c------------------------------------------------------------------------- c xladd = rladd*cos(philadd) + shiftstag(1) yladd = rladd*sin(philadd) + shiftstag(2) xsupp = rsupp*cos(philadd) + shiftstag(1) ysupp = rsupp*sin(philadd) + shiftstag(2) xjsupp = rjsupp*cos(philadd) + shiftstag(1) ! ladder holder box xxx yjsupp = rjsupp*sin(philadd) + shiftstag(2) c rotate sensitive volumes so that local axes point in the c same direction as channel counting c for pixels it means turning east arm ladders "upside-down" c and changing direction of local z axis to opposite c for the first strip layer (layer 3 in Geant) east arm c ladders must be turned "upside-down", and ladders in c west arm must have direction of local z axis changed to opposite c for the outermost strip layer (layer 4 in Geant) west arm ladders c must be turned upside-down, and ladders in east arm must have local z c axis direction changed to opposite c phirotladdsict = phirotladd ! this variable is never used in this code c-- 2011.02.22 TH c-- I found the problem on the ladder rotation and orientation. c-- The ladder construction in local volume is not same with the reality in y-direction. c-- I found this should be reversed. I modified the ladder constructure and changed the ladder rotation. phirotladdtmp = phirotladd - 180. zrotladd = 0. if((isec.eq.2).and.(iLayer.lt.3)) then ! change local z coordinate in east arm pixel ladders zrotladd = 180. endif if((isec.eq.1).and.(iLayer.eq.3)) then ! change local z coordinate in west arm strip ladders in layer 3 zrotladd = 180. endif if((isec.eq.2).and.(iLayer.eq.4)) then ! change local z coordinate in east arm strip ladders in layer 4 zrotladd = 180. endif irot = irot + 1 irot1 = irot ! use irot1 temporally CALL GSROTM(irot1,90.,phirotladdtmp+zrotladd,90. * ,phirotladdtmp+90.,zrotladd,0.) c do not rotate non-sensitive volumes c coolant volume is not symmetric, so it overlaps with other volumes if rorated cc-TH irotSICT = irot+2000 ! this matrixID is overwritten if the assigned matrixID exceeds 2000 !2011.02.19 cc-TH ! this actually happened from 2011.2.8 version irot = irot+1 irotSICT = irot CALL GSROTM(irotSICT,90.,phirotladd,90. * ,phirotladd+90.,0.,0.) caaa C===================== C Place Ladder C===================== xladd = xladd + vtx_shiftx yladd = yladd + vtx_shifty zladd = sili_br_z(iLayer) + vtx_shiftz xsupp = xsupp + vtx_shiftx ysupp = ysupp + vtx_shifty c Remove missing ladders in Run12 lad_flag = skip_ladder(sili_run, isec, iLayer, iladd) if (lbarrel.and.lad_flag.lt.0) then v_m_name = shell( (isec-1)*4+ilayer) if (ilayer.eq.1 .or. ilayer.eq.2) then call gspos(siliNames(20+2*(ilayer-1)+isec),nr,v_m_name ! place the new holder volume SJ01, SJ02 * ,xladd,yladd,zladd,irot1,'ONLY') write (6,*)'Placing ', v_i_name,' and ', & siliNames(20+2*ilayer), ' into ',v_m_name endif c v_m_name = shell((isec-1)*4+ilayer) if((iLayer.eq.3).or.(iLayer.eq.4)) then ! Strip Layer call gspos(siliNames(20+2*(ilayer-1)+isec),nr,v_m_name ! place the new holder volumes SJ03, SJ04 xxx * ,xjsupp,yjsupp,zladd,irotSICT,'ONLY') endif endif caaa ! now place cooling tube: if((iLayer.eq.1).or.(iLayer.eq.2)) then phitmpladd = phitmpladd + dphir*RADDEG philadd = philadd + dphir phirotladd = phirotladd + dphid phictladd(1) = phictladd(1) + dphir phictladd(2) = phictladd(2) + dphir phiomladd(1) = phiomladd(1) + dphir phiomladd(2) = phiomladd(2) + dphir phiomladd(3) = phiomladd(3) + dphir phiomladd(4) = phiomladd(4) + dphir phiompladd(1) = phiompladd(1) + dphir phiompladd(2) = phiompladd(2) + dphir else if((iLayer.eq.3).or.(iLayer.eq.4)) then if(isec.eq.1) then philadd = philadd * + sili_br_stdphi(mod(iladd,3)+2,iLayer)*DEGRAD ! Radian phirotladd = phirotladd * + sili_br_stdphi(mod(iladd,3)+2,iLayer) ! Degree else if(isec.eq.2) then philadd = philadd * + sili_br_stdphi(mod((nladd-iladd),3)+2,iLayer)*DEGRAD ! Radian phirotladd = phirotladd * + sili_br_stdphi(mod((nladd-iladd),3)+2,iLayer) ! Degree endif endif nr = nr + 1 c if there is misalignment, correct philadd back so that c misalignments are not additive if(rmyres.gt.0.) then philadd = philadd - rmyrndm phictladd(1) = phictladd (1) - rmyrndm phictladd(2) = phictladd (2) - rmyrndm phiomladd(1) = phiomladd (1) - rmyrndm phiomladd(2) = phiomladd (2) - rmyrndm phiomladd(3) = phiomladd (3) - rmyrndm phiomladd(4) = phiomladd (4) - rmyrndm endif Enddo ! iladd = 1, nladd Enddo ! Do isec = 1, sili_br_nsec(iLayer) Enddo ! loop over 4 barrel layers do iew = 1,2 namesv(4) = 'SVXW' if (iew.eq.2) namesv(4) = 'SVXE' do ishell = 1,4 write (namesv(5),'(''L'',I1,''_'',A1)') & ishell,namesv(4)(4:4) write (namesv(6),'(''SI'',I2)') 20+2*(ishell-1)+iew write (namesv(7),'(''SJ0'',I1)') ishell write (6,'(8(A4,2x))') (namesv(i),i=1,8) call gsdet(set_id,namesv(6),nv,namesv,nbitsv,idtype,nwpa & ,nwsa,iset,idet) call gsdeth(set_id,namesv(6),nhh,inrNMSH,inrNBITSH & ,inrORIG,inrFACT) enddo ! over 8 shells enddo ! iew loop east-west vtx c======================================================================c c========================= Readout wheels code ===================c c See http://p25ext.lanl.gov/~hubert/phenix/silicon/simulations/jan07/wheel.html c======================================================================c c mother if (sili_wheel_yesno.eq.1) then siwh_rmin = sili_cg_rmx(3) siwh_rmax = sili_cg_rmx(1) ! note Helium bag HEB2 starts at 53.6 cm nmed = sili_med_coldair dim_sili( 1) = 0 ! Holder volume for the readout wheels. dim_sili( 2) = 360 ! this is a hollow cylinder fitting dim_sili( 3) = 6 ! just around the Silicon Enclosure SIEN ! It consists of 2 sections, with a 0-thickness dim_sili( 4) = sili_cg_z(1)! central section (to clear the Helium bag). dim_sili( 5) = siwh_rmin dim_sili( 6) = siwh_rmax dim_sili( 7) = sili_cg_z(2) ! note in helium_bag.f, I moved HEB1 in to 26.0cm dim_sili( 8) = siwh_rmin dim_sili( 9) = siwh_rmax dim_sili(10) = sili_cg_z(3) dim_sili(11) = siwh_rmin dim_sili(12) = siwh_rmin dim_sili(13) = sili_cg_z(4) dim_sili(14) = siwh_rmin dim_sili(15) = siwh_rmin dim_sili(16) = sili_cg_z(5) dim_sili(17) = siwh_rmin dim_sili(18) = siwh_rmax dim_sili(19) = sili_cg_z(6) dim_sili(20) = siwh_rmin dim_sili(21) = siwh_rmax call gsvolu('SIWH', 'PCON', nmed, dim_sili, 21, ivolu) call gsatt ('SIWH', 'SEEN', 1) call gspos('SIWH', 1, 'SIEN', 0., 0., 0. ,irotnull,'ONLY') c ROC boards for FVTX dim_sili( 1) = 0 ! 'ROC' boards dim_sili( 2) = 360 ! dim_sili( 3) = 2 ! ! dim_sili( 4) = -siwh_fpcb_thick ! dim_sili( 5) = siwh_rmin dim_sili( 6) = siwh_pcb_rmax dim_sili( 7) = +siwh_fpcb_thick ! dim_sili( 8) = siwh_rmin dim_sili( 9) = siwh_pcb_rmax nmed = sili_med_carbon call gsvolu('SWRB', 'PCON', nmed, dim_sili, 9, ivolu) call gsatt ('SWRB', 'SEEN', 1) call gsatt ('SWRB', 'COLO', 2) do i=1,10 call gspos('SWRB', i, 'SIWH', 0., 0., siwh_pcb_z(i), & irotnull,'ONLY') enddo * connectors on the boards, modeled as solid plastic rings: dim_sili( 1) = 0 ! dim_sili( 2) = 360 ! dim_sili( 3) = 2 ! ! dim_sili( 4) = -siwh_pcb_connz ! dim_sili( 5) = siwh_pcb_rmax - 1.0 dim_sili( 6) = siwh_pcb_rmax dim_sili( 7) = +siwh_pcb_connz ! dim_sili( 8) = siwh_pcb_rmax - 1.0 dim_sili( 9) = siwh_pcb_rmax nmed = 802 ! = plastic call gsvolu('SWCN', 'PCON', nmed, dim_sili, 9, ivolu) call gsatt ('SWCN', 'SEEN', 1) call gsatt ('SWCN', 'COLO', 4) do i=1,10 if (i.eq.1.or.(i.ge.6.and.i.le.9)) then call gspos('SWCN', i, 'SIWH', 0., 0., & siwh_pcb_z(i) + siwh_fpcb_thick + siwh_pcb_connz, & irotnull,'ONLY') else call gspos('SWCN', i, 'SIWH', 0., 0., & siwh_pcb_z(i) - siwh_fpcb_thick - siwh_pcb_connz, & irotnull,'ONLY') endif enddo * support/cooling planes, one behind each pc board: nmed = sili_med_passive ! Aluminum call gsvolu('SWSP', 'PCON', nmed, dim_sili, 0, ivolu) call gsatt ('SWSP', 'SEEN', 1) call gsatt ('SWSP', 'COLO', 3) dim_sili( 1) = 0 ! dim_sili( 2) = 360 ! dim_sili( 3) = 2 ! ! * dim_sili( 4) = -siwh_pcb_suppz ! defined in each gposp() dim_sili( 5) = siwh_rmin dim_sili( 6) = siwh_pcb_rmax * dim_sili( 7) = +siwh_pcb_suppz ! dim_sili( 8) = siwh_rmin dim_sili( 9) = siwh_pcb_rmax do i=1,10 dim_sili( 4) = -siwh_pcb_suppz(i) ! dim_sili( 7) = +siwh_pcb_suppz(i) ! if (i.eq.1.or.(i.ge.6.and.1.le.9)) then call gsposp('SWSP', i, 'SIWH', 0., 0., & siwh_pcb_z(i) + siwh_fpcb_thick + siwh_pcb_suppz(i), & irotnull,'ONLY',dim_sili,9) else call gsposp('SWSP', i, 'SIWH', 0., 0., & siwh_pcb_z(i) - siwh_fpcb_thick - siwh_pcb_suppz(i), & irotnull,'ONLY',dim_sili,9) endif enddo * one rohacell thermal disk as an inner-z cover: nmed = sili_med_cg call gsvolu('SWRH', 'PCON', nmed, dim_sili, 0, ivolu) call gsatt ('SWRH', 'SEEN', 1) call gsatt ('SWRH', 'COLO', 7) dim_sili( 1) = 0 ! dim_sili( 2) = 360 ! dim_sili( 3) = 2 ! ! dim_sili( 4) = -siwh_roha1_thick ! defined in each gposp() dim_sili( 5) = siwh_rmin dim_sili( 6) = siwh_pcb_rmax dim_sili( 7) = +siwh_roha1_thick ! dim_sili( 8) = siwh_rmin dim_sili( 9) = siwh_pcb_rmax call gsposp('SWRH', 1, 'SIWH', 0., 0., & siwh_pcb_z(5) + siwh_fpcb_thick + 2.*siwh_pcb_suppz(1) + 0.2 & + siwh_roha1_thick, irotnull,'ONLY',dim_sili,9) call gsposp('SWRH', 2, 'SIWH', 0., 0., & siwh_pcb_z(6) - siwh_fpcb_thick - 2.*siwh_pcb_suppz(1) - 0.2 & - siwh_roha1_thick, irotnull,'ONLY',dim_sili,9) * cables coming off the perimeter: dim_sili( 1) = 0 ! dim_sili( 2) = 360 ! dim_sili( 3) = 2 ! ! dim_sili( 4) = -5.75 dim_sili( 5) = siwh_pcb_rmax dim_sili( 6) = siwh_rmax dim_sili( 7) = +5.75 dim_sili( 8) = siwh_pcb_rmax dim_sili( 9) = siwh_pcb_rmax +0.5 nmed = 802 ! = plastic call gsvolu('SWCB', 'PCON', nmed, dim_sili, 9, ivolu) call gsatt ('SWCB', 'SEEN', 1) call gsatt ('SWCB', 'COLO', 6) call gspos('SWCB', 1, 'SIWH', 0., 0., & -34.25, irotnull,'ONLY') irot = irot+1 call gsrotm(irot,90.,180., 90.,90., 180.,0.) call gspos('SWCB', 2, 'SIWH', 0., 0., & +34.25, irot,'ONLY') nmed = sili_med_coldair ! reset to be sure endif ! readout wheels modeled or not c c barrel VTX kapton cables pixel layers - a tube section c irot=irot+1 irot1 = irot CALL GSROTM(irot1,90., 0.,90.,270.,180.,0.) ! rotate about x irot=irot+1 irot2 = irot CALL GSROTM(irot2,90.,180.,90., 90.,180.,0.) ! rotate about y irot=irot+1 irot3 = irot CALL GSROTM(irot3,90.,180.,90.,270., 0.,0.) ! rotate about z par(1) = sili_br_r(1) par(2) = sili_br_r(2) par(3) = pixel_hdi_thk par(4) = pixel_hdi_phimin par(5) = pixel_hdi_phimax nmed = sili_med_passive Call GSVOLU('SICC','TUBS',nmed,PAR,5,IVOL1) call GSPOS('SICC',1,'SICG',0.,0.,sili_br_manz(1)-.5, c irotnull,'ONLY') call GSPOS('SICC',2,'SICG',0.,0.,sili_br_manz(5)+.5, c irotnull,'ONLY') call GSPOS('SICC',3,'SICG',0.,0.,sili_br_manz(1)-.5, c irot2,'ONLY') call GSPOS('SICC',4,'SICG',0.,0.,sili_br_manz(5)+.5, c irot2,'ONLY') Call GSATT('SICC','SEEN', 1) Call GSATT('SICC','COLO', 4) c c barrel VTX kapton cables strip layers - a cone section: c par(1) = (sili_endcap_z(6)-2.8-sili_br_manz(5))/2. par(2) = sili_br_r(2) + pixel_hdi_thk par(3) = sili_br_r(2) + pixel_hdi_thk*2. par(4) = sili_cg_rmx(4) - 1.2 par(5) = par(4) + pixel_hdi_thk*4. par(6) = pixel_hdi_phimin par(7) = pixel_hdi_phimax Call GSVOLU('SJCC','CONS',nmed,PAR,7,IVOL1) call GSPOS('SJCC',1,'SICG',0.,0.,sili_br_manz(5)+par(1)+1.0, c irotnull,'ONLY') call GSPOS('SJCC',2,'SICG',0.,0.,-sili_br_manz(5)-par(1)-1.0, c irot1,'ONLY') call GSPOS('SJCC',3,'SICG',0.,0.,sili_br_manz(5)+par(1)+1.0, c irot3,'ONLY') call GSPOS('SJCC',4,'SICG',0.,0.,-sili_br_manz(5)-par(1)-1.0, c irot2,'ONLY') Call GSATT('SJCC','SEEN',1) Call GSATT('SJCC','COLO', 4) c c VTX Barrel kapton layers after cone - a tube section: c par(1) = sili_cg_rmx(4) - 1.0 par(2) = par(1) + pixel_hdi_thk*4. par(3) = (sili_endcap_z(8)-sili_endcap_z(6))/2. par(4) = pixel_hdi_phimin par(5) = pixel_hdi_phimax nmed = sili_med_passive Call GSVOLU('SKCC','TUBS',nmed,PAR,5,IVOL1) call GSPOS('SKCC',1,'SICG',0.,0.,sili_endcap_z(8)-par(3), c irotnull,'ONLY') call GSPOS('SKCC',2,'SICG',0.,0.,-sili_endcap_z(8) +par(3), c irotnull,'ONLY') call GSPOS('SKCC',3,'SICG',0.,0.,sili_endcap_z(8) -par(3), c irot3,'ONLY') call GSPOS('SKCC',4,'SICG',0.,0.,-sili_endcap_z(8) +par(3), c irot3,'ONLY') call gsatt('SKCC','SEEN',1) Call GSATT('SKCC','COLO', 4) if (sili_endcap_config.eq.1) then ! If 0, nothing installed in endcap region call svx_fvtx ! install FVTX wheels elseif (sili_endcap_config.eq.2) then ! call svx_ifvtx ! install ldrd pixel planes elseif (sili_endcap_config.eq.3) then ! call svx_fvtx_old ! install old fvtx disks (split in R) endif ! ENDIF ! this was a check on volume character from line ~387 above CVOLU_OPT... c--- Write parameters into the svxPISA.par file (temporary solution) c """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" open(unit=15,file=svxpar_file,status='UNKNOWN',err=995) c SVX cage parameters write(15,*,err=994) 'SVX cage parameters:' write(15,*,err=994) sili_cg_rmn write(15,*,err=994) sili_cg_thck, sili_cg_inthck write(15,*,err=994) sili_cg_tempc write(15,*,err=994) sili_cg_npcon write(15,*,err=994) (sili_cg_z(iLayer), iLayer=1,sili_cg_npcon) write(15,*,err=994) (sili_cg_rmx(iLayer), iLayer=1,sili_cg_npcon) write(15,*,err=994) sili_cg_xdisp, sili_cg_ydisp, sili_cg_zdisp c SVX barrel parameters write(15,*,err=994) 'SVX barrel parameters:' write(15,*,err=994) sili_br_nlayers write(15,*,err=994) * (sili_br_r(iLayer), iLayer=1,sili_br_nlayers+1) write(15,*,err=994) * (sili_br_z(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_nsn(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_snhalfx(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_snhalfy(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_snhalfz(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_x0add(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_snzgap(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_dphi(iLayer), iLayer=1,sili_br_nlayers) write(15,*,err=994) * (sili_br_tilt(iLayer), iLayer=1,sili_br_nlayers) do iLayer = 1, sili_br_nlayers write(15,*,err=994) sili_br_nsec(iLayer) write(15,*,err=994) * (sili_br_nlad(isec,iLayer),isec=1,sili_br_nsec(iLayer)) write(15,*,err=994) * (sili_br_phic(isec,iLayer),isec=1,sili_br_nsec(iLayer)) enddo c BARREL: Write sensor rotation matrices and translation vectors write(15,*,err=994) * 'SVX barrel sensor rotation matrices and translation vectors' call uctoh(namesv(1), LNAM(1), 4, 4) LNUM(1) = 1 call uctoh(namesv(2), LNAM(2), 4, 4) LNUM(2) = 1 call uctoh(namesv(3), LNAM(3), 4, 4) LNUM(3) = 1 do iLayer = 1, sili_br_nlayers ! loop over barrels 1-4 call uctoh(siljNames(iLayer), LNAM(4), 4, 4) nladd = 0 do isec = 1, sili_br_nsec(iLayer) nladd = nladd + sili_br_nlad(isec,iLayer) enddo do iladd = 1, nladd ! loop over ALL ladders LNUM(4) = iladd call uctoh(namesv(5), LNAM(5), 4, 4) do isen = 1, sili_br_nsn(iLayer) ! 4 Si dets par ladder LNUM(5) = isen write(15,*,err=994) 0, iLayer, iladd, isen NLEVEL = 0 ! nlevel is in /GCVOLU/ call glvolu(5, LNAM, LNUM, isec) ! fills /GCVOLU/ write (66,'(''5'',5a5,7i3)') namesv(1),namesv(2), & namesv(3),siljNames(iLayer),namesv(5), LNUM, isec write(15,*,err=994) (gtran(isec,NLEVEL), isec=1,3) ! in GCVOLU: xyz pos write(15,*,err=994) (grmat(isec,NLEVEL), isec=1,3) ! in GCVOLU: rotation write(15,*,err=994) (grmat(isec,NLEVEL), isec=4,6) ! matrix write(15,*,err=994) (grmat(isec,NLEVEL), isec=7,9) ! '' enddo enddo enddo NLEVEL = 0 c------------------------! end glvolu calls --------------- close(unit=15) ! file svxPISA.par c--- c--- Fill 'PARA' zebra-bank c--- CHFORM = '5I -F' ! 4 integer counts, then use all float call mzform('PARA',CHFORM,iod) ! book characteristic c c write the parameters to a zebra bank. later they will go to output file c--- Counting number of parameters npar = 1 ! Number of hit components c Contribution from SIEN/SICG npar = npar + 8 + 2*sili_cg_npcon c Contribution from Barrel npar = npar + 2 + 11*sili_br_nlayers Do iLayer = 1, sili_br_nlayers npar = npar + 2*sili_br_nsec(iLayer) Enddo c Contribution from Endcap npar = npar + 2 + 11*8 call mzbook(ixdiv_fr, lFD_PARA, lFD_PARA, 1, & 'PARA', 0, 0, npar, iod, 0) c C fill the bank c c Two first integers: numbers of layers in Barrel & Endcap iPoint = 1 iqf(lfd_para + iPoint) = sili_br_nlayers iPoint = iPoint + 1 iqf(lfd_para + iPoint) = 16 ! was 8 c Number of hit components iPoint = iPoint + 1 iqf(lfd_para + iPoint) = nhh c Number of barrel & endcap volume descriptors iPoint = iPoint + 1 iqf(lfd_para + iPoint) = nbrv ! = 5 iPoint = iPoint + 1 iqf(lfd_para + iPoint) = necv ! = 6 c c Envelope/Cage parameters c iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_rmn iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_thck iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_inthck iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_tempc iPoint = iPoint + 1 qf(lfd_para + iPoint) = FLOAT(sili_cg_npcon) Do icnt = 1, sili_cg_npcon iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_z(icnt) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_rmx(icnt) Enddo iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_xdisp iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_ydisp iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_cg_zdisp C C Barrel parameters C Do iLayer = 1, sili_br_nlayers iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_snhalfx(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_snhalfy(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_snhalfz(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_x0add(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_snzgap(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_tilt(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = FLOAT(sili_br_nsn(iLayer)) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_r(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_z(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_dphi(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = FLOAT(sili_br_nsec(iLayer)) Do isec = 1, sili_br_nsec(iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = sili_br_phic(isec,iLayer) iPoint = iPoint + 1 qf(lfd_para + iPoint) = FLOAT(sili_br_nlad(isec,iLayer)) Enddo Enddo return ! from subroutine svx 993 stop 'svx - material number already used.' 994 stop 'svx - svxPISA.par write error.' 995 stop 'svx - unable to open svxPISA.par.' 996 stop 'svx - read error in sili_run_par.' 997 stop 'svx - read error in sili_br_par segment.' 998 stop 'svx - read error in sili_cg_par segment.' 999 stop 'svx - read error in sili_ec_par.' end ! end of subroutine svx c=============================================================================c integer function skip_sector(silirun, silisec) implicit none integer silirun integer silisec if( silirun.eq.13.and.silisec.eq.2 ) then skip_sector = 1 else skip_sector = -1 endif return end ! end of function skip_sector c=============================================================================c integer function skip_ladder(silirun, silisec, sililay, sililad) implicit none integer silirun integer silisec integer sililay integer sililad if( silirun.eq.12..and.silisec.eq.2.and.sililay.eq.2) then if( sililad.eq.1.or.sililad.eq.9 ) then ! remove all material of ladder skip_ladder = 1 elseif( sililad.eq.10 ) then ! remove all material of ladder except for stave skip_ladder = 0 else skip_ladder = -1 endif else skip_ladder = -1 endif return end ! end of function skip_ladder c=============================================================================c