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 = 100*m;
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  G4Element* Na = new G4Element("Sodium" ,"Na", z=11., a= 22.99*g/mole);
87  G4Element* Ge = new G4Element("Germanium","Ge", z=32., a= 72.59*g/mole);
88  G4Element* I = new G4Element("Iodine" ,"I" , z=53., a= 126.90*g/mole);
89  G4Element* Bi = new G4Element("Bismuth" ,"Bi", z=83., a= 208.98*g/mole);
90 
91  //
92  // define materials
93  //
94  G4double density;
95  G4int ncomponents, natoms;
96  G4double fractionmass;
97 
98  G4Material* Air =
99  new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
100  Air->AddElement(N, fractionmass=70.*perCent);
101  Air->AddElement(O, fractionmass=30.*perCent);
102 
103  G4Material* H2l =
104  new G4Material("H2liquid", density= 70.8*mg/cm3, ncomponents=1);
105  H2l->AddElement(H, fractionmass=1.);
106 
107  G4Material* H2O =
108  new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
109  H2O->AddElement(H, natoms=2);
110  H2O->AddElement(O, natoms=1);
111  H2O->SetChemicalFormula("H_2O");
113 
114  new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
115 
116  new G4Material("Carbon" , z=6., a= 12.01*g/mole, density= 2.267*g/cm3);
117 
118  new G4Material("Aluminium" , z=13., a= 26.98*g/mole, density= 2.700*g/cm3);
119 
120  new G4Material("Silicon" , z=14., a= 28.09*g/mole, density= 2.330*g/cm3);
121 
122  new G4Material("Chromium" , z=24., a= 51.99*g/mole, density= 7.140*g/cm3);
123 
124  new G4Material("Copper" , z=29., a= 63.55*g/mole, density= 8.920*g/cm3);
125 
126  new G4Material("Germanium" , z=32., a= 72.61*g/mole, density= 5.323*g/cm3);
127 
128  new G4Material("Nb" , z=41., a= 92.906*g/mole,density= 8.57*g/cm3);
129 
130  G4Material* NaI =
131  new G4Material("NaI", density= 3.67*g/cm3, ncomponents=2);
132  NaI->AddElement(Na, natoms=1);
133  NaI->AddElement(I , natoms=1);
135 
136  G4Material* Iod =
137  new G4Material("Iodine", density= 4.93*g/cm3, ncomponents=1);
138  Iod->AddElement(I , natoms=1);
139 
140  G4Material* BGO =
141  new G4Material("BGO", density= 7.10*g/cm3, ncomponents=3);
142  BGO->AddElement(O , natoms=12);
143  BGO->AddElement(Ge, natoms= 3);
144  BGO->AddElement(Bi, natoms= 4);
145 
146  new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
147 
148  new G4Material("Tungsten" , z=74., a=183.85*g/mole, density= 19.25*g/cm3);
149 
150  new G4Material("Gold" , z=79., a=196.97*g/mole, density= 19.30*g/cm3);
151 
152  new G4Material("Lead" , z=82., a=207.19*g/mole, density= 11.35*g/cm3);
153 
154  new G4Material("Uranium" , z=92., a=238.03*g/mole, density= 18.95*g/cm3);
155 
157 }
158 
159 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
160 
162 {
163  // Cleanup old geometry
168 
169  G4Box*
170  sBox = new G4Box("Container", //its name
171  fBoxSize/2,fBoxSize/2,fBoxSize/2); //its dimensions
172 
173  fLBox = new G4LogicalVolume(sBox, //its shape
174  fMaterial, //its material
175  fMaterial->GetName()); //its name
176 
177  fPBox = new G4PVPlacement(0, //no rotation
178  G4ThreeVector(), //at (0,0,0)
179  fLBox, //its logical volume
180  fMaterial->GetName(), //its name
181  0, //its mother volume
182  false, //no boolean operation
183  0); //copy number
184 
185  PrintParameters();
186 
187  //always return the root volume
188  //
189  return fPBox;
190 }
191 
192 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
193 
195 {
196  G4cout << "\n The Box is " << G4BestUnit(fBoxSize,"Length")
197  << " of " << fMaterial->GetName() << G4endl;
198  G4cout << "\n" << fMaterial << G4endl;
199 }
200 
201 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
202 
203 #include "G4RunManager.hh"
204 
205 void DetectorConstruction::SetMaterial(G4String materialChoice)
206 {
207  // search the material by its name, or build it from nist data base
208  G4Material* pttoMaterial =
209  G4NistManager::Instance()->FindOrBuildMaterial(materialChoice);
210 
211  if (pttoMaterial) {
212  fMaterial = pttoMaterial;
214  } else {
215  G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
216  << materialChoice << " not found" << G4endl;
217  }
218 }
219 
220 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
221 
223 {
224  fBoxSize = value;
226 }
227 
228 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......