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 //
31 //
32 //
33 
34 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
35 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
36 
37 #include "DetectorConstruction.hh"
38 #include "DetectorMessenger.hh"
39 
40 #include "G4Material.hh"
41 #include "G4NistManager.hh"
42 #include "G4Box.hh"
43 #include "G4LogicalVolume.hh"
44 #include "G4PVPlacement.hh"
45 
46 #include "G4GeometryManager.hh"
47 #include "G4PhysicalVolumeStore.hh"
48 #include "G4LogicalVolumeStore.hh"
49 #include "G4SolidStore.hh"
50 
51 #include "G4UnitsTable.hh"
52 #include "G4SystemOfUnits.hh"
53 
54 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
55 
58  fBox(nullptr),fMaterial(nullptr)
59 {
60  fBoxSize = 1*mm;
62  SetMaterial("Germanium");
64 }
65 
66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
67 
69 { delete fDetectorMessenger;}
70 
71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
72 
74 {
75  //
76  // define Elements
77  //
78  G4double z,a;
79 
80  G4Element* H = new G4Element("Hydrogen" ,"H" , z= 1., a= 1.01*g/mole);
81  G4Element* C = new G4Element("Carbon" ,"C" , z= 6., a= 12.01*g/mole);
82  G4Element* N = new G4Element("Nitrogen" ,"N" , z= 7., a= 14.01*g/mole);
83  G4Element* O = new G4Element("Oxygen" ,"O" , z= 8., a= 16.00*g/mole);
84  G4Element* Ge = new G4Element("Germanium","Ge", z=32., a= 72.59*g/mole);
85  G4Element* Pb = new G4Element("Lead" ,"Pb", z=82., a= 207.19*g/mole);
86  G4Element* Bi = new G4Element("Bismuth" ,"Bi", z=83., a= 208.98*g/mole);
87 
88  //
89  // define materials
90  //
91  G4double density;
92  G4int ncomponents, natoms;
93  G4double fractionmass;
94 
95  G4Material* Air =
96  new G4Material("Air", density= 1.290*mg/cm3, ncomponents=2);
97  Air->AddElement(N, fractionmass=70.*perCent);
98  Air->AddElement(O, fractionmass=30.*perCent);
99 
100  G4Material* H2l =
101  new G4Material("H2liquid", density= 70.8*mg/cm3, ncomponents=1);
102  H2l->AddElement(H, fractionmass=1.);
103 
104  G4Material* H2O =
105  new G4Material("Water", density= 1.000*g/cm3, ncomponents=2);
106  H2O->AddElement(H, natoms=2);
107  H2O->AddElement(O, natoms=1);
110 
111  G4Material* steam =
112  new G4Material("WaterSteam", density= 1.0*mg/cm3, ncomponents=1);
113  steam->AddMaterial(H2O, fractionmass=1.);
114  steam->GetIonisation()->SetMeanExcitationEnergy(71.6*eV);
115 
116  G4Material* BGO =
117  new G4Material("BGO", density= 7.10*g/cm3, ncomponents=3);
118  BGO->AddElement(O , natoms=12);
119  BGO->AddElement(Ge, natoms= 3);
120  BGO->AddElement(Bi, natoms= 4);
121 
122  new G4Material("Aluminium" , z=13., a= 26.98*g/mole, density= 2.700*g/cm3);
123  new G4Material("Silicon" , z=14., a= 28.09*g/mole, density= 2.330*g/cm3);
124  new G4Material("liquidArgon", z=18., a= 39.95*g/mole, density= 1.390*g/cm3);
125  new G4Material("Iron" , z=26., a= 55.85*g/mole, density= 7.870*g/cm3);
126  new G4Material("Copper" , z=29., a= 63.55*g/mole, density= 8.960*g/cm3);
127  new G4Material("Germanium" , z=32., a= 72.61*g/mole, density= 5.323*g/cm3);
128  new G4Material("Silver" , z=47., a=107.87*g/mole, density= 10.50*g/cm3);
129  new G4Material("Tungsten" , z=74., a=183.85*g/mole, density= 19.30*g/cm3);
130  new G4Material("Lead" , z=82., a=207.19*g/mole, density= 11.35*g/cm3);
131  new G4Material("Uranium" , z=92., a=238.03*g/mole, density= 18.95*g/cm3);
132 
133  G4Material* ams =
134  new G4Material("ams", density= 7.409*g/cm3, ncomponents=3);
135  ams->AddElement(Pb, fractionmass = 94.81*perCent);
136  ams->AddElement(C , fractionmass = 4.79*perCent);
137  ams->AddElement(H , fractionmass = 0.40*perCent);
138 
139  G4Material* argonGas =
140  new G4Material("ArgonGas", z=18, a=39.948*g/mole, density= 1.782*mg/cm3,
141  kStateGas, 273.15*kelvin, 1*atmosphere);
142 
143  G4Material* butane =
144  new G4Material("Isobutane",density= 2.42*mg/cm3, ncomponents=2,
145  kStateGas,273.15*kelvin, 1*atmosphere);
146  butane->AddElement(C, natoms=4);
147  butane->AddElement(H, natoms=10);
148 
149  G4Material* ArButane =
150  new G4Material("ArgonButane", density= 1.835*mg/cm3, ncomponents=2,
151  kStateGas,273.15*kelvin,1.*atmosphere);
152  ArButane->AddMaterial(argonGas, fractionmass=70*perCent);
153  ArButane->AddMaterial(butane , fractionmass=30*perCent);
154 
156 }
157 
158 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
159 
161 {
162  // the geometry is created once
163  if(fBox) { return fBox; }
164 
165  G4Box*
166  sBox = new G4Box("Container", //its name
167  fBoxSize/2,fBoxSize/2,fBoxSize/2); //its dimensions
168 
170  lBox = new G4LogicalVolume(sBox, //its shape
171  fMaterial, //its material
172  fMaterial->GetName()); //its name
173 
174  fBox = new G4PVPlacement(0, //no rotation
175  G4ThreeVector(0.,0.,0.), //at (0,0,0)
176  lBox, //its logical volume
177  fMaterial->GetName(), //its name
178  0, //its mother volume
179  false, //no boolean operation
180  0); //copy number
181 
182  //always return the root volume
183  //
184  return fBox;
185 }
186 
187 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
188 
190 {
191  G4cout << "\n The Box is " << G4BestUnit(fBoxSize,"Length")
192  << " of " << fMaterial->GetName() << G4endl;
193 }
194 
195 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
196 
197 #include "G4RunManager.hh"
198 
199 void DetectorConstruction::SetMaterial(const G4String& materialChoice)
200 {
201  // search the material by its name, or build it from nist data base
202  G4Material* pttoMaterial =
203  G4NistManager::Instance()->FindOrBuildMaterial(materialChoice);
204 
205  if (pttoMaterial) {
206  fMaterial = pttoMaterial;
207  if(fBox) { fBox->GetLogicalVolume()->SetMaterial(fMaterial); }
209  } else {
210  G4cout << "\n--> warning from DetectorConstruction::SetMaterial : "
211  << materialChoice << " not found" << G4endl;
212  }
213 }
214 
215 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......