124 #include "DMXDetectorMaterial.icc"   160   G4double worldWidth  = 470.0*
cm + 2.*wallThick; 
   161   G4double worldLength = 690.0*
cm + 2.*wallThick; 
   162   G4double worldHeight = 280.0*
cm + 2.*wallThick; 
   165      (
"world_box", 0.5*worldWidth, 0.5*worldLength, 0.5*worldHeight );
   179   G4double labWidth  = worldWidth  - 2.*wallThick; 
   180   G4double labLength = worldLength - 2.*wallThick; 
   181   G4double labHeight = worldHeight - 2.*wallThick; 
   184      (
"lab_box", 0.5*labWidth, 0.5*labLength, 0.5*labHeight );
   197 #include "DMXDetectorRoom.icc"   209   G4double LN2PosZ            = 0.5*jacketHeight + 0.5*LN2jacketHeight 
   210                                 + jacketflangeHeight + PosZ;
   213      0.*
cm, LN2jacketRadius, 0.5*LN2jacketHeight, 0.*
deg, 360.*
deg);
   227   G4double LN2vacuumRadius     = LN2jacketRadius - LN2jacketMetalThick;
   228   G4double LN2vacuumHeight     = LN2jacketHeight - LN2jacketMetalThick;
   231      0.*
cm, LN2vacuumRadius, 0.5*LN2vacuumHeight, 0.*
deg, 360.*
deg);
   233     (LN2vacuum_tube, 
vacuum_mat, 
"LN2vacuum_log");
   242   G4double LN2Height       = 590.0*
mm - 2.*LN2jacketMetalThick;
   243   G4double LN2vesselRadius = LN2Radius + LN2jacketMetalThick;
   244   G4double LN2vesselHeight = LN2Height;
   245   G4double LN2vesselPosZ   = 0.5*LN2vacuumHeight - 0.5*LN2vesselHeight;
   248      0.*
cm, LN2vesselRadius, 0.5*LN2vesselHeight, 0.*
deg, 360.*
deg);
   263      0.*
cm, LN2Radius, 0.5*LN2Height, 0.*
deg, 360.*
deg);
   277   G4double jacketMetalThick = LN2jacketMetalThick;
   280      0.*
cm, jacketRadius, 0.5*jacketHeight, 0.*
deg, 360.*
deg);
   294   G4double topjacketflangePosZ = 0.5*(jacketHeight+jacketflangeHeight);
   296   G4Tubs* jacketflange_tube = 
new G4Tubs(
"jacketflange_tube",
   297      0.*
cm, jacketflangeRadius, 0.5*jacketflangeHeight, 0.*
deg, 360.*
deg);
   312   G4double vacuumRadius = jacketRadius - jacketMetalThick;
   313   G4double vacuumHeight = jacketHeight - jacketMetalThick;
   316      0.*
cm, vacuumRadius, 0.5*vacuumHeight, 0.*
deg, 360.*
deg);
   328   G4double copperRadius     = 103.5*
mm + copperMetalThick;
   330   G4double copperInner      = copperRadius - copperMetalThick;
   332   G4double copperVPos       = 0.5*(vesselHeight-copperHeight) + 13.0*
cm;
   334   G4double coppertopVPos    = copperVPos + 0.5*(coppertopThick+copperHeight);
   337      copperInner, copperRadius, 0.5*copperHeight, 0.*
deg, 360.*
deg);
   343      0.*
cm, copperRadius, 0.5*coppertopThick, 0.*
deg, 360.*
deg);
   345     (coppertop_tube, 
copper_mat, 
"coppertop_log");  
   357   G4double vesselMetalThick      = jacketMetalThick;
   358   G4double vesselRadius          = 75.0*
mm + vesselMetalThick;
   361   G4double PMTvesselRadius       = 31.0*
mm + vesselMetalThick;
   366   G4double TotalvesselHeight     = PMTvesselHeight + vesselHeight;
   369      0.*
cm, vesselRadius, 0.5*vesselHeight, 0.*
deg, 360.*
deg);
   371      0.*
cm, PMTvesselRadius, 0.5*PMTvesselHeight, 0.*
deg, 360.*
deg);
   374     (
"vessel_sol", vessel_tube, PMTvessel_tube,
   384   G4Tubs* vesseltop_flange1 = 
new G4Tubs(
"vesseltop_flange1",
   385      0.*
cm, vesselflangeRadius, 0.25*vesselflangeThick, 0.*
deg, 360.*
deg);
   387     (vesseltop_flange1, 
vessel_mat, 
"vesseltop_log1");  
   390      G4ThreeVector(0.,0.,0.5*(vesselHeight+0.5*vesselflangeThick)+vesselVPos), 
   393   G4Tubs* vesseltop_flange2 = 
new G4Tubs(
"vesseltop_flange2",vesselRadius, 
   394     vesselflangeRadius, 0.25*vesselflangeThick, 0.*
deg, 360.*
deg);
   396     (vesseltop_flange2, 
vessel_mat, 
"vesseltop_log2");  
   399      G4ThreeVector(0.,0.,0.5*(vesselHeight-0.5*vesselflangeThick)+vesselVPos), 
   404     (
"vesselbottom_flange1",vesselRadius, vesselflangeRadius, 
   405      0.25*vesselflangeThick, 0.*
deg, 360.*
deg);
   407     (vesselbottom_flange1, 
vessel_mat, 
"vesselbottom_log1");  
   409      G4ThreeVector(0.,0.,-0.5*(vesselHeight-0.5*vesselflangeThick)+vesselVPos),
   413     (
"vesselbottom_flange2",PMTvesselRadius, vesselflangeRadius, 
   414      0.25*vesselflangeThick, 0.*
deg, 360.*
deg);
   416     (vesselbottom_flange2, 
vessel_mat, 
"vesselbottom_log2");  
   418      G4ThreeVector(0.,0.,-0.5*(vesselHeight+0.5*vesselflangeThick)+vesselVPos),
   423     (
"pmtvesselbottom_flange1", PMTvesselRadius, pmtvesselflangeRadius, 
   424      0.25*pmtvesselflangeThick, 0.*
deg, 360.*
deg);
   426     (pmtvesselbottom_flange1, 
vessel_mat, 
"pmtvesselbottom_log1");  
   428     (-0.5*vesselHeight-PMTvesselHeight+vesselVPos+0.25*pmtvesselflangeThick)),
   432     (
"pmtvesselbottom_flange2", 0.*
cm, pmtvesselflangeRadius, 
   433      0.25*pmtvesselflangeThick, 0.*
deg, 360.*
deg);
   435     (pmtvesselbottom_flange2, 
vessel_mat, 
"pmtvesselbottom_log2");  
   437      -0.5*vesselHeight-PMTvesselHeight+vesselVPos-0.25*pmtvesselflangeThick),
   470   G4double DetectorRadius = vesselRadius - vesselMetalThick;
   471   G4double GXeHeight      = TotalvesselHeight - mirrorVPos + gasGap;
   472   G4double GXeVPos        = 0.5*vesselHeight - 0.5*GXeHeight;
   475      0.*
cm, DetectorRadius, 0.5*GXeHeight, 0.*
deg, 360.*
deg);
   488   G4double LXeHeight         = mirrorVPos - gasGap;
   489   G4double PMTDetectorRadius = PMTvesselRadius - vesselMetalThick;
   490   G4double PMTDetectorHeight = PMTvesselHeight;
   491   G4double LXeTubeHeight     = LXeHeight - PMTDetectorHeight;
   492   G4double LXe_solVPos       = -0.5*(LXeTubeHeight+PMTDetectorHeight);
   493   G4double LXeVPos           = -0.5*TotalvesselHeight + 0.5*LXeHeight;
   496      0.*
cm, DetectorRadius, 0.5*LXeTubeHeight, 0.*
deg, 360.*
deg);
   497   G4Tubs* PMTdetector_tube = 
new G4Tubs(
"PMTdetector_tube",
   498    0.*
cm, PMTDetectorRadius, 0.5*PMTDetectorHeight, 0.*
deg, 360.*
deg);
   501     (
"LXe_sol", LXe_tube, PMTdetector_tube,
   518   G4double laggingRadius    = DetectorRadius - laggingThickness;
   520   G4Tubs* gaslag_tube = 
new G4Tubs(
"gaslag_tube", laggingRadius, 
   521      DetectorRadius, 0.5*GXeHeight, 0.*
deg, 360.*
deg);
   535   G4double lagTubeRadius = DetectorRadius - laggingThickness;
   536   G4double lagTubeHeight = LXeHeight - PMTDetectorHeight;
   537   G4double lagPMTRadius  = PMTDetectorRadius - laggingThickness;
   538   G4double lagPMTHeight  = PMTDetectorHeight;
   540   G4Tubs* liqLag_tube = 
new G4Tubs(
"liqlag_tube", lagTubeRadius,
   541      DetectorRadius, 0.5*lagTubeHeight, 0.*
deg, 360.*
deg);
   542   G4Tubs* lagPMT_tube = 
new G4Tubs(
"lagPMT_tube", lagPMTRadius, 
   543      PMTDetectorRadius, 0.5*lagPMTHeight, 0.*
deg, 360.*
deg);
   546     (
"liqLag_sol", liqLag_tube, lagPMT_tube,
   574   G4double vessel_REFL[NUM] = { 0.2, 0.2 };
   576   vessel_mt->
AddProperty(
"REFLECTIVITY", vessel_PP, vessel_REFL, NUM);
   602   G4double CuShieldInnerRadius = CuShieldOuterRadius-CuShieldThickness;
   603   G4double CuShieldVPosition   = -0.5*LXeTubeHeight - PMTDetectorHeight 
   604                                 + 0.5*CuShieldHeight;
   609   G4Tubs* CuShield_tube = 
new G4Tubs(
"CuShield_tube", CuShieldInnerRadius,
   610      CuShieldOuterRadius, 0.5*CuShieldHeight, 0.*
deg, 360.*
deg);
   632   G4double CuShield_REFL[NUM] = { 0.3, 0.2 };
   634   CuShield_mt->
AddProperty(
"REFLECTIVITY", CuShield_PP, CuShield_REFL, NUM);
   642   G4double ringInnerRadius =  CuShieldOuterRadius;
   643   G4double ringVOffset     =  0.5*ringHeight;
   644   G4double ringVPosition   =  -0.5*GXeHeight + gasGap +ringVOffset;
   646   G4Tubs* ring_tube=
new G4Tubs(
"ring_tube", ringInnerRadius,
   647      ringOuterRadius, 0.5*ringHeight, 0.*
deg, 360.*
deg);
   652   G4double ring_REFL[NUM] = { 0.7, 0.65 };
   654   ring_mt->
AddProperty(
"REFLECTIVITY", ring_PP, ring_REFL, NUM);
   677   ringVPosition = 0.5*LXeTubeHeight;
   730   G4double mirrorRadius    = ringInnerRadius;
   731   G4double mirrorVOffset   = 0.5*ringHeight;
   732   G4double mirrorVPosition = -0.5*GXeHeight + gasGap +mirrorVOffset;
   734   G4Tubs* mirror_tube = 
new G4Tubs(
"mirror_tube", 0.*
cm, mirrorRadius,
   735      0.5*mirrorHeight, 0.*
deg, 360.*
deg);
   755   G4double mirror_REFL[NUM] = { 0.83, 0.78 };
   757   mirror_mt->
AddProperty(
"REFLECTIVITY", mirror_PP, mirror_REFL, NUM);
   764   G4double gridRadius     = ringInnerRadius;
   765   G4double grid1VOffset   = 3.5*ringHeight+1.75*
mm;
   766   G4double grid1VPosition = 0.5*LXeTubeHeight - grid1VOffset;
   767   G4double grid2VOffset   = 4.5*ringHeight+3.50*
mm;
   768   G4double grid2VPosition = 0.5*LXeTubeHeight - grid2VOffset;
   771      0.5*gridHeight, 0.*
deg, 360.*
deg);
   792   G4double recessVPosition = 0.5*(alphaHeight - recessHeight);
   794   G4double alphaVOffset    = grid1VOffset-0.5*alphaHeight - gridHeight;
   796   G4double extra_offset    = (recessHeight +0.3*
mm + 0.5*americiumHeight); 
   797   G4double alphaVPosition  = 0.5*LXeTubeHeight - alphaVOffset + extra_offset;
   800      0.5*alphaHeight,  0.*
deg, 360.*
deg);
   801   G4Tubs* recess_tube = 
new G4Tubs(
"recess_tube", 0.*
cm, recessRadius,
   802      0.5*recessHeight, 0.*
deg, 360.*
deg);
   824   G4double alpha_REFL[NUM] = { 0.05, 0.05 };
   826   alpha_mt->
AddProperty(
"REFLECTIVITY", alpha_PP, alpha_REFL, NUM);
   834   G4double americiumVOffset   = 0.5*(alphaHeight-americiumHeight)-recessHeight;
   835   G4double americiumVPosition = americiumVOffset;
   837   sourceZ = vesselVPos + LXeVPos + alphaVPosition + americiumVPosition + PosZ;
   838   G4cout << 
G4endl << 
"Calibration source centre (X,Y,Z):  0, 0, "    842      americiumRadius, 0.5*americiumHeight, 0.*
deg, 360.*
deg);
   856   G4double americium_REFL[NUM] = { 0.7, 0.65 };
   858   americium_mt->
AddProperty(
"REFLECTIVITY", americium_PP, americium_REFL, NUM);
   872   G4double pmtVPosition = -0.5*(LXeTubeHeight+pmtHeight)+pmtVOffset;
   876   G4Tubs* pmt_tube = 
new G4Tubs(
"pmt_tube", 0.*
cm,  pmtRadius, 0.5*pmtHeight,
   881     -2.*pmtRadius*std::cos(30.0*
deg))));
   901   G4double phcathVOffset     = 0.5*pmtHeight-2.*pmtRadius*std::cos(30.0*
deg);
   902   G4double phcathVPosition   = phcathVOffset;
   905      2.*pmtRadius-1.6*
mm, 2.*pmtRadius-1.59*
mm, 0.*
deg, 360.*
deg, 0.*
deg, 
   926   G4double photocath_EFF[NUM]={1.,1.}; 
   927   G4double photocath_ReR[NUM]={1.92,1.92};
   928   G4double photocath_ImR[NUM]={1.69,1.69};
   930   photocath_mt->
AddProperty(
"EFFICIENCY",phcath_PP,photocath_EFF,NUM);
   931   photocath_mt->
AddProperty(
"REALRINDEX",phcath_PP,photocath_ReR,NUM);
   932   photocath_mt->
AddProperty(
"IMAGINARYRINDEX",phcath_PP,photocath_ImR,NUM);
   950   G4cout << G4endl << 
"User Limits: " << G4endl 
   970 #include "DMXDetectorRoomLimits.icc" G4LogicalVolume * grid1_log
 
G4VPhysicalVolume * vessel_phys
 
void Put(const value_type &val) const
 
G4VPhysicalVolume * LN2vessel_phys
 
G4Cache< DMXScintSD * > LXeSD
 
G4LogicalVolume * americium_log
 
G4LogicalVolume * lab_log
 
G4LogicalVolume * alpha_log
 
G4LogicalVolume * world_log
 
G4LogicalVolume * mirror_log
 
G4VPhysicalVolume * vesselbottom_phys1
 
CLHEP::Hep3Vector G4ThreeVector
 
CLHEP::HepRotation G4RotationMatrix
 
G4LogicalVolume * jacket_log
 
G4VPhysicalVolume * mirror_phys
 
G4LogicalVolume * grid2_log
 
G4VPhysicalVolume * bottomjacketflange_phys
 
G4LogicalVolume * liqLag_log
 
static const double nanometer
 
void SetVisibility(G4bool)
 
void SetUserLimits(G4UserLimits *pULimits)
 
G4VPhysicalVolume * grid1_phys
 
G4UserLimits * theUserLimitsForRoom
 
virtual void SetUserMinEkine(G4double uekinMin)
 
G4LogicalVolume * vessel_log
 
G4LogicalVolume * LXe_log
 
G4LogicalVolume * ring_log
 
G4Cache< DMXPmtSD * > pmtSD
 
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1 
 
void SetTimeCut(G4double)
 
void SetForceSolid(G4bool)
 
G4VPhysicalVolume * topjacketflange_phys
 
G4double theDetectorStepSize
 
G4LogicalVolume * pmtvesselbottom_log2
 
G4VPhysicalVolume * lab_phys
 
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
 
void ConstructSDandField()
 
G4VPhysicalVolume * Construct()
 
G4VPhysicalVolume * pmtvesselbottom_phys2
 
G4LogicalVolume * phcath_log
 
G4VPhysicalVolume * copper_phys
 
G4VPhysicalVolume * phcath_phys
 
G4GLOB_DLL std::ostream G4cout
 
G4VPhysicalVolume * pmtvesselbottom_phys1
 
G4LogicalVolume * coppertop_log
 
G4LogicalVolume * LN2vessel_log
 
G4LogicalVolume * GXe_log
 
DMXDetectorConstruction()
 
G4Material * LN2jacket_mat
 
void SetRoomTimeCut(G4double)
 
~DMXDetectorConstruction()
 
void SetEnergyCut(G4double)
 
G4LogicalVolume * pmt_log
 
G4VPhysicalVolume * CuShield_phys
 
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
 
G4LogicalVolume * LN2jacket_log
 
G4VPhysicalVolume * coppertop_phys
 
G4LogicalVolume * vesselbottom_log2
 
G4VPhysicalVolume * liqLag_phys
 
G4LogicalVolume * vesselbottom_log1
 
static const double micrometer
 
G4VPhysicalVolume * LN2jacket_phys
 
G4VPhysicalVolume * grid2_phys
 
G4VPhysicalVolume * vesseltop_phys2
 
static const double nanosecond
 
G4LogicalVolume * jacketflange_log
 
G4VPhysicalVolume * world_phys
 
G4LogicalVolume * vesseltop_log2
 
G4LogicalVolume * CuShield_log
 
G4LogicalVolume * pmtvesselbottom_log1
 
G4VPhysicalVolume * vesseltop_phys1
 
static const G4VisAttributes Invisible
 
G4VPhysicalVolume * ring_phys_liq[6]
 
G4LogicalVolume * vacuum_log
 
DMXDetectorMessenger * detectorMessenger
 
G4LogicalVolume * LN2_log
 
G4VPhysicalVolume * pmt_phys
 
void SetRoomEnergyCut(G4double)
 
G4VPhysicalVolume * gaslag_phys
 
G4VPhysicalVolume * LXe_phys
 
G4VPhysicalVolume * alpha_phys
 
G4UserLimits * theUserLimitsForDetector
 
G4VPhysicalVolume * ring_phys_gas[2]
 
G4VPhysicalVolume * GXe_phys
 
G4LogicalVolume * copper_log
 
G4VPhysicalVolume * vesselbottom_phys2
 
G4Material * CuShield_mat
 
G4LogicalVolume * vesseltop_log1
 
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
 
G4VPhysicalVolume * LN2_phys
 
G4VPhysicalVolume * jacket_phys
 
virtual void SetUserMaxTime(G4double utimeMax)
 
void SetVisAttributes(const G4VisAttributes *pVA)
 
G4VPhysicalVolume * LN2vacuum_phys
 
G4Material * americium_mat
 
G4Material * jacketflange_mat
 
G4LogicalVolume * LN2vacuum_log
 
G4VPhysicalVolume * americium_phys
 
G4VPhysicalVolume * vacuum_phys
 
G4LogicalVolume * gaslag_log