80 fHodoscope1Logical(0), fHodoscope2Logical(0),
81 fWirePlane1Logical(0), fWirePlane2Logical(0),
82 fCellLogical(0), fHadCalScintiLogical(0),
85 fArmAngle(30.*
deg), fArmRotation(0), fSecondArmPhys(0)
89 fArmRotation->
rotateY(fArmAngle);
102 for (
G4int i=0; i<
G4int(fVisAttributes.size()); ++i)
104 delete fVisAttributes[i];
124 G4bool checkOverlaps =
true;
129 =
new G4Box(
"worldBox",10.*
m,3.*
m,10.*
m);
134 false,0,checkOverlaps);
139 =
new G4Tubs(
"magneticTubs",0.,1.*
m,1.*
m,0.,360.*
deg);
149 "magneticPhysical",worldLogical,
150 false,0,checkOverlaps);
158 =
new G4Box(
"firstArmBox",1.5*
m,1.*
m,3.*
m);
162 "firstArmPhysical",worldLogical,
163 false,0,checkOverlaps);
167 =
new G4Box(
"secondArmBox",2.*
m,2.*
m,3.5*
m);
174 "fSecondArmPhys",worldLogical,
175 false,0,checkOverlaps);
181 =
new G4LogicalVolume(hodoscope1Solid,scintillator,
"hodoscope1Logical");
182 for (
G4int i=0;i<15;i++)
186 "hodoscope1Physical",firstArmLogical,
187 false,i,checkOverlaps);
195 for (
G4int i=0;i<5;i++)
199 "chamber1Physical",firstArmLogical,
200 false,i,checkOverlaps);
205 =
new G4Box(
"wirePlane1Box",1.*
m,30.*
cm,0.1*
mm);
209 "wirePlane1Physical",chamber1Logical,
210 false,0,checkOverlaps);
216 =
new G4LogicalVolume(hodoscope2Solid,scintillator,
"hodoscope2Logical");
217 for (
G4int i=0;i<25;i++)
221 "hodoscope2Physical",secondArmLogical,
222 false,i,checkOverlaps);
227 =
new G4Box(
"chamber2Box",1.5*
m,30.*
cm,1.*
cm);
230 for (
G4int i=0;i<5;i++)
234 "chamber2Physical",secondArmLogical,
235 false,i,checkOverlaps);
240 =
new G4Box(
"wirePlane2Box",1.5*
m,30.*
cm,0.1*
mm);
244 "wirePlane2Physical",chamber2Logical,
245 false,0,checkOverlaps);
249 =
new G4Box(
"EMcalorimeterBox",1.5*
m,30.*
cm,15.*
cm);
253 "EMcalorimeterPhysical",secondArmLogical,
254 false,0,checkOverlaps);
267 =
new G4Box(
"HadCalorimeterBox",1.5*
m,30.*
cm,50.*
cm);
269 =
new G4LogicalVolume(hadCalorimeterSolid,lead,
"HadCalorimeterLogical");
271 "HadCalorimeterPhysical",secondArmLogical,
272 false,0,checkOverlaps);
276 =
new G4Box(
"HadCalColumnBox",15.*
cm,30.*
cm,50.*
cm);
279 new G4PVReplica(
"HadCalColumnPhysical",HadCalColumnLogical,
280 hadCalorimeterLogical,
kXAxis,10,30.*
cm);
287 new G4PVReplica(
"HadCalCellPhysical",HadCalCellLogical,
288 HadCalColumnLogical,
kYAxis,2,30.*
cm);
292 =
new G4Box(
"HadCalLayerBox",15.*
cm,15.*
cm,2.5*
cm);
295 new G4PVReplica(
"HadCalLayerPhysical",HadCalLayerLogical,
300 =
new G4Box(
"HadCalScintiBox",15.*
cm,15.*
cm,0.5*
cm);
303 "HadCalScintiLogical");
305 "HadCalScintiPhysical",HadCalLayerLogical,
306 false,0,checkOverlaps);
313 fVisAttributes.push_back(visAttributes);
317 fVisAttributes.push_back(visAttributes);
323 fVisAttributes.push_back(visAttributes);
328 fVisAttributes.push_back(visAttributes);
333 fVisAttributes.push_back(visAttributes);
339 fVisAttributes.push_back(visAttributes);
344 fVisAttributes.push_back(visAttributes);
348 fVisAttributes.push_back(visAttributes);
352 fVisAttributes.push_back(visAttributes);
360 fVisAttributes.push_back(visAttributes);
364 return worldPhysical;
410 G4bool forceToAllDaughters =
true;
463 G4cerr <<
"Detector has not yet been constructed." <<
G4endl;
469 fArmRotation->
rotateY(fArmAngle);
480 void B5DetectorConstruction::DefineCommands()
491 "Set rotation angle of the second arm.");
493 armAngleCmd.
SetRange(
"angle>=0. && angle<180.");
void GeometryHasBeenModified(G4bool prop=true)
Definition of the B5HadCalorimeterSD class.
Definition of the B5CellParameterisation class.
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
void SetArmAngle(G4double val)
Definition of the B5DetectorConstruction class.
Definition of the B5DriftChamberSD class.
CLHEP::Hep3Vector G4ThreeVector
HepRotation & rotateX(double delta)
CLHEP::HepRotation G4RotationMatrix
G4bool SetDetectorField(G4Field *detectorField)
This class is generic messenger.
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
void SetVisibility(G4bool)
void SetUserLimits(G4UserLimits *pULimits)
virtual ~B5DetectorConstruction()
static G4MaterialTable * GetMaterialTable()
Drift chamber sensitive detector.
Definition of the B5EmCalorimeterSD class.
HepRotation & rotateY(double delta)
Command & DeclareMethodWithUnit(const G4String &name, const G4String &defaultUnit, const G4AnyMethod &fun, const G4String &doc="")
static G4NistManager * Instance()
void ConstructMaterials()
void SetFieldManager(G4FieldManager *pFieldMgr, G4bool forceToAllDaughters)
Command & SetDefaultValue(const G4String &)
virtual G4VPhysicalVolume * Construct()
G4GLOB_DLL std::ostream G4cout
EM Calorimeter cell parameterisation.
virtual void ConstructSDandField()
void SetTranslation(const G4ThreeVector &v)
Command & SetRange(const G4String &range)
void AddNewDetector(G4VSensitiveDetector *aSD)
static G4RunManager * GetRunManager()
Definition of the B5MagneticField class.
Definition of the B5HodoscopeSD class.
static G4SDManager * GetSDMpointer()
Hodoscope sensitive detector.
Command & SetParameterName(const G4String &, G4bool, G4bool=false)
void CreateChordFinder(G4MagneticField *detectorMagField)
EM calorimeter sensitive detector.
void SetVisAttributes(const G4VisAttributes *pVA)
void SetSensitiveDetector(G4VSensitiveDetector *pSDetector)
Hadron calorimeter sensitive detector.
G4GLOB_DLL std::ostream G4cerr