Materials.cc

Go to the documentation of this file.
00001 //! \file
00002 //!
00003 //! Source file for Materials routine.
00004 //!
00005 //! The Materials routine defines all the materials used in building the
00006 //! OLYMPUS detector.
00007 //!
00008 //! \author D.K. Hasell
00009 //! \version 1.0
00010 //! \date 2010-10-13
00011 //!
00012 //! \ingroup detector
00013 
00014 // *+****1****+****2****+****3****+****4****+****5****+****6****+****7****+****
00015 
00016 // Include the header file.
00017 
00018 #include "Materials.h"
00019 
00020 // Include the header files for defining materials.
00021 
00022 #include "G4Material.hh"
00023 #include "G4NistManager.hh"
00024 
00025 // Routine to define the materials used in the OLYMPUS simulation.
00026 
00027 void Materials( G4bool output ) {
00028 
00029    // Find or build materials from the NIST database to make them available.
00030 
00031    G4NistManager * Nist_man = G4NistManager::Instance();
00032 
00033    Nist_man->FindOrBuildMaterial( "G4_Be" );
00034 
00035    Nist_man->FindOrBuildMaterial( "G4_C" );
00036 
00037    Nist_man->FindOrBuildMaterial( "G4_Al" );
00038 
00039    Nist_man->FindOrBuildMaterial( "G4_Cu" );
00040 
00041    Nist_man->FindOrBuildMaterial( "G4_Fe" );
00042 
00043    Nist_man->FindOrBuildMaterial( "G4_Si" );
00044    
00045    Nist_man->FindOrBuildMaterial( "G4_W" );
00046    
00047    Nist_man->FindOrBuildMaterial( "G4_Pb" );
00048 
00049    Nist_man->FindOrBuildMaterial( "G4_CARBON_DIOXIDE" );
00050 
00051    Nist_man->FindOrBuildMaterial( "G4_KAPTON" );
00052 
00053    Nist_man->FindOrBuildMaterial( "G4_MYLAR" );
00054 
00055    Nist_man->FindOrBuildMaterial( "G4_BAKELITE" );
00056 
00057    Nist_man->FindOrBuildMaterial( "G4_CONCRETE" );
00058 
00059    Nist_man->FindOrBuildMaterial( "G4_PLASTIC_SC_VINYLTOLUENE" );
00060 
00061    Nist_man->FindOrBuildMaterial( "G4_WATER" );
00062 
00063    Nist_man->FindOrBuildMaterial( "G4_GLASS_PLATE" );
00064 
00065    Nist_man->FindOrBuildMaterial( "G4_Galactic" );
00066 
00067    Nist_man->FindOrBuildMaterial( "G4_PbWO4" );
00068 
00069    Nist_man->FindOrBuildMaterial( "G4_GLASS_LEAD" );
00070 
00071    // Create specific instances of materials and elements to build new ones.
00072 
00073    G4Material * STP_Air
00074       = Nist_man->FindOrBuildMaterial( "G4_AIR" );
00075 
00076    // Define elements from NIST manager database to make new materials.
00077    // Note that G4_H is a material made of hydrogen while H is the element.
00078 
00079    G4Element * el_H
00080       = Nist_man->FindOrBuildElement( "H" );
00081 
00082    G4Element * el_C
00083       = Nist_man->FindOrBuildElement( "C" );
00084 
00085    G4Element * el_N
00086       = Nist_man->FindOrBuildElement( "N" );
00087 
00088    G4Element * el_O
00089       = Nist_man->FindOrBuildElement( "O" );
00090 
00091    G4Element * el_Al
00092       = Nist_man->FindOrBuildElement( "Al" );
00093 
00094    G4Element * el_Si
00095       = Nist_man->FindOrBuildElement( "Si" );
00096 
00097    G4Element * el_Ar
00098       = Nist_man->FindOrBuildElement( "Ar" );
00099 
00100    G4Element * el_Mn
00101       = Nist_man->FindOrBuildElement( "Mn" );
00102 
00103    G4Element * el_Cr
00104       = Nist_man->FindOrBuildElement( "Cr" );
00105 
00106    G4Element * el_Mo
00107       = Nist_man->FindOrBuildElement( "Mo" );
00108 
00109    G4Element * el_Ni
00110       = Nist_man->FindOrBuildElement( "Ni" );
00111 
00112    G4Element * el_P
00113       = Nist_man->FindOrBuildElement( "P" );
00114 
00115    G4Element * el_S
00116       = Nist_man->FindOrBuildElement( "S" );
00117 
00118    G4Element * el_Fe
00119       = Nist_man->FindOrBuildElement( "Fe" );
00120 
00121    G4Element * el_F
00122       = Nist_man->FindOrBuildElement( "F" );
00123 
00124    G4Element * el_Pb
00125       = Nist_man->FindOrBuildElement( "Pb" );
00126 
00127    // Define new materials.
00128 
00129    G4Material * G10
00130       = new G4Material(
00131          "NemaG10",                          // Name.
00132          1.700 * g/cm3,                      // Density.
00133          4 );                                // # of components.
00134 
00135    G10->AddElement( el_Si, 1 );              // Add 1 atom of Si.
00136    G10->AddElement( el_O,  2 );              // Add 2 atoms of O.
00137    G10->AddElement( el_C,  3 );              // Add 3 atoms of C.
00138    G10->AddElement( el_H,  3 );              // Add 3 atoms of H.
00139 
00140    G4Material * AlN
00141       = new G4Material(
00142          "AlN",                              // Name.
00143          3.3 * g/cm3,                        // Density.
00144          2 );                                // # of components.
00145 
00146    AlN->AddElement( el_Al, 1 );              // 1 atom Al.
00147    AlN->AddElement( el_N,  1 );              // 1 atom N.
00148 
00149    G4Material * SST316 = new
00150       G4Material( "SST316", 8.0 * g/cm3, 9 );
00151 
00152    SST316->AddElement( el_Fe, 65.345 * perCent );
00153    SST316->AddElement( el_Cr, 17.000 * perCent );
00154    SST316->AddElement( el_Ni, 12.000 * perCent );
00155    SST316->AddElement( el_Mo,  2.500 * perCent );
00156    SST316->AddElement( el_Mn,  2.000 * perCent );
00157    SST316->AddElement( el_Si,  1.000 * perCent );
00158    SST316->AddElement( el_C,   0.080 * perCent );
00159    SST316->AddElement( el_P,   0.045 * perCent );
00160    SST316->AddElement( el_S,   0.030 * perCent );
00161 
00162    // Define new gas mixtures.
00163 
00164    G4Material * WC_gas
00165       = new G4Material(
00166          "WC_gas",                          // Name.
00167          1.70 * mg/cm3,                      // Density.
00168          3,                                  // # of components.
00169          kStateGas,                          // State.
00170          293.15 * kelvin,                    // Temperature.
00171          1.0 * atmosphere );                 // Pressure.
00172 
00173    WC_gas->AddElement( el_Ar, 7 );           // 70% Ar by volume.
00174    WC_gas->AddElement( el_O,  6 );           // 30% CO2 by volume.
00175    WC_gas->AddElement( el_C,  3 );           // 30% CO2 by volume.
00176 
00177    G4Material * TPC_gas
00178       = new G4Material(
00179          "TPC_gas",                          // Name.
00180          1.6756 * mg/cm3 * 273.15 / 293.15,  // Density.
00181          3,                                  // # of components.
00182          kStateGas,                          // State.
00183          293.15 * kelvin,                    // Temperature.
00184          1.0 * atmosphere );                 // Pressure.
00185 
00186    TPC_gas->AddElement( el_Ar, 9 );          // 90% Ar by volume.
00187    TPC_gas->AddElement( el_H,  4 );          // 10% CH4 by volume.
00188    TPC_gas->AddElement( el_C,  1 );          // 10% CH4 by volume.
00189 
00190    G4Material * Air
00191       = new G4Material(
00192          "Air",                              // Name.
00193          1.2931 * mg/cm3 * 273.15 / 293.15,  // Density.
00194          1,                                  // # of components.
00195          kStateGas,                          // State.
00196          293.15 * kelvin,                    // Temperature.
00197          1.0 * atmosphere );                 // Pressure.
00198 
00199    Air->AddMaterial( STP_Air, 1.0 );         // 100% STP_Air.
00200 
00201    G4Material * Beam_gas
00202       = new G4Material(
00203          "Beam_gas",                         // Name.
00204          1.2931E-11 * mg/cm3 * 273.15 / 293.15,   // Density.
00205          1,                                  // # of components.
00206          kStateGas,                          // State.
00207          293.15 * kelvin,                    // Temperature.
00208          1.0E-11 * atmosphere );             // Pressure.
00209 
00210    Beam_gas->AddMaterial( STP_Air, 1.0 );    // 100% STP_Air.
00211 
00212    G4Material * PbF2
00213       = new G4Material(
00214          "PbF2",                             // Name.
00215          7.77 * g/cm3,                       // Density.
00216          2 );                                // # of components.
00217 
00218    PbF2->AddElement( el_Pb, 1 );             // Add 1 atom of Pb.
00219    PbF2->AddElement( el_F,  2 );             // Add 2 atoms of F.
00220 
00221    // Output the table of materials.
00222 
00223    if( output ) G4cout << "\n\nThe materials defined are:\n\n" 
00224                        << *(G4Material::GetMaterialTable())
00225                        << G4endl;
00226    
00227 }