def DefineMaterials(self): """ """ nist_manager = g4.G4NistManager.Instance() # G4Material * Si = man->FindOrBuildMaterial("G4_Si"); # elements # name = g4.G4String("Oxygen") # symbol = g4.G4String("O") # z = 8. # a = 16.00*g4.g/g4.mole # O_element = g4.G4Element(name, symbol, z, a) O_element = nist_manager.FindOrBuildElement("O") Si_element = nist_manager.FindOrBuildElement("Si") C_element = nist_manager.FindOrBuildElement("C") H_element = nist_manager.FindOrBuildElement("H") # Vacuum name = "Vacuum" z = 1. a = 1. * g4.g / g4.mole density = 1.e-20 * g4.g / g4.cm3 Vacuum_material = g4.G4Material(name, z, a, density) # Silicon name = "Silicon" density = 2.3290 * g4.g / g4.cm3 ncomponents = 1 Silicon_material = g4.G4Material(name, density, ncomponents) Silicon_material.AddElement(Si_element, 1) # SiO2 name = "SiO2" density = 2.200 * g4.g / g4.cm3 ncomponents = 2 SiO2_material = g4.G4Material(name, density, ncomponents) SiO2_material.AddElement(Si_element, 1. / 3.) SiO2_material.AddElement(O_element, 2. / 3.) # Photo Resist name = "PhotoResist" density = 2.200 * g4.g / g4.cm3 # FIXME ncomponents = 2 # FIXME PhotoResist_material = g4.G4Material(name, density, ncomponents) PhotoResist_material.AddElement(C_element, 2. / 8.) # FIXME PhotoResist_material.AddElement(H_element, 6. / 8.) # FIXME self.world_material = Vacuum_material self.process_space_material = Vacuum_material self.material_manager.add_base_material("Vacuum", Vacuum_material) self.material_manager.add_base_material("Silicon", Silicon_material) self.material_manager.add_base_material("SiO2", SiO2_material) self.material_manager.add_base_material("PhotoResist", PhotoResist_material)
def build_mixtured_material(name, base_materials, fractions): """ """ density = 0. for base_mat, fraction in zip(base_materials, fractions): density += base_mat.GetDensity() * fraction ncomponents = len(base_materials) new_material = g4.G4Material(name, density, ncomponents) for base_mat, fraction in zip(base_materials, fractions): new_material.AddMaterial(base_mat, fraction) return new_material
def create_materials(conf): result = {} if 'Materials' not in conf: return result for name in (conf['Materials']): c = conf['Materials'][name] mat = g4.gNistManager.FindOrBuildMaterial(name) if mat is None: atoms = c['AtomicComposition'] mat = g4.G4Material(name, c['Density'] * gram / cm**3, len(atoms[0])) for atom_name, num_atoms in zip(*atoms): mat.AddElement(g4.gNistManager.FindOrBuildElement(atom_name), num_atoms) for property_name in c['Properties']: property_table = mat.GetMaterialPropertiesTable() if property_table is None: property_table = compton.G4MaterialPropertiesTable() mat.SetMaterialPropertiesTable(property_table) property_conf = c['Properties'][property_name] if 'Value' in property_conf: property_table.AddConstProperty(property_name, property_conf['Value']) else: values = np.array(property_conf['Values']) if 'PhotonEnergies' in property_conf: photon_energies = np.array( property_conf['PhotonEnergies']) * eV else: photon_wavelengths = np.array( property_conf['PhotonWavelengths']) * nanometer photon_energies = h_Planck * c_light / photon_wavelengths assert (len(values) == len(photon_energies)) idx = photon_energies.argsort() photon_energies = photon_energies[idx] values = values[idx] property_table.AddProperty(property_name, photon_energies, values) result[name] = mat return result