Esempio n. 1
0
    def setUp(self):
        TestCase.setUp(self)

        self.geo = PenelopeGeometry('Test Geometry')

        surface1 = zplane(1e-10)
        surface2 = zplane(-1e-3)
        surface3 = cylinder(1e-2)
        surface4 = xplane(0.0)

        mat1 = PenelopeMaterial.pure(29)
        self.module1 = Module(self.geo, mat1)
        self.module1.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module1.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface4, SIDEPOINTER_POSITIVE)
        self.geo.modules.add(self.module1)

        mat2 = PenelopeMaterial.pure(30)
        self.module2 = Module(self.geo, mat2)
        self.module2.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module2.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module2.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module2.add_module(self.module1)
        self.geo.modules.add(self.module2)

        self.geo.tilt_rad = radians(45)
    def setUp(self):
        TestCase.setUp(self)

        self.geo = PenelopeGeometry('Test Geometry')

        surface1 = zplane(1e-10)
        surface2 = zplane(-1e-3)
        surface3 = cylinder(1e-2)
        surface4 = xplane(0.0)

        mat1 = PenelopeMaterial.pure(29)
        self.module1 = Module(self.geo, mat1)
        self.module1.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module1.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface4, SIDEPOINTER_POSITIVE)
        self.geo.modules.add(self.module1)

        mat2 = PenelopeMaterial.pure(30)
        self.module2 = Module(self.geo, mat2)
        self.module2.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module2.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module2.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module2.add_module(self.module1)
        self.geo.modules.add(self.module2)

        self.geo.tilt_rad = radians(45)
Esempio n. 3
0
    def export_geometry(self, geometry, outputdir):
        """
        Exports geometry to a *geo* file and all materials to *mat* files.

        :arg geometry: :geometry object

        :arg outputdir: full path to a directory where the files will be saved.
            Note that any conflicting files will be overwritten without warnings.

        :return: a :class:`tuple` and a list of :class:`tuple`.
            The class:`tuple` contains 2 items: the :class:`PenelopeGeometry`
            object used to create the *geo* file and the full path of this
            *geo* file.
            Each :class:`tuple` in the list contains 2 items: the
            :class:`PenelopeMaterial` object and its associated *mat* filepath.
            The order of the materials is the same as they appear in the
            geometry file.
            In other words, the first material has an index of 1 in the
            geometry file.
        """
        # Save geometry
        title = geometry.__class__.__name__.lower()
        pengeom = PenelopeGeometry(title)
        pengeom.tilt_rad = geometry.tilt_rad
        pengeom.rotation_rad = geometry.rotation_rad

        self._export_geometry(geometry, pengeom)

        lines = pengeom.to_geo()
        geofilepath = os.path.join(outputdir, title + ".geo")
        with open(geofilepath, 'w') as f:
            for line in lines:
                f.write(line + '\n')

        # Save materials
        matinfos = []
        for material in pengeom.get_materials():
            if material is VACUUM: continue
            index = material._index

            filepath = os.path.join(outputdir, 'mat%i.mat' % index)

            penmaterial.create(material.name, dict(material.composition),
                               material.density_kg_m3, filepath,
                               self._pendbase_dir)

            matinfos.append((material, filepath))

        return (pengeom, geofilepath), matinfos
class TestPenelopeGeometry(TestCase):
    GEOFILE = ['XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
               '       Test Geometry',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'SURFACE (   1) Plane Z=0.00 m',
               'INDICES=( 0, 0, 0, 1, 0)',
               'X-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               'Y-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(+1.000000000000000E-08,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'SURFACE (   2) Cylinder of radius 0.01 m along z-axis',
               'INDICES=( 1, 1, 0, 0,-1)',
               'X-SCALE=(+1.000000000000000E-02,   0)              (DEFAULT=1.0)',
               'Y-SCALE=(+1.000000000000000E-02,   0)              (DEFAULT=1.0)',
               'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'SURFACE (   3) Plane Z=-0.00 m',
               'INDICES=( 0, 0, 0, 1, 0)',
               'X-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               'Y-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(-1.000000000000000E-01,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'SURFACE (   4) Plane X=0.00 m',
               'INDICES=( 0, 0, 0, 1, 0)',
               'X-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               'Y-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
               '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+9.000000000000000E+01,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'MODULE  (   1) ',
               'MATERIAL(   1)',
               'SURFACE (   1), SIDE POINTER=(-1)',
               'SURFACE (   2), SIDE POINTER=(-1)',
               'SURFACE (   3), SIDE POINTER=( 1)',
               'SURFACE (   4), SIDE POINTER=( 1)',
               '1111111111111111111111111111111111111111111111111111111111111111',
               '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'MODULE  (   2) ',
               'MATERIAL(   2)',
               'SURFACE (   1), SIDE POINTER=(-1)',
               'SURFACE (   2), SIDE POINTER=(-1)',
               'SURFACE (   3), SIDE POINTER=( 1)',
               'MODULE  (   1)',
               '1111111111111111111111111111111111111111111111111111111111111111',
               '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'MODULE  (   3) Extra module for rotation and tilt',
               'MATERIAL(   0)',
               'MODULE  (   2)',
               '1111111111111111111111111111111111111111111111111111111111111111',
               '  OMEGA=(+2.700000000000000E+02,   0) DEG          (DEFAULT=0.0)',
               '  THETA=(+4.500000000000000E+01,   0) DEG          (DEFAULT=0.0)',
               '    PHI=(+9.000000000000000E+01,   0) DEG          (DEFAULT=0.0)',
               'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
               '0000000000000000000000000000000000000000000000000000000000000000',
               'END      0000000000000000000000000000000000000000000000000000000']

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

        self.geo = PenelopeGeometry('Test Geometry')

        surface1 = zplane(1e-10)
        surface2 = zplane(-1e-3)
        surface3 = cylinder(1e-2)
        surface4 = xplane(0.0)

        mat1 = PenelopeMaterial.pure(29)
        self.module1 = Module(self.geo, mat1)
        self.module1.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module1.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface4, SIDEPOINTER_POSITIVE)
        self.geo.modules.add(self.module1)

        mat2 = PenelopeMaterial.pure(30)
        self.module2 = Module(self.geo, mat2)
        self.module2.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module2.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module2.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module2.add_module(self.module1)
        self.geo.modules.add(self.module2)

        self.geo.tilt_rad = radians(45)

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

    def testskeleton(self):
        self.assertEqual('Test Geometry', self.geo.title)
        self.assertAlmostEqual(radians(45), self.geo.tilt_rad, 4)
        self.assertAlmostEqual(0.0, self.geo.rotation_rad, 4)
        self.assertEqual(2, len(self.geo.get_bodies()))
        self.assertEqual(2, len(self.geo.modules))
        self.assertEqual(4, len(self.geo.get_surfaces()))
        self.assertEqual(2, len(self.geo.get_materials()))

    def testto_geo(self):
        lines = self.geo.to_geo()
        self.assertEqual(self.GEOFILE[:3], lines[:3])
        self.assertEqual(self.GEOFILE[14], lines[14])
        self.assertEqual(self.GEOFILE[26], lines[26])
        self.assertEqual(self.GEOFILE[38], lines[38])
        self.assertEqual(self.GEOFILE[50], lines[50])
        self.assertEqual(self.GEOFILE[51], lines[51])
        self.assertEqual(self.GEOFILE[57:65], lines[57:65])
        self.assertEqual(self.GEOFILE[65], lines[65])
        self.assertEqual(self.GEOFILE[71:], lines[71:])
Esempio n. 5
0
class TestPenelopeGeometry(TestCase):
    GEOFILE = [
        'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
        '       Test Geometry',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'SURFACE (   1) Plane Z=0.00 m', 'INDICES=( 0, 0, 0, 1, 0)',
        'X-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        'Y-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(+1.000000000000000E-08,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'SURFACE (   2) Cylinder of radius 0.01 m along z-axis',
        'INDICES=( 1, 1, 0, 0,-1)',
        'X-SCALE=(+1.000000000000000E-02,   0)              (DEFAULT=1.0)',
        'Y-SCALE=(+1.000000000000000E-02,   0)              (DEFAULT=1.0)',
        'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'SURFACE (   3) Plane Z=-0.00 m', 'INDICES=( 0, 0, 0, 1, 0)',
        'X-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        'Y-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(-1.000000000000000E-01,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'SURFACE (   4) Plane X=0.00 m', 'INDICES=( 0, 0, 0, 1, 0)',
        'X-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        'Y-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        'Z-SCALE=(+1.000000000000000E+00,   0)              (DEFAULT=1.0)',
        '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+9.000000000000000E+01,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'MODULE  (   1) ', 'MATERIAL(   1)',
        'SURFACE (   1), SIDE POINTER=(-1)',
        'SURFACE (   2), SIDE POINTER=(-1)',
        'SURFACE (   3), SIDE POINTER=( 1)',
        'SURFACE (   4), SIDE POINTER=( 1)',
        '1111111111111111111111111111111111111111111111111111111111111111',
        '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'MODULE  (   2) ', 'MATERIAL(   2)',
        'SURFACE (   1), SIDE POINTER=(-1)',
        'SURFACE (   2), SIDE POINTER=(-1)',
        'SURFACE (   3), SIDE POINTER=( 1)', 'MODULE  (   1)',
        '1111111111111111111111111111111111111111111111111111111111111111',
        '  OMEGA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+0.000000000000000E+00,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'MODULE  (   3) Extra module for rotation and tilt', 'MATERIAL(   0)',
        'MODULE  (   2)',
        '1111111111111111111111111111111111111111111111111111111111111111',
        '  OMEGA=(+2.700000000000000E+02,   0) DEG          (DEFAULT=0.0)',
        '  THETA=(+4.500000000000000E+01,   0) DEG          (DEFAULT=0.0)',
        '    PHI=(+9.000000000000000E+01,   0) DEG          (DEFAULT=0.0)',
        'X-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Y-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        'Z-SHIFT=(+0.000000000000000E+00,   0)              (DEFAULT=0.0)',
        '0000000000000000000000000000000000000000000000000000000000000000',
        'END      0000000000000000000000000000000000000000000000000000000'
    ]

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

        self.geo = PenelopeGeometry('Test Geometry')

        surface1 = zplane(1e-10)
        surface2 = zplane(-1e-3)
        surface3 = cylinder(1e-2)
        surface4 = xplane(0.0)

        mat1 = PenelopeMaterial.pure(29)
        self.module1 = Module(self.geo, mat1)
        self.module1.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module1.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module1.add_surface(surface4, SIDEPOINTER_POSITIVE)
        self.geo.modules.add(self.module1)

        mat2 = PenelopeMaterial.pure(30)
        self.module2 = Module(self.geo, mat2)
        self.module2.add_surface(surface1, SIDEPOINTER_NEGATIVE)
        self.module2.add_surface(surface2, SIDEPOINTER_POSITIVE)
        self.module2.add_surface(surface3, SIDEPOINTER_NEGATIVE)
        self.module2.add_module(self.module1)
        self.geo.modules.add(self.module2)

        self.geo.tilt_rad = radians(45)

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

    def testskeleton(self):
        self.assertEqual('Test Geometry', self.geo.title)
        self.assertAlmostEqual(radians(45), self.geo.tilt_rad, 4)
        self.assertAlmostEqual(0.0, self.geo.rotation_rad, 4)
        self.assertEqual(2, len(self.geo.get_bodies()))
        self.assertEqual(2, len(self.geo.modules))
        self.assertEqual(4, len(self.geo.get_surfaces()))
        self.assertEqual(2, len(self.geo.get_materials()))

    def testto_geo(self):
        lines = self.geo.to_geo()
        self.assertEqual(self.GEOFILE[:3], lines[:3])
        self.assertEqual(self.GEOFILE[14], lines[14])
        self.assertEqual(self.GEOFILE[26], lines[26])
        self.assertEqual(self.GEOFILE[38], lines[38])
        self.assertEqual(self.GEOFILE[50], lines[50])
        self.assertEqual(self.GEOFILE[51], lines[51])
        self.assertEqual(self.GEOFILE[57:65], lines[57:65])
        self.assertEqual(self.GEOFILE[65], lines[65])
        self.assertEqual(self.GEOFILE[71:], lines[71:])