#include "globals.hh" #include "G4Material.hh" #include "G4MaterialTable.hh" #include "G4Element.hh" #include "G4ElementTable.hh" #include "G4NistManager.hh" #include "G4SystemOfUnits.hh" #include "MaterialDefinitions.hh" MaterialDefinitions::MaterialDefinitions() { // in constructor ensure all materials are set to NULL Gold = 0; Graphite = 0; Iron = 0; Aluminum = 0; Copper = 0; Tungsten = 0; Lead = 0; Silicon = 0; FR4 = 0; Vacuum = 0; Air = 0; Water = 0; Kapton = 0; SS304 = 0; Tissue = 0; Cerrobend = 0; Brass = 0; Concrete = 0; Havar = 0; Lexan = 0; Mylar = 0; Perspex1 = 0; Perspex2 = 0; Perspex3 = 0; Thiolyte = 0; Perspex = 0; Dural = 0; SiliconNitride =0; SiliconDioxide = 0; TungstenCarbide = 0; } MaterialDefinitions::~MaterialDefinitions() { delete Gold; delete Graphite; delete Iron; delete Aluminum; delete Copper; delete Tungsten; delete Lead; delete Silicon; delete FR4; delete Vacuum; delete Air; delete Water; delete Kapton; delete SS304; delete Cerrobend; delete Brass; delete Tissue; delete Concrete; delete Havar; delete Lexan; delete Mylar; delete Perspex1; delete Perspex2; delete Perspex3; delete Thiolyte; delete Perspex; delete Dural; delete SiliconNitride; delete SiliconDioxide; delete TungstenCarbide; } // ********************************************************************************** void MaterialDefinitions::DefineMaterials() // ********************************************************************************** { G4NistManager* man = G4NistManager::Instance(); // allows materials to be accesses in the material database G4double z; // Atomic number G4double a; // Atomic mass G4double density; G4double fractionmass; G4int nel; // Number of elements G4int ncomponents; G4int natoms; //--------- // Elements //--------- G4Element* O = new G4Element("Oxygen" , "O" , z= 8. , a= 15.9994*g/mole); G4Element* H = new G4Element("Hydrogen" , "H" , z= 1. , a= 1.0079*g/mole); G4Element* Bi = new G4Element("Bismuth" , "Bi", z= 83., a= 208.9804*g/mole); G4Element* C = new G4Element("Carbon" , "C" , z= 6. , a= 12.0107*g/mole); G4Element* Cd = new G4Element("Cadmium" , "Cd", z= 48., a= 112.4110*g/mole); G4Element* Cl = new G4Element("Chlorine" , "Cl", z= 17., a= 35.4530*g/mole); G4Element* Co = new G4Element("Cobalt" , "Co", z= 27., a= 58.933195*g/mole); G4Element* Cr = new G4Element("Chromium" , "Cr", z= 24., a= 51.9961*g/mole); G4Element* Cu = new G4Element("Copper" , "Cu", z= 29., a= 63.5463*g/mole); G4Element* Fe = new G4Element("Iron" , "Fe", z= 26., a= 55.8450*g/mole); G4Element* K = new G4Element("Potassium" , "K" , z= 19., a= 39.0983*g/mole); G4Element* Mn = new G4Element("Manganese" , "Mn", z= 25., a= 54.9380*g/mole); G4Element* Mo = new G4Element("Molybdenum" , "Mo", z= 42., a= 95.9620*g/mole); G4Element* N = new G4Element("Nitrogen" , "N" , z= 7. , a= 14.0067*g/mole); G4Element* Na = new G4Element("Sodium" , "Na", z= 11., a= 22.9898*g/mole); G4Element* Ni = new G4Element("Nickel" , "Ni", z= 28., a= 58.6934*g/mole); G4Element* P = new G4Element("Phosphorus" , "P" , z= 15., a= 30.9738*g/mole); G4Element* Pb = new G4Element("Lead" , "Pb", z= 82., a= 207.21*g/mole); G4Element* S = new G4Element("Sulfur" , "S" , z= 16., a= 32.0650*g/mole); G4Element* Si = new G4Element("Silicon" , "Si", z= 14., a= 28.0855*g/mole); G4Element* Sn = new G4Element("Tin" , "Sn", z= 50., a= 118.6900*g/mole); G4Element* Zn = new G4Element("Zinc" , "Zn", z= 30., a= 65.4094*g/mole); G4Element* W = new G4Element("Tungsten" , "W", z= 74., a= 183.84*g/mole); G4Element* Al = new G4Element("Aluminum" , "Al", z= 13, a=26.982*g/mole); G4Element* Mg = new G4Element("Magnesium" , "Mg", z= 12, a=24.305*g/mole); //--------------- // NIST Materials //--------------- Gold = man->FindOrBuildMaterial("G4_Au"); Gold->SetName("Gold"); Iron = man->FindOrBuildMaterial("G4_Fe"); Iron->SetName("Iron"); Aluminum = man->FindOrBuildMaterial("G4_Al"); Aluminum->SetName("Aluminum"); Copper = man->FindOrBuildMaterial("G4_Cu"); Copper->SetName("Copper"); Tungsten = man->FindOrBuildMaterial("G4_W"); Tungsten->SetName("Tungsten"); Lead = man->FindOrBuildMaterial("G4_Pb"); Lead->SetName("Lead"); Silicon = man->FindOrBuildMaterial("G4_Si"); Silicon->SetName("Silicon"); Vacuum = man->FindOrBuildMaterial("G4_Galactic"); Vacuum->SetName("Vacuum"); Air = man->FindOrBuildMaterial("G4_AIR"); Air->SetName("Air"); Water = man->FindOrBuildMaterial("G4_WATER"); Water->SetName("Water"); Kapton = man->FindOrBuildMaterial("G4_KAPTON"); Kapton->SetName("Kapton"); Concrete = man->FindOrBuildMaterial("G4_CONCRETE"); Concrete->SetName("Concrete"); Mylar = man->FindOrBuildMaterial("G4_MYLAR"); Mylar->SetName("Mylar"); Perspex = man->FindOrBuildMaterial("G4_PLEXIGLASS"); Perspex->SetName("Perspex"); SiliconDioxide = man->FindOrBuildMaterial("G4_SILICON_DIOXIDE"); /// NOTE need to update this when sugi replies Graphite = new G4Material("Graphite", z=6.0, a=12.0107*g/mole, density=1.86*g/cm3); G4Material* bone = man->FindOrBuildMaterial("G4_BONE_COMPACT_ICRU"); G4Material* tissue = man->FindOrBuildMaterial("G4_TISSUE_SOFT_ICRU-4"); // Gold = new G4Material("Gold", z=79.0, a=196.97*g/mole, density=19.3*g/cm3); // Graphite = new G4Material("Graphite", z=6.0, a=12.0107*g/mole, density=1.86*g/cm3); // Iron = new G4Material("Iron", z=26.0, a= 55.8450*g/mole, density=7.874*g/cm3); // Aluminum = new G4Material("Aluminum", z=13.0, a=26.981*g/mole, density=2.699*g/cm3); // Copper = new G4Material("Copper", z=29.0, a=63.546*g/mole, density=8.960*g/cm3); // Tungsten = new G4Material("Tungsten", z=74.0, a=183.84*g/mole, density=19.30*g/cm3); // Lead = new G4Material("Lead", z=82.0, a=207.21*g/mole, density=11.350*g/cm3); // Silicon = new G4Material("Silicon", z=14, a=28.0855*g/mole, density=1.141*g/cm3); //----------- // Non NIST materials //----------- TungstenCarbide = new G4Material("TungstenCarbide", density=15.63*g/cm3, ncomponents=2); TungstenCarbide->AddElement(C, natoms=1); TungstenCarbide->AddElement(W, natoms=1); FR4 = new G4Material("FR4", density= 1.91*g/cm3, ncomponents=4); FR4->AddElement(H, natoms=15); FR4->AddElement(C , natoms=16); FR4->AddElement(O, natoms=3); FR4->AddElement(Si , natoms=4); // Stainless Steel (Type 304 & 304L) (0.1% N, 0.4% P, 1.5% Mn, 19.0% Cr, 10.0% Ni, 69.0% Fe) SS304 = new G4Material("SS304", density= 8.03*g/cm3, nel=6); SS304->AddElement(N, 0.0254*perCent); SS304->AddElement(P, 0.2242*perCent); SS304->AddElement(Cr, 17.8821*perCent); SS304->AddElement(Mn, 1.4916*perCent); SS304->AddElement(Fe, 69.7498*perCent); SS304->AddElement(Ni, 10.6269*perCent); // Tissue (ICRU44 Definition of Adult Average Soft Tissue) Tissue = new G4Material("Tissue", density= 1.0300*g/cm3, nel=9); Tissue->AddElement(H, 10.5*perCent); Tissue->AddElement(C, 25.6*perCent); Tissue->AddElement(N, 2.7*perCent); Tissue->AddElement(O, 60.2*perCent); Tissue->AddElement(Na, 0.1*perCent); Tissue->AddElement(P, 0.2*perCent); Tissue->AddElement(S, 0.3*perCent); Tissue->AddElement(Cl, 0.2*perCent); Tissue->AddElement(K, 0.2*perCent); // Brass (Type C36000 (free-cutting brass): 61.5% Cu, 35.4% Zn, 3.1% Pb) Brass = new G4Material("Brass", density= 8.496*g/cm3, nel=3); Brass->AddElement(Cu, 56.9297*perCent); Brass->AddElement(Zn, 33.7131*perCent); Brass->AddElement(Pb, 9.3572*perCent); // Cerrobend (Ostalloy 158, Wood's metal, Melt-point:70 Celcius: 13.3% Sn, 50% Bi, 26.7% Pb, 10% Cd) Cerrobend = new G4Material("Cerrobend", density= 9.382*g/cm3, nel=4); Cerrobend->AddElement(Cd, 6.0160*perCent); Cerrobend->AddElement(Sn, 8.4490*perCent); Cerrobend->AddElement(Pb, 29.6088*perCent); Cerrobend->AddElement(Bi, 55.9262*perCent); // Havar (42.0% Co, 19.5% Cr, 12.7% Ni, 2.7% W, 2.2% Mo, 1.6% Mn, 0.2% C, 19.1% Fe) Havar = new G4Material("Havar", density= 8.302*g/cm3, nel=8); Havar->AddElement(C, 0.0394*perCent); Havar->AddElement(Cr, 16.6239*perCent); Havar->AddElement(Mn, 1.4412*perCent); Havar->AddElement(Fe, 17.4889*perCent); Havar->AddElement(Co, 40.5824*perCent); Havar->AddElement(Ni, 12.2249*perCent); Havar->AddElement(Mo, 3.4606*perCent); Havar->AddElement(W, 8.1387*perCent); // Havar (to match fluka) version from BirminghamBeamline why are the two so different? // Havar = new G4Material("Havar", density=8.3*g/cm3, ncomponents=8); // Havar->AddMaterial(C, 0.9648*perCent); // Havar->AddMaterial(Cr, 22.2858*perCent); // Havar->AddMaterial(Mn, 1.6874*perCent); // Havar->AddMaterial(Fe, 18.1139*perCent); // Havar->AddMaterial(Co, 41.7828*perCent); // Havar->AddMaterial(Ni, 12.8336*perCent); // Havar->AddMaterial(Mo, 1.4494*perCent); // Havar->AddMaterial(W, 0.8823*perCent); // Lexan Lexan = new G4Material("Lexan", density= 1.200*g/cm3, nel=3); Lexan->AddElement(H, 5.5491*perCent); Lexan->AddElement(C, 75.5751*perCent); Lexan->AddElement(O, 18.8758*perCent); // Thiolyte (for Timmer plates) Thiolyte = new G4Material("Thiolyte", density= 1.426*g/cm3, nel=3); Thiolyte->AddElement(H, 4.9523*perCent); Thiolyte->AddElement(C, 68.8461*perCent); Thiolyte->AddElement(O, 26.2016*perCent); // Perspex1 (for RM wheels) Perspex1 = new G4Material("Perspex1", density= 1.145*g/cm3, nel=3); Perspex1->AddElement(H, 8.0538*perCent); Perspex1->AddElement(C, 59.9848*perCent); Perspex1->AddElement(O, 31.9614*perCent); // Perspex2 (for Wellhofer tank wall) Perspex2 = new G4Material("Perspex2", density= 1.062*g/cm3, nel=3); Perspex2->AddElement(H, 8.0538*perCent); Perspex2->AddElement(C, 59.9848*perCent); Perspex2->AddElement(O, 31.9614*perCent); // Perspex3 (for Blocks for experiments) Perspex3 = new G4Material("Perspex3", density= 1.181*g/cm3, nel=3); Perspex3->AddElement(H, 8.0538*perCent); Perspex3->AddElement(C, 59.9848*perCent); Perspex3->AddElement(O, 31.9614*perCent); // Dural for Dynamite backing Dural = new G4Material("Dural", density=2.800*g/cm3, ncomponents=3); Dural->AddElement(Al, 90.19987*perCent); Dural->AddElement(Cu, 8.9448*perCent); Dural->AddElement(Mg, 0.855*perCent); // Silicon Nitride SiliconNitride = new G4Material("SiliconNitride", density=3.2*g/cm3, ncomponents=2); SiliconNitride->AddElement(Si, fractionmass=0.6); SiliconNitride->AddElement(N, fractionmass=0.4); } G4Material* MaterialDefinitions::GetMaterial(G4String material) { G4Material* pttoMaterial = G4Material::GetMaterial(material); if(pttoMaterial==NULL) { G4NistManager* man = G4NistManager::Instance(); pttoMaterial = man->FindOrBuildMaterial(material); if(pttoMaterial) { G4cout << "####################################" << G4endl; G4cout << "## " << material << " returns a NULL pointer" << G4endl; G4cout << "####################################" << G4endl; } } return pttoMaterial; }