33 #include "B2TrackerSD.hh"
63 fLogicTarget(NULL), fLogicChamber(NULL),
64 fTargetMaterial(NULL), fChamberMaterial(NULL),
78 delete [] fLogicChamber;
91 return DefineVolumes();
96 void B2aDetectorConstruction::DefineMaterials()
128 G4double trackerLength = (fNbOfChambers+1)*chamberSpacing;
130 G4double worldLength = 1.2 * (2*targetLength + trackerLength);
132 G4double targetRadius = 0.5*targetLength;
133 targetLength = 0.5*targetLength;
134 G4double trackerSize = 0.5*trackerLength;
142 G4cout <<
"Computed tolerance = "
148 worldLength/2,worldLength/2,worldLength/2);
173 =
new G4Tubs(
"target",0.,targetRadius,targetLength,0.*
deg,360.*
deg);
185 G4cout <<
"Target is " << 2*targetLength/
cm <<
" cm of "
193 =
new G4Tubs(
"tracker",0,trackerSize,trackerSize, 0.*
deg, 360.*
deg);
216 G4cout <<
"There are " << fNbOfChambers <<
" chambers in the tracker region. "
217 <<
"\nThe chambers are " << chamberWidth/
cm <<
" cm of "
218 << fChamberMaterial->
GetName() <<
"\nThe distance between chamber is "
219 << chamberSpacing/
cm <<
" cm" <<
G4endl;
221 G4double firstPosition = -trackerSize + chamberSpacing;
222 G4double firstLength = trackerLength/10;
223 G4double lastLength = trackerLength;
225 G4double halfWidth = 0.5*chamberWidth;
226 G4double rmaxFirst = 0.5 * firstLength;
229 if( fNbOfChambers > 0 ){
230 rmaxIncr = 0.5 * (lastLength-firstLength)/(fNbOfChambers-1);
231 if (chamberSpacing < chamberWidth) {
232 G4Exception(
"B2aDetectorConstruction::DefineVolumes()",
238 for (
G4int copyNo=0; copyNo<fNbOfChambers; copyNo++) {
240 G4double Zposition = firstPosition + copyNo * chamberSpacing;
241 G4double rmax = rmaxFirst + copyNo * rmaxIncr;
244 =
new G4Tubs(
"Chamber_solid", 0, rmax, halfWidth, 0.*
deg, 360.*
deg);
246 fLogicChamber[copyNo] =
253 fLogicChamber[copyNo],
269 G4double maxStep = 0.5*chamberWidth;
292 G4String trackerChamberSDname =
"B2/TrackerChamberSD";
294 "TrackerHitsCollection");
319 if (fTargetMaterial != pttoMaterial) {
320 if ( pttoMaterial ) {
321 fTargetMaterial = pttoMaterial;
322 if (fLogicTarget) fLogicTarget->
SetMaterial(fTargetMaterial);
323 G4cout <<
"\n----> The target is made of " << materialName <<
G4endl;
325 G4cout <<
"\n--> WARNING from SetTargetMaterial : "
326 << materialName <<
" not found" <<
G4endl;
340 if (fChamberMaterial != pttoMaterial) {
341 if ( pttoMaterial ) {
342 fChamberMaterial = pttoMaterial;
343 for (
G4int copyNo=0; copyNo<fNbOfChambers; copyNo++) {
344 if (fLogicChamber[copyNo]) fLogicChamber[copyNo]->
347 G4cout <<
"\n----> The chambers are made of " << materialName <<
G4endl;
349 G4cout <<
"\n--> WARNING from SetChamberMaterial : "
350 << materialName <<
" not found" <<
G4endl;
366 fCheckOverlaps = checkOverlaps;
void SetVerboseLevel(G4int verboseLevel)
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
virtual void SetMaxAllowedStep(G4double ustepMax)
Definition of the B2aDetectorMessenger class.
CLHEP::Hep3Vector G4ThreeVector
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
const G4String & GetName() const
void SetUserLimits(G4UserLimits *pULimits)
G4double GetSurfaceTolerance() const
static G4MaterialTable * GetMaterialTable()
void SetTargetMaterial(G4String)
virtual void ConstructSDandField()
B2aDetectorConstruction()
void SetChamberMaterial(G4String)
void SetWorldMaximumExtent(G4double worldExtent)
static G4NistManager * Instance()
void SetCheckOverlaps(G4bool)
G4GLOB_DLL std::ostream G4cout
virtual ~B2aDetectorConstruction()
Definition of the B2aDetectorConstruction class.
static G4GeometryManager * GetInstance()
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void G4Exception(const char *originOfException, const char *exceptionCode, G4ExceptionSeverity severity, const char *comments)
virtual G4VPhysicalVolume * Construct()
void SetMaxStep(G4double)
void SetMaterial(G4Material *pMaterial)
void SetVisAttributes(const G4VisAttributes *pVA)
static G4GeometryTolerance * GetInstance()