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 #include "G4RunManager.hh"
42 
43 #include "G4GeometryManager.hh"
44 #include "G4PhysicalVolumeStore.hh"
45 #include "G4LogicalVolumeStore.hh"
46 #include "G4SolidStore.hh"
47 
48 #include "G4UnitsTable.hh"
49 #include "G4SystemOfUnits.hh"
50 
51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
52 
54 :G4VUserDetectorConstruction(),fPBox(0), fLBox(0), fMaterial(0),
55  fDetectorMessenger(0)
56 {
57  fBoxSize = 1*cm;
59  SetMaterial("Water");
61 }
62 
63 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
64 
66 { delete fDetectorMessenger;}
67 
68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
69 
71 {
72  return ConstructVolumes();
73 }
74 
75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
76 
78 {
79  //
80  // define Elements
81  //
82  G4double z,a;
83 
84  G4Element* H = new G4Element("Hydrogen" ,"H" , z= 1., a= 1.01*g/mole);
85  G4Element* N = new G4Element("Nitrogen" ,"N" , z= 7., a= 14.01*g/mole);
86  G4Element* O = new G4Element("Oxygen" ,"O" , z= 8., a= 16.00*g/mole);
87  G4Element* Na = new G4Element("Sodium" ,"Na", z=11., a= 22.99*g/mole);
88  G4Element* Ge = new G4Element("Germanium","Ge", z=32., a= 72.59*g/mole);
89  G4Element* I = new G4Element("Iodine" ,"I" , z=53., a= 126.90*g/mole);
90  G4Element* Bi = new G4Element("Bismuth" ,"Bi", z=83., a= 208.98*g/mole);
91 
92  //
93  // define materials
94  //
95  G4double density;
96  G4int ncomponents, natoms;
97  G4double fractionmass;
98 
99  G4Material* Air =
100  new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
101  Air->AddElement(N, fractionmass=70.*perCent);
102  Air->AddElement(O, fractionmass=30.*perCent);
103 
104  G4Material* H2l =
105  new G4Material("H2liquid", density= 70.8*mg/cm3, ncomponents=1);
106  H2l->AddElement(H, fractionmass=1.);
107 
108  G4Material* H2O =
109  new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
110  H2O->AddElement(H, natoms=2);
111  H2O->AddElement(O, natoms=1);
112  H2O->SetChemicalFormula("H_2O");
114 
115  new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
116 
117  new G4Material("Carbon" , z=6., a= 12.01*g/mole, density= 2.267*g/cm3);
118 
119  new G4Material("Aluminium" , z=13., a= 26.98*g/mole, density= 2.700*g/cm3);
120 
121  new G4Material("Silicon" , z=14., a= 28.09*g/mole, density= 2.330*g/cm3);
122 
123  new G4Material("Germanium" , z=32., a= 72.61*g/mole, density= 5.323*g/cm3);
124 
125  G4Material* NaI =
126  new G4Material("NaI", density= 3.67*g/cm3, ncomponents=2);
127  NaI->AddElement(Na, natoms=1);
128  NaI->AddElement(I , natoms=1);
130 
131  G4Material* Iod =
132  new G4Material("Iodine", density= 4.93*g/cm3, ncomponents=1);
133  Iod->AddElement(I , natoms=1);
134 
135  G4Material* BGO =
136  new G4Material("BGO", density= 7.10*g/cm3, ncomponents=3);
137  BGO->AddElement(O , natoms=12);
138  BGO->AddElement(Ge, natoms= 3);
139  BGO->AddElement(Bi, natoms= 4);
140 
141  new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
142 
143  new G4Material("Tungsten" , z=74., a=183.85*g/mole, density= 19.30*g/cm3);
144 
145  new G4Material("Lead" , z=82., a=207.19*g/mole, density= 11.35*g/cm3);
146 
147  new G4Material("Uranium" , z=92., a=238.03*g/mole, density= 18.95*g/cm3);
148 
150 }
151 
152 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
153 
155 {
156  // Cleanup old geometry
161 
162  G4Box*
163  sBox = new G4Box("Container", //its name
164  fBoxSize/2,fBoxSize/2,fBoxSize/2); //its dimensions
165 
166  fLBox = new G4LogicalVolume(sBox, //its shape
167  fMaterial, //its material
168  fMaterial->GetName()); //its name
169 
170  fPBox = new G4PVPlacement(0, //no rotation
171  G4ThreeVector(), //at (0,0,0)
172  fLBox, //its logical volume
173  fMaterial->GetName(), //its name
174  0, //its mother volume
175  false, //no boolean operation
176  0); //copy number
177 
178  PrintParameters();
179 
180  //always return the root volume
181  //
182  return fPBox;
183 }
184 
185 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
186 
188 {
189  G4cout << "\n The Box is " << G4BestUnit(fBoxSize,"Length")
190  << " of " << fMaterial->GetName() << G4endl;
191  G4cout << "\n" << fMaterial << G4endl;
192 }
193 
194 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
195 
196 void DetectorConstruction::SetMaterial(G4String materialChoice)
197 {
198  // search the material by its name, or build it from nist data base
199  G4Material* pttoMaterial =
200  G4NistManager::Instance()->FindOrBuildMaterial(materialChoice);
201 
202  if (pttoMaterial) {
203  fMaterial = pttoMaterial;
205  } else {
206  G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
207  << materialChoice << " not found" << G4endl;
208  }
209 }
210 
211 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
212 
214 {
215  fBoxSize = value;
217 }
218 
219 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......