Beispiel #1
0
    def testexport_inclusion(self):
        # Create
        mat1 = PenelopeMaterial({79: 0.5, 47: 0.5}, 'mat')
        mat2 = PenelopeMaterial({29: 0.5, 30: 0.5}, 'mat')

        ops = Options()
        ops.geometry = Inclusion(mat1, mat2, 0.01)
        ops.limits.add(TimeLimit(100))

        self.c._convert_geometry(ops)
        self.e.export_geometry(ops.geometry, self.tmpdir)

        # Test
        geofilepath = os.path.join(self.tmpdir, 'inclusion.geo')
        repfilepath = os.path.join(self.tmpdir, 'geometry.rep')
        nmat, nbody = pengeom.init(geofilepath, repfilepath)

        self.assertEqual(2, nmat)
        self.assertEqual(3, nbody)

        matfilepath = os.path.join(self.tmpdir, 'mat1.mat')
        self.assertTrue(os.path.exists(matfilepath))

        matfilepath = os.path.join(self.tmpdir, 'mat2.mat')
        self.assertTrue(os.path.exists(matfilepath))
Beispiel #2
0
    def testexport_vertical_layers(self):
        # Create
        mat1 = PenelopeMaterial({79: 0.5, 47: 0.5}, 'mat1')
        mat2 = PenelopeMaterial({29: 0.5, 30: 0.5}, 'mat2')
        mat3 = PenelopeMaterial({13: 0.5, 14: 0.5}, 'mat3')

        ops = Options()
        ops.beam.energy_eV = 1234
        ops.beam.diameter_m = 25e-9
        ops.beam.origin_m = (100e-9, 0, 1)

        ops.geometry = VerticalLayers(mat1, mat2)
        ops.geometry.add_layer(mat3, 5e-3)

        ops.limits.add(TimeLimit(100))

        self.c._convert_geometry(ops)
        self.e.export_geometry(ops.geometry, self.tmpdir)

        # Test
        geofilepath = os.path.join(self.tmpdir, 'verticallayers.geo')
        repfilepath = os.path.join(self.tmpdir, 'geometry.rep')
        nmat, nbody = pengeom.init(geofilepath, repfilepath)

        self.assertEqual(3, nmat)
        self.assertEqual(4, nbody)

        matfilepath = os.path.join(self.tmpdir, 'mat1.mat')
        self.assertTrue(os.path.exists(matfilepath))

        matfilepath = os.path.join(self.tmpdir, 'mat2.mat')
        self.assertTrue(os.path.exists(matfilepath))

        matfilepath = os.path.join(self.tmpdir, 'mat3.mat')
        self.assertTrue(os.path.exists(matfilepath))
Beispiel #3
0
    def parse(self, element):
        mat = _MaterialXMLHandler.parse(self, element)

        elastic_scattering = (float(element.get('c1')),
                              float(element.get('c2')))
        cutoff_energy_inelastic_eV = float(element.get('wcc'))
        cutoff_energy_bremsstrahlung_eV = float(element.get('wcr'))

        interaction_forcings = []
        for subelement in element.findall('interactionForcing'):
            particle = _PARTICLES_LOOKUP[subelement.get('particle')]
            collision = _COLLISIONS_LOOKUP[subelement.get('collision')]
            forcer = float(subelement.get('forcer'))
            weight = (float(subelement.get('wlow')),
                      float(subelement.get('whigh')))
            interaction_forcings.append(
                InteractionForcing(particle, collision, forcer, weight))

        maximum_step_length_m = float(element.get('dsmax'))

        return PenelopeMaterial(mat.composition, mat.name, mat.density_kg_m3,
                                mat.absorption_energy_eV, elastic_scattering,
                                cutoff_energy_inelastic_eV,
                                cutoff_energy_bremsstrahlung_eV,
                                interaction_forcings, maximum_step_length_m)
Beispiel #4
0
    def setUp(self):
        TestCase.setUp(self)

        if1 = InteractionForcing(ELECTRON, HARD_BREMSSTRAHLUNG_EMISSION,
                                 - 4, (0.1, 1.0))
        self.m = PenelopeMaterial({'Cu': 1.0}, 'Pure Cu', density_kg_m3=8960.0,
                                  elastic_scattering=(0.1, 0.2),
                                  cutoff_energy_inelastic_eV=51.2,
                                  cutoff_energy_bremsstrahlung_eV=53.4,
                                  interaction_forcings=[if1],
                                  maximum_step_length_m=123.456)
Beispiel #5
0
    def _createMaterial(self, parameters, varied):
        mat = _MaterialDialog._createMaterial(self, parameters, varied)

        c1 = parameters['c1']
        c2 = parameters['c2']
        wcc = parameters['wcc']
        wcr = parameters['wcr']
        dsmax = parameters['dsmax']
        forcings = parameters['forcings']

        return PenelopeMaterial(mat.composition, mat.name, mat.density_kg_m3,
                                mat.absorption_energy_eV,
                                elastic_scattering=(c1, c2),
                                cutoff_energy_inelastic_eV=wcc,
                                cutoff_energy_bremsstrahlung_eV=wcr,
                                interaction_forcings=forcings,
                                maximum_step_length_m=dsmax)
Beispiel #6
0
    def testexport_substrate(self):
        # Create
        mat1 = PenelopeMaterial({79: 0.5, 47: 0.5}, 'mat')

        ops = Options()
        ops.geometry = Substrate(mat1)
        ops.limits.add(TimeLimit(100))

        self.c._convert_geometry(ops)
        self.e.export_geometry(ops.geometry, self.tmpdir)

        # Test
        geofilepath = os.path.join(self.tmpdir, 'substrate.geo')
        repfilepath = os.path.join(self.tmpdir, 'geometry.rep')
        nmat, nbody = pengeom.init(geofilepath, repfilepath)

        self.assertEqual(1, nmat)
        self.assertEqual(2, nbody)

        matfilepath = os.path.join(self.tmpdir, 'mat1.mat')
        self.assertTrue(os.path.exists(matfilepath))
Beispiel #7
0
    def setUp(self):
        unittest.TestCase.setUp(self)

        self.h = PenelopeMaterialXMLHandler()

        if1 = InteractionForcing(ELECTRON, HARD_BREMSSTRAHLUNG_EMISSION, -4,
                                 (0.1, 1.0))
        self.obj = PenelopeMaterial({'Cu': 1.0},
                                    'Pure Cu',
                                    density_kg_m3=8960.0,
                                    elastic_scattering=(0.1, 0.2),
                                    cutoff_energy_inelastic_eV=51.2,
                                    cutoff_energy_bremsstrahlung_eV=53.4,
                                    interaction_forcings=[if1],
                                    maximum_step_length_m=123.456)

        etree.register_namespace('mc', 'http://pymontecarlo.sf.net')
        etree.register_namespace('mc-pen',
                                 'http://pymontecarlo.sf.net/penelope')
        source = BytesIO(
            b'<mc-pen:material xmlns:mc-pen="http://pymontecarlo.sf.net/penelope" c1="0.1" c2="0.2" density="8960.0" dsmax="123.456" name="Pure Cu" wcc="51.2" wcr="53.4"><composition><element weightFraction="1.0" z="29" /></composition><interactionForcing collision="hard bremsstrahlung emission" forcer="-4" particle="electron" whigh="1.0" wlow="0.1" /></mc-pen:material>'
        )
        self.element = etree.parse(source).getroot()
Beispiel #8
0
def __run():
    import sys
    from PySide.QtGui import QApplication

    material = \
        PenelopeMaterial({5: 0.5, 6: 0.5}, absorption_energy_eV={ELECTRON: 60.0},
                         elastic_scattering=(0.05, 0.1),
                         cutoff_energy_inelastic_eV=60.0,
                         cutoff_energy_bremsstrahlung_eV=70.0,
                         maximum_step_length_m=0.4,
                         interaction_forcings=[InteractionForcing(ELECTRON, DELTA, -2.0, (0.05, 0.6))])

    app = QApplication(sys.argv)

    dialog = PenelopeMaterialDialog(None)
    dialog.setValue(material)
    if dialog.exec_():
        values = dialog.values()
        print(len(values))
        for value in values:
            print(repr(value))

    app.exec_()