ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
FCALMaterialConsultant.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file FCALMaterialConsultant.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 // Author: Mathieu Fontaine, Rachid Mazini
27 // fontaine@lps.umontreal.ca Rachid.Mazini@cern.ch
28 //
29 // Language: C++
30 // Tested on: g++
31 // Prerequisites: None
32 // Purpose: This is the place, where all the materials get defined.
33 // Instead of coding those materials locally, where they
34 // are needed, it is much easier to maintain, if we keep
35 // all materials for a detector component in one place.
36 // Everybody who needs some of these parameters, can
37 // query the FCALMaterialConsultant.
38 // --> This class is made a singleton by making the
39 // constructor private and hiding it behind the
40 // construct() method, which creates a first instance
41 // if it does not exist. This is to prevent multiple
42 // copies of this consultant with potentially different
43 // contents (once the data is loaded from files and/or
44 // can be changed by user interaction).
45 // --> The method Material is provided to access to the data
46 // stored, a routine ShowMeAllYouKnow can be queried to
47 // dump the entire knowledge of this consultant.
48 //
49 // * Ideas on how the theFCALMaterialConsultant pointer
50 // is made static are borrowed from G4VisManager.
51 //
52 //----------------------------------------------------------------------------------
53 
55 
56 #include "globals.hh"
57 #include "G4PhysicalConstants.hh"
58 #include "G4SystemOfUnits.hh"
59 
61 
63 {
64  G4double a,z,density,fractionmass;
65  G4String name,symbol;
66  G4int nel,natoms;
67 
68  //------------
69  // elements
70  //------------
71 
72  a=1.01*g/mole;
73  elH=new G4Element(name="Hydrogen",symbol="H2",z=1.,a);
74 
75  a=2.01*g/mole;
76  elD=new G4Element(name="Deuterium",symbol="D",z=1.,a);
77 
78  a=4.*g/mole;
79  elHe=new G4Element(name="Helium",symbol="He",z=2.,a);
80 
81  a=6.94*g/mole;
82  elLi=new G4Element(name="Lithium",symbol="Li",z=3.,a);
83 
84  a=9.01*g/mole;
85  elBe=new G4Element(name="Berillium",symbol="Be",z=4.,a);
86 
87  a=12.01*g/mole;
88  elC=new G4Element(name="Carbon",symbol="C",z=6.,a);
89 
90  a=14.01*g/mole;
91  elN=new G4Element(name="Nitrogen",symbol="N2",z=7.,a);
92 
93  a=16.*g/mole;
94  elO=new G4Element(name="Oxygen",symbol="O2",z=8.,a);
95 
96  a=20.18*g/mole;
97  elNe=new G4Element(name="Neon",symbol="Ne",z=10.,a);
98 
99  a=22.99*g/mole;
100  elNa=new G4Element(name="Sodium",symbol="Na",z=11.,a);
101 
102  a=26.98*g/mole;
103  elAl=new G4Element(name="Aluminium",symbol="Al",z=13.,a);
104 
105  a=28.085*g/mole;
106  elSi=new G4Element(name="Silicon",symbol="Si",z=14.,a);
107 
108  a=40.08*g/mole;
109  elCa=new G4Element(name="Calcium",symbol="Ca",z=20.,a);
110 
111  a=55.850*g/mole;
112  elFe=new G4Element(name="Iron",symbol="Fe",z=26.,a);
113 
114  a=63.54*g/mole;
115  elCu=new G4Element(name="Copper",symbol="Cu",z=29.,a);
116 
117  a=183.85*g/mole;
118  elW=new G4Element(name="Tungstenm",symbol="W",z=74.,a);
119 
120  a=207.19*g/mole;
121  elPb=new G4Element(name="Lead",symbol="Pb",z=82.,a);
122 
123  a=238.03*g/mole;
124  elU=new G4Element(name="Uranium",symbol="U",z=92.,a);
125 
126 
127  //-------------------
128  // simple materials
129  //-------------------
130 
131  density = 2.7*g/cm3;
132  a = 26.98*g/mole;
133  Aluminium = new G4Material(name="Aluminium",z=13.,a,density);
134 
135  density = 7.87*g/cm3;
136  a = 55.85*g/mole;
137  Iron = new G4Material(name="Iron",z=26.,a,density);
138 
139  density = 8.96*g/cm3;
140  a = 63.54*g/mole;
141  Copper = new G4Material(name="Copper",z=29.,a,density);
142 
143  density = 19.3*g/cm3;
144  a = 183.85*g/mole;
145  Tungsten = new G4Material(name="Tungsten",z=74.,a,density);
146 
147  density = 11.35*g/cm3;
148  a = 207.19*g/mole;
149  Lead = new G4Material(name="Lead",z=82.,a,density);
150 
151  density = 1.4*g/cm3;
152  a = 39.95*g/mole;
153  LiquidArgon = new G4Material(name="LiquidArgon",z=18.,a,density);
154 
155  density = 0.002*g/cm3;
156  a = 39.95*g/mole;
157  ArgonGas = new G4Material(name="ArgonGas",z=18.,a,density);
158 
159  density = 8.96*g/cm3;
160  a = 58.69*g/mole;
161  Nickel = new G4Material(name="Nickel",z=28.,a,density);
162 
163 
164  //------------------
165  // mixtures
166  //------------------
167 
168  density = 1.290*mg/cm3;
169  Air = new G4Material(name="Air",density, nel=2);
170  Air->AddElement(elN, 0.7);
171  Air->AddElement(elO, 0.3);
172 
173  RhoaCell = Air;
174 
175 
176  density = 1.e-5*g/cm3;
177  G4double pressure = 2.e-2*bar;
178  G4double temperature = STP_Temperature; //from PhysicalConstants.h
179  Vacuum = new G4Material(name="Vacuum", density, nel=1,
180  kStateGas,temperature,pressure);
181  Vacuum->AddMaterial(Air, fractionmass=1.);
182 
183 
184  density = 0.002*g/cm3;
185  CO2 = new G4Material(name="CO2",density,nel=2);
186  CO2->AddElement(elC, natoms=1);
187  CO2->AddElement(elO, natoms=2);
188 
189  density = 1.42*g/cm3;
190  Kapton = new G4Material(name="Kapton",density, nel=4);
191  Kapton->AddElement(elH, fractionmass = 0.0273);
192  Kapton->AddElement(elC, fractionmass = 0.7213);
193  Kapton->AddElement(elN, fractionmass = 0.0765);
194  Kapton->AddElement(elO, fractionmass = 0.1749);
195 
196  density = 1.032*g/cm3;
197  Polystyrene = new G4Material(name="Polystyrene",density,nel=2);
198  Polystyrene->AddElement(elC, natoms=8);
199  Polystyrene->AddElement(elH, natoms=8);
200 
201  density = 5.185*g/cm3;
202  FCAL1CuArKap = new G4Material(name="FCAL1CuArKap",density,nel=3);
203  FCAL1CuArKap->AddMaterial(Copper, fractionmass = 0.864);
204  FCAL1CuArKap->AddMaterial(Kapton, fractionmass = 0.068);
205  FCAL1CuArKap->AddMaterial(LiquidArgon, fractionmass = 0.068);
206 
207  density = 8.701*g/cm3;
208  FCAL1CuAr = new G4Material(name="FCAL1CuAr",density,nel=2);
209  FCAL1CuAr->AddMaterial(Copper, fractionmass = 0.994);
210  FCAL1CuAr->AddMaterial(LiquidArgon, fractionmass = 0.006);
211 
212  density = 5.185*g/cm3;
213  FCAL2CuArKap = new G4Material(name="FCAL2CuArKap",density,nel=3);
214  FCAL2CuArKap->AddMaterial(Copper, fractionmass = 0.864);
215  FCAL2CuArKap->AddMaterial(Kapton, fractionmass = 0.068);
216  FCAL2CuArKap->AddMaterial(LiquidArgon, fractionmass = 0.068);
217 
218  density = 18.6*g/cm3;
219  FCAL2WFeNi = new G4Material(name="FCAL2WFeNi",density,nel=3);
220  FCAL2WFeNi->AddMaterial(Tungsten, fractionmass = 0.97);
221  FCAL2WFeNi->AddMaterial(Iron, fractionmass = 0.01);
222  FCAL2WFeNi->AddMaterial(Nickel, fractionmass = 0.02);
223 
224  density = 15.366*g/cm3;
225  FCAL2WFeNiCuAr = new G4Material(name="FCAL2WFeNiCuAr",density,nel=3);
226  FCAL2WFeNiCuAr->AddMaterial(FCAL2WFeNi, fractionmass = 0.913);
227  FCAL2WFeNiCuAr->AddMaterial(Copper, fractionmass = 0.077);
228  FCAL2WFeNiCuAr->AddMaterial(LiquidArgon, fractionmass = 0.01);
229 
230  density = 0.002*g/cm3;
231  MWPCArCO2 = new G4Material(name="MWPCArCO2",density,nel=2);
232  MWPCArCO2->AddMaterial(CO2, fractionmass = 0.2);
233  MWPCArCO2->AddMaterial(ArgonGas, fractionmass = 0.8);
234 
235 
236  // must check recipe for concrete
237 
238  density = 2.5*g/cm3;
239  ShieldingConcrete = new G4Material(name="ShieldingConcrete",density,nel=6);
240  ShieldingConcrete->AddElement(elO, fractionmass = 0.52);
241  ShieldingConcrete->AddElement(elSi, fractionmass = 0.325);
242  ShieldingConcrete->AddElement(elCa, fractionmass = 0.06);
243  ShieldingConcrete->AddElement(elNa, fractionmass = 0.015);
244  ShieldingConcrete->AddElement(elFe, fractionmass = 0.04);
245  ShieldingConcrete->AddElement(elAl, fractionmass = 0.04);
246 
247  // must have the right composition for stainless steel
248 
249  density = 8.96*g/cm3;
250  StainlessSteel = new G4Material(name="StainlessSteel",density,nel=1);
251  StainlessSteel->AddElement(elO, fractionmass = 1.);
252 
253 }
254 
256 {
257  if (theFCALMaterialConsultant == NULL) {
259  }
261 }
262 
264 {
265  G4Material* material = 0;
266  if(what == "Air") material = Air;
267  if(what == "Vacuum") material = Vacuum;
268  if(what == "LiquidArgon") material = LiquidArgon;
269  if(what == "Aluminium") material = Aluminium;
270  if(what == "Iron") material = Iron;
271  if(what == "Copper") material = Copper;
272  if(what == "Tungsten") material = Tungsten;
273  if(what == "Lead") material = Lead;
274  if(what == "CO2") material = CO2;
275  if(what == "ArgonGas") material = ArgonGas;
276  if(what == "ShieldingConcrete") material = ShieldingConcrete;
277  if(what == "Polystyrene") material = Polystyrene;
278  if(what == "StainlessSteel") material = StainlessSteel;
279  if(what == "Nickel") material = Nickel;
280  if(what == "FCAL1CuArKap") material = FCAL1CuArKap;
281  if(what == "FCAL1CuAr") material = FCAL1CuAr;
282  if(what == "FCAL2CuArKap") material = FCAL2CuArKap;
283  if(what == "FCAL2WFeNi") material = FCAL2WFeNi;
284  if(what == "FCAL2WFeNiCuAr") material = FCAL2WFeNiCuAr;
285  if(what == "MWPCArCO2") material = MWPCArCO2;
286  if(what == "RhoaCell") material = RhoaCell;
287 
288  return material;
289 }
290