Ejemplo n.º 1
0
    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
Ejemplo n.º 3
0
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