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)
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())
def import_cas(self, options, fileobj): # Read cas casfile = File() casfile.readFromFileObject(fileobj) simdata = casfile.getResultsFirstSimulation() return self._run_importers(options, simdata)
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)
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
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)
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)
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)