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 "G4NistManager.hh"
38 #include "G4Box.hh"
39 #include "G4LogicalVolume.hh"
40 #include "G4PVPlacement.hh"
41 
42 #include "G4GeometryManager.hh"
43 #include "G4PhysicalVolumeStore.hh"
44 #include "G4LogicalVolumeStore.hh"
45 #include "G4SolidStore.hh"
46 
47 #include "G4UnitsTable.hh"
48 #include "G4SystemOfUnits.hh"
49 
50 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
51 
53 :G4VUserDetectorConstruction(),fPBox(0), fLBox(0), fMaterial(0),
54  fDetectorMessenger(0)
55 {
56  fBoxSize = 1*cm;
58  SetMaterial("Water");
60 }
61 
62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
63 
65 { delete fDetectorMessenger;}
66 
67 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
68 
70 {
71  return ConstructVolumes();
72 }
73 
74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
75 
77 {
78  //
79  // define Elements
80  //
81  G4double z,a;
82 
83  G4Element* H = new G4Element("Hydrogen" ,"H" , z= 1., a= 1.01*g/mole);
84  G4Element* N = new G4Element("Nitrogen" ,"N" , z= 7., a= 14.01*g/mole);
85  G4Element* O = new G4Element("Oxygen" ,"O" , z= 8., a= 16.00*g/mole);
86 
87  //
88  // define materials
89  //
90  G4double density;
91  G4int ncomponents, natoms;
92  G4double fractionmass;
93 
94  G4Material* Air =
95  new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
96  Air->AddElement(N, fractionmass=70.*perCent);
97  Air->AddElement(O, fractionmass=30.*perCent);
98 
99  G4Material* H2O =
100  new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
101  H2O->AddElement(H, natoms=2);
102  H2O->AddElement(O, natoms=1);
104 
105  G4Material* vapor =
106  new G4Material("Water_vapor", density= 1.000*mg/cm3, ncomponents=2);
107  vapor->AddElement(H, natoms=2);
108  vapor->AddElement(O, natoms=1);
109  vapor->GetIonisation()->SetMeanExcitationEnergy(78.0*eV);
110 
111  new G4Material("Carbon" , z=6., a= 12.01*g/mole, density= 2.267*g/cm3);
112  new G4Material("Aluminium" , z=13., a= 26.98*g/mole, density= 2.700*g/cm3);
113  new G4Material("Silicon" , z=14., a= 28.09*g/mole, density= 2.330*g/cm3);
114  new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
115  new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
116  new G4Material("Germanium" , z=32., a= 72.61*g/mole, density= 5.323*g/cm3);
117  new G4Material("Tungsten" , z=74., a=183.85*g/mole, density= 19.30*g/cm3);
118  new G4Material("Lead" , z=82., a=207.19*g/mole, density= 11.35*g/cm3);
119 
120  new G4Material("ArgonGas" , z=18., a=39.948*g/mole, density= 1.782*mg/cm3,
121  kStateGas, 273.15*kelvin, 1*atmosphere);
122 
124 }
125 
126 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
127 
129 {
130  // Cleanup old geometry
135 
136  G4Box*
137  sBox = new G4Box("Container", //its name
138  fBoxSize/2,fBoxSize/2,fBoxSize/2); //its dimensions
139 
140  fLBox = new G4LogicalVolume(sBox, //its shape
141  fMaterial, //its material
142  fMaterial->GetName()); //its name
143 
144  fPBox = new G4PVPlacement(0, //no rotation
145  G4ThreeVector(), //at (0,0,0)
146  fLBox, //its logical volume
147  fMaterial->GetName(), //its name
148  0, //its mother volume
149  false, //no boolean operation
150  0); //copy number
151 
152  PrintParameters();
153 
154  //always return the root volume
155  //
156  return fPBox;
157 }
158 
159 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
160 
162 {
163  G4cout << "\n The Box is " << G4BestUnit(fBoxSize,"Length")
164  << " of " << fMaterial->GetName()
165  << "\n " << fMaterial << G4endl;
166 }
167 
168 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
169 
171 {
172  // search the material by its name
173  G4Material* mat = G4Material::GetMaterial(name, false);
174 
175  // create the material by its name
176  if(!mat) { mat = G4NistManager::Instance()->FindOrBuildMaterial(name); }
177 
178  if(mat && mat != fMaterial) {
179  G4cout << "### New material " << mat->GetName() << G4endl;
180  fMaterial = mat;
181  UpdateGeometry();
182  }
183 
184  if(!mat) {
185  G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
186  << name << " not found" << G4endl;
187  }
188 }
189 
190 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
191 
193 {
194  fBoxSize = value;
195  UpdateGeometry();
196 }
197 
198 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
199 
200 #include "G4RunManager.hh"
201 
203 {
205 }
206 
207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......