Exemple #1
0
    def __init__(self, measurement, icon_manager, tab, statusbar=None):
        """Inits TofeHistogramWidget widget.

        Args:
            measurement: A measurement class object.
            icon_manager: An iconmanager class object.
            tab: A MeasurementTabWidget.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_histogram_widget.ui", self)

        self.measurement = measurement
        self.tab = tab
        self.statusbar = statusbar
        self.matplotlib = MatplotlibHistogramWidget(self, measurement,
                                                    icon_manager,
                                                    statusbar=statusbar)
        self.saveCutsButton.clicked.connect(self.matplotlib.save_cuts)
        self.loadSelectionsButton.clicked.connect(
            self.matplotlib.load_selections)
        self.matplotlib.selectionsChanged.connect(self.set_cut_button_enabled)

        self.matplotlib.saveCuts.connect(self.__save_cuts)

        self.__set_shortcuts()
        self.set_cut_button_enabled(measurement.selector.selections)

        count = len(self.measurement.data)
        self.setWindowTitle(f"ToF-E Histogram - Event count: {count}")
Exemple #2
0
    def __init__(self, target):
        """
        Initialize the dialog.

        Args:
            target: Target object.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_target_info.ui", self)

        self.target = target

        self.okPushButton.clicked.connect(self.__accept_settings)
        self.cancelPushButton.clicked.connect(self.close)

        self.fields_are_valid = False
        iv.set_input_field_red(self.nameLineEdit)
        self.nameLineEdit.textChanged.connect(
            lambda: iv.check_text(self.nameLineEdit, qwidget=self))
        self.nameLineEdit.textEdited.connect(
            lambda: iv.sanitize_file_name(self.nameLineEdit))
        self.nameLineEdit.setEnabled(False)

        self.name = ""
        self.nameLineEdit.setText(target.name)
        self.descriptionLineEdit.setPlainText(target.description)
        self.description = ""
        self.isOk = False

        self.dateLabel.setText(time.strftime("%c %z %Z", time.localtime(
            target.modification_time)))

        self.__close = True

        self.exec_()
Exemple #3
0
    def __init__(
            self,
            request: Request,
            tab_id: int,
            simulation: Simulation,
            icon_manager: IconManager,
            statusbar: Optional[QtWidgets.QStatusBar] = None):
        """ Init simulation tab class.
        
        Args:
            request: Request that has the simulation object.
            tab_id: An integer representing ID of the tab widget.
            simulation: A simulation class object.
            icon_manager: An icon manager class object.
            statusbar: A QtGui.QMainWindow's QStatusBar.
        """
        super().__init__(simulation, tab_id, icon_manager, statusbar)
        uic.loadUi(gutils.get_ui_dir() / "ui_simulation_tab.ui", self)

        self.request = request

        self.simulation_target = None
        self.energy_spectrum_widgets = []
        self.optimization_result_widget = None

        df.set_up_side_panel(self, "simu_panel_shown", "right")

        self.openSettingsButton.clicked.connect(self.__open_settings)
        self.optimizeButton.clicked.connect(self.__open_optimization_dialog)
        BaseTab.check_default_settings(self)
    def __init__(self, element_simulation, tab):
        """
        Initializes the dialog.

        Args:
            element_simulation: An ElementSimulation object.
            tab: A SimulationTabWidget.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_specific_settings.ui", self)
        self.setWindowTitle("Element Settings")

        self.element_simulation = element_simulation
        self.tab = tab

        preset_folder = gutils.get_preset_dir(
            self.element_simulation.simulation.request.global_settings)
        self.sim_widget = SimulationSettingsWidget(
            self.element_simulation, preset_folder=preset_folder)
        self.tabs.addTab(self.sim_widget, "Element Settings")
        self.tabs.setEnabled(True)
        self.tabs.setTabBarAutoHide(True)
        screen_geometry = QDesktopWidget \
            .availableGeometry(QApplication.desktop())
        self.resize(int(self.geometry().width() * 1.2),
                    int(screen_geometry.size().height() * 0.8))

        self.OKButton.clicked.connect(self.update_settings_and_close)
        self.applyButton.clicked.connect(self.update_settings)
        self.cancelButton.clicked.connect(self.close)
        self.defaultSettingsCheckBox.stateChanged.connect(self.toggle_settings)

        self.__original_property_values = {}
        self.use_default_settings = self.element_simulation.use_default_settings
Exemple #5
0
    def __init__(self, parent):
        """Inits ToF-E graph histogram graph settings dialog.
        
        Args:
            parent: MatplotlibHistogramWidget which settings are being changed.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_tofe_graph_settings.ui", self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        self.parent = parent

        gutils.set_min_max_handlers(self.spin_range_x_min,
                                    self.spin_range_x_max)
        gutils.set_min_max_handlers(self.spin_range_y_min,
                                    self.spin_range_y_max)

        self.parent.show_yourself(self)

        # Connect and show
        self.OKButton.clicked.connect(self.accept_settings)
        self.cancelButton.clicked.connect(self.close)
        self.radio_range_manual.clicked.connect(
            lambda: self.toggle_manual(True))
        self.radio_range_auto.clicked.connect(
            lambda: self.toggle_manual(False))

        if self.radio_range_auto.isChecked():
            self.toggle_manual(False)

        elif self.radio_range_manual.isChecked():
            self.toggle_manual(True)

        self.exec_()
Exemple #6
0
 def __init__(self, dialog, cut, tof_calibration, detector: Detector,
              bin_width: float, column: int, run: Run):
     """Initializes widget.
     
     Args:
         dialog: Parent dialog.
         cut: CutFile class object.
         tof_calibration: TOFCalibration class object.
         detector: Detector object
         bin_width: Float representing histogram's bin width.
         column: Integer representing which column number is used.
         run: Run object.
     """
     super().__init__()
     uic.loadUi(gutils.get_ui_dir() / "ui_tof_curve_fitting_widget.ui",
                self)
     # NOTE: One of these should always be there. Could probably use "else"
     if hasattr(dialog.parent_settings_widget, "request"):
         self.img_dir = dialog.parent_settings_widget.request.directory
     elif hasattr(dialog.parent_settings_widget, "measurement") and \
             dialog.parent_settings_widget.measurement is not None:
         self.img_dir = dialog.parent_settings_widget.measurement.directory
     self.matplotlib = MatplotlibCalibrationCurveFittingWidget(
         self, detector, tof_calibration, cut, run, bin_width, column,
         dialog)
    def __init__(self, clipboard_ratio):
        """
        Initializes the dialog.

        Args:
            clipboard_ratio: Text that is in clipboard.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_multiply_coordinate_dialog.ui",
                   self)

        self.ratio_str = clipboard_ratio
        self.used_multiplier = None

        locale = QLocale.c()
        self.multiplierSpinBox.setLocale(locale)

        try:
            float(self.ratio_str)

            self.ratioLabel.setText(self.ratio_str)
        except ValueError:
            self.ratioLabel.setText("None")
            self.ratioLabel.setEnabled(False)
            self.clipboardButton.setChecked(False)
            self.clipboardButton.setEnabled(False)

            self.customButton.setChecked(True)
            self.multiplierSpinBox.setEnabled(True)

        self.clipboardButton.clicked.connect(self.switch_to_clipboard_value)
        self.customButton.clicked.connect(self.switch_to_custom_value)
        self.okButton.clicked.connect(self.accept_params)
        self.cancelButton.clicked.connect(self.close)
        self.exec_()
Exemple #8
0
    def __init__(self, request: Request, icon_manager: IconManager,
                 statusbar: QtWidgets.QStatusBar, parent: "Potku"):
        """Init binary measurement import dialog.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_import_dialog_binary.ui", self)

        self.request = request
        self.__icon_manager = icon_manager
        self.__statusbar = statusbar
        self.parent = parent
        self.__global_settings = self.parent.settings
        self.imported = False
        self.files_added = {}  # Dictionary of files to be imported.
        
        self.button_import.clicked.connect(self.__import_files) 
        self.button_cancel.clicked.connect(self.close) 
        self.button_addimport.clicked.connect(self.__add_file)
        
        remove_file = QtWidgets.QAction("Remove selected files",
                                        self.treeWidget)
        remove_file.triggered.connect(self.__remove_selected)
        self.treeWidget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu)
        self.treeWidget.addAction(remove_file)
        
        self.exec_()
Exemple #9
0
    def __init__(self,
                 element_simulation: ElementSimulation,
                 cut_file_name: str,
                 target: Target,
                 ct: Optional[CancellationToken] = None):
        """
        Initialize the widget.
        """
        # TODO make a common base class for result widgets
        # TODO change the push button to radio group
        super().__init__()
        GUIObserver.__init__(self)
        uic.loadUi(gutils.get_ui_dir() / "ui_optimization_results_widget.ui",
                   self)

        self.element_simulation = element_simulation
        _, run, _ = self.element_simulation.get_mcerd_params()

        self.setWindowTitle(f"Optimization Results: "
                            f"{element_simulation.get_main_recoil().element}"
                            f" - {cut_file_name} - fluence: {run.fluence:e}")

        self.recoil_atoms = RecoilAtomOptimizationWidget(self,
                                                         element_simulation,
                                                         target,
                                                         ct=ct)
        self.pareto_front = RecoilAtomParetoFront(self)

        self.recoil_atoms.results_accepted.connect(self.results_accepted.emit)
        self.rb_group_optim.buttonToggled.connect(self.switch_widget)
    def __init__(self, settings: GlobalSettings):
        """Constructor for the program
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_global_settings.ui", self)

        self.settings = settings
        self.__added_timings = {}  # Placeholder for timings
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        gutils.set_min_max_handlers(
            self.spin_tofe_bin_x_min, self.spin_tofe_bin_x_max
        )
        gutils.set_min_max_handlers(
            self.spin_tofe_bin_y_min, self.spin_tofe_bin_y_max
        )
        gutils.set_btn_group_data(self.ion_division_radios, IonDivision)
        gutils.set_btn_group_data(self.cross_section_radios, CrossSection)
        gutils.fill_combobox(self.combo_tofe_colors, ToFEColorScheme)

        # Connect UI buttons
        self.OKButton.clicked.connect(self.__accept_changes)
        self.cancelButton.clicked.connect(self.close)
        buttons = self.findChild(QtWidgets.QButtonGroup, "elementButtons")
        buttons.buttonClicked.connect(self.__change_element_color)

        self.min_conc_spinbox.setLocale(QtCore.QLocale.c())

        if platform.system() == "Darwin":
            self.gridLayout.setVerticalSpacing(15)
            self.gridLayout.setHorizontalSpacing(15)

        self.__set_values()
Exemple #11
0
    def __init__(self,
                 tab_id: int,
                 measurement: Measurement,
                 icon_manager: IconManager,
                 statusbar: Optional[QtWidgets.QStatusBar] = None):
        """Init measurement tab class.
        Args:
            tab_id: An integer representing ID of the tabwidget.
            measurement: A measurement class object.
            icon_manager: An iconmanager class object.
            statusbar: A QtGui.QMainWindow's QStatusBar.
        """
        super().__init__(measurement, tab_id, icon_manager, statusbar)
        uic.loadUi(gutils.get_ui_dir() / "ui_measurement_tab.ui", self)

        # Various widgets that are shown in the tab. These will be populated
        # using the load_data method
        self.histogram = None
        self.elemental_losses_widget = None
        self.energy_spectrum_widget = None
        self.depth_profile_widget = None

        self.saveCutsButton.clicked.connect(self.measurement_save_cuts)
        self.analyzeElementLossesButton.clicked.connect(
            self.open_element_losses)
        self.energySpectrumButton.clicked.connect(self.open_energy_spectrum)
        self.createDepthProfileButton.clicked.connect(self.open_depth_profile)
        self.command_master.clicked.connect(self.__master_issue_commands)
        self.openSettingsButton.clicked.connect(self.__open_settings)

        df.set_up_side_panel(self, "mesu_panel_shown", "right")

        # Enable master button
        self.toggle_master_button()
        self.set_icons()
Exemple #12
0
    def __init__(self, elements: List[Element], ignored_graph: Set[Element],
                 ignored_ratio: Set[Element]):
        """Init the dialog.
        
        Args:
            elements: A list of elements in Depth Profile.
            ignored_graph: A list of elements ignored previously for the graph.
            ignored_ratio: A list of elements ignored previously for ratio
                calculation.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_depth_profile_ignored.ui", self)

        self._elements = sorted(set(elements))
        self.button_ok.clicked.connect(self.accept)
        self.button_cancel.clicked.connect(self.reject)

        # Fill the trees
        gutils.fill_tree(self.tree_elements.invisibleRootItem(),
                         self._elements)
        gutils.fill_tree(self.tree_ratio.invisibleRootItem(), self._elements)

        self.included_in_graph = set(elem for elem in self._elements
                                     if elem not in ignored_graph)
        self.included_in_ratio = set(elem for elem in self._elements
                                     if elem not in ignored_ratio)
    def __init__(self, recoil_atom_distribution):
        """Inits simulation element selection dialog.
        """
        super().__init__()
        uic.loadUi(
            gutils.get_ui_dir() / "ui_recoil_element_selection_dialog.ui",
            self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
        self.recoil_atom_distribution = recoil_atom_distribution

        # TODO just use element, no isotope reference is needed
        self.element = None
        self.isotope = None
        self.color = None
        self.tmp_element = None
        self.colormap = self.recoil_atom_distribution.colormap

        # Setup connections
        self.element_button.clicked.connect(self.__change_element)
        self.isotope_radio.toggled.connect(self.__toggle_isotope)

        self.OKButton.clicked.connect(self.__accept_settings)
        self.cancelButton.clicked.connect(self.close)
        self.colorPushButton.clicked.connect(self.__change_color)

        self.isotopeInfoLabel.setVisible(False)

        self.isOk = False

        self.setMinimumWidth(350)

        if platform.system() == "Darwin":
            self.isotope_combobox.setFixedHeight(23)

        self.exec_()
Exemple #14
0
    def __init__(self,
                 element_simulation: ElementSimulation,
                 recoil_dist_widget,
                 recoil_name_changed=None,
                 settings_updated=None,
                 ion_division=IonDivision.BOTH,
                 min_presim_ions=0,
                 min_sim_ions=0):
        """
        Initializes a SimulationControlsWidget.

        Args:
             element_simulation: An ElementSimulation class object.
             recoil_dist_widget: RecoilAtomDistributionWidget.
             recoil_name_changed: signal that indicates that a recoil name
                has changed.
            ion_division: ion division mode
        """
        super().__init__()
        GUIObserver.__init__(self)
        uic.loadUi(gutils.get_ui_dir() / "ui_simulation_controls.ui", self)

        self.element_simulation = element_simulation
        self.element_simulation.subscribe(self)
        self.recoil_dist_widget = recoil_dist_widget
        self.progress_bars = {}

        self.recoil_name = \
            self.element_simulation.get_main_recoil().get_full_name()
        self.show_status(self.element_simulation.get_current_status())
        self.finished_processes = 0, self.process_count

        self.run_button.clicked.connect(self.start_simulation)
        self.run_button.setIcon(icons.get_reinhardt_icon("player_play.svg"))
        self.stop_button.clicked.connect(self.stop_simulation)
        self.stop_button.setIcon(icons.get_reinhardt_icon("player_stop.svg"))
        self.enable_buttons()

        self.mcerd_error_lbl.hide()
        self.ion_settings_label.hide()

        self.__unsub = None

        self._ion_division = ion_division
        self._min_presim_ions = min_presim_ions
        self._min_sim_ions = min_sim_ions
        self.show_ion_settings_label()

        self.processes_spinbox.valueChanged.connect(
            self.show_ion_settings_label)
        self._recoil_name_changed = recoil_name_changed
        if self._recoil_name_changed is not None:
            self._recoil_name_changed.connect(self._set_name)

        self._settings_updated = settings_updated
        if self._settings_updated is not None:
            self._settings_updated.connect(self.settings_update_handler)
            self._settings_updated[GlobalSettings].connect(
                self.settings_update_handler)
Exemple #15
0
    def __init__(self, simulation: Simulation, parent):
        """Initializes an OptimizationDialog that displays various optimization
        parameters.

        Args:
            simulation: a Simulation object
            parent: a SimulationTabWidget
        """
        super().__init__()
        self.simulation = simulation
        self.tab = parent
        self.current_mode = OptimizationType.RECOIL

        uic.loadUi(gutils.get_ui_dir() / "ui_optimization_params.ui", self)

        self.recoil_widget = OptimizationRecoilParameterWidget()
        self.fluence_widget = OptimizationFluenceParameterWidget()

        self.load_properties_from_file()

        locale = QLocale.c()
        self.histogramTicksDoubleSpinBox.setLocale(locale)

        self.pushButton_OK.setEnabled(False)

        self.pushButton_Cancel.clicked.connect(self.close)
        self.pushButton_OK.clicked.connect(self.start_optimization)

        self.radios = QtWidgets.QButtonGroup(self)
        self.radios.buttonToggled[QtWidgets.QAbstractButton, bool].connect(
            self.choose_optimization_mode)
        self.parametersLayout.addWidget(self.recoil_widget)
        self.parametersLayout.addWidget(self.fluence_widget)
        self.fluence_widget.hide()

        self.radios.addButton(self.fluenceRadioButton)
        self.radios.addButton(self.recoilRadioButton)

        gutils.fill_tree(
            self.simulationTreeWidget.invisibleRootItem(),
            simulation.element_simulations,
            text_func=lambda elem_sim: elem_sim.get_full_name())

        self.simulationTreeWidget.itemSelectionChanged.connect(
            self._enable_ok_button)
        self.simulationTreeWidget.itemSelectionChanged.connect(
            self._adjust_x)
        self.auto_adjust_x_box.clicked.connect(self._adjust_x)

        self._fill_measurement_widget()

        self.measurementTreeWidget.itemSelectionChanged.connect(
            self._enable_ok_button)
        self.verbose = False
        self.eff_file_check_box.clicked.connect(self._enable_efficiency_label)
        # self.optimization_verbose_box.clicked.connect(self._verbose)
        self._update_efficiency_label()

        self.exec_()
Exemple #16
0
    def __init__(self, tmp_foils, tmp_index, icon_manager):
        """ Initializes the Foil Dialog.
        Args:
            tmp_foils: Foil object list.
            tmp_index: Index of the Foil object in tmp_foils.
            icon_manager: Icon manager for TargetCompositionWidget.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_composition_dialog.ui", self)

        self.icon_manager = icon_manager
        self.foils = tmp_foils
        self.index = tmp_index
        self.tmp_foil = copy.deepcopy(tmp_foils[tmp_index])
        self.foil_type = None
        self.foil_type_changed = False

        # Add foil types to combobox.
        self.typeComboBox.addItem("circular")
        self.typeComboBox.addItem("rectangular")

        self.dimension_edits = []
        self.first_dimension_edit = QtWidgets.QDoubleSpinBox()
        self.first_dimension_edit.setMinimum(0.01)
        self.first_dimension_edit.setMaximumWidth(9999.99)
        self.first_dimension_edit.setMaximumWidth(70)
        self.locale = QLocale.c()
        self.first_dimension_edit.setLocale(self.locale)
        self.second_dimension_edit = None
        self.dimension_label = QtWidgets.QLabel("Diameter (mm):")

        self.transmissionEdit.setLocale(self.locale)

        self.dimension_edits.append(self.first_dimension_edit)
        self.dimensionLayout.addWidget(self.dimension_label)
        self.dimensionLayout.addWidget(self.dimension_edits[0])

        self.fields_are_valid = False
        iv.set_input_field_red(self.nameEdit)
        self.nameEdit.textChanged.connect(
            lambda: iv.check_text(self.nameEdit, qwidget=self))
        self.nameEdit.textEdited.connect(
            lambda: iv.sanitize_file_name(self.nameEdit))

        self.show_parameters()

        # This widget adds itself into the matplotlib_layout
        self.composition = FoilCompositionWidget(self, self.tmp_foil,
                                                 self.icon_manager)

        self.typeComboBox.currentIndexChanged.connect(self._change_dimensions)

        self.cancelButton.clicked.connect(self.close)
        self.okButton.clicked.connect(self._save_foil_info_and_close)

        self.__close = True

        self.exec_()
Exemple #17
0
    def __init__(self, recoil_element: RecoilElement, colormap,
                 element_simulation: ElementSimulation):
        """Inits a recoil info dialog.

        Args:
            recoil_element: A RecoilElement object.
            colormap: Colormap for elements.
            element_simulation: Element simulation that has the recoil element.
        """
        super().__init__()
        self.recoil_element = recoil_element
        self.element_simulation = element_simulation

        self.tmp_color = QColor(self.recoil_element.color)
        self.colormap = colormap

        value = self.recoil_element.reference_density
        self.scientific_spinbox = ScientificSpinBox(value=value,
                                                    minimum=0.01,
                                                    maximum=9.99e23)

        uic.loadUi(gutils.get_ui_dir() / "ui_recoil_info_dialog.ui", self)

        self.okPushButton.clicked.connect(self.__accept_settings)
        self.cancelPushButton.clicked.connect(self.close)
        self.colorPushButton.clicked.connect(self.__change_color)

        self.fields_are_valid = True
        iv.set_input_field_red(self.nameLineEdit)
        self.nameLineEdit.textChanged.connect(
            lambda: iv.check_text(self.nameLineEdit, qwidget=self))
        self.nameLineEdit.textEdited.connect(self.__validate)

        self.name = recoil_element.name
        self.description = recoil_element.description
        self.formLayout.insertRow(
            4, QtWidgets.QLabel(r"Reference density [at./cm<sup>3</sup>]:"),
            self.scientific_spinbox)
        self.formLayout.removeRow(self.widget)

        self.description = recoil_element.description
        self.isOk = False

        self.dateLabel.setText(
            time.strftime(
                "%c %z %Z",
                time.localtime(self.recoil_element.modification_time)))

        title = f"Recoil element: " \
                f"{self.recoil_element.element.get_prefix()}"

        self.infoGroupBox.setTitle(title)

        self.__set_color_button_color(self.recoil_element.element.symbol)

        self.exec_()
Exemple #18
0
    def __init__(self,
                 parent: BaseTab,
                 measurement: Measurement,
                 global_settings: GlobalSettings,
                 statusbar: Optional[QtWidgets.QStatusBar] = None):
        """Inits depth profile dialog.
        
        Args:
            parent: a MeasurementTabWidget.
            measurement: a Measurement object
            global_settings: a GlobalSettings object
            statusbar: a QStatusBar object
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_depth_profile_params.ui", self)

        self.parent = parent
        self.measurement = measurement
        self.statusbar = statusbar

        # Connect buttons
        self.OKButton.clicked.connect(self._accept_params)
        self.cancelButton.clicked.connect(self.close)

        locale = QLocale.c()
        self.spin_systerr.setLocale(locale)
        self.sbox_reference_density.setLocale(locale)

        m_name = self.measurement.name
        if m_name not in DepthProfileDialog.checked_cuts:
            DepthProfileDialog.checked_cuts[m_name] = set()

        gutils.fill_cuts_treewidget(self.measurement,
                                    self.treeWidget.invisibleRootItem(),
                                    use_elemloss=True)
        self.used_cuts = DepthProfileDialog.checked_cuts[m_name]

        gutils.set_btn_group_data(self.group_x_axis_units, DepthProfileUnit)
        self.x_axis_units = DepthProfileDialog.x_unit
        if self.x_axis_units == DepthProfileUnit.NM:
            self._show_reference_density()
        else:
            self._hide_reference_density()

        self.radioButtonNm.clicked.connect(self._show_reference_density)
        self.radioButtonAtPerCm2.clicked.connect(self._hide_reference_density)

        self.systematic_error = DepthProfileDialog.systerr
        self.show_scale_line = DepthProfileDialog.line_scale
        self.show_zero_line = DepthProfileDialog.line_zero

        self.cross_sections = global_settings.get_cross_sections()

        self._show_measurement_settings()
        self._show_efficiency_files()
        self.exec_()
Exemple #19
0
 def __init__(self):
     """Initializes the LogHandler widget.
     """
     super().__init__()
     uic.loadUi(gutils.get_ui_dir() / "ui_log_widget.ui", self)
     # This is used to ensure that the window can't be closed.
     self.want_to_close = False
     self.hideButton.clicked.connect(self.minimize_window)
     self.on_log_message.connect(self.add_text)
     self.on_error_message.connect(self.add_error)
Exemple #20
0
    def __init__(self, **kwargs):
        """Initialize the widget.

        Args:
            kwargs: property values to be shown in the widget.
        """
        ui_file = gutils.get_ui_dir() / "ui_optimization_fluence_params.ui"
        self.fluenceDoubleSpinBox = ScientificSpinBox(10e12)
        super().__init__(ui_file, **kwargs)
        self.fluence_form_layout.addRow("Upper limit",
                                        self.fluenceDoubleSpinBox)
Exemple #21
0
 def __init__(self):
     """Inits the ElementSelection class
     """
     # TODO this could show the elements with same color scheme as defined in
     #      global settings
     super().__init__()
     uic.loadUi(gutils.get_ui_dir() / "ui_element_selection.ui", self)
     buttons = self.findChild(QtWidgets.QButtonGroup, "elementButtons")
     buttons.buttonClicked.connect(self.__set_element)
     self.pushButton_Cancel.clicked.connect(self.close)
     self.element = None
     self.exec_()
Exemple #22
0
    def __init__(self,
                 value=0.0,
                 minimum=0.0,
                 maximum=math.inf,
                 decimal_places=17,
                 show_btns=True):
        """
        Initializes the spinbox.

        Args:
            value: value of spinbox
            minimum: minimum allowed value
            maximum: maximum allowed value
            decimal_places: maximum number of decimals to show
            show_btns: Whether buttons that increase or decrease the value
                are shown.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_scientific_spinbox_widget.ui",
                   self)
        self._value = Decimal(str(value))
        self.minimum = minimum
        self.maximum = maximum
        if decimal_places < 1:
            self._decimal_places = 1
        elif decimal_places > 17:
            self._decimal_places = 17
        else:
            self._decimal_places = decimal_places

        self.scientificLineEdit: QtWidgets.QLineEdit
        self._validator = ScientificValidator(
            self.minimum,
            self.maximum,
            self._decimal_places,
            self,
            accepted=lambda: iv.set_input_field_white(self.scientificLineEdit),
            intermediate=lambda: iv.set_input_field_yellow(self.
                                                           scientificLineEdit),
            invalid=lambda: iv.set_input_field_red(self.scientificLineEdit))
        self.scientificLineEdit.setValidator(self._validator)

        self.set_value(self._value)

        if show_btns:
            self.upButton.clicked.connect(
                lambda *_: self._step_adjustment(self._up_step))
            self.downButton.clicked.connect(
                lambda *_: self._step_adjustment(self._down_step))
        else:
            self.upButton.hide()
            self.downButton.hide()
Exemple #23
0
    def __init__(self,
                 element_simulation: ElementSimulation,
                 preset_folder=None):
        """
        Initializes the widget.

        Args:
            element_simulation: Element simulation object.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_request_simulation_settings.ui",
                   self)

        # By default, disable the widget, so caller has to enable it. Without
        # this, name and description fields would always be enabled when the
        # widget loads.
        self.setEnabled(False)
        self.element_simulation = element_simulation
        self.set_spinbox_maximums()
        gutils.fill_combobox(self.modeComboBox, SimulationMode)
        gutils.fill_combobox(self.typeOfSimulationComboBox, SimulationType)

        self.fields_are_valid = False
        iv.set_input_field_red(self.nameLineEdit)
        self.nameLineEdit.textChanged.connect(
            lambda: iv.check_text(self.nameLineEdit, qwidget=self))
        self.nameLineEdit.textEdited.connect(
            lambda: iv.sanitize_file_name(self.nameLineEdit))
        self.nameLineEdit.setEnabled(False)

        locale = QLocale.c()
        self.minimumScatterAngleDoubleSpinBox.setLocale(locale)
        self.minimumMainScatterAngleDoubleSpinBox.setLocale(locale)
        self.minimumEnergyDoubleSpinBox.setLocale(locale)

        self.__original_property_values = {}

        self.set_properties(
            name=self.element_simulation.name,
            description=self.element_simulation.description,
            modification_time=self.element_simulation.modification_time,
            **self.element_simulation.get_settings())

        if preset_folder is not None:
            self.preset_widget = PresetWidget.add_preset_widget(
                preset_folder / "simulation",
                "sim",
                lambda w: self.layout().insertWidget(0, w),
                save_callback=self.save_properties_to_file,
                load_callback=self.load_properties_from_file)
        else:
            self.preset_widget = None
Exemple #24
0
    def __init__(self,
                 element_simulation: ElementSimulation,
                 ct: Optional[CancellationToken] = None):
        # TODO common base class for optim result widgets
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_optimized_fluence_widget.ui",
                   self)

        self.element_simulation = element_simulation
        if self.element_simulation.optimized_fluence:
            self.show_fluence()

        self.cancellation_token = ct
Exemple #25
0
    def __init__(self, folder: Path, prefix: str, enable_load_btn=False):
        """Initializes a new PresetWidget.

        Args:
            folder: folder where preset files are stored
            prefix: default prefix for preset files
            enable_load_btn: whether 'Load preset' file is shown or not.
                If not, load_file signal is fired when the combobox
                index changes.
        """
        QWidget.__init__(self)
        uic.loadUi(gutils.get_ui_dir() / "ui_preset_widget.ui", self)

        self._folder = folder
        self._prefix = prefix

        self.save_btn: QPushButton
        self.load_btn: QPushButton
        self.preset_combobox: QComboBox

        self.save_btn.clicked.connect(self._emit_save_file)

        self._load_btn_enabled = enable_load_btn
        self.load_btn.setVisible(self._load_btn_enabled)
        self.load_btn.setEnabled(self._load_btn_enabled)
        if self._load_btn_enabled:
            self.load_btn.clicked.connect(
                lambda: self._emit_file_to_load(self.preset))

        self.status_label.setVisible(False)

        self.preset_combobox: QComboBox
        self.preset_combobox.setContextMenuPolicy(Qt.ActionsContextMenu)
        self.preset_combobox.currentIndexChanged.connect(self._index_changed)

        self._action_rename = QAction(self.preset_combobox)
        self._action_rename.setText("Rename")
        self._action_rename.triggered.connect(self._rename_file)

        self._action_remove = QAction(self.preset_combobox)
        self._action_remove.setText("Remove")
        self._action_remove.triggered.connect(self._remove_file)

        self.preset_combobox.addAction(self._action_rename)
        self.preset_combobox.addAction(self._action_remove)

        self.preset_combobox.installEventFilter(self)

        self.load_files()
        self._activate_actions(self.preset)
Exemple #26
0
    def __init__(self, **kwargs):
        """Initialize the widget.

        Args:
            kwargs: property values to be shown in the widget.
        """
        ui_file = gutils.get_ui_dir() / "ui_optimization_recoil_params.ui"
        super().__init__(ui_file, **kwargs)

        locale = QLocale.c()
        self.upperXDoubleSpinBox.setLocale(locale)
        self.lowerXDoubleSpinBox.setLocale(locale)
        self.upperYDoubleSpinBox.setLocale(locale)
        self.lowerYDoubleSpinBox.setLocale(locale)
Exemple #27
0
    def __init__(self, efficiency_files, parent_widget=None):
        """Inits widget.
        
        Args:
            parent: A TabWidget.
            efficiency_files: Paths to .eff files
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_eff_plot.ui", self)

        self.parent_widget = parent_widget
        self.efficiency_files = efficiency_files
        self.matplotlib = MatplotlibEfficiencyWidget(self,
                                                     self.efficiency_files)
        self.exec_()
    def __init__(self, elements, ignored):
        """Init the dialog.
        
        Args:
            elements: A list of elements in Depth Profile.
            ignored: A set of elements ignored previously for ratio
            calculation.
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_graph_ignored_elements.ui", self)

        self.__elements = elements
        self.ignored_elements = set(ignored)
        self.button_ok.clicked.connect(self.__ok_button)
        self.button_cancel.clicked.connect(self.close)
        self.__set_values()
        self.exec_()
    def __init__(self, lim_a, lim_b):
        """Inits Depth profile numeric limits dialog.
        
        Args:
            lim_a, lim_b: limits to be shown in spinboxes
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_depth_profile_limits.ui", self)
        self.setAttribute(QtCore.Qt.WA_DeleteOnClose)

        # Connect and show
        self.OKButton.clicked.connect(self.accept_limits)
        self.cancelButton.clicked.connect(self.close)
        self.spinbox_limit_min.setValue(lim_a)
        self.spinbox_limit_max.setValue(lim_b)
        self.limit_min = lim_a
        self.limit_max = lim_b
Exemple #30
0
    def __init__(self, foil):
        """
        Initializes the foil widget.

        Args:
            foil: foil object
        """
        super().__init__()
        uic.loadUi(gutils.get_ui_dir() / "ui_foil_widget.ui", self)

        locale = QLocale.c()
        self.distanceDoubleSpinBox.setLocale(locale)
        self.deleteButton.clicked.connect(self._delete_foil)

        self.name = foil.name
        self.distance_from_previous = 0
        self.cumulative_distance = foil.distance