示例#1
0
    def _read_options(self, group):
        source = BytesIO(group.attrs['options'])
        element = etree.parse(source).getroot()

        reader = OptionsReader()
        reader.parse(element)
        return reader.get()
示例#2
0
    def setUp(self):
        unittest.TestCase.setUp(self)

        self.reader = OptionsReader()

        etree.register_namespace('mc', 'http://pymontecarlo.sf.net')
        source = BytesIO(b'<mc:options xmlns:mc="http://pymontecarlo.sf.net" name="Test" uuid="51d62e0261f2449eb41a74e4cb4501e0" version="6"><programs><program>dummy</program></programs><beam><mc:pencilBeam aperture="0.0" energy="1234.0" particle="electron"><origin x="0.0" y="0.0" z="1.0" /><direction u="0.0" v="0.0" w="-1.0" /></mc:pencilBeam></beam><geometry><mc:substrate rotation="0.0" tilt="0.0"><materials><mc:material _index="1" density="19300.0" name="Gold"><composition><element weightFraction="1.0" z="79" /></composition></mc:material></materials><body material="1" /></mc:substrate></geometry><detectors><mc:backscatteredElectronEnergyDetector _key="bse"><channels>1000</channels><limits lower="0.0" upper="1234.0" /></mc:backscatteredElectronEnergyDetector></detectors><limits><mc:showersLimit showers="5678" /></limits><models><mc:model name="Rutherford" type="elastic cross section" /></models></mc:options>')
        self.element = etree.parse(source).getroot()
示例#3
0
class TestOptionsReader(unittest.TestCase):

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

        self.reader = OptionsReader()

        etree.register_namespace('mc', 'http://pymontecarlo.sf.net')
        source = BytesIO(b'<mc:options xmlns:mc="http://pymontecarlo.sf.net" name="Test" uuid="51d62e0261f2449eb41a74e4cb4501e0" version="6"><programs><program>dummy</program></programs><beam><mc:pencilBeam aperture="0.0" energy="1234.0" particle="electron"><origin x="0.0" y="0.0" z="1.0" /><direction u="0.0" v="0.0" w="-1.0" /></mc:pencilBeam></beam><geometry><mc:substrate rotation="0.0" tilt="0.0"><materials><mc:material _index="1" density="19300.0" name="Gold"><composition><element weightFraction="1.0" z="79" /></composition></mc:material></materials><body material="1" /></mc:substrate></geometry><detectors><mc:backscatteredElectronEnergyDetector _key="bse"><channels>1000</channels><limits lower="0.0" upper="1234.0" /></mc:backscatteredElectronEnergyDetector></detectors><limits><mc:showersLimit showers="5678" /></limits><models><mc:model name="Rutherford" type="elastic cross section" /></models></mc:options>')
        self.element = etree.parse(source).getroot()

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

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

    def testparse(self):
        self.reader.parse(self.element)
        obj = self.reader.get()

        self.assertEqual("Test", obj.name)
        self.assertEqual('51d62e0261f2449eb41a74e4cb4501e0', obj.uuid)

        self.assertEqual(1, len(obj.programs))
        self.assertEqual('dummy', list(obj.programs.aliases())[0])

        self.assertAlmostEqual(1234, obj.beam.energy_eV, 4)

        self.assertEqual(1, len(obj.detectors))
        det = obj.detectors['bse']
        self.assertAlmostEqual(0, det.limits_eV[0], 4)
        self.assertAlmostEqual(1234, det.limits_eV[1], 4)
        self.assertEqual(1000, det.channels)

        self.assertEqual(1, len(obj.limits))
        limits = list(obj.limits.iterclass(ShowersLimit))
        self.assertEqual(1, len(limits))
        self.assertEqual(5678, limits[0].showers)

        self.assertEqual(1, len(obj.models))
        models = list(obj.models.iterclass(ELASTIC_CROSS_SECTION))
        self.assertEqual(1, len(models))
        self.assertEqual(ELASTIC_CROSS_SECTION.rutherford, models[0])
示例#4
0
def append(results, filepath):
    with FileLock(filepath), h5py.File(filepath, 'r+') as hdf5file:
        # Check UUID of base options
        source = BytesIO(hdf5file.attrs['options'])
        reader = OptionsReader()
        reader.read(source)
        options = reader.get()

        if options.uuid != results.options.uuid:
            raise ValueError('UUID of base options do not match: %s != %s' % \
                             (options.uuid, results.options.uuid))

        # Save results
        identifiers = np.array(hdf5file.attrs['identifiers'], 'U').tolist()
        for container in results:
            identifier = container.options.uuid
            identifiers.append(identifier)

            group = hdf5file.create_group('result-' + identifier)

            # Save each result
            for key, result in container.items():
                subgroup = group.create_group(key)
                handler = find_convert_handler('pymontecarlo.fileformat.results.result',
                                               result, subgroup)
                handler.convert(result, subgroup)

            # Save options
            writer = OptionsWriter()
            writer.convert(container.options)
            element = writer.get()
            group.attrs['options'] = etree.tostring(element)

        # Update identifiers
        del hdf5file.attrs['identifiers']
        hdf5file.attrs.create('identifiers', identifiers,
                              dtype=h5py.special_dtype(vlen=str))
示例#5
0
 def fromelement(cls, element):
     from pymontecarlo.fileformat.options.options import OptionsReader
     reader = OptionsReader()
     reader.parse(element)
     return reader.get()
示例#6
0
 def read(cls, source):
     from pymontecarlo.fileformat.options.options import OptionsReader
     reader = OptionsReader()
     reader.read(source)
     return reader.get()