示例#1
0
    def set_result_settings(self, ui_values):
        result_settings_path = self.result_full_path / 'settings.json'
        settings_dict = Settings().load_settings(result_settings_path)
        original_result_settings = settings_dict.copy()

        settings_dict[self.min_freq_key] = ui_values[self.min_freq_key]
        settings_dict[self.max_freq_key] = ui_values[self.max_freq_key]
        settings_dict[self.frequency_resolution_multiplier_key] = ui_values[self.frequency_resolution_multiplier_key]
        settings_dict[self.weak_absorption_checkbox_key] = ui_values[self.weak_absorption_checkbox_key]

        return settings_dict, original_result_settings
示例#2
0
    def __init__(self):
        super().__init__()
        self.new_optimizer = None
        self.new_erf_setup = None

        self.queue = Queue()

        self.output_handlers = {}

        self.process_manager = ProcessManager()

        self.material_manager = ProjectMaterials()

        self.result_manager = Results()

        self.settings_module = Settings()

        self.queue_reader = QueueReader(self)

        previous_settings = self.settings_module.load_settings()
        tabs = Tabs(previous_settings, self.material_manager)

        window_layout = [[
            sg.TabGroup([[
                sg.Tab('Erf settings', tabs.get_tab1_layout()),
                sg.Tab('Material settings', tabs.get_tab2_layout()),
                sg.Tab('Optimization settings', tabs.get_tab3_layout()),
                sg.Tab('Saver settings', tabs.get_tab4_layout()),
                sg.Tab('Run', tabs.get_tab5_layout()),
                sg.Tab('Result', tabs.get_tab6_layout()),
                sg.Tab('Plots', tabs.get_tab7_layout()),
                sg.Tab('CST results', tabs.get_tab8_layout()),
                sg.Tab('Single waveplate', tabs.get_tab9_layout()),
            ]])
        ]]

        self.window = sg.Window('Waveplates',
                                window_layout,
                                default_element_size=(120, 120))

        self.plotter = Plot(self.window)
示例#3
0
 def __init__(self):
     try:
         modules_header()
         print('Modules:\n')
         print('\t1): Eagle Scripts')
         print('\t2): Settings')
         print('\n\tX): Exit\n')
         while True:
             menu_select = input(eagleshell_prefix).lower()
             if menu_select == '1':
                 from modules.scripts.scripts import Scripts
                 Scripts()
             elif menu_select == '2':
                 from modules.settings.settings import Settings
                 Settings()
             elif menu_select == 'x':
                 Exit()
             else:
                 print(invalid_input_prefix)
                 continue
     except KeyboardInterrupt:
         Exit()
示例#4
0
class WaveplateApp(DictKeys):
    def __init__(self):
        super().__init__()
        self.new_optimizer = None
        self.new_erf_setup = None

        self.queue = Queue()

        self.output_handlers = {}

        self.process_manager = ProcessManager()

        self.material_manager = ProjectMaterials()

        self.result_manager = Results()

        self.settings_module = Settings()

        self.queue_reader = QueueReader(self)

        previous_settings = self.settings_module.load_settings()
        tabs = Tabs(previous_settings, self.material_manager)

        window_layout = [[
            sg.TabGroup([[
                sg.Tab('Erf settings', tabs.get_tab1_layout()),
                sg.Tab('Material settings', tabs.get_tab2_layout()),
                sg.Tab('Optimization settings', tabs.get_tab3_layout()),
                sg.Tab('Saver settings', tabs.get_tab4_layout()),
                sg.Tab('Run', tabs.get_tab5_layout()),
                sg.Tab('Result', tabs.get_tab6_layout()),
                sg.Tab('Plots', tabs.get_tab7_layout()),
                sg.Tab('CST results', tabs.get_tab8_layout()),
                sg.Tab('Single waveplate', tabs.get_tab9_layout()),
            ]])
        ]]

        self.window = sg.Window('Waveplates',
                                window_layout,
                                default_element_size=(120, 120))

        self.plotter = Plot(self.window)

    # ---------------------------------------Erf. settings------------------------------------------------------------ #
    def add_material_to_list(self, ui_values):
        material_name = ui_values[self.new_material_name_key]
        material_path = ui_values[self.new_material_path_key]
        material = Material(material_name, material_path)

        self.material_manager.material_list.append(material)

        material.add_material_from_file()
        updated_material_list = [
            str(material) for material in self.material_manager.material_list
        ]
        self.window[self.material_drop_down_key].update(
            values=updated_material_list)
        self.window[self.fast_material_dropdown_key].update(
            values=updated_material_list)
        self.window[self.slow_material_dropdown_key].update(
            values=updated_material_list)

    def on_material_selection(self, ui_values):
        form_bf_drop_down_value = ui_values[self.material_drop_down_key]
        form_bf_material_object = self.material_manager.get_material(
            form_bf_drop_down_value)
        self.window[self.selected_material_data_path_key].update(
            form_bf_material_object.path)

        slow_material_drop_value = ui_values[self.slow_material_dropdown_key]
        slow_material_object = self.material_manager.get_material(
            slow_material_drop_value)
        self.window[self.selected_slow_material_data_path_key].update(
            slow_material_object.path)

        fast_material_drop_value = ui_values[self.fast_material_dropdown_key]
        fast_material_object = self.material_manager.get_material(
            fast_material_drop_value)
        self.window[self.selected_fast_material_data_path_key].update(
            fast_material_object.path)

    def new_initial_values(self, ui_values):
        initial_setup = InitPrep(ui_values)
        self.window[self.x0_angle_input_key].update(str(initial_setup.angles0))
        self.window[self.x0_widths_input_key].update(str(
            initial_setup.widths0))
        self.window[self.x0_stripes_input_key].update(
            str(initial_setup.stripes0))
        self.window[self.x_slicing_key].update(
            str(list(initial_setup.x_slices)))

    def load_default_settings(self, *args):
        default_settings_dict = self.settings_module.load_settings(
            self.settings_module.default_settings_file_name)
        self.set_window_element_values(default_settings_dict)

    def on_wp_cnt_change(self, ui_values):
        old_angle_lst = ui_values[self.const_angles_key]
        old_widths_lst = ui_values[self.const_widths_key]
        old_stripes_lst = ui_values[self.initial_stripe_widths_key]

        new_wp_cnt = ui_values[self.wp_cnt_key]
        old_wp_cnt = len(old_angle_lst)

        stripe_width_mat0 = ui_values[self.initial_stripe_widths_key][0][0]
        stripe_width_mat1 = ui_values[self.initial_stripe_widths_key][1][0]

        if new_wp_cnt >= old_wp_cnt:
            wp_cnt_diff = new_wp_cnt - old_wp_cnt
            new_angle_lst = old_angle_lst + [0] * wp_cnt_diff
            new_widths_lst = old_widths_lst + [0] * wp_cnt_diff
            new_stripes_lst_mat0 = old_stripes_lst[0] + [stripe_width_mat0
                                                         ] * wp_cnt_diff
            new_stripes_lst_mat1 = old_stripes_lst[1] + [stripe_width_mat1
                                                         ] * wp_cnt_diff
        else:
            new_angle_lst = old_angle_lst[:new_wp_cnt]
            new_widths_lst = old_widths_lst[:new_wp_cnt]
            new_stripes_lst_mat0 = old_stripes_lst[0][:new_wp_cnt]
            new_stripes_lst_mat1 = old_stripes_lst[1][:new_wp_cnt]

        if ui_values[self.wp_type_key] == 'mixed':
            new_angle_lst *= 2

        self.window[self.const_angles_key].update(cast_to_ui(new_angle_lst))
        self.window[self.const_widths_key].update(cast_to_ui(new_widths_lst))
        self.window[self.initial_stripe_widths_key].update(
            cast_to_ui([new_stripes_lst_mat0, new_stripes_lst_mat1]))
        self.window[self.width_pattern_key].update(
            cast_to_ui(list(range(1, new_wp_cnt + 1))))

    # ---------------------------------------Run tab------------------------------------------------------------------ #
    # uses current ui and 'Run once' frame values
    @check_values
    def run_once(self, ui_values):
        settings_for_single_run = self.settings_module.single_run_settings(
            ui_values)
        thread = StoppableThread(target=no_optimization,
                                 args=(settings_for_single_run, ui_values,
                                       self.queue))
        self.output_handlers['Single run'] = OutputHandler(
            settings_for_single_run, thread)

        thread.start()

    @check_values
    def discrete_bruteforce_optimization(self, ui_values):
        dbo_settings = self.settings_module.dbo_settings(ui_values)
        dbo_process = DBOProcess(target=make_discrete_bruteforce_optimizer,
                                 kwargs={
                                     'queue': self.queue,
                                     'settings': dbo_settings
                                 })
        self.process_manager.running_processes.append(dbo_process)
        self.update_process_list()
        dbo_process.start()

    #@check_values
    def new_optimization_process(self, ui_values):
        # save settings in case of crash (:
        self.settings_module.save_settings(ui_values)
        new_process = OptimizationProcess(target=make_optimizer,
                                          kwargs={
                                              'queue': self.queue,
                                              'settings': ui_values
                                          })
        self.output_handlers[new_process.name] = OutputHandler(
            ui_values, new_process)

        self.process_manager.running_processes.append(new_process)
        self.update_process_list()
        new_process.start()

    def stop_selected_process(self, *args):
        self.process_manager.stop_selected_process()
        self.update_process_list()

    def stop_all_processes(self, *args):
        self.process_manager.stop_all_processes()
        self.update_process_list()

    def update_process_list(self, *args):
        process_names = [
            str(process) for process in self.process_manager.running_processes
        ]
        self.window[self.process_list_key].update(process_names)

    def update_basic_info_frame(self):
        selected_process = self.process_manager.selected_process
        if not selected_process:
            return

        self.window[self.basic_info_tab_l0_key].update(
            'Wp cnt: ' + str(selected_process.task_info['wp_cnt']))
        self.window[self.basic_info_tab_l1_key].update(
            'Freq. pnts: ' + str(selected_process.task_info['freq_cnt']))
        self.window[self.basic_info_tab_l2_key].update(
            'Variable cnt: ' + str(selected_process.task_info['opt_params']))

    def on_process_selection(self, ui_values):
        if ui_values[self.process_list_key]:
            self.process_manager.set_selected_process(
                ui_values[self.process_list_key][0])
        else:
            return
        self.update_basic_info_frame()

    def update_info_frame(self, output):
        selected_process = self.process_manager.selected_process
        if not selected_process:
            return
        self.window[self.info_tab_l0_key].update(selected_process.name)

        if output.process_name == selected_process.name:
            self.window[self.info_tab_l1_key].update('Iter cnt: ' +
                                                     str(output.iter_cnt))
            if not (output.iter_cnt % 10):
                now = time.time()
                selected_process.iter_speed = 10 / (
                    now - selected_process.previous_iteration_time)
                selected_process.previous_iteration_time = now
            self.window[self.info_tab_l2_key].update(
                f'{np.round(selected_process.iter_speed, 2)} iterations / s')
            self.window[self.info_tab_l3_key].update(
                'Best min: ' + str(np.round(selected_process.best_result, 5)))

    def update_dbo_info_frame(self, output):
        self.window[self.dbo_task_info_tab_l0_key].update(
            'Iter cnt: ' + str(output['iter_cnt']))
        self.window[self.dbo_task_info_tab_l1_key].update('F: ' +
                                                          str(output['f']))

    def update_job_progress(self, output):
        task_cnt, total_tasks, best_f = output['task_cnt'], output[
            'total_task_cnt'], output['best_f']

        cur_combination = output['cur_combination']
        self.window[self.dbo_current_combination_key].update(
            f'Current combination: {cur_combination}')

        self.window[self.dbo_job_info_tab_l0_key].update(
            f'Best F: {round(best_f, 5)}')

        self.window[self.dbo_progressbar_key].update(task_cnt, total_tasks)
        s = f'Task: {task_cnt}/{total_tasks}, ({round(100*task_cnt/total_tasks, 1)} %)'
        self.window[self.dbo_job_progress_text_field_key].update(s)

    @check_values
    def optimizer_test(self, ui_values):
        test_settings = ui_values.copy()
        test_settings[self.iterations_key] = 5
        make_optimizer(queue=self.queue, settings=test_settings)

    def clear_outputwindow(self, *args):
        self.window['_output_'].update('')

    # ---------------------------------------Result tab--------------------------------------------------------------- #
    def set_selected_result_settings(self, *args):
        if self.result_manager.result_selected:
            selected_result_settings_dict = self.result_manager.selected_result.result_settings
            self.set_window_element_values(selected_result_settings_dict)

    def update_folder_list(self, *args):
        folder_names = self.result_manager.dir_names()
        self.window[self.folder_list_key].update(folder_names)

    def update_result_list(self, ui_values):
        selected_folders = ui_values[self.folder_list_key]
        if selected_folders:
            result_folder_names = self.result_manager.result_names(
                selected_folders[0])
            self.window[self.result_list_key].update(result_folder_names)

    def on_folder_selection(self, ui_values):
        self.update_result_list(ui_values)

    def on_result_selection(self, ui_values):
        if ui_values[self.result_list_key]:
            self.result_manager.set_selected_result(ui_values)
            self.plotter.result = self.result_manager.selected_result
            self.update_result_frames(ui_values)

    def update_result_frames(self, ui_values):
        # two frames: Primary values and final stokes vector with parameters
        values = self.result_manager.result_info_frame_values()
        self.window[self.result_info_l0_key].update(values['f'])
        self.window[self.result_info_l1_key].update(values['angles'])
        self.window[self.result_info_l2_key].update(values['widths'])
        self.window[self.result_info_l3_key].update(values['stripes'])
        self.window[self.selected_result_total_width_key].update(
            values['total_width'])

        self.update_stokes_frame(ui_values)

    def update_stokes_frame(self, ui_values):
        selected_frequency_str = ui_values[self.selected_frequency_key]
        if selected_frequency_str and self.result_manager.result_selected:
            selected_frequency = np.float(selected_frequency_str) * THz

            # return if selected frequency is out of data range
            if selected_frequency < np.min(
                    self.result_manager.selected_result.erf_setup.frequencies):
                return

            s_final_str, j_final_str, str1, str2 = self.result_manager.get_final_state_info(
                selected_frequency)

            self.window[self.stokes_vector_key].update(s_final_str)
            self.window[self.jones_vector_key].update(j_final_str)
            self.window[self.stokes_parameters_key1].update(str1)
            self.window[self.stokes_parameters_key2].update(str2)

            # shows the closest frequency to the selected one
            actual_frequency = np.round(
                self.result_manager.selected_result.actual_selected_frequency *
                Hz_to_THz, 3)[0]
            self.window[self.actual_frequency_key].update(actual_frequency)

    def show_erf_settings(self, *args):
        if self.result_manager.result_selected:
            dict_str = self.result_manager.key_group_to_string('erf_settings')
            sg.PopupNoWait(dict_str, title='Erf. settings')
        else:
            sg.PopupNoWait('No result selected')

    def show_optimizer_settings(self, *args):
        if self.result_manager.result_selected:
            dict_str = self.result_manager.key_group_to_string(
                'optimizer_settings')
            sg.PopupNoWait(dict_str, title='Optimizer settings')
        else:
            sg.PopupNoWait('No result selected')

    def show_saver_settings(self, *args):
        if self.result_manager.result_selected:
            dict_str = self.result_manager.key_group_to_string(
                'saver_settings')
            sg.PopupNoWait(dict_str, title='Saver settings')
        else:
            sg.PopupNoWait('No result selected')

    def show_material_settings(self, *args):
        if self.result_manager.result_selected:
            dict_str = self.result_manager.key_group_to_string('material')
            sg.PopupNoWait(dict_str, title='Material settings')
        else:
            sg.PopupNoWait('No result selected')

    def plot_selected_result(self, ui_values):
        if self.result_manager.result_selected:
            if ui_values[self.plot_in_cst_key]:
                target_figure = 'CST'
            else:
                target_figure = 'Result plot'
            self.plotter.result_plot(target_figure=target_figure)

    def plot_phase_selected_result(self, *args):
        if self.result_manager.result_selected:
            target_figure = 'Phase shift plot'
            self.plotter.phase_shift_plot(target_figure=target_figure)

    def fix_old_settings(self, *args):
        self.settings_module.fix_old_settings()

    # ---------------------------------------Plot tab----------------------------------------------------------------- #
    def plot_birefringence(self, ui_values):
        if self.result_manager.result_selected:
            self.plotter.birefringence_plot(ui_values)

    def plot_refractive_indices(self, ui_values):
        if self.result_manager.result_selected:
            self.plotter.refractive_index_plot(ui_values)

    def plot_x_with_error(self, ui_values):
        if self.result_manager.result_selected:
            self.plotter.error_plot(ui_values)

    def plot_x_without_error(self, *args):
        if self.result_manager.result_selected:
            self.plotter.result_plot(target_figure='Error plot')

    def update_error_sliders(self, ui_values):
        self.window[self.angle_err_slider_key].update(
            range=(ui_values['min_angle_error_input'],
                   ui_values['max_angle_error_input']))
        self.window[self.width_err_slider_key].update(
            range=(ui_values['min_width_error_input'],
                   ui_values['max_width_error_input']))
        self.window[self.stripe_err_slider_key].update(
            range=(ui_values['min_stripe_error_input'],
                   ui_values['max_stripe_error_input']))

    def polar_plot(self, ui_values):
        if self.result_manager.result_selected:
            self.plotter.polar_plot(ui_values)

    # ---------------------------------------CST tab------------------------------------------------------------------ #
    def update_cst_folder_listbox(self, *args):
        cst_folders = self.result_manager.get_cst_folder_names()
        self.window[self.cst_folders_key].update(cst_folders)

    def on_cst_folder_list_selection(self, ui_values):
        selected_folder = ui_values[self.cst_folders_key][0]
        cst_file_names = self.result_manager.get_cst_result_file_names(
            selected_folder)
        self.window[self.cst_file_list_key].update(cst_file_names)

    def on_cst_file_list_selection(self, ui_values):
        if ui_values[self.cst_file_list_key]:
            self.result_manager.set_selected_cst_result(ui_values)
            self.plotter.cst_result = self.result_manager.selected_cst_result

    def plot_cst_results(self, ui_values):
        if self.plotter.cst_result:
            self.plotter.cst_plot(ui_values)

    # ---------------------------------------Single WP---------------------------------------------------------------- #

    @check_values
    def single_wp_plot_intensities(self, ui_values):
        new_single_wp = SingleWaveplate(ui_values)
        new_single_wp.single_wp_intensity_plot()

    @check_values
    def single_wp_plot_refractive_indices(self, ui_values):
        new_single_wp = SingleWaveplate(ui_values)
        new_single_wp.single_wp_refractive_indices_plot()

    @check_values
    def calculate_zeroth_order_widths(self, ui_values):
        freq_input = ui_values[self.zeroth_order_freq_input_key]
        if not freq_input:
            return
        freq_input = np.float(freq_input) * GHz
        new_single_wp = SingleWaveplate(ui_values)
        l2_width, l4_width = new_single_wp.calculate_zeroth_order_width(
            freq_input)
        self.window[self.zeroth_order_width_result_l2_input_key].update(
            str(np.round(l2_width * m_to_um, 2)))
        self.window[self.zeroth_order_width_result_l4_input_key].update(
            str(np.round(l4_width * m_to_um, 2)))

    def set_window_element_values(self, settings_dict):
        for key in settings_dict:
            try:
                value = settings_dict[key]
                if isinstance(value, type(list())):
                    value = str(value)
                self.window[key].update(value)
            except KeyError:
                continue

    def exit(self, *args):
        if last_ui_values:
            self.settings_module.save_settings(last_ui_values)
        self.queue_reader.stop()
        self.window.close()

    # do things
    def event_map(self, event, ui_values):
        if event.label == 'error_sliders':
            try:
                self.update_error_sliders(ui_values)
            except _tkinter.TclError:
                return
        if event.label == 'material':
            self.on_material_selection(ui_values)

        binds = {
            # tab1
            self.wp_cnt_key:
            self.on_wp_cnt_change,
            self.wp_type_key:
            self.on_wp_cnt_change,
            self.new_x0_key:
            self.new_initial_values,
            self.set_default_settings_button_key:
            self.load_default_settings,
            # tab2
            self.add_material_button_key:
            self.add_material_to_list,
            # tab3
            # tab4
            # tab5
            self.start_process_button_key:
            self.new_optimization_process,
            self.stop_process_button_key:
            self.stop_selected_process,
            self.stop_all_processes_button_key:
            self.stop_all_processes,
            self.process_list_key:
            self.on_process_selection,
            self.run_once_button_key:
            self.run_once,
            self.optimizer_test_button_key:
            self.optimizer_test,
            self.dbo_start_job_button_key:
            self.discrete_bruteforce_optimization,
            self.clear_output_button_key:
            self.clear_outputwindow,

            # tab6
            self.update_result_list_button_key:
            self.update_result_list,
            self.update_folder_list_button_key:
            self.update_folder_list,
            self.folder_list_key:
            self.on_folder_selection,
            self.result_list_key:
            self.on_result_selection,
            self.plot_selected_result_button_key:
            self.plot_selected_result,
            self.plot_phase_selected_result_button_key:
            self.plot_phase_selected_result,
            self.erf_settings_key:
            self.show_erf_settings,
            self.optimizer_settings_key:
            self.show_optimizer_settings,
            self.saver_settings_key:
            self.show_saver_settings,
            self.material_settings_key:
            self.show_material_settings,
            self.set_selected_result_settings_button_key:
            self.set_selected_result_settings,
            self.selected_frequency_key:
            self.update_stokes_frame,
            self.fix_old_settings_button_key:
            self.fix_old_settings,
            # tab7
            self.plot_error_button_key:
            self.plot_x_with_error,
            self.plot_birefringence_button_key:
            self.plot_birefringence,
            self.plot_refractive_indices_button_key:
            self.plot_refractive_indices,
            self.plot_without_error_key:
            self.plot_x_without_error,
            self.polar_plot_button_key:
            self.polar_plot,
            # tab8
            self.update_cst_list_button_key:
            self.update_cst_folder_listbox,
            self.plot_cst_selections_button_key:
            self.plot_cst_results,
            self.cst_folders_key:
            self.on_cst_folder_list_selection,
            self.cst_file_list_key:
            self.on_cst_file_list_selection,
            # tab9
            self.single_wp_intensity_plot_button_key:
            self.single_wp_plot_intensities,
            self.single_wp_refractive_indices_plot_button_key:
            self.single_wp_plot_refractive_indices,
            self.calculate_zeroth_order_width_button_key:
            self.calculate_zeroth_order_widths,
        }

        try:
            try:
                binds[event](ui_values)
            # all elements trigger event but some are just ui settings (no direct function)
            except KeyError:
                pass
        except Exception as e:
            error_popup(e)
示例#5
0
    dir_path_1 = saved_results_dir / dir_1

    dir_2 = Path(
        r'SLE_l2_longrun_restarts/5wp_0.65-2.2THz_250-850um_22-32-10_OptimizationProcess-1'
    )
    dir_path_2 = saved_results_dir / dir_2

    dir_3_fp = Path(r'fp_results/fp_l2')
    dir_3_fp = saved_results_dir / dir_3_fp

    dir_4_ghz = Path(r'MUT_1H1_QWP_IntOpt_/GHz_QWP_MUT1_12-44-09_Thread-3')
    dir_path_ghz = saved_results_dir / dir_4_ghz

    dir_path = dir_path_ghz

    settings_dict = Settings().load_settings(dir_path / 'settings.json')

    settings_dict[keys.frequency_resolution_multiplier_key] = 1
    settings_dict[keys.min_freq_key] = 0.05
    settings_dict[keys.max_freq_key] = 0.15
    settings_dict[keys.weak_absorption_checkbox_key] = False
    settings_dict[keys.calculation_method_key] = 'Jones'
    settings_dict[keys.anisotropy_p_key] = 1
    settings_dict[keys.anisotropy_s_key] = 1
    settings_dict[keys.const_widths_key] = [0] * int(
        settings_dict[keys.wp_cnt_key])
    #settings_dict[keys.x_slicing_key] = [[0,4], [4,8], [8,16]]

    erf_setup = ErfSetup(settings_dict)

    angles_ = np.load(dir_path / 'angles.npy')
示例#6
0
        t_max_stripe = bool(
            np.all(x[self.stripe_slice[0]:self.stripe_slice[1]] <=
                   self.x_stripe_max))

        return (t_max_angle and t_min_angle) and (
            t_min_width and t_max_width) and (t_min_stripe and t_max_stripe)


if __name__ == '__main__':
    from modules.settings.settings import Settings
    from erf_setup_v21 import ErfSetup
    import time
    from modules.identifiers.dict_keys import DictKeys

    settings_path = 'modules/results/archived/14-10-2020/18-24-27_OptimizationProcess-1/settings.json'
    settings_module = Settings()
    settings = settings_module.load_settings(settings_path)
    settings[DictKeys().calculation_method_key] = 'Jones'
    erf_setup = ErfSetup(settings)

    erf = erf_setup.erf

    iterations = 500

    np.seterr(all='ignore')
    x0 = np.ones(12) * 10**-6
    start_time = time.time()

    func = lambda x: np.sum(x**2)

    res = basinhopping(erf, x0, niter=iterations)
示例#7
0
from modules.settings.settings import Settings
from modules.identifiers.dict_keys import DictKeys
from modules.utils.calculations import calc_final_jones_intensities
keys = DictKeys()

# r'/home/alex/Desktop/Projects/SimsV2_1/modules/results/saved_results/SLE_l2_const_widths_dbo5/5wp_0.35-1.9THz_best_of_112-12-14_OptimizationProcess-3'
# r'E:\CURPROJECT\SimsV2_1\modules\results\saved_results\SLE_l2_const_widths_dbo5\5wp_0.35-1.9THz_best_of_112-12-14_OptimizationProcess-3'
base_path = Path(
    r'/home/alex/Desktop/Projects/SimsV2_1/modules/results/saved_results/SLE_l2_const_widths_dbo5/5wp_0.35-1.9THz_best_of_112-12-14_OptimizationProcess-3'
)

# r'E:\CURPROJECT\SimsV2_1\modules\cst\cst_results\SLE_l2_sent2hermans\SLE_l2_sent2hermans_4eck.txt'
# r'/home/alex/Desktop/Projects/SimsV2_1/modules/cst/cst_results/SLE_l2_sent2hermans/SLE_l2_sent2hermans_4eck.txt'
cst_path = r'/home/alex/Desktop/Projects/SimsV2_1/modules/cst/cst_results/SLE_l2_sent2hermans/SLE_l2_sent2hermans_4eck.txt'
cst_path = r'/home/alex/Desktop/Projects/SimsV2_1/modules/cst/cst_results/SLE_l2_sent2hermans/SLE_l2_sent2hermans_4eck_lowres.txt'
settings_module = Settings()
erf_settings = settings_module.load_settings(base_path / 'settings.json')

erf_settings[keys.frequency_resolution_multiplier_key] = 1
erf_settings[keys.min_freq_key] = 0.4
erf_settings[keys.max_freq_key] = 2.0
erf_settings[keys.weak_absorption_checkbox_key] = False
erf_settings[keys.calculation_method_key] = 'Jones'
erf_settings[keys.anisotropy_p_key] = 1
erf_settings[keys.anisotropy_s_key] = 1
erf_settings[keys.const_widths_key] = [0] * int(erf_settings[keys.wp_cnt_key])
erf_settings[keys.x_slicing_key] = [[0, 5], [5, 10], [10, 20]]

erf_setup = ErfSetup(erf_settings)
angles = np.load(base_path / 'angles.npy')
widths = np.load(base_path / 'widths.npy')
示例#8
0
 def save_settings(self):
     Settings().save_settings(self.settings, self.save_folder / 'settings.json')
示例#9
0
import itertools
from erf_setup_v21 import ErfSetup
from modules.utils.constants import *
import matplotlib.pyplot as plt

d_lst = np.array([520, 515, 495, 330, 310, 830, 635, 320])

from modules.settings.settings import Settings

path = '/home/alex/Desktop/Projects/SimsV2_1/modules/results/saved_results/fp_results_quartz_l4/fp_quartz_l4_12-27-02_Thread-3/settings.json'
settings_dict = Settings().load_settings(path)
erf_setup = ErfSetup(settings_dict)
erf = erf_setup.erf

angles = np.deg2rad([116.1, 236.6, 215.4, 195.0, 187.2])
d = np.array([290.0, 390.0, 430.0, 470.0, 500.0]) * um
stripes = np.array([49.0, 42.0]) * um

x0 = np.concatenate((angles, d, stripes))

frequencies = erf_setup.frequencies * Hz_to_THz
res0 = erf(x0)
int_x0, int_y0 = erf_setup.int_x, erf_setup.int_y
print(d)
print(res0)
print()
best_val = np.inf
best_combo = None
index_of_best = None
combinations = list(itertools.combinations(d_lst, 5))
for i, combination in enumerate(combinations):