#include "geant321/pilot.h" c c----------------------------------------------------------------------- c subroutine ugeom c c this subroutine defines the geometrical set-up. c The z-axis is defines as the low-energy mu+ beam axis. c This means x-axis --> horizontal, pointing to the left c y-axis --> vertical, upwards. c c T. Prokscha, 15-Sep-2000, PSI c c Unix version, part of the geant_lemsr program c c TP, 05-Apr-2001, PSI Unix, NT, Linux c c------------------------------------------------------------------------ c implicit none c #include "common.inc" c #define CERNLIB_TYPE #include "geant321/gctmed.inc" #include "geant321/gcsets.inc" #include "geant321/gclist.inc" #include "geant321/gcflag.inc" #include "geant321/gcphys.inc" #include "geant321/gccuts.inc" #include "geant321/gckine.inc" c c----------------------------------------------------------------------------- c real*4 par_box(3) real*4 par_tube(3) real*4 par_tubs(5) ! segment of a tube real*4 par_cone(5) c real*4 theta1,theta2,theta3,phi1,phi2,phi3 !rotation angles integer*4 ivol !for the side arm c character*4 namesv(4) !for detector descr. character*4 namesh(7) ! to define hit integer*4 nbitsh(7) ! paramters on MCP real*4 orig(7),fact(7) c real*4 atomw(9),zatom(9),wmat(9),dens ! to define MCP material c integer*4 mat_type ! material type for sample plate real*4 off real*4 he_shield_thickness integer*4 Air, Vacuum, Al, Fe, Cu, Steel, Brass, Sapphire, 1 Macor, MCP, NaI, Scint ! medium numbers c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c data namesh /'x ','y ','z ','t ','e ','elos', 'part'/ data nbitsh /7*32/ data orig /3*100.,0.,0.,0.,0./ data fact /3*100.,1.e+9,1000000.,1000000.,1./ c c the values for x,y,z,t,e and eloss will be internally converted c by GEANT to integers; c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c MCP material data are taken from J.L.WIZA,Microchannel Plate Detectors, c Nucl.Instr.Meth. 162 (1979), 587-601 c c data dens /4./ ! density of MCP glass data dens /2./ ! about half of the MCP is "empty" due to c ! the MCP channels data zatom /82.,8.,14.,19.,37.,56.,33.,55.,11./ data wmat /.479,.258,.182,.042,.018,.013,.004,.002,.001/ data atomw /207.19,15.999,28.086,39.10,85.47,137.33,74.92, 1 132.91,22.99/ c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c define materials c call gmate ! standard GEANT materials c c some additional materials c c define LEAD GLASS (MCP), NaI c call gsmixt(17,'MCPGLASS',atomw,zatom,dens,9,wmat) c c define NaI c zatom(1) = 11. atomw(1) = 22.99 zatom(2) = 53 atomw(2) = 126.9 wmat(1) = 1. wmat(2) = 1. dens = 3.67 call gsmixt(18,'NaICALOR',atomw,zatom,dens,-2,wmat) c c define Scintillator NE102A c zatom(1) = 1. atomw(1) = 1.0079 zatom(2) = 6. atomw(2) = 12.011 wmat(1) = 1.104 wmat(2) = 1. dens = 1.032 call gsmixt(19,'SCINT',atomw,zatom,dens,-2,wmat) c c stainless steel c dens = 7.930 zatom(1) = 26. zatom(2) = 24. zatom(3) = 28. atomw(1) = 55.85 atomw(2) = 52.00 atomw(3) = 58.70 wmat(1) = 0.71 wmat(2) = 0.18 wmat(3) = 0.11 call gsmixt(20,'STEEL',atomw,zatom,dens,3,wmat) c c brass c dens = 8.67 zatom(1) = 29. zatom(2) = 30. atomw(1) = 63.55 atomw(2) = 65.38 wmat(1) = .80 wmat(2) = .19 c call gsmixt(21,'BRASS',atomw,zatom,dens,2,wmat) c c define Sapphire == AL2O3 c zatom(1) = 13. atomw(1) = 26.98 zatom(2) = 8. atomw(2) = 16.00 wmat(1) = 2. wmat(2) = 3. dens = 3.985 c call gsmixt(22,'SAPPHIRE',atomw,zatom,dens,-2,wmat) c c define MACOR as SiO2 with higher density; the correct compound is c c (SiO2)46 (Al2O3)16 (MgO)17 (K2O)10 (B2O3)7 c zatom(1) = 14. atomw(1) = 28.0855 zatom(2) = 8. atomw(2) = 16.00 wmat(1) = 1. wmat(2) = 2. dens = 2.52 c call gsmixt(23,'MACOR',atomw,zatom,dens,-2,wmat) c c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c define tracking medium numbers corresponding to the material numbers c stored in JMATE by calling GMATE c c 9 = Aluminum c 10 = Iron c 11 = Copper c 15 = Air c 16 = Vacuum c 17 = MCP c 18 = NaI <--- not used for present setup c 19 = Scintillator c 20 = Stainless steel c 21 = brass <--- not used c 22 = sapphire c 23 = macor c isvol = 0 ifield = 0 c epsil = 0.0001 ! boundary crossing precision set to 1 micron epsil = 0.001 ! boundary crossing precision set to 10 micron c call gstmed( 1,'Air $', 15, isvol, ifield, fieldm, 1 tmaxfd, STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 2,'Vacuum $', 16, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 3,'Aluminum $', 9, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 4,'Iron $', 10, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 5,'Copper $', 11, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 6,'Steel $', 20, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 7,'Brass $', 21, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 8,'Sapphire $', 22, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed( 9,'Macor $', 23, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) c isvol = 1 ! sensitive volume; this means this volume is a detector call gstmed(10,'MCPDetector$', 17, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed(11,'NaIDetector$', 18, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) call gstmed(12,'Scintillato$', 19, isvol, ifield, fieldm, tmaxfd, 1 STEMAX, deemax, epsil, stmin, 0, 0) c Air = 1 Vacuum = 2 Al = 3 Fe = 4 Cu = 5 Steel = 6 Brass = 7 Sapphire = 8 Macor = 9 MCP = 10 NaI = 11 Scint = 12 c c redefine kinetic cut energies for muons in all media from its c default value = 10 MeV to 10keV =0.00001 GeV c c ---> define cut energies via CUTS input cards c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c define MOTHER VOLUME MARS c par_box(1) = 100. par_box(2) = 100. par_box(3) = 100. c call gsvolu('MARS','BOX ', Air, par_box, 3, ivol) if (ivol.lt.0) goto 900 !this means an error during c !call to GSVOLU c------------------------------------ c c vacuum tube of sample or MCP2, data from Balzers offer c par_tube(1) = 0. par_tube(2) = 7.65 par_tube(3) = 16.2 c call gsvolu('MCPV','TUBE', Vacuum, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c now stainless steel part of tube c par_tube(1) = 7.65 par_tube(2) = 7.95 par_tube(3) = 16.2 c call gsvolu('MCPS','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c 160 CF flange upstream of MCP2 tube c par_tube(1) = 7.95 par_tube(2) = 10.125 par_tube(3) = 1.1 c call gsvolu('F160','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c 100 CF flange at the end c par_tube(1) = 0. par_tube(2) = 7.7 par_tube(3) = 1.0 c call gsvolu('F100','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c 200 CF flange upstream of MCP2 tube to connect to gate valve chamber c par_tube(1) = 7.65 par_tube(2) = 10.325 par_tube(3) = 1.2 c call gsvolu('F200','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c par_tube(1) = 0. c par_tube(2) = 7.95 c par_tube(3) = 1.2 c c call gsvolu('T200','TUBE', Vacuum, par_tube, 3, ivol) c if (ivol.lt.0) goto 900 c c the gate valve chamber c c par_tube(1) = 0. par_tube(2) = 10.325 par_tube(3) = 9.25 c call gsvolu('GATV','TUBE', Vacuum, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c for simplicity choose outer diameter of the Gate valve chamber equal c to the outer diameter of 200 CF flange c par_tube(1) = 10.325 par_tube(2) = 12.65 par_tube(3) = 9.25 c call gsvolu('GATS','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c the L3 tube, vacuum c par_tube(1) = 0. par_tube(2) = 10.0 par_tube(3) = 23.2 c call gsvolu('L3VA','TUBE', Vacuum, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c the L3 tube, stainless steel c par_tube(1) = 10.0 par_tube(2) = 10.3 par_tube(3) = 23.2 c call gsvolu('L3ST','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c conical anode c c the downstream part of HV piece c par_cone(1) = 2.5 ! half length dz par_cone(2) = 4.8 ! inside radius at -dz par_cone(3) = 6.2 ! outside radius at -dz par_cone(4) = 3.3 ! inside radius at dz par_cone(5) = 3.6 ! outside radius at dz c call gsvolu('RA-E','CONE', Steel, par_cone, 5, ivol) if (ivol.lt.0) goto 900 c c the middle part, still on HV c par_cone(1) = 2.0 ! half length dz par_cone(2) = 5.8 ! inside radius at -dz par_cone(3) = 6.2 ! outside radius at -dz par_cone(4) = 4.8 ! inside radius at dz par_cone(5) = 6.2 ! outside radius at dz c call gsvolu('RA-M','CONE', Steel, par_cone, 5, ivol) if (ivol.lt.0) goto 900 c c ground cylinder, stainless steel c par_tube(1) = 5.8 par_tube(2) = 6.2 par_tube(3) = 5.8 c call gsvolu('RA-G','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c------------------------------------------------------ c c sample cryo things c czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz c c sample holder c c 1. Cu plate (sample holder) on Cold finger, 0.5cm c par_tube(1) = 0. par_tube(2) = 3.5 c par_tube(2) = 2.1 ! small sample plate par_tube(3) = 0.25 c if ( samp_mat .eq. 'saal' ) then mat_type = Al ! Al else mat_type = Cu ! CU endif c call gsvolu('SAH1','TUBE',mat_type,par_tube,3,ivol) c print*,'SAH1 ivol = ',ivol if (ivol.lt.0) goto 900 c c 2. Cu plate (0.4cm), sample is mounted on this plate c par_tube(1) = 0. par_tube(2) = 3.5 c par_tube(2) = 2.1 ! small sample plate par_tube(3) = 0.2 c call gsvolu('SAH2','TUBE',mat_type,par_tube,3,ivol) c print*,'SAH2 ivol = ',ivol if (ivol.lt.0) goto 900 c c now select new color if sample plates are Al c if ( mat_type .eq. Al ) then call gsatt('SAH1', 'COLO', 4) call gsatt('SAH2', 'COLO', 4) endif c c Sample mounting ring (0.1cm), 4cm inner diameter c c par_tube(1) = 1.5 c par_tube(2) = 2.1 par_tube(1) = 2. par_tube(2) = 3.5 par_tube(3) = 0.05 c call gsvolu('SAH3','TUBE',mat_type,par_tube,3,ivol) c print*,'SAH3 ivol = ',ivol if ( mat_type .eq. Al ) then call gsatt('SAH3', 'COLO', 4) ! set color for aluminum endif if (ivol.lt.0) goto 900 if ( l_samp) then write(6,*) ' ' if ( mat_type .eq. Cu ) then write(6,*) ' Sample holder ring: Cu.' else if ( mat_type .eq. Al ) then write(6,*) ' Sample holder ring: Al.' else write(6,*) ' Sample holder ring: ', mat_type endif write(6,*) ' ' endif c c c Sapphire mounted between 1. and 2. Cu plate, 0.6cm thick, 6cm diameter c par_tube(1) = 0. c par_tube(2) = 1.6 ! small sample plate par_tube(2) = 3.0 par_tube(3) = 0.3 c call gsvolu('SAPH','TUBE', Sapphire, par_tube, 3, ivol) if (ivol.lt.0) goto 900 call gsatt('SAPH', 'COLO', 3) ! green color for saphhire c czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz c c cryo c c 1 cm plate, "cold finger" c par_tube(1) = 0. par_tube(2) = 2.75 par_tube(3) = 0.5 c call gsvolu('COFI','TUBE', Cu, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c end plate of cryo (3cm diameter, 0.7cm thick) c par_tube(1) = 0. par_tube(2) = 1.5 par_tube(3) = 0.35 c call gsvolu('CRY1','TUBE', Cu, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c "Waermetauscher", assume that it has 1cm open cylinder ? c 5 cm long c par_tube(1) = 0.5 par_tube(2) = 1.5 par_tube(3) = 2.5 c call gsvolu('CRY2','TUBE', Cu, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c the mounting ring for He-shield c par_tube(1) = 3.8 par_tube(2) = 4.7 par_tube(3) = 0.55 c call gsvolu('CRY3','TUBE', Cu, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c add 2mm thick plate for mounting ring c this is just to close the downstream side, I don't know if c dimensions and position are right. c par_tube(1) = 1.5 par_tube(2) = 3.8 par_tube(3) = 0.1 c call gsvolu('CRY4','TUBE', Cu, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c call gsatt('CRY4', 'COLO', 3) czzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz c c He shield c par_tube(1) = 4.7 par_tube(2) = 4.8 par_tube(3) = 4.5 c he_shield_thickness = par_tube(2) - par_tube(1) if ( l_crsh ) then write(6,*) ' ' write(6,*) 'Thickness of Cu-He-shield: ',he_shield_thickness, 1 ' cm.' write(6,*) ' ' endif c call gsvolu('CRSH','TUBE', Cu, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c------------------------------------------------------ c c MCP detector c par_tube(1) = 0. par_tube(2) = 2.5 c if ( l_run11 ) then par_tube(3) = 0.15 ! Galileo Z-stack, 2.4mm totallength ! Galileo would have 3.0mm totallength else par_tube(3) = 0.12 ! hamamatsu Z-stack, 2.4mm totallength endif c if ( l_mcp2 ) then call gsvolu('DMCP','TUBE', MCP, par_tube, 3, ivol) if (ivol.lt.0) goto 900 endif c c MCP2 mounting and anode up to Run11 c if ( .not. l_run11) then c c macor ring c par_tube(1) = 2.5 par_tube(2) = 3.5 par_tube(3) = 0.55 call gsvolu('MCPM', 'TUBE', Macor, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c anode, use MACOR c par_tube(1) = 0. par_tube(2) = 3.5 par_tube(3) = 0.05 c call gsvolu('MCPA', 'TUBE', Macor, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c stainless steel ring c par_tube(1) = 2.5 par_tube(2) = 3.5 par_tube(3) = 0.05 call gsvolu('MCSR', 'TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c stainless steel support ring c par_tube(1) = 2.75 par_tube(2) = 4.25 par_tube(3) = 0.2 call gsvolu('MCSS', 'TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c-------------------------------------------- c else c c Run 11 MCP detector c c ceramic rings, use MACOR as material c par_tube(1) = 2.4 par_tube(2) = 3.25 par_tube(3) = 0.075 call gsvolu('MCPM', 'TUBE', Macor, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c anode in Run11, c par_box(1) = 3.65 par_box(2) = 3.65 par_box(3) = 0.4 call gsvolu('MCPA','BOX ', Steel, par_box, 3, ivol) if (ivol.lt.0) goto 900 c c now the anode is not completely made of steel but there c the are "vacuum cylinders". c par_tube(1) = 0. par_tube(2) = 2.75 par_tube(3) = 0.15 c call gsvolu('ANVA','TUBE', Vacuum, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c stainless steel ring for MCP2 mounting c par_box(1) = 3.65 par_box(2) = 3.65 par_box(3) = 0.1 call gsvolu('MCSR','BOX ', Steel, par_box, 3, ivol) if (ivol.lt.0) goto 900 c par_tube(1) = 0 par_tube(2) = 2.75 par_tube(3) = 0.1 call gsvolu('MCVR','TUBE', Vacuum, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c c stainless steel support ring c par_tube(1) = 4.0 par_tube(2) = 4.8 par_tube(3) = 0.25 call gsvolu('MCSS','TUBE', Steel, par_tube, 3, ivol) if (ivol.lt.0) goto 900 c endif ! if .not. l_run11 c c------------------------------------------------------ c c inner scintillator c par_tubs(1) = 9.0 ! inner radius par_tubs(2) = 9.5 ! outer radius par_tubs(3) = 13.0 ! half length in z par_tubs(4) = -45. ! starting angle par_tubs(5) = +45. ! ending angle call gsvolu('SCIS','TUBS', Scint, par_tubs, 5, ivol) if (ivol.lt.0) goto 900 c c outer scintillator c par_tubs(1) = 9.6 ! inner radius par_tubs(2) = 10.1 ! outer radius par_tubs(3) = 13.0 ! half length in z par_tubs(4) = -45. ! starting angle par_tubs(5) = +45. ! ending angle call gsvolu('SCOS','TUBS', Scint, par_tubs, 5, ivol) if (ivol.lt.0) goto 900 c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c define now the positions of vacuum chambers and detectors c within the MARS c c z defines the beam direction c if ( l_mcps) then call gspos('MCPS',1,'MARS',0.,0.,0.,0,'ONLY') endif if ( l_efla ) then call gspos('F100',1,'MARS',0.,0.,17.2,0,'ONLY') endif c call gspos('MCPV',1,'MARS',0.,0.,0.,0,'ONLY') call gspos('F160',1,'MARS',0.,0.,-15.10,0,'ONLY') c call gspos('T200',1,'MARS',0.,0.,-17.40,0,'ONLY') call gspos('GATV',1,'MARS',0.,0.,-25.45,0,'ONLY') call gspos('GATS',1,'MARS',0.,0.,-25.45,0,'ONLY') call gspos('F200',1,'GATV',0.,0., 8.05,0,'ONLY') call gspos('L3VA',1,'MARS',0.,0.,-57.90,0,'ONLY') call gspos('L3ST',1,'MARS',0.,0.,-57.90,0,'ONLY') c c Ring anode c if ( l_run11) then call gspos('RA-E',1,'MCPV',0.,0., -8.6,0,'ONLY') call gspos('RA-M',1,'MCPV',0.,0.,-13.1,0,'ONLY') call gspos('RA-G',1,'GATV',0.,0.,+3.35,0,'ONLY') endif c c position of sample cryo things c c off = 0.25 off = 0. if ( l_samp ) then c call gspos('SAH3',1,'MCPV',0.,0.,+1.35+off,0,'ONLY') call gspos('SAH2',1,'MCPV',0.,0.,+1.6+off,0,'ONLY') call gspos('SAPH',1,'MCPV',0.,0.,+2.1+off,0,'ONLY') call gspos('SAH1',1,'MCPV',0.,0.,+2.65+off,0,'ONLY') endif c if ( l_cryo ) then ! parts of the CryoVac cryostat call gspos('COFI',1,'MCPV',0.,0.,+3.40+off,0,'ONLY') call gspos('CRY1',1,'MCPV',0.,0.,+4.25+off,0,'ONLY') call gspos('CRY2',1,'MCPV',0.,0.,+6.75+off,0,'ONLY') call gspos('CRY3',1,'MCPV',0.,0.,+5.10+off,0,'ONLY') call gspos('CRY4',1,'MCPV',0.,0.,+5.10+off,0,'ONLY') endif c if ( l_crsh ) then call gspos('CRSH',1,'MCPV',0.,0.,+1.6+off,0,'ONLY') endif c c position of MCP c if ( l_mcp2 ) then if ( l_run11) then call gspos('DMCP',1,'MCPV',0.,0.,+1.55,0,'ONLY') ! Galileo MCP else call gspos('DMCP',1,'MCPV',0.,0.,+1.52,0,'ONLY') ! Hamamatsu MCP endif endif c c anode and stainless steel ring c if ( l_mcpa ) then c if ( .not. l_run11 ) then c c Run 10 c call gspos('MCPM', 1, 'MCPV', 0., 0., +1.85, 0, 'ONLY') ! MACOR ring call gspos('MCPA', 1, 'MCPV', 0., 0., +3.45, 0, 'ONLY') ! MACOR anodee call gspos('MCSS', 1, 'MCPV', 0., 0., +3.90, 0, 'ONLY') ! steel support ring call gspos('MCSR', 1, 'MCPV', 0., 0., +2.45, 0, 'ONLY') ! guard ring call gspos('MCSR', 2, 'MCPV', 0., 0., +2.95, 0, 'ONLY') ! guard ring else c c Run 11 c call gspos('MCPM',1,'MCPV',0.,0.,+1.325,0,'ONLY') ! ceramic ring call gspos('MCPM',2,'MCPV',0.,0.,+1.775,0,'ONLY') ! ceramic ring call gspos('MCSR',1,'MCPV',0.,0.,+2.00,0,'ONLY') ! steel plate call gspos('MCVR',1,'MCSR',0.,0.,+0.00,0,'ONLY') ! hole in plate call gspos('MCPA',1,'MCPV',0.,0.,+3.10,0,'ONLY') ! the anode call gspos('ANVA',1,'MCPA',0.,0.,-0.25,0,'ONLY') ! part of anode call gspos('ANVA',2,'MCPA',0.,0.,+0.25,0,'ONLY') ! part of anode call gspos('MCSS',1,'MCPV',0.,0.,+5.75,0,'ONLY') ! support ring c endif c endif c c position of the four scintillators c c-------------------------- c c the LEFT detector c off = 0. call gspos('SCIS',1,'MARS',0.,0.,off,0,'ONLY') call gspos('SCOS',1,'MARS',0.,0.,off,0,'ONLY') c c-------------------------- c c the TOP detector; for comments in rotation matrix, see RIGHT detector c below c theta1 = 90. phi1 = 90. theta2 = 90. phi2 = 180. theta3 = 0. phi3 = 0. c c GSROTM(97...) defines rotation matrix 97 c call gsrotm(97,theta1,phi1,theta2,phi2,theta3,phi3) c call gspos('SCIS',2,'MARS',0.,0., off,97,'ONLY') call gspos('SCOS',2,'MARS',0.,0., off, 97,'ONLY') c c-------------------------------- c c the RIGHT detector c c Now, I can get 3 copies of the SCIS and SCOS by defining a rotation c matrix to place the other detectors in the MARS c c THETA1 = polar angle of new x axis c PHI1 = azimuth of new x axis c THETA2 = polar angle of new y axis c PHI2 = azimuth of new y axis c THETA3 = polar angle of new z axis c PHI3 = azimuth of new z axis c c SCIS and SCOS above correspond to the LEFT detector of the LEM c setup; now I make a copy to get the RIGHT detector c c z remains unchanged ==> THETA3 = 0, PHI3 = 0 c the x axis becomes -x ==> THETA1 = 90, PHI1 = 180 c the y axis becomes -y ==> THETA2 = 90, PHI2 = 270 c c the unity matrix is c c theta1 = 90, phi1 = 0 c theta2 = 90, phi2 = 90 c theta3 = 0 , phi3 = 0 c theta1 = 90. phi1 = 180. theta2 = 90. phi2 = 270. theta3 = 0. phi3 = 0. c GSROTM(98...) defines rotation matrix 98 c call gsrotm(98,theta1,phi1,theta2,phi2,theta3,phi3) c call gspos('SCIS',3,'MARS',0.,0., off, 98,'ONLY') call gspos('SCOS',3,'MARS',0.,0., off, 98,'ONLY') c c-------------------------- c c the BOTTOM detector; for comments in rotation matrix, see RIGHT detector c above c theta1 = 90. phi1 = 270. theta2 = 90. phi2 = 0. ! == 360 theta3 = 0. phi3 = 0. c c GSROTM(99...) defines rotation matrix 99 c call gsrotm(99,theta1,phi1,theta2,phi2,theta3,phi3) c call gspos('SCIS',4,'MARS',0.,0., off, 99,'ONLY') call gspos('SCOS',4,'MARS',0.,0., off, 99,'ONLY') c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c define basic detector parameter and allocation of the detector c volume to a SET using GSDET; a SET becomes useful in large c detectors where it is possible to group together several detetectors c like the different components of a calorimeter; c in this simple case it isn't necessary, but GEANT aquires it c namesv(1) = 'DMCP' c c the following variables have been "included" c nvname = 1 numbv(1) = 1 idtype = 1 ! user defined detector ID if ( l_mcp2 ) then call gsdet('MDET','DMCP',nvname,namesv,numbv,idtype,100, 1 100,iset,idet) c c define now the hit parameters using GSDETH c MCP : the interesting variables I want to store are c c - position x,y,z c - time t c - energy e c - energyloss eloss c - particle type ipart c call gsdeth('MDET','DMCP',7,namesh,nbitsh,orig,fact) endif c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c define Scintillator detector c nvname = 1 namesv(1) = 'SCIS' numbv(1) = 3 idtype = 2 ! user defined detector ID call gsdet('ISSC','SCIS',nvname,namesv,numbv,idtype,100,100, 1 iset,idet) call gsdeth('ISSC','SCIS',7,namesh,nbitsh,orig,fact) nvname = 1 namesv(1) = 'SCOS' numbv(1) = 3 idtype = 3 ! user defined detector ID c call gsdet('OSSC','SCOS',nvname,namesv,numbv,idtype,100,100, 1 iset, idet) call gsdeth('OSSC','SCOS',7,namesh,nbitsh,orig,fact) c c call gpsets('MDET','DMCP') c call gpsets('ISSC','SCIS') c call gpsets('OSSC','SCOS') c cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c return c ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc c c error handling c 900 write(6,'(''0GEANT_LEMSR-E- Error in routine GSVOLU...'',/)') call exit c end