Ejemplo n.º 1
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()
    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()
Ejemplo n.º 3
0
class TestMaterialXMLHandler(unittest.TestCase):
    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()

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def testcan_parse(self):
        self.assertTrue(self.h.can_parse(self.element))

    def testparse(self):
        obj = self.h.parse(self.element)

        self.assertEqual('Pure Cu', str(obj))

        self.assertTrue(29 in obj.composition)
        self.assertAlmostEqual(1.0, obj.composition[29], 4)

        self.assertAlmostEqual(8.96, obj.density_kg_m3 / 1000.0, 4)

        self.assertAlmostEqual(50, obj.absorption_energy_eV[ELECTRON], 4)
        self.assertAlmostEqual(50, obj.absorption_energy_eV[PHOTON], 4)
        self.assertAlmostEqual(50, obj.absorption_energy_eV[POSITRON], 4)

        self.assertAlmostEqual(0.1, obj.elastic_scattering[0], 4)
        self.assertAlmostEqual(0.2, obj.elastic_scattering[1], 4)

        self.assertAlmostEqual(51.2, obj.cutoff_energy_inelastic_eV, 4)
        self.assertAlmostEqual(53.4, obj.cutoff_energy_bremsstrahlung_eV, 4)

        self.assertEqual(1, len(obj.interaction_forcings))
        if1 = list(obj.interaction_forcings)[0]
        self.assertIs(ELECTRON, if1.particle)
        self.assertIs(HARD_BREMSSTRAHLUNG_EMISSION, if1.collision)
        self.assertAlmostEqual(-4, if1.forcer, 6)
        self.assertAlmostEqual(0.1, if1.weight[0], 6)
        self.assertAlmostEqual(1.0, if1.weight[1], 6)

        self.assertAlmostEqual(123.456, obj.maximum_step_length_m, 4)

    def testcan_convert(self):
        self.assertTrue(self.h.can_convert(self.obj))

    def testconvert(self):
        element = self.h.convert(self.obj)

        self.assertEqual('Pure Cu', element.get('name'))

        children = element.find('composition')
        self.assertEqual(1, len(children))
        self.assertEqual(29, int(children[0].get('z')))

        self.assertAlmostEqual(8.96, float(element.get('density')) / 1000.0, 4)

        self.assertAlmostEqual(0.1, float(element.get('c1')), 4)
        self.assertAlmostEqual(0.2, float(element.get('c2')), 4)

        self.assertAlmostEqual(51.2, float(element.get('wcc')), 4)
        self.assertAlmostEqual(53.4, float(element.get('wcr')), 4)

        subelement = element.find('interactionForcing')
        self.assertEqual('electron', subelement.get('particle'))
        self.assertEqual('hard bremsstrahlung emission',
                         subelement.get('collision'))
        self.assertAlmostEqual(-4.0, float(subelement.get('forcer')), 4)
        self.assertAlmostEqual(0.1, float(subelement.get('wlow')), 4)
        self.assertAlmostEqual(1.0, float(subelement.get('whigh')), 4)

        self.assertAlmostEqual(123.456, float(element.get('dsmax')), 4)
class TestMaterialXMLHandler(unittest.TestCase):

    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()

    def tearDown(self):
        unittest.TestCase.tearDown(self)

    def testcan_parse(self):
        self.assertTrue(self.h.can_parse(self.element))

    def testparse(self):
        obj = self.h.parse(self.element)

        self.assertEqual('Pure Cu', str(obj))

        self.assertTrue(29 in obj.composition)
        self.assertAlmostEqual(1.0, obj.composition[29], 4)

        self.assertAlmostEqual(8.96, obj.density_kg_m3 / 1000.0, 4)

        self.assertAlmostEqual(50, obj.absorption_energy_eV[ELECTRON], 4)
        self.assertAlmostEqual(50, obj.absorption_energy_eV[PHOTON], 4)
        self.assertAlmostEqual(50, obj.absorption_energy_eV[POSITRON], 4)

        self.assertAlmostEqual(0.1, obj.elastic_scattering[0], 4)
        self.assertAlmostEqual(0.2, obj.elastic_scattering[1], 4)

        self.assertAlmostEqual(51.2, obj.cutoff_energy_inelastic_eV, 4)
        self.assertAlmostEqual(53.4, obj.cutoff_energy_bremsstrahlung_eV, 4)

        self.assertEqual(1, len(obj.interaction_forcings))
        if1 = list(obj.interaction_forcings)[0]
        self.assertIs(ELECTRON, if1.particle)
        self.assertIs(HARD_BREMSSTRAHLUNG_EMISSION, if1.collision)
        self.assertAlmostEqual(-4, if1.forcer, 6)
        self.assertAlmostEqual(0.1, if1.weight[0], 6)
        self.assertAlmostEqual(1.0, if1.weight[1], 6)

        self.assertAlmostEqual(123.456, obj.maximum_step_length_m, 4)

    def testcan_convert(self):
        self.assertTrue(self.h.can_convert(self.obj))

    def testconvert(self):
        element = self.h.convert(self.obj)

        self.assertEqual('Pure Cu', element.get('name'))

        children = element.find('composition')
        self.assertEqual(1, len(children))
        self.assertEqual(29, int(children[0].get('z')))

        self.assertAlmostEqual(8.96, float(element.get('density')) / 1000.0, 4)

        self.assertAlmostEqual(0.1, float(element.get('c1')), 4)
        self.assertAlmostEqual(0.2, float(element.get('c2')), 4)

        self.assertAlmostEqual(51.2, float(element.get('wcc')), 4)
        self.assertAlmostEqual(53.4, float(element.get('wcr')), 4)

        subelement = element.find('interactionForcing')
        self.assertEqual('electron', subelement.get('particle'))
        self.assertEqual('hard bremsstrahlung emission', subelement.get('collision'))
        self.assertAlmostEqual(-4.0, float(subelement.get('forcer')), 4)
        self.assertAlmostEqual(0.1, float(subelement.get('wlow')), 4)
        self.assertAlmostEqual(1.0, float(subelement.get('whigh')), 4)

        self.assertAlmostEqual(123.456, float(element.get('dsmax')), 4)