コード例 #1
0
 def testconvert(self):
     handler = Casino2ProgramSeriesHandler()
     program = Casino2Program(number_trajectories=500)
     s = self.convert_serieshandler(handler, program)
     self.assertEqual(8, len(s))
     self.assertEqual(program.name, s['program'])
     self.assertEqual(500, s['number of trajectories'])
コード例 #2
0
def options():
    program = Casino2Program(number_trajectories=50)
    beam = GaussianBeam(15e3, 10e-9)
    sample = SubstrateSample(Material.pure(29))
    detector = PhotonDetector("xray", math.radians(40.0))
    analyses = [PhotonIntensityAnalysis(detector)]
    tags = ["basic", "test"]
    return Options(program, beam, sample, analyses, tags)
コード例 #3
0
def _has_casino2():
    try:
        program = Casino2Program()
        program.executable  # Raise RuntimeError
    except ProgramNotFound:
        return False

    return True
コード例 #4
0
    def setUp(self):
        super().setUp()

        self.tmpdir = self.create_temp_dir()

        self.e = Casino2Exporter()

        self.options = self.create_basic_options()
        self.options.program = Casino2Program()
コード例 #5
0
    def setUp(self):
        super().setUp()

        self.token = Token()
        self.outputdir = self.create_temp_dir()

        self.options = self.create_basic_options()
        self.options.program = Casino2Program()
        self.options.program.number_trajectories = 50

        self.worker = Casino2Worker()
コード例 #6
0
    def __init__(self, model):
        super().__init__(model)

        self.field_number_trajectories = NumberTrajectoriesField()
        self.addLabelField(self.field_number_trajectories)

        default_program = Casino2Program()

        self.field_elastic_cross_section_model = ElasticCrossSectionModelField()
        for model in ELASTIC_CROSS_SECTION_MODEL_LOOKUP:
            checked = model == default_program.elastic_cross_section_model
            self.field_elastic_cross_section_model.addModel(model, checked)
        self.addGroupField(self.field_elastic_cross_section_model)

        self.field_ionization_cross_section_model = IonizationCrossSectionModelField()
        for model in IONIZATION_CROSS_SECTION_MODEL_LOOKUP:
            checked = model == default_program.ionization_cross_section_model
            self.field_ionization_cross_section_model.addModel(model, checked)
        self.addGroupField(self.field_ionization_cross_section_model)

        self.field_ionization_potential_model = IonizationPotentialModelField()
        for model in IONIZATION_POTENTIAL_MODEL_LOOKUP:
            checked = model == default_program.ionization_potential_model
            self.field_ionization_potential_model.addModel(model, checked)
        self.addGroupField(self.field_ionization_potential_model)

        self.field_random_number_generator_model = RandomNumberGeneratorModelField()
        for model in RANDOM_NUMBER_GENERATOR_MODEL_LOOKUP:
            checked = model == default_program.random_number_generator_model
            self.field_random_number_generator_model.addModel(model, checked)
        self.addGroupField(self.field_random_number_generator_model)

        self.field_direction_cosine_model = DirectionCosineModelField()
        for model in DIRECTION_COSINES_MODEL_LOOKUP:
            checked = model == default_program.direction_cosine_model
            self.field_direction_cosine_model.addModel(model, checked)
        self.addGroupField(self.field_direction_cosine_model)

        self.field_energy_loss_model = EnergyLossModelField()
        for model in ENERGY_LOSS_MODEL_LOOKUP:
            checked = model == default_program.energy_loss_model
            self.field_energy_loss_model.addModel(model, checked)
        self.addGroupField(self.field_energy_loss_model)
コード例 #7
0
def program():
    return Casino2Program()
コード例 #8
0
    def setUp(self):
        super().setUp()

        self.program = Casino2Program()
コード例 #9
0
 def testconvert(self):
     handler = Casino2ProgramDocumentHandler()
     program = Casino2Program(number_trajectories=500)
     document = self.convert_documenthandler(handler, program)
     self.assertEqual(5, self.count_document_nodes(document))
コード例 #10
0
def create_program(num_of_trajectory = 5000):
    program = Casino2Program(num_of_trajectory if num_of_trajectory > 2000 else NUM_OF_ELECTRON) # minimum 2000 trajectories
    return program
コード例 #11
0
 def testconvert_parse(self):
     handler = Casino2ProgramHDF5Handler()
     program = Casino2Program(number_trajectories=500)
     program2 = self.convert_parse_hdf5handler(handler, program)
     self.assertEqual(program2, program)
コード例 #12
0
def main(argv=None):
    options_builder = OptionsBuilder()

    program = Casino2Program()
    program.number_trajectories = 1000
    options_builder.add_program(program)

    beam_builder = GaussianBeamBuilder()
    beam_builder.add_energy_eV(15e3)
    beam_builder.add_diameter_m(10e-9)
    beam_builder.add_linescan_x(-1e-07, 1e-07, 5e-08)
    beams = beam_builder.build()
    print("beams", beams)
    options_builder.beams.extend(beams)

    mat1 = Material.pure(26)
    mat2 = Material.pure(14)
    sample = VerticalLayerSample(mat1, mat2)
    options_builder.add_sample(sample)

    photon_detector = PhotonDetector("xray", math.radians(35.0))
    # analysis = KRatioAnalysis(photon_detector)
    analysis = PhotonIntensityAnalysis(photon_detector)
    options_builder.add_analysis(analysis)

    list_options = options_builder.build()

    # Run simulation
    project = Project()

    # for options in opt:

    with LocalSimulationRunner(project, max_workers=3) as runner:
        futures = runner.submit(*list_options)

        print("{} simulations launched".format(len(futures)))

        while not runner.wait(1):
            print(runner.progress)

            print("{} simulations succeeded".format(runner.done_count))
            print("{} simulations failed".format(runner.failed_count))
            for future in runner.failed_futures:
                print(future.exception())

    # Results
    project.recalculate()
    print("{} were simulated".format(len(project.simulations)))

    ################################################################################################
    ###                           Ab hier wird es relevant                                       ###
    ################################################################################################

    # Hier werden die Ergebnisse gespeichert
    data_all = []

    for simulation in project.simulations:
        # results = simulation.results
        position = simulation.options.beam.x0_m

        for unkresult in simulation.find_result(EmittedPhotonIntensityResult):

            for xrayline, unkintensity in unkresult.items():
                # z = xrayline.atomic_number
                data = unkintensity.nominal_value
                data_all.append((xrayline, position, data))

    results = {}

    # Zu jeder simulierten Röntgenlinie wird der Datensatz in einem Dictionary gespeichert
    for x, p, d in data_all:
        if not x in results:
            results[x] = []
        results[x].append((p, d))

    # Sortiere Werte und gebe sie aus
    sorted_results = []
    for k, v in results.items():
        v.sort(key=lambda t: t[0])
        print("{}\t{}".format(k, v))
        print(v)
        plot_results(k, v)
        sorted_results.append((k, v))

    return sorted_results
    print(sorted_results)