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 //
26 
27 //
28 //
29 //
30 
31 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
32 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
33 
34 #include "DetectorConstruction.hh"
35 #include "DetectorMessenger.hh"
36 
37 #include "G4Material.hh"
38 #include "G4NistManager.hh"
39 #include "G4Box.hh"
40 #include "G4LogicalVolume.hh"
41 #include "G4PVPlacement.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 :pBox(0), aMaterial(0)
55 {
56  BoxSize = 1*mm;
58  SetMaterial("Germanium");
60 }
61 
62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
63 
65 { delete detectorMessenger;}
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* Ge = new G4Element("Germanium","Ge", z=32., a= 72.59*g/mole);
87  G4Element* Bi = new G4Element("Bismuth" ,"Bi", z=83., a= 208.98*g/mole);
88 
89  //
90  // define materials
91  //
92  G4double density;
93  G4int ncomponents, natoms;
94  G4double fractionmass;
95 
96  G4Material* Air =
97  new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
98  Air->AddElement(N, fractionmass=70.*perCent);
99  Air->AddElement(O, fractionmass=30.*perCent);
100 
101  G4Material* H2l =
102  new G4Material("H2liquid", density= 70.8*mg/cm3, ncomponents=1);
103  H2l->AddElement(H, fractionmass=1.);
104 
105  G4Material* H2O =
106  new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
107  H2O->AddElement(H, natoms=2);
108  H2O->AddElement(O, natoms=1);
111 
112  G4Material* steam =
113  new G4Material("WaterSteam", density= 1.0*mg/cm3, ncomponents=1);
114  steam->AddMaterial(H2O, fractionmass=1.);
115  steam->GetIonisation()->SetMeanExcitationEnergy(71.6*eV);
116 
117  G4Material* BGO =
118  new G4Material("BGO", density= 7.10*g/cm3, ncomponents=3);
119  BGO->AddElement(O , natoms=12);
120  BGO->AddElement(Ge, natoms= 3);
121  BGO->AddElement(Bi, natoms= 4);
122 
123  new G4Material("Aluminium" , z=13., a= 26.98*g/mole, density= 2.700*g/cm3);
124  new G4Material("Silicon" , z=14., a= 28.09*g/mole, density= 2.330*g/cm3);
125  new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
126  new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
127  new G4Material("Copper" , z=29., a= 63.55*g/mole, density= 8.960*g/cm3);
128  new G4Material("Germanium" , z=32., a= 72.61*g/mole, density= 5.323*g/cm3);
129  new G4Material("Silver" , z=47., a=107.87*g/mole, density= 10.50*g/cm3);
130  new G4Material("Tungsten" , z=74., a=183.85*g/mole, density= 19.30*g/cm3);
131  new G4Material("Lead" , z=82., a=207.19*g/mole, density= 11.35*g/cm3);
132  new G4Material("Uranium" , z=92., a=238.03*g/mole, density= 18.95*g/cm3);
133 
134 
136 }
137 
138 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
139 
141 {
142  // Cleanup old geometry
147 
148  G4Box*
149  sBox = new G4Box("Container", //its name
150  BoxSize/2,BoxSize/2,BoxSize/2); //its dimensions
151 
153  lBox = new G4LogicalVolume(sBox, //its shape
154  aMaterial, //its material
155  aMaterial->GetName()); //its name
156 
157  pBox = new G4PVPlacement(0, //no rotation
158  G4ThreeVector(), //at (0,0,0)
159  lBox, //its logical volume
160  aMaterial->GetName(), //its name
161  0, //its mother volume
162  false, //no boolean operation
163  0); //copy number
164 
165  //always return the root volume
166  //
167  return pBox;
168 }
169 
170 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
171 
173 {
174  G4cout << "\n The Box is " << G4BestUnit(BoxSize,"Length")
175  << " of " << aMaterial->GetName() << G4endl;
176 }
177 
178 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
179 
180 #include "G4RunManager.hh"
181 
183 {
184  // search the material by its name, or build it from nist data base
185  G4Material* pttoMaterial =
186  G4NistManager::Instance()->FindOrBuildMaterial(materialChoice);
187 
188  if (pttoMaterial) {
189  aMaterial = pttoMaterial;
192  } else {
193  G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
194  << materialChoice << " not found" << G4endl;
195  }
196 }
197 
198 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......