43 #include "DetectorConstruction.hh"
44 #include "DetectorMessenger.hh"
45 #include "TargetSD.hh"
78 fGasMat(0), fWindowMat(0), fWorldMaterial(0),
79 fSolidWorld(0), fSolidContainer(0), fSolidDetector(0),
80 fPhysWorld(0), fLogicWorld(0), fLogicContainer(0), fLogicDetector(0),
81 fDetectorMessenger(0), fGasDetectorCuts(0), fRegGasDet(0)
83 fGasThickness = 23.0*
mm;
104 delete fDetectorMessenger;
109 void DetectorConstruction::DefineMaterials()
145 density = 3.491*
mg/
cm3 ;
150 Kr7CH4->
AddMaterial( Methane, fractionmass = 0.014 ) ;
154 new G4Material(name=
"TRT_Xe", TRT_Xe_density, nel=1,
160 new G4Material(name=
"TRT_CO2", TRT_CO2_density, nel=2,
167 new G4Material(name=
"TRT_CF4", TRT_CF4_density, nel=2,
175 new G4Material(name=
"XeCO2CF4", XeCO2CF4_density,
183 density = 3.758*
mg/
cm3 ;
191 density = 4.9196*
mg/
cm3 ;
194 density, ncomponents=3,
196 XeCH4C3H8->
AddMaterial( Xe, fractionmass = 0.971 ) ;
197 XeCH4C3H8->
AddMaterial( Methane, fractionmass = 0.010 ) ;
198 XeCH4C3H8->
AddMaterial( Propane, fractionmass = 0.019 ) ;
201 density = 1.709*
mg/
cm3 ;
203 new G4Material(name=
"Ar7CH4", density, ncomponents=2,
205 Ar7CH4->
AddMaterial( Argon, fractionmass = 0.971 ) ;
206 Ar7CH4->
AddMaterial( Methane, fractionmass = 0.029 ) ;
209 density = 1.8223*
mg/
cm3 ;
211 new G4Material(name=
"ArCO2" , density, ncomponents=2,
213 Ar_80CO2_20->
AddMaterial( Argon, fractionmass = 0.783 ) ;
214 Ar_80CO2_20->
AddMaterial( CarbonDioxide, fractionmass = 0.217 ) ;
217 density = 5.0818*
mg/
cm3 ;
219 new G4Material(name=
"Xe20CO2", density, ncomponents=2,
222 Xe20CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.078 ) ;
225 density = 3.601*
mg/
cm3 ;
227 new G4Material(name=
"Kr20CO2", density, ncomponents=2,
230 Kr20CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.11 ) ;
233 density = 0.939*
mg/
cm3 ;
235 new G4Material(name=
"TPC_Ne-CO2-2", density, ncomponents=3,
237 NeCO2->
AddElement( elNe, fractionmass = 0.8039 ) ;
238 NeCO2->
AddElement( elO, fractionmass = 0.1426 ) ;
239 NeCO2->
AddElement( elC, fractionmass = 0.0535 ) ;
242 density = 4.9389*
mg/
cm3 ;
244 new G4Material(name=
"Xe15CO2", density, ncomponents=2,
247 Xe15CO2->
AddMaterial( CarbonDioxide, fractionmass = 0.056 );
251 fWorldMaterial = empty;
261 G4double contThick = fWindowThick*2 + fGasThickness;
262 G4double contR = fWindowThick*2 + fGasRadius;
264 G4double worldSizeZ = contThick*1.2;
270 G4cout <<
"\n The WORLD is made of "
271 << worldSizeZ/
mm <<
"mm of " << fWorldMaterial->
GetName() ;
272 G4cout <<
", the transverse size (R) of the world is " << worldSizeR/
mm
274 G4cout <<
" The CONTAINER is made of "
276 G4cout <<
" The TARGET is made of "
277 << fGasThickness/
mm <<
"mm of " << fGasMat->
GetName() ;
278 G4cout <<
", the transverse size (R) is " << fGasRadius/
mm <<
" mm. "
286 fLogicWorld =
new G4LogicalVolume(fSolidWorld, fWorldMaterial,
"World");
297 fSolidContainer =
new G4Tubs(
"Absorber",
300 fLogicContainer =
new G4LogicalVolume(fSolidContainer, fWindowMat,
"Window");
303 "Window", fLogicContainer,
304 fPhysWorld,
false, 0);
307 fSolidDetector =
new G4Tubs(
"Gas", 0., fGasRadius, fGasThickness/2.,
316 fRegGasDet =
new G4Region(
"GasDetector");
352 if (mat && mat != fGasMat) {
372 if (mat && mat != fWindowMat) {
375 if(fLogicContainer) {
392 if (mat && mat != fWorldMaterial) {
394 fWorldMaterial = mat;
407 if(fPhysWorld) { ChangeGeometry(); }
415 if(fPhysWorld) { ChangeGeometry(); }
423 if(fPhysWorld) { ChangeGeometry(); }
437 void DetectorConstruction::ChangeGeometry()
439 G4double contThick = fWindowThick*2 + fGasThickness;
440 G4double contR = fWindowThick*2 + fGasRadius;
442 G4double worldSizeZ = contThick*1.2;
447 fSolidWorld->SetOuterRadius(worldSizeR);
G4IonisParamMat * GetIonisation() const
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
Definition of the TestParameters class.
void SetZHalfLength(G4double dz)
static constexpr double mm
static constexpr double mg
CLHEP::Hep3Vector G4ThreeVector
void AddRootLogicalVolume(G4LogicalVolume *lv)
void SetGasThickness(G4double)
void AddMaterial(G4Material *material, G4double fraction)
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4double GetMeanEnergyPerIonPair() const
const G4String & GetName() const
G4VPhysicalVolume * Construct()
static G4MaterialTable * GetMaterialTable()
void SetWorldMaterial(const G4String &)
void SetProductionCut(G4double cut, G4int index=-1)
void SetPairEnergy(G4double)
void SetPositionZ(G4double val)
void SetContainerMaterial(const G4String &)
static G4NistManager * Instance()
virtual void ConstructSDandField()
void SetContainerThickness(G4double)
G4GLOB_DLL std::ostream G4cout
void PhysicsHasBeenModified()
static constexpr double cm
static constexpr double eV
static constexpr double kelvin
static constexpr double cm3
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void AddNewDetector(G4VSensitiveDetector *aSD)
static G4RunManager * GetRunManager()
void SetOuterRadius(G4double newRMax)
void SetGasMaterial(const G4String &)
static G4SDManager * GetSDMpointer()
static TestParameters * GetPointer()
static const G4double NTP_Temperature
void SetGasRadius(G4double)
void SetProductionCuts(G4ProductionCuts *cut)
void AddElement(G4Element *element, G4int nAtoms)
G4Element * FindOrBuildElement(G4int Z, G4bool isotopes=true)
void SetMaterial(G4Material *pMaterial)
static constexpr double atmosphere
static constexpr double micrometer
static const G4VisAttributes & GetInvisible()
void SetVisAttributes(const G4VisAttributes *pVA)
static constexpr double twopi
void SetZHalfLength(G4double newDz)
void SetMeanEnergyPerIonPair(G4double value)