Geant4.10
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Public Member Functions
ExErrorDetectorConstruction Class Reference

#include <ExErrorDetectorConstruction.hh>

Inheritance diagram for ExErrorDetectorConstruction:
G4VUserDetectorConstruction

Public Member Functions

 ExErrorDetectorConstruction ()
 
 ~ExErrorDetectorConstruction ()
 
virtual G4VPhysicalVolumeConstruct ()
 
void SetMagField (G4double)
 
- Public Member Functions inherited from G4VUserDetectorConstruction
 G4VUserDetectorConstruction ()
 
virtual ~G4VUserDetectorConstruction ()
 
virtual void ConstructSDandField ()
 
virtual void CloneSD ()
 
virtual void CloneF ()
 
void RegisterParallelWorld (G4VUserParallelWorld *)
 
G4int ConstructParallelGeometries ()
 
void ConstructParallelSD ()
 
G4int GetNumberOfParallelWorld () const
 
G4VUserParallelWorldGetParallelWorld (G4int i) const
 

Additional Inherited Members

- Protected Member Functions inherited from G4VUserDetectorConstruction
void SetSensitiveDetector (const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
 
void SetSensitiveDetector (G4LogicalVolume *logVol, G4VSensitiveDetector *aSD)
 

Detailed Description

Detector construction class

Creates a simplified typical HEP detector: An air beamline ( BEAM ) An air central detector ( CDET ) A copper calorimeter, divided in four ( ECAL ) An aluminium calorimeter, divided in ten ( HCAL ) An air muon detector ( MUON )

History: Created: May 2007

Author
P. Arce

Definition at line 60 of file ExErrorDetectorConstruction.hh.

Constructor & Destructor Documentation

ExErrorDetectorConstruction::ExErrorDetectorConstruction ( )

Definition at line 51 of file ExErrorDetectorConstruction.cc.

References python.hepunit::kilogauss.

53  fXBEAM(5.*cm), fXCDET(20.*cm), fXECAL(40.*cm), fXSOLN(10.*cm), fXHCAL(100.*cm),
54  fXMUON(50.*cm), fNdivECAL(40./10.), fNdivHCAL(100./10.), fYZLength(50.*cm),
55  fXHalfWorldLength(fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL + fXMUON),
56  fUserLimits(0), fMagField(0), fDetectorMessenger(0)
57 {
58 
59  // create UserLimits
60  fUserLimits = new G4UserLimits();
61 
63  fDetectorMessenger = new ExErrorDetectorMessenger(this);
64 
65 }
CLHEP::Hep3Vector G4ThreeVector
ExErrorDetectorConstruction::~ExErrorDetectorConstruction ( )

Definition at line 68 of file ExErrorDetectorConstruction.cc.

69 {
70  delete fMagField;
71  delete fDetectorMessenger;
72 }

Member Function Documentation

G4VPhysicalVolume * ExErrorDetectorConstruction::Construct ( void  )
virtual

Implements G4VUserDetectorConstruction.

Definition at line 75 of file ExErrorDetectorConstruction.cc.

References fe, G4NistManager::FindOrBuildMaterial(), G4cout, G4endl, G4Material::GetMaterialTable(), G4NistManager::Instance(), kXAxis, and G4LogicalVolume::SetVisAttributes().

76 {
77 //--------- Material definition ---------
78 
79  //Vacuum
80  /* a = 1.*g/mole;
81  density = 1.E-9*g/cm3;
82  G4Material* Vacuum = new G4Material(name="Vacuum", z=1., a, density);
83  */
84 
86  G4Material* air = nistMgr->FindOrBuildMaterial("G4_AIR");
87  //Al
88  G4Material* al = nistMgr->FindOrBuildMaterial("G4_Al");
89  //Fe
90  G4Material* fe = nistMgr->FindOrBuildMaterial("G4_Fe");
91  //Cu
92  G4Material* cu = nistMgr->FindOrBuildMaterial("G4_Cu");
93 
94  // Print all the materials defined.
95  //
96  G4cout << G4endl << "The materials defined are : " << G4endl << G4endl;
97  G4cout << *(G4Material::GetMaterialTable()) << G4endl;
98 
99  //--------- Sizes of the principal geometrical components (solids) --------- (half lengths)
100  //double fXBEAM = 5.*2.*cm;
101  //double fXCDET = 90.*cm;
102  //double fXECAL = 40.*cm;
103  //double fXSOLN = 10.*cm;
104  //double fXHCAL = 100.*cm;
105  //double fXMUON = 50.*cm;
106  //double fNdivECAL = 10;
107  //double fNdivHCAL = 10;
108  //double fYZLength = 100.*cm;
109 
110  // double fXWorldLength= fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL + fXMUON;
111 
112 
113 //--------- Definitions of Solids, Logical Volumes, Physical Volumes ---------
114 
115  //------------------------------
116  // World
117  //------------------------------
118  //- G4double HalfWorldLength = fXWorldLength;
119  G4cout << " HalfWorldLength " << fXHalfWorldLength << G4endl;
120 
121  G4Box* solidWorld= new G4Box("world",fXHalfWorldLength,fYZLength,fYZLength);
122  G4LogicalVolume* logicWorld= new G4LogicalVolume( solidWorld, air, "World", 0, 0, 0);
123  // Must place the World Physical volume unrotated at (0,0,0).
124  //
125  G4VPhysicalVolume* physiWorld
126  = new G4PVPlacement(0, // no rotation
127  G4ThreeVector(), // at (0,0,0)
128  "World", // its name
129  logicWorld, // its logical volume
130  0, // its mother volume
131  false, // no boolean operations
132  0); // no field specific to volum
133 
134  //------------------------------
135  // BEAM
136  //------------------------------
137  G4Box* solidBEAM = new G4Box("BEAM",fXBEAM,fYZLength,fYZLength);
138  G4LogicalVolume* logicBEAM = new G4LogicalVolume(solidBEAM,air,"BEAM",0,0,0);
139  G4ThreeVector positionBEAM = G4ThreeVector(0.,0.,0.);
140  //G4VPhysicalVolume* physiBEAM =
141  new G4PVPlacement(0, // no rotation
142  positionBEAM, // at (x,y,z)
143  "BEAM", // its name
144  logicBEAM, // its logical volume
145  physiWorld, // its mother volume
146  false, // no boolean operations
147  0); // no particular field
148 
149  //------------------------------
150  // CDET (Central DETector)
151  //------------------------------
152  G4ThreeVector positionCdet = G4ThreeVector(fXBEAM + fXCDET/2.,0.,0.);
153  G4Box* solidCDET = new G4Box("CDET",fXCDET/2.,fYZLength,fYZLength);
154  G4LogicalVolume* logicCDET = new G4LogicalVolume(solidCDET,air,"Cdet",0,0,0);
155  // G4VPhysicalVolume* physiCDET =
156  new G4PVPlacement(0, // no rotation
157  positionCdet, // at (x,y,z)
158  "CDET", // its name
159  logicCDET, // its logical volume
160  physiWorld, // its mother volume
161  false, // no boolean operations
162  0); // no particular field
163 
164  //------------------------------
165  // ECAL
166  //------------------------------
167  G4ThreeVector positionECAL = G4ThreeVector(fXBEAM + fXCDET + fXECAL/2., 0., 0.);
168  G4Box* solidECAL = new G4Box("ECAL",fXECAL/2.,fYZLength,fYZLength);
169  G4LogicalVolume* logicECAL = new G4LogicalVolume(solidECAL,cu,"ECAL",0,0,0);
170  G4VPhysicalVolume* physiECAL
171  = new G4PVPlacement(0, // no rotation
172  positionECAL, // at (x,y,z)
173  "ECAL", // its name
174  logicECAL, // its logical volume
175  physiWorld, // its mother volume
176  false, // no boolean operations
177  0); // no particular field
178  //--------- Divide it
179  G4Box* solidECALdiv = new G4Box("ECAL",fXECAL/2./fNdivECAL,fYZLength,fYZLength);
180  G4LogicalVolume* logicECALdiv = new G4LogicalVolume(solidECALdiv,cu,"ECALdiv",0,0,0);
181  new G4PVReplica("DVEC", logicECALdiv, physiECAL,
182  kXAxis, G4int(fNdivECAL), fXECAL/fNdivECAL);
183 
184 
185  //------------------------------
186  // SOLN
187  //------------------------------
188  G4ThreeVector positionSOLN = G4ThreeVector(fXBEAM + fXCDET + fXECAL + fXSOLN/2., 0., 0.);
189  G4Box* solidSOLN = new G4Box("SOLN",fXSOLN/2.,fYZLength,fYZLength);
190  G4LogicalVolume* logicSOLN = new G4LogicalVolume(solidSOLN,al,"SOLN",0,0,0);
191  new G4PVPlacement(0, // no rotation
192  positionSOLN, // at (x,y,z)
193  "SOLN", // its name
194  logicSOLN, // its logical volume
195  physiWorld, // its mother volume
196  false, // no boolean operations
197  0); // no particular field
198 
199  //------------------------------
200  // HCAL
201  //------------------------------
202  G4ThreeVector positionHCAL = G4ThreeVector(fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL/2., 0., 0.);
203  G4Box* solidHCAL = new G4Box("HCAL",fXHCAL/2.,fYZLength,fYZLength);
204  G4LogicalVolume* logicHCAL = new G4LogicalVolume(solidHCAL,fe,"HCAL",0,0,0);
205  G4VPhysicalVolume* physiHCAL
206  = new G4PVPlacement(0, // no rotation
207  positionHCAL, // at (x,y,z)
208  "HCAL", // its name
209  logicHCAL, // its logical volume
210  physiWorld, // its mother volume
211  false, // no boolean operations
212  0); // no particular field
213  //--------- Divide it
214  G4Box* solidHCALdiv = new G4Box("HCAL",fXHCAL/2./fNdivHCAL,fYZLength,fYZLength);
215  G4LogicalVolume* logicHCALdiv = new G4LogicalVolume(solidHCALdiv,fe,"HCALdiv",0,0,0);
216  new G4PVReplica("DVEH", logicHCALdiv, physiHCAL,
217  kXAxis, G4int(fNdivHCAL), fXHCAL/fNdivHCAL);
218 
219  //------------------------------
220  // MUON
221  //------------------------------
222  G4ThreeVector positionMUON = G4ThreeVector(fXBEAM + fXCDET + fXECAL + fXSOLN + fXHCAL + fXMUON/2., 0., 0.);
223  G4Box* solidMUON = new G4Box("MUON",fXMUON/2.,fYZLength,fYZLength);
224  G4LogicalVolume* logicMUON = new G4LogicalVolume(solidMUON,air,"MUON",0,0,0);
225  new G4PVPlacement(0, // no rotation
226  positionMUON, // at (x,y,z)
227  "MUON", // its name
228  logicMUON, // its logical volume
229  physiWorld, // its mother volume
230  false, // no boolean operations
231  0); // no particular field
232 
233 
234  G4VisAttributes* worldVisAtt = new G4VisAttributes(0);
235  logicWorld->SetVisAttributes( worldVisAtt);
236  return physiWorld;
237 }
G4Material * FindOrBuildMaterial(const G4String &name, G4bool isotopes=true, G4bool warning=false)
CLHEP::Hep3Vector G4ThreeVector
Definition: G4Box.hh:63
static G4MaterialTable * GetMaterialTable()
Definition: G4Material.cc:564
int G4int
Definition: G4Types.hh:78
static G4NistManager * Instance()
G4GLOB_DLL std::ostream G4cout
#define G4endl
Definition: G4ios.hh:61
void SetVisAttributes(const G4VisAttributes *pVA)
G4fissionEvent * fe
void ExErrorDetectorConstruction::SetMagField ( G4double  fieldValue)

Definition at line 240 of file ExErrorDetectorConstruction.cc.

References ExErrorMagneticField::SetFieldValue().

Referenced by ExErrorDetectorMessenger::SetNewValue().

241 {
242  fMagField->SetFieldValue(fieldValue);
243 }
void SetFieldValue(G4double fieldValue)

The documentation for this class was generated from the following files: