64 G4bool LXeDetectorConstruction::fSphereOn =
true;
69 : fLXe_mt(NULL), fMPTPStyrene(NULL)
71 fExperimentalHall_box = NULL;
72 fExperimentalHall_log = NULL;
73 fExperimentalHall_phys = NULL;
75 fLXe = fAl = fAir = fVacuum = fGlass = NULL;
76 fPstyrene = fPMMA = fPethylene1 = fPethylene2 = NULL;
78 fN = fO = fC = fH = NULL;
91 void LXeDetectorConstruction::DefineMaterials(){
97 G4int nC_PMMA = 3+2*polyPMMA;
98 G4int nH_PMMA = 6+2*polyPMMA;
101 G4int nC_eth = 2*polyeth;
102 G4int nH_eth = 4*polyeth;
128 fPstyrene =
new G4Material(
"Polystyrene", density= 1.03*
g/
cm3, 2);
150 G4double lxe_SCINT[] = { 0.1, 1.0, 0.1 };
151 assert(
sizeof(lxe_SCINT) ==
sizeof(lxe_Energy));
152 G4double lxe_RIND[] = { 1.59 , 1.57, 1.54 };
153 assert(
sizeof(lxe_RIND) ==
sizeof(lxe_Energy));
155 assert(
sizeof(lxe_ABSL) ==
sizeof(lxe_Energy));
157 fLXe_mt->
AddProperty(
"FASTCOMPONENT", lxe_Energy, lxe_SCINT, lxenum);
158 fLXe_mt->
AddProperty(
"SLOWCOMPONENT", lxe_Energy, lxe_SCINT, lxenum);
159 fLXe_mt->
AddProperty(
"RINDEX", lxe_Energy, lxe_RIND, lxenum);
160 fLXe_mt->
AddProperty(
"ABSLENGTH", lxe_Energy, lxe_ABSL, lxenum);
172 G4double glass_RIND[]={1.49,1.49,1.49};
173 assert(
sizeof(glass_RIND) ==
sizeof(lxe_Energy));
175 assert(
sizeof(glass_AbsLength) ==
sizeof(lxe_Energy));
177 glass_mt->
AddProperty(
"ABSLENGTH",lxe_Energy,glass_AbsLength,lxenum);
178 glass_mt->
AddProperty(
"RINDEX",lxe_Energy,glass_RIND,lxenum);
184 assert(
sizeof(vacuum_RIND) ==
sizeof(vacuum_Energy));
186 vacuum_mt->
AddProperty(
"RINDEX", vacuum_Energy, vacuum_RIND,vacnum);
193 G4double rIndexPstyrene[]={ 1.5, 1.5, 1.5, 1.5};
194 assert(
sizeof(rIndexPstyrene) ==
sizeof(wls_Energy));
196 assert(
sizeof(absorption1) ==
sizeof(wls_Energy));
197 G4double scintilFast[]={0.00, 0.00, 1.00, 1.00};
198 assert(
sizeof(scintilFast) ==
sizeof(wls_Energy));
200 fMPTPStyrene->
AddProperty(
"RINDEX",wls_Energy,rIndexPstyrene,wlsnum);
201 fMPTPStyrene->
AddProperty(
"ABSLENGTH",wls_Energy,absorption1,wlsnum);
202 fMPTPStyrene->
AddProperty(
"FASTCOMPONENT",wls_Energy, scintilFast,wlsnum);
212 G4double RefractiveIndexFiber[]={ 1.60, 1.60, 1.60, 1.60};
213 assert(
sizeof(RefractiveIndexFiber) ==
sizeof(wls_Energy));
215 assert(
sizeof(AbsFiber) ==
sizeof(wls_Energy));
216 G4double EmissionFib[]={1.0, 1.0, 0.0, 0.0};
217 assert(
sizeof(EmissionFib) ==
sizeof(wls_Energy));
219 fiberProperty->
AddProperty(
"RINDEX",wls_Energy,RefractiveIndexFiber,wlsnum);
220 fiberProperty->
AddProperty(
"WLSABSLENGTH",wls_Energy,AbsFiber,wlsnum);
221 fiberProperty->
AddProperty(
"WLSCOMPONENT",wls_Energy,EmissionFib,wlsnum);
225 G4double RefractiveIndexClad1[]={ 1.49, 1.49, 1.49, 1.49};
226 assert(
sizeof(RefractiveIndexClad1) ==
sizeof(wls_Energy));
228 clad1Property->
AddProperty(
"RINDEX",wls_Energy,RefractiveIndexClad1,wlsnum);
229 clad1Property->
AddProperty(
"ABSLENGTH",wls_Energy,AbsFiber,wlsnum);
232 G4double RefractiveIndexClad2[]={ 1.42, 1.42, 1.42, 1.42};
233 assert(
sizeof(RefractiveIndexClad2) ==
sizeof(wls_Energy));
235 clad2Property->
AddProperty(
"RINDEX",wls_Energy,RefractiveIndexClad2,wlsnum);
236 clad2Property->
AddProperty(
"ABSLENGTH",wls_Energy,AbsFiber,wlsnum);
244 if (fExperimentalHall_phys) {
254 return ConstructDetector();
267 fExperimentalHall_box
268 =
new G4Box(
"expHall_box",expHall_x,expHall_y,expHall_z);
270 fVacuum,
"expHall_log",0,0,0);
272 fExperimentalHall_log,
"expHall",0,
false,0);
285 -fScint_z/2.-fSlab_z-1.*
cm),
286 fExperimentalHall_log,
false,0,
293 fExperimentalHall_phys,
303 assert(
sizeof(reflectivity) ==
sizeof(pp));
305 assert(
sizeof(efficiency) ==
sizeof(pp));
310 scintWrapProperty->
AddProperty(
"REFLECTIVITY",pp,reflectivity,num);
311 scintWrapProperty->
AddProperty(
"EFFICIENCY",pp,efficiency,num);
315 return fExperimentalHall_phys;
322 if (!fMainVolume)
return;
326 if (!fPmt_SD.
Get()) {
332 pmt_SD->
InitPMTs((fNx*fNy+fNx*fNz+fNy*fNz)*2);
348 if (!fScint_SD.
Get()) {
351 fScint_SD.
Put(scint_SD);
360 this->fScint_x=dims[0];
361 this->fScint_y=dims[1];
362 this->fScint_z=dims[2];
397 this->fOuterRadius_pmt=outerRadius_pmt;
416 fOuterRadius_pmt = 2.3*
cm;
void SetFinish(const G4OpticalSurfaceFinish)
void SetMainVolumeOn(G4bool b)
G4IonisParamMat * GetIonisation() const
static constexpr double mm
static constexpr double mg
CLHEP::Hep3Vector G4ThreeVector
virtual void ConstructSDandField()
std::vector< ExP01TrackerHit * > a
int universe_mean_density
static constexpr double perCent
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
void SetBirksConstant(G4double value)
Definition of the LXeDetectorConstruction class.
Definition of the LXeMainVolume class.
std::vector< G4ThreeVector > GetPmtPositions()
static constexpr double m3
G4LogicalVolume * GetLogPhotoCath()
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
static void CleanSurfaceTable()
static G4UImanager * GetUIpointer()
void SetHousingReflectivity(G4double)
static G4PhysicalVolumeStore * GetInstance()
G4LogicalVolume * GetLogScint()
Definition of the LXePMTSD class.
virtual ~LXeDetectorConstruction()
G4GLOB_DLL std::ostream G4cout
static constexpr double m
static constexpr double cm
virtual G4VPhysicalVolume * Construct()
static void CleanSurfaceTable()
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
static constexpr double eV
void SetHousingThickness(G4double)
static G4GeometryManager * GetInstance()
void AddConstProperty(const char *key, G4double PropertyValue)
static constexpr double kg
static constexpr double kelvin
static constexpr double cm3
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void ReinitializeGeometry(G4bool destroyFirst=false, G4bool prop=true)
void AddNewDetector(G4VSensitiveDetector *aSD)
void SetMainScintYield(G4double)
void SetDimensions(G4ThreeVector)
static G4RunManager * GetRunManager()
void SetPmtPositions(const std::vector< G4ThreeVector > &positions)
void SetWLSScintYield(G4double)
static G4SDManager * GetSDMpointer()
void SetPMTRadius(G4double)
Definition of the LXeScintSD class.
void InitPMTs(G4int nPMTs)
void SetWLSSlabOn(G4bool b)
static constexpr double MeV
void OpenGeometry(G4VPhysicalVolume *vol=0)
void AddElement(G4Element *element, G4int nAtoms)
LXeDetectorConstruction()
Definition of the LXeWLSSlab class.
void SetModel(const G4OpticalSurfaceModel model)
Definition of the LXeDetectorMessenger class.
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
static constexpr double keV
void Put(const value_type &val) const
static constexpr double mole
static const G4VisAttributes & GetInvisible()
void SetType(const G4SurfaceType &type)
void SetVisAttributes(const G4VisAttributes *pVA)
G4int ApplyCommand(const char *aCommand)