47 #include "DetectorConstruction.hh"
48 #include "DetectorMessenger.hh"
91 fVertexDetectorCuts(0),
99 fVertexLength = 3.*
cm;
122 delete fDetectorMessenger;
123 delete fVertexDetectorCuts;
124 delete fMuonDetectorCuts;
131 return ConstructVolumes();
136 void DetectorConstruction::DefineMaterials()
161 delete fVertexRegion;
164 fVertexRegion =
new G4Region(
"VertexDetector");
167 fMuonRegion =
new G4Region(
"MuonDetector");
174 if(fVertexLength < fPadLength*5.0) fVertexLength = fPadLength*5.0;
179 fWorldZ = 2.*fVertexLength + 3.*fAbsLength + 0.5*(fEcalLength + york) + biggap*2.;
182 G4double vertexZ= -fWorldZ + fVertexLength*2.0 + fAbsLength + biggap;
183 G4double absZ2 = -fWorldZ + fVertexLength*4.0 + fAbsLength*3.5 + biggap;
184 G4double ecalZ = -fWorldZ + fVertexLength*4.0 + fAbsLength*4.0 + fEcalLength*0.5
186 G4double yorkZ = -fWorldZ + fVertexLength*4.0 + fAbsLength*5.0 + fEcalLength
187 + york*0.5 + 3.*biggap;
192 G4Box* solidW =
new G4Box(
"World",worldX,worldX,fWorldZ);
195 "World",fLogicWorld,0,
false,0);
200 G4Box* solidE =
new G4Box(
"VolE",worldX,worldX,fEcalLength*0.5 + gap);
204 "VolE",logicECal,world,
false,0);
206 G4Box* solidC =
new G4Box(
"Ecal",fEcalWidth*0.5,fEcalWidth*0.5,fEcalLength*0.5);
214 G4double x0 = -(fEcalWidth + gap)*2.0;
220 for (i=0; i<5; i++) {
222 for (j=0; j<5; j++) {
227 x += fEcalWidth + gap;
229 y += fEcalWidth + gap;
234 G4Box* solidA =
new G4Box(
"Abso",worldX,worldX,fAbsLength*0.5);
237 "Abs2",fLogicA2,world,
false,0);
244 G4Box* solidYV =
new G4Box(
"VolY",worldX,worldX,york*0.5+fAbsLength);
248 "VolY",logicYV,world,
false,0);
250 G4Box* solidY =
new G4Box(
"York",worldX,worldX,york*0.5);
254 "York",logicY,physYV,
false,0);
260 "Abs3",fLogicA3,physYV,
false,0);
262 "Abs4",fLogicA4,physYV,
false,0);
265 G4Box* solidVV =
new G4Box(
"VolV",worldX,worldX,fVertexLength*2.+fAbsLength+gap);
269 "VolV",logicVV,world,
false,0);
274 "Abs1",fLogicA1,physVV,
false,0);
282 npads = (npads/2)*2 + 1;
283 x0 = -0.5*(fPadWidth + vertWidth);
285 G4double z = -(fVertexLength+fAbsLength);
287 G4Box* solidVD =
new G4Box(
"VertDet",x1,fEcalWidth*0.5+gap,fPadLength*0.5);
292 G4Box* solidV =
new G4Box(
"Vert",fPadWidth*0.5,fEcalWidth*0.5,fPadLength*0.5);
295 for (i=0; i<3; i++) {
302 for (j=0; j<npads; j++) {
310 <<
" of 3 layers of Si of " <<
G4BestUnit(fPadLength,
"Length")
311 <<
" npads= " << npads
358 if (pttoMaterial && pttoMaterial != fCalMaterial) {
359 fCalMaterial = pttoMaterial;
374 if (pttoMaterial && pttoMaterial != fAbsMaterial) {
375 fAbsMaterial = pttoMaterial;
void GeometryHasBeenModified(G4bool prop=true)
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
void SetEcalMaterial(const G4String &)
CLHEP::Hep3Vector G4ThreeVector
void AddRootLogicalVolume(G4LogicalVolume *lv)
const G4String & GetName() const
G4VPhysicalVolume * Construct()
static G4MaterialTable * GetMaterialTable()
void SetAbsMaterial(const G4String &)
void SetSolid(G4VSolid *pSolid)
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
static G4NistManager * Instance()
virtual void DefineWorldVolume(G4VPhysicalVolume *worldVol, G4bool topologyIsChanged=true)
static G4PhysicalVolumeStore * GetInstance()
void SetEcalWidth(G4double val)
G4GLOB_DLL std::ostream G4cout
void PhysicsHasBeenModified()
static G4LogicalVolumeStore * GetInstance()
static G4SolidStore * GetInstance()
static G4GeometryManager * GetInstance()
void SetPadWidth(G4double val)
void SetAbsLength(G4double val)
static G4RunManager * GetRunManager()
void SetPadLength(G4double val)
static const G4VisAttributes Invisible
void SetProductionCuts(G4ProductionCuts *cut)
void OpenGeometry(G4VPhysicalVolume *vol=0)
void SetVertexLength(G4double val)
void SetMaterial(G4Material *pMaterial)
void SetEcalLength(G4double val)
void SetVisAttributes(const G4VisAttributes *pVA)