Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-01 07:50:20

0001 //
0002 // ********************************************************************
0003 // * License and Disclaimer                                           *
0004 // *                                                                  *
0005 // * The  Geant4 software  is  copyright of the Copyright Holders  of *
0006 // * the Geant4 Collaboration.  It is provided  under  the terms  and *
0007 // * conditions of the Geant4 Software License,  included in the file *
0008 // * LICENSE and available at  http://cern.ch/geant4/license .  These *
0009 // * include a list of copyright holders.                             *
0010 // *                                                                  *
0011 // * Neither the authors of this software system, nor their employing *
0012 // * institutes,nor the agencies providing financial support for this *
0013 // * work  make  any representation or  warranty, express or implied, *
0014 // * regarding  this  software system or assume any liability for its *
0015 // * use.  Please see the license in the file  LICENSE  and URL above *
0016 // * for the full disclaimer and the limitation of liability.         *
0017 // *                                                                  *
0018 // * This  code  implementation is the result of  the  scientific and *
0019 // * technical work of the GEANT4 collaboration.                      *
0020 // * By using,  copying,  modifying or  distributing the software (or *
0021 // * any work based  on the software)  you  agree  to acknowledge its *
0022 // * use  in  resulting  scientific  publications,  and indicate your *
0023 // * acceptance of all terms of the Geant4 Software license.          *
0024 // ********************************************************************
0025 //
0026 /// \file Materials.cc
0027 /// \brief Implementation of the Materials class
0028 
0029 //      GEANT 4 class
0030 //
0031 //      History: based on object model of
0032 //       Materials
0033 //     Originally Created in Test30 by Vladimir Ivanchenko, 12 March 2002
0034 //
0035 //    Modified for Test by V. Grichine, 29 Jan 2006
0036 //    is filled with XTR related materials, plastics, gas mixtures, etc
0037 
0038 #include "Materials.hh"
0039 
0040 #include "G4Material.hh"
0041 #include "G4MaterialTable.hh"
0042 #include "G4SystemOfUnits.hh"
0043 #include "G4UnitsTable.hh"
0044 
0045 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0046 
0047 Materials* Materials::fgInstance = 0;
0048 
0049 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0050 
0051 Materials* Materials::GetInstance()
0052 {
0053   if (!fgInstance) {
0054     fgInstance = new Materials();
0055   }
0056   return fgInstance;
0057 }
0058 
0059 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0060 
0061 Materials::Materials()
0062 {
0063   fgInstance = this;
0064   Initialise();
0065 }
0066 
0067 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0068 
0069 Materials::~Materials() {}
0070 
0071 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0072 
0073 void Materials::Initialise()
0074 {
0075   G4String name, symbol;
0076   G4double a, z;
0077   G4double density, fractionmass;
0078   G4int nel, ncomponents;
0079 
0080   // define Elements
0081 
0082   a = 1.01 * g / mole;
0083   G4Element* elH = new G4Element(name = "Hydrogen", symbol = "H", z = 1., a);
0084 
0085   a = 6.94 * g / mole;
0086   G4Element* elLi = new G4Element(name = "Lithium", symbol = "Li", z = 3., a);
0087 
0088   a = 9.01 * g / mole;
0089   G4Element* elBe = new G4Element(name = "Berillium", symbol = "Be", z = 4., a);
0090 
0091   a = 12.01 * g / mole;
0092   G4Element* elC = new G4Element(name = "Carbon", symbol = "C", z = 6., a);
0093 
0094   a = 14.01 * g / mole;
0095   G4Element* elN = new G4Element(name = "Nitrogen", symbol = "N", z = 7., a);
0096 
0097   a = 16.00 * g / mole;
0098   G4Element* elO = new G4Element(name = "Oxygen", symbol = "O", z = 8., a);
0099 
0100   a = 39.948 * g / mole;
0101   G4Element* elAr = new G4Element(name = "Argon", symbol = "Ar", z = 18., a);
0102 
0103   /*
0104   a = 131.29*g/mole;
0105   G4Element* elXe = new G4Element(name="Xenon", symbol="Xe", z=54., a);
0106 
0107   a = 19.00*g/mole;
0108   G4Element* elF  = new G4Element(name="Fluorine", symbol="F", z=9., a);
0109   */
0110 
0111   //////////////
0112   //
0113   // Detector windows, electrodes
0114   // Al for electrodes
0115 
0116   density = 2.700 * g / cm3;
0117   a = 26.98 * g / mole;
0118   new G4Material(name = "Al", z = 13., a, density);
0119 
0120   /////////
0121   //
0122   // Materials for popular X-ray TR radiators
0123   //
0124 
0125   // TRT_CH2
0126 
0127   density = 0.935 * g / cm3;
0128   G4Material* TRT_CH2 = new G4Material(name = "TRT_CH2", density, nel = 2);
0129   TRT_CH2->AddElement(elC, 1);
0130   TRT_CH2->AddElement(elH, 2);
0131 
0132   // Radiator
0133 
0134   density = 0.059 * g / cm3;
0135   G4Material* Radiator = new G4Material(name = "Radiator", density, nel = 2);
0136   Radiator->AddElement(elC, 1);
0137   Radiator->AddElement(elH, 2);
0138 
0139   // Carbon Fiber
0140 
0141   density = 0.145 * g / cm3;
0142   G4Material* CarbonFiber = new G4Material(name = "CarbonFiber", density, nel = 1);
0143   CarbonFiber->AddElement(elC, 1);
0144 
0145   // Lithium
0146 
0147   density = 0.534 * g / cm3;
0148   G4Material* Li = new G4Material(name = "Li", density, nel = 1);
0149   Li->AddElement(elLi, 1);
0150 
0151   // Beryllium
0152 
0153   density = 1.848 * g / cm3;
0154   G4Material* Be = new G4Material(name = "Be", density, nel = 1);
0155   Be->AddElement(elBe, 1);
0156 
0157   // Mylar
0158 
0159   density = 1.39 * g / cm3;
0160   G4Material* Mylar = new G4Material(name = "Mylar", density, nel = 3);
0161   Mylar->AddElement(elO, 2);
0162   Mylar->AddElement(elC, 5);
0163   Mylar->AddElement(elH, 4);
0164 
0165   // Kapton Dupont de Nemur (density: 1.396-1.430, get middle )
0166 
0167   density = 1.413 * g / cm3;
0168   G4Material* Kapton = new G4Material(name = "Kapton", density, nel = 4);
0169   Kapton->AddElement(elO, 5);
0170   Kapton->AddElement(elC, 22);
0171   Kapton->AddElement(elN, 2);
0172   Kapton->AddElement(elH, 10);
0173 
0174   // Kapton (polyimide) ??? since = Mylar C5H4O2
0175 
0176   // density = 1.39*g/cm3;
0177   // G4Material* kapton = new G4Material(name="kapton", density, nel=3);
0178   // Kapton->AddElement(elO,2);
0179   // Kapton->AddElement(elC,5);
0180   // Kapton->AddElement(elH,4);
0181 
0182   // Polypropelene
0183 
0184   G4Material* CH2 = new G4Material("CH2", 0.91 * g / cm3, 2);
0185   CH2->AddElement(elH, 2);
0186   CH2->AddElement(elC, 1);
0187 
0188   ////////////////////////////
0189   //
0190   // Noble gases , STP conditions
0191 
0192   // Helium as detector gas, STP
0193 
0194   density = 0.178 * mg / cm3;
0195   a = 4.0026 * g / mole;
0196   G4Material* He = new G4Material(name = "He", z = 2., a, density);
0197 
0198   // Neon as detector gas, STP
0199 
0200   density = 0.900 * mg / cm3;
0201   a = 20.179 * g / mole;
0202   new G4Material(name = "Ne", z = 10., a, density);
0203 
0204   // Argon as detector gas, STP
0205 
0206   density = 1.7836 * mg / cm3;  // STP
0207   G4Material* Argon = new G4Material(name = "Argon", density, ncomponents = 1);
0208   Argon->AddElement(elAr, 1);
0209 
0210   // Krypton as detector gas, STP
0211 
0212   density = 3.700 * mg / cm3;
0213   a = 83.80 * g / mole;
0214   G4Material* Kr = new G4Material(name = "Kr", z = 36., a, density);
0215 
0216   // Xenon as detector gas, STP
0217 
0218   density = 5.858 * mg / cm3;
0219   a = 131.29 * g / mole;
0220   G4Material* Xe = new G4Material(name = "Xenon", z = 54., a, density);
0221 
0222   /////////////////////////////////
0223   //
0224   // Hydrocarbones, metane and others
0225 
0226   // Metane, STP
0227 
0228   density = 0.7174 * mg / cm3;
0229   G4Material* metane = new G4Material(name = "CH4", density, nel = 2);
0230   metane->AddElement(elC, 1);
0231   metane->AddElement(elH, 4);
0232 
0233   // Propane, STP
0234 
0235   density = 2.005 * mg / cm3;
0236   G4Material* propane = new G4Material(name = "C3H8", density, nel = 2);
0237   propane->AddElement(elC, 3);
0238   propane->AddElement(elH, 8);
0239 
0240   // iso-Butane (methylpropane), STP
0241 
0242   density = 2.67 * mg / cm3;
0243   G4Material* isobutane = new G4Material(name = "isoC4H10", density, nel = 2);
0244   isobutane->AddElement(elC, 4);
0245   isobutane->AddElement(elH, 10);
0246 
0247   /////////////////////////
0248   //
0249   // Molecular gases
0250 
0251   // Carbon dioxide, STP
0252 
0253   density = 1.977 * mg / cm3;
0254   G4Material* CO2 =
0255     new G4Material(name = "CO2", density, nel = 2, kStateGas, 273.15 * kelvin, 1. * atmosphere);
0256   CO2->AddElement(elC, 1);
0257   CO2->AddElement(elO, 2);
0258 
0259   // Carbon dioxide, STP
0260 
0261   density = 1.977 * 273. * mg / cm3 / 293.;
0262   G4Material* CarbonDioxide = new G4Material(name = "CO2_2", density, nel = 2);
0263   CarbonDioxide->AddElement(elC, 1);
0264   CarbonDioxide->AddElement(elO, 2);
0265 
0266   // Nitrogen, STP
0267 
0268   density = 1.25053 * mg / cm3;  // STP
0269   G4Material* Nitrogen = new G4Material(name = "N2", density, ncomponents = 1);
0270   Nitrogen->AddElement(elN, 2);
0271 
0272   // Oxygen, STP
0273 
0274   density = 1.4289 * mg / cm3;  // STP
0275   G4Material* Oxygen = new G4Material(name = "O2", density, ncomponents = 1);
0276   Oxygen->AddElement(elO, 2);
0277 
0278   /* *****************************
0279   density = 1.25053*mg/cm3;       // STP
0280   a = 14.01*g/mole ;       // get atomic weight !!!
0281   //  a = 28.016*g/mole;
0282   G4Material* N2  = new G4Material(name="Nitrogen", z= 7.,a,density) ;
0283 
0284   density = 1.25053*mg/cm3;       // STP
0285   G4Material* anotherN2 = new G4Material(name="anotherN2", density,ncomponents=2);
0286   anotherN2->AddElement(elN, 1);
0287   anotherN2->AddElement(elN, 1);
0288 
0289   // air made from oxigen and nitrogen only
0290 
0291   density = 1.290*mg/cm3;  // old air from elements
0292   G4Material* air = new G4Material(name="air"  , density, ncomponents=2);
0293   air->AddElement(elN, fractionmass=0.7);
0294   air->AddElement(elO, fractionmass=0.3);
0295   ******************************************** */
0296 
0297   // Dry Air (average composition with Ar), STP
0298 
0299   density = 1.2928 * mg / cm3;  // STP
0300   G4Material* Air = new G4Material(name = "Air", density, ncomponents = 3);
0301   Air->AddMaterial(Nitrogen, fractionmass = 0.7557);
0302   Air->AddMaterial(Oxygen, fractionmass = 0.2315);
0303   Air->AddMaterial(Argon, fractionmass = 0.0128);
0304 
0305   ////////////////////////////////////////////////////////////////////////////
0306   //
0307   // MWPC mixtures
0308 
0309   // 85% Xe + 15% CO2, STP
0310 
0311   density = 4.9 * mg / cm3;
0312   G4Material* Xe15CO2 = new G4Material(name = "Xe15CO2", density, ncomponents = 2);
0313   Xe15CO2->AddMaterial(Xe, fractionmass = 0.979);
0314   Xe15CO2->AddMaterial(CarbonDioxide, fractionmass = 0.021);
0315 
0316   // 80% Xe + 20% CO2, STP
0317 
0318   density = 5.0818 * mg / cm3;
0319   G4Material* Xe20CO2 = new G4Material(name = "Xe20CO2", density, ncomponents = 2);
0320   Xe20CO2->AddMaterial(Xe, fractionmass = 0.922);
0321   Xe20CO2->AddMaterial(CarbonDioxide, fractionmass = 0.078);
0322 
0323   // 70% Xe + 27% CO2 + 3% O2, 20 1 atm ATLAS straw tube mixture
0324 
0325   density = 4.358 * mg / cm3;
0326   G4Material* Xe27CO23O2 = new G4Material(name = "Xe27CO23O2", density, ncomponents = 3);
0327   Xe27CO23O2->AddMaterial(Xe, fractionmass = 0.87671);
0328   Xe27CO23O2->AddMaterial(CarbonDioxide, fractionmass = 0.11412);
0329   Xe27CO23O2->AddMaterial(Oxygen, fractionmass = 0.00917);
0330 
0331   // 80% Kr + 20% CO2, STP
0332 
0333   density = 3.601 * mg / cm3;
0334   G4Material* Kr20CO2 = new G4Material(name = "Kr20CO2", density, ncomponents = 2);
0335   Kr20CO2->AddMaterial(Kr, fractionmass = 0.89);
0336   Kr20CO2->AddMaterial(CarbonDioxide, fractionmass = 0.11);
0337 
0338   // Xe + 55% He + 15% CH4 ; NIM A294 (1990) 465-472; STP
0339 
0340   density = 1.963 * 273. * mg / cm3 / 293.;
0341   G4Material* Xe55He15CH4 = new G4Material(name = "Xe55He15CH4", density, ncomponents = 3);
0342   Xe55He15CH4->AddMaterial(Xe, 0.895);
0343   Xe55He15CH4->AddMaterial(He, 0.050);
0344   Xe55He15CH4->AddMaterial(metane, 0.055);
0345 
0346   // 90% Xe + 10% CH4, STP ; NIM A248 (1986) 379-388
0347 
0348   density = 5.344 * mg / cm3;
0349   G4Material* Xe10CH4 = new G4Material(name = "Xe10CH4", density, ncomponents = 2);
0350   Xe10CH4->AddMaterial(Xe, fractionmass = 0.987);
0351   Xe10CH4->AddMaterial(metane, fractionmass = 0.013);
0352 
0353   // 95% Xe + 5% CH4, STP ; NIM A214 (1983) 261-268
0354 
0355   density = 5.601 * mg / cm3;
0356   G4Material* Xe5CH4 = new G4Material(name = "Xe5CH4", density, ncomponents = 2);
0357   Xe5CH4->AddMaterial(Xe, fractionmass = 0.994);
0358   Xe5CH4->AddMaterial(metane, fractionmass = 0.006);
0359 
0360   // 80% Xe + 20% CH4, STP ; NIM A253 (1987) 235-244
0361 
0362   density = 4.83 * mg / cm3;
0363   G4Material* Xe20CH4 = new G4Material(name = "Xe20CH4", density, ncomponents = 2);
0364   Xe20CH4->AddMaterial(Xe, fractionmass = 0.97);
0365   Xe20CH4->AddMaterial(metane, fractionmass = 0.03);
0366 
0367   // 93% Ar + 7% CH4, STP ; NIM 107 (1973) 413-422
0368 
0369   density = 1.709 * mg / cm3;
0370   G4Material* Ar7CH4 = new G4Material(name = "Ar7CH4", density, ncomponents = 2);
0371   Ar7CH4->AddMaterial(Argon, fractionmass = 0.971);
0372   Ar7CH4->AddMaterial(metane, fractionmass = 0.029);
0373 
0374   // 93% Kr + 7% CH4, STP ; NIM 107 (1973) 413-422
0375 
0376   density = 3.491 * mg / cm3;
0377   G4Material* Kr7CH4 = new G4Material(name = "Kr7CH4", density, ncomponents = 2);
0378   Kr7CH4->AddMaterial(Kr, fractionmass = 0.986);
0379   Kr7CH4->AddMaterial(metane, fractionmass = 0.014);
0380 
0381   // 0.5*(95% Xe + 5% CH4)+0.5*(93% Ar + 7% CH4), STP ; NIM A214 (1983) 261-268
0382 
0383   density = 3.655 * mg / cm3;
0384   G4Material* XeArCH4 = new G4Material(name = "XeArCH4", density, ncomponents = 2);
0385   XeArCH4->AddMaterial(Xe5CH4, fractionmass = 0.766);
0386   XeArCH4->AddMaterial(Ar7CH4, fractionmass = 0.234);
0387 
0388   // Silicon as detector material
0389 
0390   density = 2.330 * g / cm3;
0391   a = 28.09 * g / mole;
0392   new G4Material(name = "Si", z = 14., a, density);
0393 
0394   /*
0395   G4Material* ma;
0396   ma  = new G4Material("H",     1.,  1.0*g/mole, 1.*g/cm3);
0397   ma  = new G4Material("D",     1.,  2.0*g/mole, 1.*g/cm3);
0398   ma  = new G4Material("Li",    3.,  6.941*g/mole, 1.*g/cm3);
0399   ma  = new G4Material("Be",    4.,  9.01*g/mole, 1.848*g/cm3);
0400   ma  = new G4Material("C",     6.,  12.00*g/mole, 2.0*g/cm3);
0401         ma  = new G4Material("Graphite",6., 12.00*g/mole, 2.265*g/cm3 );
0402   ma->SetChemicalFormula("Graphite");
0403   ma  = new G4Material("Al",    13.,  26.98*g/mole,  2.7 *g/cm3);
0404         ma  = new G4Material("Si",    14.,  29.055*g/mole, 2.33*g/cm3);
0405         ma  = new G4Material("LAr",   18.,  39.95*g/mole,  1.393*g/cm3);
0406         ma  = new G4Material("Zr",    40.,  91.224*g/mole, 4.0*g/cm3);
0407         ma  = new G4Material("LXe",   54., 131.29*g/mole,  3.02*g/cm3);
0408         ma  = new G4Material("Fe",    26.,  55.85*g/mole,  7.87*g/cm3);
0409         ma  = new G4Material("Ni",    29.,  58.6934*g/mole,  8.00*g/cm3);
0410         ma  = new G4Material("Cu",    29.,  63.55*g/mole,  8.96*g/cm3);
0411         ma  = new G4Material("Au",    79., 196.97*g/mole, 19.32*g/cm3);
0412         ma  = new G4Material("Ta",    73., 180.9479*g/mole, 16.67*g/cm3);
0413         ma  = new G4Material("W",     74., 183.85*g/mole, 19.30*g/cm3);
0414         ma  = new G4Material("Pb",    82., 207.19*g/mole, 11.35*g/cm3);
0415         ma  = new G4Material("Bi",    83., 208.98*g/mole, 12.*g/cm3);
0416         ma  = new G4Material("U",     92., 238.03*g/mole, 18.95*g/cm3);
0417 
0418   G4Element*   H  = new G4Element ("Hydrogen", "H",   1. ,  1.01*g/mole);
0419   G4Element*   N  = new G4Element ("Nitrigen", "N",   7. , 14.00*g/mole);
0420   G4Element*   O  = new G4Element ("Oxygen"  , "O",   8. , 16.00*g/mole);
0421   G4Element*   C  = new G4Element ("Carbon"  , "C",   6. , 12.00*g/mole);
0422   G4Element*  Cs  = new G4Element ("Cesium"  , "Cs", 55. , 132.905*g/mole);
0423   G4Element*   I  = new G4Element ("Iodide"  , "I",  53. , 126.9044*g/mole);
0424 
0425   ma = new G4Material("O2", 8., 16.00*g/mole, 1.1*g/cm3);
0426   ma->SetChemicalFormula("O_2");
0427   ma = new G4Material ("Water" , 1.*g/cm3, 2);
0428   ma->AddElement(H,2);
0429   ma->AddElement(O,1);
0430   ma->SetChemicalFormula("H_2O");
0431   ma = new G4Material ("Ethane" , 0.4241*g/cm3, 2);
0432   ma->AddElement(H,6);
0433   ma->AddElement(C,2);
0434   ma->SetChemicalFormula("C_2H_6");
0435   ma = new G4Material ("CsI" , 4.53*g/cm3, 2);
0436   ma->AddElement(Cs,1);
0437   ma->AddElement(I,1);
0438   ma->SetChemicalFormula("CsI");
0439   ma = new G4Material("Air"  , 1.290*mg/cm3, 2);
0440         // use fraction in mass
0441   ma->AddElement(N, 0.7);
0442   ma->AddElement(O, 0.3);
0443   */
0444 }
0445 
0446 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
0447 
0448 G4Material* Materials::GetMaterial(const G4String& name)
0449 {
0450   //  const G4MaterialTable* theMaterialTable = G4Material::GetMaterialTable();
0451 
0452   G4Material* ma = G4Material::GetMaterial(name);
0453 
0454   G4cout << "Material is selected: " << ma->GetName() << G4endl;
0455   return ma;
0456 }