Exemplo n.º 1
0
    def testexport(self):
        # Export
        self.e.export(self.options, self.tmpdir)

        # Test
        filepaths = glob.glob(os.path.join(self.tmpdir, '*.sim'))
        self.assertEqual(1, len(filepaths))

        casfile = File()
        casfile.readFromFilepath(filepaths[0])
        simdata = casfile.getOptionSimulationData()
        simops = simdata.getSimulationOptions()
        regionops = simdata.getRegionOptions()

        self.assertAlmostEqual(self.options.beam.energy_keV,
                               simops.getIncidentEnergy_keV(0), 4)
        self.assertAlmostEqual(2.7947137 * self.options.beam.diameter_m * 1e9 /
                               2.0, simops.Beam_Diameter, 4)  # FWHM
        self.assertAlmostEqual(0.0, simops._positionStart_nm, 4)

        self.assertEqual(1, regionops.getNumberRegions())
        region = regionops.getRegion(0)
        elements = list(map(operator.attrgetter('Z'), region.getElements()))
        self.assertAlmostEqual(self.options.sample.material.density_g_per_cm3,
                               region.Rho, 4)
        self.assertEqual('Copper', region.Name)
        self.assertEqual(1, len(elements))
        self.assertTrue(29 in elements)

        self.assertEqual(self.options.program.number_trajectories,
                         simops.getNumberElectrons())

        self.assertTrue(simops.FEmissionRX)
Exemplo n.º 2
0
    def testexport_models(self):
        # Options
        self.options.program.elastic_cross_section_model = ElasticCrossSectionModel.MOTT_DROUIN1993
        self.options.program.ionization_cross_section_model = IonizationCrossSectionModel.GRYZINSKY
        self.options.program.ionization_potential_model = IonizationPotentialModel.HOVINGTON
        self.options.program.random_number_generator_model = RandomNumberGeneratorModel.MERSENNE
        self.options.program.direction_cosine_model = DirectionCosineModel.SOUM1979

        # Export
        self.e.export(self.options, self.tmpdir)

        # Test
        filepaths = glob.glob(os.path.join(self.tmpdir, '*.sim'))
        self.assertEqual(1, len(filepaths))

        casfile = File()
        casfile.readFromFilepath(filepaths[0])
        simdata = casfile.getOptionSimulationData()
        simops = simdata.getSimulationOptions()

        self.assertEqual(CROSS_SECTION_MOTT_EQUATION,
                         simops.getTotalElectronElasticCrossSection())
        self.assertEqual(CROSS_SECTION_MOTT_EQUATION,
                         simops.getPartialElectronElasticCrossSection())
        self.assertEqual(IONIZATION_CROSS_SECTION_GRYZINSKI,
                         simops.getIonizationCrossSectionType())
        self.assertEqual(IONIZATION_POTENTIAL_HOVINGTON,
                         simops.getIonizationPotentialType())
        self.assertEqual(DIRECTION_COSINES_SOUM, simops.getDirectionCosines())
        self.assertEqual(ENERGY_LOSS_JOY_LUO, simops.getEnergyLossType())
        self.assertEqual(RANDOM_NUMBER_GENERATOR_MERSENNE_TWISTER,
                         simops.getRandomNumberGeneratorType())
Exemplo n.º 3
0
    def import_cas(self, options, fileobj):
        # Read cas
        casfile = File()
        casfile.readFromFileObject(fileobj)

        simdata = casfile.getResultsFirstSimulation()

        return self._run_importers(options, simdata)
Exemplo n.º 4
0
    def _import(self, options, dirpath, errors):
        filepath = os.path.join(dirpath, self.DEFAULT_CAS_FILENAME)

        casfile = File()
        with open(filepath, 'rb') as fileobj:
            casfile.readFromFileObject(fileobj)

        simdata = casfile.getResultsFirstSimulation()

        return self._run_importers(options, dirpath, errors, simdata)
Exemplo n.º 5
0
    def export_cas(self, options):
        casfile = File()

        # Load template (from geometry)
        fileobj = self._get_sim_template(options)
        casfile.readFromFileObject(fileobj)

        simdata = casfile.getOptionSimulationData()
        simops = simdata.getSimulationOptions()

        self._run_exporters(options, simdata, simops)

        return casfile
Exemplo n.º 6
0
    def testexport_multilayers2(self):
        # Options
        mat1 = Material('Mat1', {79: 0.5, 47: 0.5}, 2.0)
        mat2 = Material('Mat2', {29: 0.5, 30: 0.5}, 3.0)
        mat3 = Material('Mat3', {13: 0.5, 14: 0.5}, 4.0)

        sample = HorizontalLayerSample()
        sample.add_layer(mat1, 15e-9)
        sample.add_layer(mat2, 25e-9)
        sample.add_layer(mat3, 55e-9)
        self.options.sample = sample

        # Export
        self.e.export(self.options, self.tmpdir)

        # Test
        filepaths = glob.glob(os.path.join(self.tmpdir, '*.sim'))
        self.assertEqual(1, len(filepaths))

        casfile = File()
        casfile.readFromFilepath(filepaths[0])
        simdata = casfile.getOptionSimulationData()
        regionops = simdata.getRegionOptions()

        self.assertEqual(3, regionops.getNumberRegions())

        region = regionops.getRegion(0)
        elements = list(map(operator.attrgetter('Z'), region.getElements()))
        self.assertAlmostEqual(mat1.density_kg_per_m3 / 1000.0, region.Rho, 4)
        self.assertEqual('Mat1', region.Name)
        self.assertEqual(2, len(elements))
        self.assertTrue(79 in elements)
        self.assertTrue(47 in elements)

        region = regionops.getRegion(1)
        elements = list(map(operator.attrgetter('Z'), region.getElements()))
        self.assertAlmostEqual(mat2.density_kg_per_m3 / 1000.0, region.Rho, 4)
        self.assertEqual('Mat2', region.Name)
        self.assertEqual(2, len(elements))
        self.assertTrue(29 in elements)
        self.assertTrue(30 in elements)

        region = regionops.getRegion(2)
        elements = list(map(operator.attrgetter('Z'), region.getElements()))
        self.assertAlmostEqual(mat3.density_kg_per_m3 / 1000.0, region.Rho, 4)
        self.assertEqual('Mat3', region.Name)
        self.assertEqual(2, len(elements))
        self.assertTrue(13 in elements)
        self.assertTrue(14 in elements)
Exemplo n.º 7
0
    def _export(self, options, dirpath, errors):
        casfile = File()

        # Load template (from geometry)
        fileobj = self._get_sim_template(options.sample, errors)
        if fileobj is None:
            return
        casfile.readFromFileObject(fileobj)

        # Run exporters
        simdata = casfile.getOptionSimulationData()
        simops = simdata.getSimulationOptions()
        self._run_exporters(options, errors, simdata, simops)

        # Write to disk
        filepath = os.path.join(dirpath, self.DEFAULT_SIM_FILENAME)
        casfile.write(filepath)
Exemplo n.º 8
0
    async def _export(self, options, dirpath, erracc, dry_run=False):
        casfile = File()

        # Load template (from geometry)
        fileobj = self._get_sim_template(options.sample, erracc)
        if fileobj is not None:
            casfile.readFromFileObject(fileobj)

        # Run exporters
        simdata = casfile.getOptionSimulationData()
        simops = simdata.getSimulationOptions()
        if simdata is None or simops is None:
            erracc.add_exception(IOError("Could not open .sim template file"))

        self._run_exporters(options, erracc, simdata, simops)

        # Write to disk
        if not dry_run:
            filepath = os.path.join(dirpath, self.DEFAULT_SIM_FILENAME)
            casfile.write(filepath)