ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DetectorConstruction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file DetectorConstruction.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
28 //
29 //
30 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32 
33 #include "DetectorConstruction.hh"
34 #include "DetectorMessenger.hh"
35 
36 #include "G4Material.hh"
37 #include "G4Box.hh"
38 #include "G4LogicalVolume.hh"
39 #include "G4PVPlacement.hh"
40 #include "G4UserLimits.hh"
42 #include "G4PropagatorInField.hh"
43 
44 #include "G4GeometryManager.hh"
45 #include "G4PhysicalVolumeStore.hh"
46 #include "G4LogicalVolumeStore.hh"
47 #include "G4SolidStore.hh"
48 #include "G4RunManager.hh"
49 
50 #include "G4UnitsTable.hh"
51 #include "G4SystemOfUnits.hh"
52 
53 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
54 
57  fLBox(0), fBox(0), fBoxSize(500*m), fMaterial(0),
58  fUserLimits(0), fDetectorMessenger(0)
59 {
61  SetMaterial("Iron");
62 
63  // create UserLimits
64  fUserLimits = new G4UserLimits();
65 
66  // create commands for interactive definition of the detector
68 }
69 
70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
71 
73 { delete fDetectorMessenger;}
74 
75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76 
78 {
79  return ConstructVolumes();
80 }
81 
82 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
83 
85 {
86  G4double a, z, density;
87 
88  new G4Material("Beryllium", z= 4., a= 9.012182*g/mole, density= 1.848*g/cm3);
89  new G4Material("Carbon", z= 6., a= 12.011*g/mole, density= 2.265*g/cm3);
90  new G4Material("Iron", z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
91 
92  // define a vacuum with a restgas pressure typical for accelerators
93  G4double const Torr = atmosphere/760.; // 1 Torr
94  G4double pressure = 10e-9*Torr, temperature = 296.150*kelvin; // 23 Celsius
95  new G4Material("Vacuum", z=7., a=14.01*g/mole, density= 1.516784e-11*kg/m3,
96  kStateGas, temperature, pressure);
97 
99 }
100 
101 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
102 
104 {
109 
110  G4Box*
111  sBox = new G4Box("Container", //its name
112  fBoxSize/2,fBoxSize/2,fBoxSize/2); //its dimensions
113 
114  fLBox = new G4LogicalVolume(sBox, //its shape
115  fMaterial, //its material
116  fMaterial->GetName()); //its name
117 
119 
120  fBox = new G4PVPlacement(0, //no rotation
121  G4ThreeVector(), //at (0,0,0)
122  fLBox, //its logical volume
123  fMaterial->GetName(), //its name
124  0, //its mother volume
125  false, //no boolean operation
126  0); //copy number
127 
128  PrintParameters();
129 
130  //
131  //always return the root volume
132  //
133  return fBox;
134 }
135 
136 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
137 
139 {
140  G4cout << "\n The Box is " << G4BestUnit(fBoxSize,"Length")
141  << " of " << fMaterial->GetName() << G4endl;
142 }
143 
144 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
145 
146 void DetectorConstruction::SetMaterial(G4String materialChoice)
147 {
148  // search the material by its name
149  G4Material* pttoMaterial = G4Material::GetMaterial(materialChoice);
150  if (pttoMaterial) {
151  fMaterial = pttoMaterial;
152  if ( fLBox ) fLBox->SetMaterial(fMaterial);
153  }
155 }
156 
157 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
158 
160 {
161  fBoxSize = value;
163 }
164 
165 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
166 
168 #include "G4AutoDelete.hh"
169 
171 {
172  if ( fFieldMessenger.Get() == 0 ) {
173  // Create global magnetic field messenger.
174  // Uniform magnetic field is then created automatically if
175  // the field value is not zero.
176  G4ThreeVector fieldValue = G4ThreeVector();
178  new G4GlobalMagFieldMessenger(fieldValue);
179  //msg->SetVerboseLevel(1);
181  fFieldMessenger.Put( msg );
182 
183  }
184 }
185 
186 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
187 
189 {
190  // set the maximum allowed step size
191  //
192  if (val <= DBL_MIN)
193  { G4cout << "\n --->warning from SetMaxStepSize: maxStep "
194  << val << " out of range. Command refused" << G4endl;
195  return;
196  }
198 }
199 
200 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
201 
203 {
204  // set the maximum length of tracking step
205  //
206  if (val <= DBL_MIN)
207  { G4cout << "\n --->warning from SetMaxStepLength: maxStep "
208  << val << " out of range. Command refused" << G4endl;
209  return;
210  }
211  G4TransportationManager* tmanager =
213  tmanager->GetPropagatorInField()
215 }
216 
217 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......