コード例 #1
0
    def __init__(self, parent=None, name=None, window_flags=0):

        qt_import.QWidget.__init__(self, parent,
                                   qt_import.Qt.WindowFlags(window_flags))

        if not name:
            self.setObjectName("OptimisationParametersWidgetLayout")

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.opt_param_widget = qt_import.load_ui_file(
            "optimization_parameters_widget_layout.ui")

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.opt_param_widget)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)

        # Size policies -------------------------------------------------------

        # Other ---------------------------------------------------------------
        self.setAttribute(qt_import.Qt.WA_WState_Polished)
コード例 #2
0
    def __init__(self, parent=None, name=None, fl=0):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))

        if not name:
            self.setObjectName("RadiationDamageModelWidgetLayout")

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.rad_damage_widget = qt_import.load_ui_file(
            "radiation_damage_model_widget_layout.ui")

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.rad_damage_widget)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(_main_vlayout)

        # Size policies -------------------------------------------------------

        # Other ---------------------------------------------------------------
        self.languageChange()
        self.setAttribute(qt_import.Qt.WA_WState_Polished)
        colors.set_widget_color(self, colors.GROUP_BOX_GRAY)
コード例 #3
0
    def __init__(self, *args):
        BaseWidget.__init__(self, *args)

        # Hardware objects ----------------------------------------------------

        # Internal values -----------------------------------------------------
        self.num_cols = None
        self.num_rows = None
        self.num_drops = None
        self.current_location = None
        self.plate_content = None
        self.xtal_map = None

        # Properties ----------------------------------------------------------
        self.add_property("icons", "string", "")

        # Signals -------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.plate_navigator_widget = PlateNavigatorWidget(self)
        self.crims_widget = qt_import.load_ui_file(
            "plate_crims_widget_layout.ui")

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.plate_navigator_widget)
        _main_vlayout.addWidget(self.crims_widget)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)

        # Qt signal/slot connections ------------------------------------------
        self.crims_widget.search_button.clicked.connect(
            self.search_button_clicked)
        self.crims_widget.move_button.clicked.connect(
            self.move_to_xtal_clicked)
        self.crims_widget.abort_button.clicked.connect(self.abort_clicked)

        self.crims_widget.xtal_treewidget.currentItemChanged.connect(
            self.xtal_treewidget_current_item_changed)

        # Other ---------------------------------------------------------------
        self.xtal_image_graphicsscene = qt_import.QGraphicsScene(self)
        self.crims_widget.xtal_image_graphicsview.setScene(
            self.xtal_image_graphicsscene)
        self.xtal_image_pixmap = qt_import.QPixmap()
        self.xtal_image_graphics_pixmap = qt_import.QGraphicsPixmapItem()
        self.xtal_image_graphicsscene.addItem(self.xtal_image_graphics_pixmap)

        if HWR.beamline.plate_manipulator is not None:
            self.connect(
                HWR.beamline.plate_manipulator,
                SampleChanger.INFO_CHANGED_EVENT,
                self.plate_navigator_widget.refresh_plate_location,
            )
コード例 #4
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # variables -----------------------------------------------------------

        self.current_beam_position = None
        self.current_zoom_pos_name = None
        self.current_zoom_idx = -1
        self.multipos_file_xml_path = None

        # Hardware objects ----------------------------------------------------
        self.multipos_hwobj = None

        # Internal values -----------------------------------------------------
        self.table_created = False

        # Properties ----------------------------------------------------------
        self.add_property("zoom", "string", "")

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.main_groupbox = qt_import.QGroupBox("Beam Position", self)
        self.ui_widgets_manager = qt_import.load_ui_file(
            "camera_beam_brick.ui")

        # Size policy --------------------------------
        self.ui_widgets_manager.beam_positions_table.setSizePolicy(
            qt_import.QSizePolicy.Minimum,
            qt_import.QSizePolicy.Minimum,
        )

        # Layout --------------------------------------------------------------
        _groupbox_vlayout = qt_import.QVBoxLayout(self)
        _groupbox_vlayout.addWidget(self.ui_widgets_manager)
        _groupbox_vlayout.setSpacing(0)
        _groupbox_vlayout.setContentsMargins(0, 0, 0, 0)
        self.main_groupbox.setLayout(_groupbox_vlayout)

        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.main_groupbox)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(_main_vlayout)

        # Qt signal/slot connections ------------------------------------------

        self.ui_widgets_manager.save_current_beam_pos_pushbutton.clicked.connect(
            self.save_beam_position)
コード例 #5
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)
        self.logger = logging.getLogger("GUI Alba Actuator")
        self.logger.info("__init__()")

        self.on_color = colors.color_to_hexa(colors.LIGHT_GREEN)
        self.off_color = colors.color_to_hexa(colors.LIGHT_GRAY)
        self.fault_color = colors.color_to_hexa(colors.LIGHT_RED)
        self.unknown_color = colors.color_to_hexa(colors.DARK_GRAY)

        # Hardware objects ----------------------------------------------------
        self.light_ho = None

        self.state = None
        self.level = None
        self.icons = None
        self.level_limits = [None, None]

        # Properties ----------------------------------------------------------
        self.add_property("mnemonic", "string", "")
        self.add_property("icons", "string", "")

        # Graphic elements ----------------------------------------------------
        self.widget = qt_import.load_ui_file("alba_lightcontrol.ui")

        qt_import.QHBoxLayout(self)

        self.layout().addWidget(self.widget)
        self.layout().setContentsMargins(0, 0, 0, 0)
        self.widget.layout().setContentsMargins(0, 0, 0, 0)
        self.widget.horizontalLayout.setContentsMargins(0, 0, 0, 0)

        self.widget.button.clicked.connect(self.do_switch)
        self.widget.slider.valueChanged.connect(self.do_set_level)

        # SizePolicies --------------------------------------------------------
        self.setSizePolicy(qt_import.QSizePolicy.Expanding,
                           qt_import.QSizePolicy.MinimumExpanding)

        # Defaults
        self.set_icons("BulbCheck,BulbDelete")

        # Other ---------------------------------------------------------------
        self.setToolTip("Control of light (set level and on/off switch.")

        self.update()
コード例 #6
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------
        self.define_slot("data_policy_changed", ())

        # Graphic elements ----------------------------------------------------
        self.main_groupbox = qt_import.QGroupBox("Export Data", self)
        self.ui_widgets_manager = qt_import.load_ui_file(
            "export_data_layout.ui")

        # Internal values -----------------------------------------------------
        self.__current_sample = None
        self.__data_policy_info_dict = {}

        # Layout --------------------------------------------------------------
        _groupbox_vlayout = qt_import.QVBoxLayout(self)
        _groupbox_vlayout.addWidget(self.ui_widgets_manager)
        _groupbox_vlayout.setSpacing(0)
        _groupbox_vlayout.setContentsMargins(0, 0, 0, 0)
        self.main_groupbox.setLayout(_groupbox_vlayout)

        # Qt signal/slot connections ------------------------------------------
        self.ui_widgets_manager.export_button.clicked.connect(
            self.export_button_clicked)

        self.ui_widgets_manager.sample_name_tbox.textChanged.connect(
            self.set_export_file_name)

        self.ui_widgets_manager.filename_tbox.textChanged.connect(
            self.set_export_file_name)

        self.ui_widgets_manager.file_index_tbox.textChanged.connect(
            self.set_export_file_name)

        self.ui_widgets_manager.select_file_path_button.clicked.connect(
            self.select_file_path_button_clicked)

        self.ui_widgets_manager.reload_policy_data_button.clicked.connect(
            self.reload_policy_data_button_clicked)
コード例 #7
0
    def __init__(self, *args):

        qt_import.QDialog.__init__(self, *args)
        layout = qt_import.QHBoxLayout()
        layout.setContentsMargins(0, 0, 0, 0)

        self.setLayout(layout)
        self.widget = qt_import.load_ui_file("catscommand_dialog.ui")

        layout.addWidget(self.widget)

        self.btSend = self.widget.buttonBox.addButton(
            "Send", qt_import.QDialogButtonBox.ApplyRole)
        self.btSend.clicked.connect(self.send_command)

        self.widget.cbCommand.clear()
        self.widget.cbCommand.insertItems(0, self.cmds)
        self.widget.cbCommand.activated.connect(self.command_selected)
        self.widget.buttonBox.rejected.connect(self.rejected)
コード例 #8
0
    def __init__(self, parent=None, name=None, flags=0):

        qt_import.QDialog.__init__(
            self,
            parent,
            qt_import.Qt.WindowFlags(flags
                                     | qt_import.Qt.WindowStaysOnTopHint),
        )

        if name is not None:
            self.setObjectName(name)

        # Internal variables --------------------------------------------------
        self.checked_items = []
        self.sample_items = []

        # Graphic elements ----------------------------------------------------
        self.conf_dialog_layout = qt_import.load_ui_file(
            "confirmation_dialog_layout.ui")

        continue_shortcut = qt_import.QShortcut(
            qt_import.QKeySequence("C"),
            self.conf_dialog_layout.continue_button)
        continue_shortcut.activated.connect(self.continue_shortcut_pressed)

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.conf_dialog_layout)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)
        _main_vlayout.setSpacing(0)

        # Qt signal/slot connections ------------------------------------------
        self.conf_dialog_layout.continue_button.clicked.connect(
            self.continue_button_click)
        self.conf_dialog_layout.cancel_button.clicked.connect(
            self.cancel_button_click)

        # SizePolicies --------------------------------------------------------
        self.setMinimumWidth(1200)

        # Other ---------------------------------------------------------------
        self.setWindowTitle("Confirm collection")
コード例 #9
0
    def __init__(self, parent=None, name="image_tracking_widget"):

        qt_import.QWidget.__init__(self, parent)

        self.setObjectName(name)

        # Internal values -----------------------------------------------------
        self.image_path = None
        self.data_collection = None

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.image_tracking_widget_layout = qt_import.load_ui_file(
            "image_tracking_widget_layout.ui")

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.image_tracking_widget_layout)
        _main_vlayout.setSpacing(0)
        _main_vlayout.addStretch(10)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.image_tracking_widget_layout.view_current_button.clicked.connect(
            self.open_in_viewer_clicked)
        self.image_tracking_widget_layout.view_previous_button.clicked.connect(
            self.previous_button_clicked)
        self.image_tracking_widget_layout.view_next_button.clicked.connect(
            self.next_button_clicked)
        self.image_tracking_widget_layout.image_num_spinbox.valueChanged.connect(
            self.image_num_changed)

        self.setEnabled(False)

        # NB will be None if not configured
        self.image_tracking_hwobj = HWR.beamline.image_tracking
コード例 #10
0
    def __init__(self, parent=None, name=None, fl=0):

        CreateTaskBase.__init__(self, parent, name, fl, "Characterisation")
        self.setObjectName("create_char_widget")

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self._vertical_dimension_widget = None
        self._current_selected_item = None
        self._char = None
        self._char_params = None

        self.init_models()
        self._char_params_mib = DataModelInputBinder(self._char_params)

        # Graphic elements ----------------------------------------------------
        self._acq_widget = AcquisitionWidgetSimple(
            self,
            acq_params=self._acquisition_parameters,
            path_template=self._path_template,
        )

        self._data_path_widget = DataPathWidget(self,
                                                data_model=self._path_template,
                                                layout="vertical")

        self._vertical_dimension_widget = qt_import.load_ui_file(
            "vertical_crystal_dimension_widget_layout.ui")

        self._char_widget = qt_import.load_ui_file(
            "characterise_simple_widget_vertical_layout.ui")

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self._acq_widget)
        _main_vlayout.addWidget(self._data_path_widget)
        _main_vlayout.addWidget(self._char_widget)
        _main_vlayout.addWidget(self._vertical_dimension_widget)
        _main_vlayout.setContentsMargins(2, 2, 2, 2)
        _main_vlayout.setSpacing(6)
        _main_vlayout.addStretch(0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self._data_path_widget.pathTemplateChangedSignal.connect(
            self.path_template_changed)
        self._acq_widget.acqParametersChangedSignal.connect(
            self.acq_parameters_changed)

        self._vertical_dimension_widget.space_group_ledit.activated.connect(
            self._space_group_change)

        self._char_widget.characterisation_gbox.toggled.connect(
            self.characterisation_gbox_toggled)
        self._char_widget.wait_result_cbx.toggled.connect(
            self.wait_results_cbx_toggled)
        self._char_widget.execute_plan_cbx.toggled.connect(
            self.run_diffraction_plan_cbx_toggled)

        # Other ---------------------------------------------------------------
        if True:
            self._char_params_mib.bind_value_update(
                "opt_sad", self._char_widget.optimised_sad_cbx, bool, None)

            self._char_params_mib.bind_value_update(
                "account_rad_damage", self._char_widget.account_rad_dmg_cbx,
                bool, None)

            self._char_params_mib.bind_value_update(
                "strategy_complexity", self._char_widget.start_comp_cbox, int,
                None)

            self._char_params_mib.bind_value_update(
                "max_crystal_vdim",
                self._vertical_dimension_widget.max_vdim_ledit,
                float,
                qt_import.QDoubleValidator(0.0, 1000, 2, self),
            )

            self._char_params_mib.bind_value_update(
                "min_crystal_vdim",
                self._vertical_dimension_widget.min_vdim_ledit,
                float,
                qt_import.QDoubleValidator(0.0, 1000, 2, self),
            )

            self._char_params_mib.bind_value_update(
                "min_crystal_vphi",
                self._vertical_dimension_widget.min_vphi_ledit,
                float,
                qt_import.QDoubleValidator(0.0, 1000, 2, self),
            )

            self._char_params_mib.bind_value_update(
                "max_crystal_vphi",
                self._vertical_dimension_widget.max_vphi_ledit,
                float,
                qt_import.QDoubleValidator(0.0, 1000, 2, self),
            )

        self._vertical_dimension_widget.space_group_ledit.addItems(
            XTAL_SPACEGROUPS)

        self._data_path_widget.data_path_layout.compression_cbox.setVisible(
            False)
コード例 #11
0
    def __init__(
        self,
        parent=None,
        name=None,
        fl=0,
        acq_params=None,
        path_template=None,
        layout="vertical",
    ):
        """
        Loads ui file that defines the gui layout.
        Initiates QLineEdits by adding limits, precision
        Connects to qt signals to update acquisition parameters
        :param parent:
        :param name:
        :param fl:
        :param acq_params:
        :param path_template:
        :param layout:
        """

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))

        if name is not None:
            self.setObjectName(name)

        # Internal variables --------------------------------------------------
        self.value_changed_list = []

        # Properties ----------------------------------------------------------

        # Signals -------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        if acq_params is None:
            self._acquisition_parameters = queue_model_objects.AcquisitionParameters(
            )
        else:
            self._acquisition_parameters = acq_params

        if path_template is None:
            self._path_template = queue_model_objects.PathTemplate()
        else:
            self._path_template = path_template

        self._acquisition_mib = DataModelInputBinder(
            self._acquisition_parameters)

        self.acq_widget_layout = qt_import.load_ui_file(
            "acquisition_widget_vertical_ssx_layout.ui")
        # Layout --------------------------------------------------------------
        __main_vlayout = qt_import.QVBoxLayout(self)
        __main_vlayout.addWidget(self.acq_widget_layout)
        __main_vlayout.setSpacing(0)
        __main_vlayout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.acq_widget_layout.num_triggers_ledit.textChanged.connect(
            self.num_triggers_ledit_changed)
        self.acq_widget_layout.num_images_per_trigger_ledit.textChanged.connect(
            self.num_images_per_trigger_ledit_changed)

        self.acq_widget_layout.exp_time_ledit.textChanged.connect(
            self.exposure_time_ledit_changed)
        self.acq_widget_layout.detector_roi_mode_combo.activated.connect(
            self.detector_roi_mode_changed)
        self.acq_widget_layout.energy_ledit.textEdited.connect(
            self.energy_ledit_changed)
        self.acq_widget_layout.transmission_ledit.textEdited.connect(
            self.transmission_ledit_changed)
        self.acq_widget_layout.resolution_ledit.textEdited.connect(
            self.resolution_ledit_changed)

        # Other ---------------------------------------------------------------
        self.energy_validator = qt_import.QDoubleValidator(
            4, 25, 4, self.acq_widget_layout.energy_ledit)
        self.resolution_validator = qt_import.QDoubleValidator(
            0, 15, 3, self.acq_widget_layout.resolution_ledit)
        self.transmission_validator = qt_import.QDoubleValidator(
            0, 100, 3, self.acq_widget_layout.transmission_ledit)
        self.exp_time_validator = qt_import.QDoubleValidator(
            0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit)
        self.num_triggers_validator = qt_import.QIntValidator(
            1, 9999999, self.acq_widget_layout.num_triggers_ledit)
        self.num_images_per_trigger_validator = qt_import.QIntValidator(
            1, 9999999, self.acq_widget_layout.num_images_per_trigger_ledit)
        self.num_img_validator = qt_import.QIntValidator(
            1, 9999999, self.acq_widget_layout.num_images_ledit)
        self.hare_num_validator = qt_import.QIntValidator(
            1, 9999999, self.acq_widget_layout.hare_num_ledit)

        limits_dict = HWR.beamline.acquisition_limit_values

        tpl = limits_dict.get("exposure_time")
        if tpl:
            self.exp_time_validator.setRange(tpl[0], tpl[1], 6)

        self._acquisition_mib.bind_value_update(
            "exp_time",
            self.acq_widget_layout.exp_time_ledit,
            float,
            self.exp_time_validator,
        )

        self._acquisition_mib.bind_value_update(
            "num_triggers",
            self.acq_widget_layout.num_triggers_ledit,
            int,
            self.num_triggers_validator,
        )

        self._acquisition_mib.bind_value_update(
            "num_images_per_trigger",
            self.acq_widget_layout.num_images_per_trigger_ledit,
            int,
            self.num_images_per_trigger_validator,
        )

        self._acquisition_mib.bind_value_update(
            "hare_num",
            self.acq_widget_layout.hare_num_ledit,
            int,
            self.hare_num_validator,
        )

        tpl = limits_dict.get("number_of_images")
        if tpl:
            self.num_img_validator.setRange(tpl[0], tpl[1])

        self._acquisition_mib.bind_value_update(
            "num_images",
            self.acq_widget_layout.num_images_ledit,
            int,
            self.num_img_validator,
        )

        self._acquisition_mib.bind_value_update(
            "energy", self.acq_widget_layout.energy_ledit, float,
            self.energy_validator)
        self.update_energy_limits(
            (self.energy_validator.bottom(), self.energy_validator.top()))

        self._acquisition_mib.bind_value_update(
            "transmission",
            self.acq_widget_layout.transmission_ledit,
            float,
            self.transmission_validator,
        )
        self.update_transmission_limits((self.transmission_validator.bottom(),
                                         self.transmission_validator.top()))

        self._acquisition_mib.bind_value_update(
            "resolution",
            self.acq_widget_layout.resolution_ledit,
            float,
            self.resolution_validator,
        )

        self.init_detector_roi_modes()
        self.acq_widget_layout.detector_roi_mode_label.setEnabled(False)
        self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)
        self.update_exp_time_limits()
コード例 #12
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        self.add_property("mnemonic", "string", "")
        self.define_slot("setExpertMode", ())

        self.expert_mode = False

        self.widget = qt_import.load_ui_file("catsmaint_widget.ui")

        qt_import.QHBoxLayout(self)
        self.layout().addWidget(self.widget)

        self.widget.btPowerOn.clicked.connect(self.power_on)
        self.widget.btPowerOff.clicked.connect(self.power_off)
        self.widget.btLid1Open.clicked.connect(self.lid1_open)
        self.widget.btLid1Close.clicked.connect(self.lid1_close)
        self.widget.btLid2Open.clicked.connect(self.lid2_open)
        self.widget.btLid2Close.clicked.connect(self.lid2_close)
        self.widget.btLid3Open.clicked.connect(self.lid3_open)
        self.widget.btLid3Close.clicked.connect(self.lid3_close)
        self.widget.btRegulationOn.clicked.connect(self.regulation_set_on)

        self.widget.btOpenTool.clicked.connect(self.tool_open)
        self.widget.btCloseTool.clicked.connect(self.tool_close)
        self.widget.btToolCalib.clicked.connect(self.tool_calibrate)
        self.widget.btMagnetOn.clicked.connect(self.magnet_on)
        self.widget.btMagnetOff.clicked.connect(self.magnet_off)

        # self.widget.btSoak.clicked.connect(self.soak)
        self.widget.btBack.clicked.connect(self.back_traj)
        self.widget.btSafe.clicked.connect(self.safe_traj)
        self.widget.btDry.clicked.connect(self.dry)
        self.widget.btHome.clicked.connect(self.home)

        # self.widget.btRestart.clicked.connect(self.restart)
        self.widget.btResetPutGet.clicked.connect(self.reset_put_get)
        self.widget.btResetMotion.clicked.connect(self.reset_motion)
        self.widget.btMemClear.clicked.connect(self.clear_memory)
        self.widget.btClear.clicked.connect(self.clear_memory)
        self.widget.btMore.clicked.connect(self.command_prompt)

        self.widget.btAbort.clicked.connect(self.abort)
        # self.widget.btPanic.clicked.connect(self.panic)

        self.device = None
        self.state = None
        self.status = None

        self.path_running = None
        self.powered = None
        self.regulation_on = None

        self.lid1_state = False
        self.lid2_state = False
        self.lid3_state = False

        self.tool_state = False

        self.widget.lblMessage.setStyleSheet("background-color: white;")

        self.update_buttons()
コード例 #13
0
ファイル: acquisition_widget.py プロジェクト: rhfogh/mxcube
    def __init__(
        self,
        parent=None,
        name=None,
        fl=0,
        acq_params=None,
        path_template=None,
        layout="horizontal",
    ):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))

        if name is not None:
            self.setObjectName(name)

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self.previous_energy = 0

        # If the acq. widget is used with grids then total osc range is not
        # equal to num_images * osc_range, but num_images_per_line * osc_range
        # For grids the osc total range is updated when a grid is selected

        self.grid_mode = False

        # Properties ----------------------------------------------------------

        # Signals -------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        if acq_params is None:
            self._acquisition_parameters = queue_model_objects.AcquisitionParameters()
        else:
            self._acquisition_parameters = acq_params

        if path_template is None:
            self._path_template = queue_model_objects.PathTemplate()
        else:
            self._path_template = path_template

        self._acquisition_mib = DataModelInputBinder(self._acquisition_parameters)

        if layout == "horizontal":
            self.acq_widget_layout = qt_import.load_ui_file(
                "acquisition_widget_horizontal_layout.ui"
            )
            self.use_osc_start(False)
        else:
            self.acq_widget_layout = qt_import.load_ui_file(
                "acquisition_widget_vertical_layout.ui"
            )

        # Layout --------------------------------------------------------------
        __main_vlayout = qt_import.QVBoxLayout(self)
        __main_vlayout.addWidget(self.acq_widget_layout)
        __main_vlayout.setSpacing(0)
        __main_vlayout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.acq_widget_layout.osc_start_cbox.stateChanged.connect(self.fix_osc_start)
        self.acq_widget_layout.exp_time_ledit.textChanged.connect(
            self.exposure_time_ledit_changed
        )
        self.acq_widget_layout.exp_time_total_ledit.textEdited.connect(
            self.exp_time_total_ledit_changed
        )
        self.acq_widget_layout.first_image_ledit.textChanged.connect(
            self.first_image_ledit_change
        )
        self.acq_widget_layout.num_images_ledit.textChanged.connect(
            self.num_images_ledit_change
        )
        self.acq_widget_layout.detector_roi_mode_combo.activated.connect(
            self.detector_roi_mode_changed
        )
        self.acq_widget_layout.energies_combo.activated.connect(self.energy_selected)
        self.acq_widget_layout.mad_cbox.toggled.connect(self.use_mad)
        self.acq_widget_layout.osc_start_ledit.textEdited.connect(
            self.osc_start_ledit_changed
        )
        self.acq_widget_layout.osc_range_ledit.textEdited.connect(
            self.osc_range_per_frame_ledit_changed
        )
        self.acq_widget_layout.osc_total_range_ledit.textEdited.connect(
            self.osc_total_range_ledit_changed
        )
        self.acq_widget_layout.energy_ledit.textEdited.connect(
            self.energy_ledit_changed
        )
        self.acq_widget_layout.transmission_ledit.textEdited.connect(
            self.transmission_ledit_changed
        )
        self.acq_widget_layout.resolution_ledit.textEdited.connect(
            self.resolution_ledit_changed
        )
        self.acq_widget_layout.kappa_ledit.textEdited.connect(self.kappa_ledit_changed)
        self.acq_widget_layout.kappa_phi_ledit.textEdited.connect(
            self.kappa_phi_ledit_changed
        )

        if self.acq_widget_layout.findChild(qt_import.QLineEdit, "overlap_ledit"):
            self.acq_widget_layout.overlap_ledit.textChanged.connect(
                self.overlap_changed
            )
        if self.acq_widget_layout.findChild(qt_import.QCheckBox, "max_osc_range_cbx"):
            self.acq_widget_layout.max_osc_range_cbx.toggled.connect(
                self.max_osc_range_toggled
            )

        # Other ---------------------------------------------------------------
        self.value_changed_list = []

        self.acq_widget_layout.energies_combo.setDisabled(True)
        self.acq_widget_layout.energies_combo.addItems(
            ["ip: -", "pk: -", "rm1: -", "rm2: -"]
        )

        self.osc_start_validator = qt_import.QDoubleValidator(
            -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit
        )
        self.osc_range_per_frame_validator = qt_import.QDoubleValidator(
            0, 10000, 4, self.acq_widget_layout.osc_range_ledit
        )
        self.osc_total_range_validator = qt_import.QDoubleValidator(
            0, 10000, 4, self.acq_widget_layout.osc_total_range_ledit
        )
        self.kappa_validator = qt_import.QDoubleValidator(
            -0.01, 360, 4, self.acq_widget_layout.kappa_ledit
        )
        self.kappa_phi_validator = qt_import.QDoubleValidator(
            -360, 360, 4, self.acq_widget_layout.kappa_phi_ledit
        )
        self.energy_validator = qt_import.QDoubleValidator(
            4, 25, 5, self.acq_widget_layout.energy_ledit
        )
        self.resolution_validator = qt_import.QDoubleValidator(
            0, 15, 3, self.acq_widget_layout.resolution_ledit
        )
        self.transmission_validator = qt_import.QDoubleValidator(
            0, 100, 3, self.acq_widget_layout.transmission_ledit
        )
        self.exp_time_validator = qt_import.QDoubleValidator(
            0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit
        )
        self.first_img_validator = qt_import.QIntValidator(
            0, 99999, self.acq_widget_layout.first_image_ledit
        )
        self.num_img_validator = qt_import.QIntValidator(
            1, 9999999, self.acq_widget_layout.num_images_ledit
        )
        self.acq_widget_layout.detector_roi_mode_label.setEnabled(False)
        self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)

        self.init_limits()
コード例 #14
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # Internal values -----------------------------------------------------
        self.__shape_map = {}
        self.__point_map = {}
        self.__line_map = {}
        self.__grid_map = {}
        self.__original_height = 300

        # Properties ----------------------------------------------------------

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.main_groupbox = qt_import.QGroupBox("Graphics items", self)
        self.manager_widget = qt_import.load_ui_file(
            "graphics_manager_layout.ui")

        # Layout --------------------------------------------------------------
        _groupbox_vlayout = qt_import.QVBoxLayout(self)
        _groupbox_vlayout.addWidget(self.manager_widget)
        _groupbox_vlayout.setSpacing(0)
        _groupbox_vlayout.setContentsMargins(0, 0, 0, 0)
        self.main_groupbox.setLayout(_groupbox_vlayout)

        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.main_groupbox)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(_main_vlayout)

        # Qt signal/slot connections ------------------------------------------
        self.main_groupbox.toggled.connect(self.main_groupbox_toggled)
        self.manager_widget.change_color_button.clicked.connect(
            self.change_color_clicked)
        self.manager_widget.display_all_button.clicked.connect(
            self.display_all_button_clicked)
        self.manager_widget.hide_all_button.clicked.connect(
            self.hide_all_button_clicked)
        self.manager_widget.clear_all_button.clicked.connect(
            self.clear_all_button_clicked)

        self.manager_widget.create_point_start_button.clicked.connect(
            self.create_point_start_button_clicked)
        self.manager_widget.create_point_accept_button.clicked.connect(
            self.create_point_accept_button_clicked)
        self.manager_widget.create_line_button.clicked.connect(
            self.create_line_button_clicked)
        self.manager_widget.draw_grid_button.clicked.connect(
            self.draw_grid_button_clicked)

        # self.manager_widget.shapes_treewidget.currentItemChanged.connect(\
        #     self.shape_treewiget_current_item_changed)
        self.manager_widget.shapes_treewidget.itemClicked.connect(
            self.shape_treewiget_item_clicked)
        self.manager_widget.shapes_treewidget.customContextMenuRequested.connect(
            self.show_shape_treewidget_popup)

        self.manager_widget.hor_spacing_ledit.textChanged.connect(
            self.grid_spacing_changed)
        self.manager_widget.ver_spacing_ledit.textChanged.connect(
            self.grid_spacing_changed)
        self.manager_widget.move_left_button.clicked.connect(
            self.grid_move_left_clicked)
        self.manager_widget.move_right_button.clicked.connect(
            self.grid_move_right_clicked)
        self.manager_widget.move_up_button.clicked.connect(
            self.grid_move_up_clicked)
        self.manager_widget.move_down_button.clicked.connect(
            self.grid_move_down_clicked)

        # SizePolicies --------------------------------------------------------

        # Other ---------------------------------------------------------------
        # by default manager is closed
        self.main_groupbox.setCheckable(True)
        self.main_groupbox.setChecked(False)
        self.main_groupbox_toggled(False)
        self.main_groupbox.setToolTip("Click to open/close item manager")

        self.connect(HWR.beamline.sample_view, "shapeCreated",
                     self.shape_created)
        self.connect(HWR.beamline.sample_view, "shapeDeleted",
                     self.shape_deleted)
        self.connect(HWR.beamline.sample_view, "shapeSelected",
                     self.shape_selected)
        self.connect(HWR.beamline.sample_view, "centringInProgress",
                     self.centring_in_progress_changed)
コード例 #15
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # variables -----------------------------------------------------------

        self.y_calib = None  # metres/pixel
        self.z_calib = None  # metres/pixel
        self.current_zoom_pos_name = None
        self.multipos_file_xml_path = None
        self.table_created = False

        # Hardware objects ----------------------------------------------------
        self.multipos_hwobj = None
        self.h_motor_hwobj = None
        self.v_motor_hwobj = None

        # Properties ----------------------------------------------------------
        self.add_property("zoom", "string", "")
        self.add_property("vertical motor", "string", "")
        self.add_property("horizontal motor", "string", "")

        # Signals ------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.main_groupbox = qt_import.QGroupBox("Pixel Size Calibration",
                                                 self)
        self.ui_widgets_manager = qt_import.load_ui_file(
            "camera_calibration.ui")

        # Size policy --------------------------------
        self.ui_widgets_manager.calibration_table.setSizePolicy(
            qt_import.QSizePolicy.Minimum,
            qt_import.QSizePolicy.Minimum,
        )

        # Layout --------------------------------------------------------------
        _groupbox_vlayout = qt_import.QVBoxLayout(self)
        _groupbox_vlayout.addWidget(self.ui_widgets_manager)
        _groupbox_vlayout.setSpacing(0)
        _groupbox_vlayout.setContentsMargins(0, 0, 0, 0)
        self.main_groupbox.setLayout(_groupbox_vlayout)

        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.main_groupbox)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(_main_vlayout)

        # Qt signal/slot connections ------------------------------------------

        self.ui_widgets_manager.save_calibration_pushbutton.clicked.connect(
            self.save_new_calibration_value)

        self.ui_widgets_manager.start_new_calibration_pushbutton.clicked.connect(
            self.start_new_calibration)

        self.ui_widgets_manager.cancel_calibration_pushbutton.clicked.connect(
            self.cancel_calibration)

        # Other hardware object connections --------------------------
        self.connect(
            HWR.beamline.diffractometer,
            "new_calibration_done",
            self.diffractometer_manual_calibration_done,
        )
コード例 #16
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # Internal variables ------------------------------------------------
        self.sample = queue_model_objects.Sample()
        self.crystal = self.sample.crystals[0]
        self.sample_mib = DataModelInputBinder(self.sample)
        self.crystal_mib = DataModelInputBinder(self.crystal)

        # Signals ------------------------------------------------------------

        # Slots --------------------------------------------------------------
        self.define_slot("populate_sample_details", ({}))

        # Graphic elements ----------------------------------------------------
        _info_widget = qt_import.QWidget(self)
        self.crystal_widget = qt_import.load_ui_file("crystal_widget_layout.ui")
        self.sample_info_widget = qt_import.load_ui_file("sample_info_widget_layout.ui")
        # self.ispyb_sample_info_widget = ISPyBSampleInfoWidget(self)

        # Layout --------------------------------------------------------------
        _info_widget_hlayout = qt_import.QHBoxLayout(_info_widget)
        _info_widget_hlayout.addWidget(self.sample_info_widget)
        _info_widget_hlayout.addWidget(self.crystal_widget)
        _info_widget_hlayout.addStretch(0)
        _info_widget_hlayout.setSpacing(0)
        _info_widget_hlayout.setContentsMargins(2, 2, 2, 2)

        _main_hlayout = qt_import.QVBoxLayout(self)
        _main_hlayout.addWidget(_info_widget)
        # _main_hlayout.addWidget(self.ispyb_sample_info_widget)
        _main_hlayout.addStretch(0)
        _main_hlayout.setSpacing(0)
        _main_hlayout.setContentsMargins(2, 2, 2, 2)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------

        # Other ---------------------------------------------------------------
        self.crystal_mib.bind_value_update(
            "space_group", self.crystal_widget.space_group_value_label, str, None
        )

        self.crystal_mib.bind_value_update(
            "protein_acronym",
            self.crystal_widget.protein_acronym_value_label,
            str,
            None,
        )

        self.crystal_mib.bind_value_update(
            "cell_a", self.crystal_widget.a_value_label, str, None
        )

        self.crystal_mib.bind_value_update(
            "cell_alpha", self.crystal_widget.alpha_value_label, str, None
        )

        self.crystal_mib.bind_value_update(
            "cell_b", self.crystal_widget.b_value_label, str, None
        )

        self.crystal_mib.bind_value_update(
            "cell_beta", self.crystal_widget.beta_value_label, str, None
        )

        self.crystal_mib.bind_value_update(
            "cell_c", self.crystal_widget.c_value_label, str, None
        )

        self.crystal_mib.bind_value_update(
            "cell_gamma", self.crystal_widget.gamma_value_label, str, None
        )

        self.sample_mib.bind_value_update(
            "name", self.sample_info_widget.name_value_label, str, None
        )

        self.sample_mib.bind_value_update(
            "code", self.sample_info_widget.data_matrix_value_label, str, None
        )

        self.sample_mib.bind_value_update(
            "holder_length",
            self.sample_info_widget.holder_length_value_label,
            str,
            None,
        )

        self.sample_mib.bind_value_update(
            "lims_sample_location",
            self.sample_info_widget.sample_location_value_label,
            str,
            None,
        )

        self.sample_mib.bind_value_update(
            "lims_container_location",
            self.sample_info_widget.basket_location_value_label,
            str,
            None,
        )
コード例 #17
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # Hardware objects ----------------------------------------------------
        self.diffractometer_hwobj = None

        # Internal values -----------------------------------------------------
        self.num_clicked_centring_pos = 0
        
        # Properties ----------------------------------------------------------

        # Signals ------------------------------------------------------------
        self.define_signal("centring_parameters_changed", ())

        # Slots ---------------------------------------------------------------
        
        # Graphic elements ----------------------------------------------------
        self.main_groupbox = qt_import.QGroupBox("Sample centering", self)
        self.ui_widgets_manager = qt_import.load_ui_file("esrf_sample_centering.ui")

        # Size policy --------------------------------
        self.ui_widgets_manager.aligment_table.setSizePolicy(
            qt_import.QSizePolicy.Minimum,
            qt_import.QSizePolicy.Minimum,
        )

        # Layout --------------------------------------------------------------
        _groupbox_vlayout = qt_import.QVBoxLayout()
        _groupbox_vlayout.addWidget(self.ui_widgets_manager)
        self.main_groupbox.setLayout(_groupbox_vlayout)

        # MatPlotWidget --------------------------------------------------------------
         # a figure instance to plot on
        self.figure = plt.figure()
        # this is the Canvas Widget that displays the `figure`
        # it takes the `figure` instance as a parameter to __init__
        self.canvas = FigureCanvas(self.figure)

        # this is the Navigation widget
        # it takes the Canvas widget and a parent
        self.toolbar = NavigationToolbar(self.canvas, self)
        _matplotlib_widget_layout = qt_import.QVBoxLayout()
        _matplotlib_widget_layout.addWidget(self.toolbar)
        _matplotlib_widget_layout.addWidget(self.canvas)
        
        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QHBoxLayout()
        _main_vlayout.addWidget(self.main_groupbox)
        _main_vlayout.addLayout(_matplotlib_widget_layout)
        self.setLayout(_main_vlayout)

        # Qt signal/slot connections ------------------------------------------
       
        self.ui_widgets_manager.show_center_checkbox.stateChanged.connect(
            self.show_center
        )

        self.ui_widgets_manager.show_help_line_checkbox.stateChanged.connect(
            self.show_help_lines
        )
        
        self.ui_widgets_manager.number_points_spinbox.valueChanged.connect(
            self.change_point_number
        )

        self.ui_widgets_manager.delta_phi_textbox.editingFinished.connect(
            self.delta_phi_changed
        )

        self.ui_widgets_manager.start_alignment_button.clicked.connect(
            self.start_centring
        )

        self.ui_widgets_manager.cancel_alignment_button.clicked.connect(
            self.cancel_centring
        )

        # TODO : add show center and show help line functionalities
        self.ui_widgets_manager.show_center_checkbox.hide()
        self.ui_widgets_manager.show_help_line_checkbox.hide()
        
        # Other ---------------------------------------------------------------

        self.plot_data_X = []
        self.plot_data_Y = []
        self.connect(HWR.beamline.sample_view, "centringStarted", self.centring_started)
        self.connect(HWR.beamline.sample_view, "centringFailed", self.centring_failed)
        self.connect(
            HWR.beamline.sample_view, "centringSuccessful", self.centring_successful
        )
        self.connect(HWR.beamline.diffractometer, "centring_image_clicked", self.image_clicked)
        self.connect(HWR.beamline.diffractometer, "centring_calculation_ended", self.show_centring_paremeters)

        self.change_point_number(self.points_for_aligment)

        # init delta_phi var value
        self.delta_phi_changed()

        # match default values in .ui file
        self.points_for_aligment = self.ui_widgets_manager.number_points_spinbox.value()
        self.delta_phi = float(self.ui_widgets_manager.delta_phi_textbox.text())
コード例 #18
0
    def __init__(self, parent=None, name="char_parameter_widget"):

        qt_import.QWidget.__init__(self, parent)

        if name is not None:
            self.setObjectName(name)

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self._char = None
        self._char_params = queue_model_objects.CharacterisationParameters()
        self._char_params_mib = DataModelInputBinder(self._char_params)
        self._tree_view_item = None
        self.previous_energy = None

        self.add_dc_cb = None

        # Graphic elements ----------------------------------------------------
        main_widget = qt_import.QWidget(self)
        rone_widget = qt_import.QWidget(main_widget)
        self.reference_img_widget = ReferenceImageWidget(rone_widget)
        self.acq_widget = self.reference_img_widget.acq_widget
        self.path_widget = self.reference_img_widget.path_widget
        self.position_widget = qt_import.load_ui_file(
            "snapshot_widget_layout.ui")
        self.position_widget.setMinimumSize(450, 340)

        rtwo_widget = qt_import.QWidget(main_widget)
        self.char_type_widget = CharTypeWidget(rtwo_widget)
        self.routine_dc_widget = self.char_type_widget.routine_dc_page
        self.sad_widget = self.char_type_widget.sad_page
        self.rad_dmg_char_widget = self.char_type_widget.rad_damage_page
        self.opt_parameters_widget = OptimisationParametersWidgetLayout(self)

        rtree_widget = qt_import.QWidget(main_widget)
        self.rad_dmg_widget = qt_import.load_ui_file(
            "radiation_damage_model_widget_layout.ui")
        self.vertical_dimension_widget = qt_import.load_ui_file(
            "vertical_crystal_dimension_widget_layout.ui")

        # Layout --------------------------------------------------------------
        rone_widget_layout = qt_import.QHBoxLayout(rone_widget)
        rone_widget_layout.addWidget(self.reference_img_widget)
        rone_widget_layout.addWidget(self.position_widget)
        # rone_widget_layout.addStretch(0)
        rone_widget_layout.setSpacing(2)
        rone_widget_layout.setContentsMargins(0, 0, 0, 0)

        rtwo_widget_layout = qt_import.QHBoxLayout(rtwo_widget)
        rtwo_widget_layout.addWidget(self.char_type_widget)
        rtwo_widget_layout.addWidget(self.opt_parameters_widget)
        rtwo_widget_layout.addStretch(0)
        rtwo_widget_layout.setSpacing(2)
        rtwo_widget_layout.setContentsMargins(0, 0, 0, 0)

        rtree_widget_layout = qt_import.QHBoxLayout(rtree_widget)
        rtree_widget_layout.addWidget(self.rad_dmg_widget)
        rtree_widget_layout.addWidget(self.vertical_dimension_widget)
        rtree_widget_layout.addStretch(10)
        rtree_widget_layout.setSpacing(2)
        rtree_widget_layout.setContentsMargins(0, 0, 0, 0)

        _main_widget_vlayout = qt_import.QVBoxLayout(main_widget)
        _main_widget_vlayout.addWidget(rone_widget)
        _main_widget_vlayout.addWidget(rtwo_widget)
        _main_widget_vlayout.addWidget(rtree_widget)
        _main_widget_vlayout.addStretch(10)
        _main_widget_vlayout.setSpacing(2)
        _main_widget_vlayout.setContentsMargins(0, 0, 0, 0)

        _main_hlayout = qt_import.QHBoxLayout(self)
        _main_hlayout.addWidget(main_widget)
        _main_hlayout.setSpacing(0)
        _main_hlayout.addStretch(0)
        _main_hlayout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies -------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.toggle_permitted_range(
            self.opt_parameters_widget.opt_param_widget.permitted_range_cbx.
            isChecked())

        self.opt_parameters_widget.opt_param_widget.permitted_range_cbx.toggled.connect(
            self.toggle_permitted_range)

        # Other ---------------------------------------------------------------
        self._char_params_mib.bind_value_update(
            "min_dose",
            self.routine_dc_widget.dose_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "min_time",
            self.routine_dc_widget.time_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "use_min_dose", self.routine_dc_widget.min_dose_radio, bool, None)

        self._char_params_mib.bind_value_update(
            "use_min_time", self.routine_dc_widget.min_time_radio, bool, None)

        self._char_params_mib.bind_value_update(
            "account_rad_damage",
            self.routine_dc_widget.radiation_damage_cbx,
            bool,
            None,
        )

        self._char_params_mib.bind_value_update(
            "auto_res", self.sad_widget.automatic_resolution_radio, bool, None)

        self._char_params_mib.bind_value_update(
            "sad_res",
            self.sad_widget.sad_resolution_ledit,
            float,
            qt_import.QDoubleValidator(0.5, 20, 3, self),
        )

        self._char_params_mib.bind_value_update(
            "opt_sad", self.sad_widget.optimised_sad_cbx, bool, None)

        self._char_params_mib.bind_value_update(
            "determine_rad_params", self.rad_dmg_char_widget.rad_damage_cbx,
            bool, None)

        self._char_params_mib.bind_value_update(
            "burn_osc_start",
            self.rad_dmg_char_widget.burn_osc_start_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "burn_osc_interval",
            self.rad_dmg_char_widget.burn_osc_interval_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "use_aimed_resolution",
            self.opt_parameters_widget.opt_param_widget.maximum_res_cbx,
            bool,
            None,
        )

        self._char_params_mib.bind_value_update(
            "use_aimed_multiplicity",
            self.opt_parameters_widget.opt_param_widget.aimed_mult_cbx,
            bool,
            None,
        )

        self._char_params_mib.bind_value_update(
            "aimed_resolution",
            self.opt_parameters_widget.opt_param_widget.maximum_res_ledit,
            float,
            qt_import.QDoubleValidator(0.01, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "aimed_multiplicity",
            self.opt_parameters_widget.opt_param_widget.aimed_mult_ledit,
            float,
            qt_import.QDoubleValidator(0.01, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "aimed_i_sigma",
            self.opt_parameters_widget.opt_param_widget.i_over_sigma_ledit,
            float,
            qt_import.QDoubleValidator(0.01, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "aimed_completness",
            self.opt_parameters_widget.opt_param_widget.aimed_comp_ledit,
            float,
            qt_import.QDoubleValidator(0.01, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "strategy_complexity",
            self.opt_parameters_widget.opt_param_widget.start_comp_cbox,
            int,
            None,
        )

        self._char_params_mib.bind_value_update(
            "use_permitted_rotation",
            self.opt_parameters_widget.opt_param_widget.permitted_range_cbx,
            bool,
            None,
        )

        self._char_params_mib.bind_value_update(
            "permitted_phi_start",
            self.opt_parameters_widget.opt_param_widget.phi_start_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "permitted_phi_end",
            self.opt_parameters_widget.opt_param_widget.phi_end_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "low_res_pass_strat",
            self.opt_parameters_widget.opt_param_widget.low_res_pass_cbx,
            bool,
            None,
        )

        self._char_params_mib.bind_value_update(
            "rad_suscept",
            self.rad_dmg_widget.sensetivity_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "beta",
            self.rad_dmg_widget.beta_over_gray_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "gamma",
            self.rad_dmg_widget.gamma_over_gray_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "max_crystal_vdim",
            self.vertical_dimension_widget.max_vdim_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "min_crystal_vdim",
            self.vertical_dimension_widget.min_vdim_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "min_crystal_vphi",
            self.vertical_dimension_widget.min_vphi_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        self._char_params_mib.bind_value_update(
            "max_crystal_vphi",
            self.vertical_dimension_widget.max_vphi_ledit,
            float,
            qt_import.QDoubleValidator(0.0, 1000, 2, self),
        )

        # self._char_params_mib.bind_value_update('space_group',
        #                                        self.vertical_dimension_widget.space_group_ledit,
        #                                        str,
        #                                        None)

        self.vertical_dimension_widget.space_group_ledit.addItems(
            queue_model_enumerables.XTAL_SPACEGROUPS)

        self.char_type_widget.charact_type_tbox.currentChanged.connect(
            self.update_char_type)
        self.rad_dmg_char_widget.rad_damage_cbx.toggled.connect(
            self.enable_opt_parameters_widget)
        self.opt_parameters_widget.opt_param_widget.maximum_res_cbx.toggled.connect(
            self.enable_maximum_res_ledit)
        self.opt_parameters_widget.opt_param_widget.aimed_mult_cbx.toggled.connect(
            self.enable_aimed_mult_ledit)
        self.path_widget.data_path_layout.prefix_ledit.textChanged.connect(
            self._prefix_ledit_change)
        self.path_widget.data_path_layout.run_number_ledit.textChanged.connect(
            self._run_number_ledit_change)
        self.vertical_dimension_widget.space_group_ledit.activated.connect(
            self._space_group_change)
コード例 #19
0
    def __init__(
        self,
        parent=None,
        name=None,
        fl=0,
        acq_params=None,
        path_template=None,
        layout=None,
    ):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))
        if name is not None:
            self.setObjectName(name)

        # Internal variables --------------------------------------------------
        self.value_changed_list = []

        # Properties ----------------------------------------------------------

        # Signals -------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        if acq_params is None:
            self._acquisition_parameters = queue_model_objects.AcquisitionParameters(
            )
        else:
            self._acquisition_parameters = acq_params
        if path_template is None:
            self._path_template = queue_model_objects.PathTemplate()
        else:
            self._path_template = path_template

        self._acquisition_mib = DataModelInputBinder(
            self._acquisition_parameters)
        self.acq_widget_layout = qt_import.load_ui_file(
            "acquisition_widget_vertical_simple_layout.ui")

        # Layout --------------------------------------------------------------
        main_layout = qt_import.QVBoxLayout(self)
        main_layout.addWidget(self.acq_widget_layout)
        main_layout.setSpacing(0)
        main_layout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.acq_widget_layout.osc_start_cbox.stateChanged.connect(
            self.use_osc_start)
        self.acq_widget_layout.num_images_cbox.activated.connect(
            self.update_num_images)
        self.acq_widget_layout.detector_roi_mode_combo.activated.connect(
            self.detector_roi_mode_changed)

        # Other ---------------------------------------------------------------
        self.osc_start_validator = qt_import.QDoubleValidator(
            -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit)
        self.osc_range_validator = qt_import.QDoubleValidator(
            -10000, 10000, 4, self.acq_widget_layout.osc_range_ledit)
        self.kappa_validator = qt_import.QDoubleValidator(
            0, 360, 4, self.acq_widget_layout.kappa_ledit)
        self.kappa_phi_validator = qt_import.QDoubleValidator(
            0, 360, 4, self.acq_widget_layout.kappa_phi_ledit)
        self.energy_validator = qt_import.QDoubleValidator(
            0, 25, 5, self.acq_widget_layout.energy_ledit)
        self.resolution_validator = qt_import.QDoubleValidator(
            0, 15, 3, self.acq_widget_layout.resolution_ledit)
        self.transmission_validator = qt_import.QDoubleValidator(
            0, 100, 3, self.acq_widget_layout.transmission_ledit)
        self.exp_time_validator = qt_import.QDoubleValidator(
            0, 10000, 6, self.acq_widget_layout.exp_time_ledit)
        self.acq_widget_layout.num_images_cbox.setCurrentIndex(1)

        self.acq_widget_layout.detector_roi_mode_label.setEnabled(False)
        self.acq_widget_layout.detector_roi_mode_combo.setEnabled(False)

        self.set_tunable_energy(HWR.beamline.tunable_wavelength)

        if HWR.beamline.diffractometer.in_plate_mode():
            self.acq_widget_layout.num_images_cbox.clear()
            self.acq_widget_layout.num_images_cbox.addItem("1")
            self.acq_widget_layout.num_images_cbox.setCurrentIndex(0)

        self.init_detector_roi_modes()
        self.init_limits()
コード例 #20
0
    def __init__(self, parent=None, name="", fl=0, data_model=None, layout=None):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))

        if name is not None:
            self.setObjectName(name)
        self.parent = parent

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self._base_image_dir = ""
        self._base_process_dir = ""
        self.path_conflict_state = False
        self.enable_macros = False

        if data_model is None:
            self._data_model = queue_model_objects.PathTemplate()
        else:
            self._data_model = data_model

        self._data_model_pm = DataModelInputBinder(self._data_model)

        # Graphic elements ----------------------------------------------------
        if layout == "vertical":
            self.data_path_layout = qt_import.load_ui_file(
                "data_path_widget_vertical_layout.ui"
            )
        else:
            self.data_path_layout = qt_import.load_ui_file(
                "data_path_widget_horizontal_layout.ui"
            )

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.data_path_layout)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)

        # Qt signal/slot connections ------------------------------------------
        self.data_path_layout.prefix_ledit.textChanged.connect(
            self._prefix_ledit_change
        )
        self.data_path_layout.run_number_ledit.textChanged.connect(
            self._run_number_ledit_change
        )
        self.data_path_layout.browse_button.clicked.connect(self._browse_clicked)
        self.data_path_layout.folder_ledit.textChanged.connect(
            self._folder_ledit_change
        )
        self.data_path_layout.compression_cbox.clicked.connect(
            self._compression_toggled
        )

        # Other ---------------------------------------------------------------
        self._data_model_pm.bind_value_update(
            "base_prefix", self.data_path_layout.prefix_ledit, str, None
        )

        self._data_model_pm.bind_value_update(
            "run_number",
            self.data_path_layout.run_number_ledit,
            int,
            qt_import.QIntValidator(0, 1000, self),
        )

        self._data_model_pm.bind_value_update(
            "compression", self.data_path_layout.compression_cbox, bool, None
        )
コード例 #21
0
    def __init__(self, parent=None, name=None, fl=0, xray_imaging_params=None):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))

        if name is not None:
            self.setObjectName(name)

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self.current_image_num = 0
        self.total_image_num = 0

        # Properties ----------------------------------------------------------

        # Signals -------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        results_gbox = qt_import.QGroupBox("Results", self)
        
        self.graphics_view_widget = qt_import.QWidget(results_gbox)
        self.results_widget = qt_import.load_ui_file(
            "xray_imaging_results_widget_layout.ui"
        )
        tools_widget = qt_import.QGroupBox(self) 
        button_widget = qt_import.QWidget(self)
        self.start_centering_button = qt_import.QPushButton(
            icons.load_icon("VCRPlay2"), "3 Click", tools_widget
        )
        self.start_n_centering_button = qt_import.QPushButton(
            icons.load_icon("VCRPlay"), "n Click", tools_widget
        )
        self.accept_centering_button = qt_import.QPushButton(
            icons.load_icon("ThumbUp"), "Save", tools_widget
        )
        self.histogram_plot = PlotWidget(self)

        self.popup_menu = qt_import.QMenu(self)
        self.popup_menu.menuAction().setIconVisibleInMenu(True)

        self.popup_menu.addAction(
            icons.load_icon("VCRPlay2"),
            "Start 3-click centering",
            start_centering_clicked,
        )
        self.popup_menu.addAction(
            icons.load_icon("VCRPlay"),
            "Start n-click centering",
            start_n_centering_clicked,
        )
        self.popup_menu.addAction(
            icons.load_icon("ThumbUp"),
            "Create centering point",
            self.accept_centering_clicked,
        )

        self.popup_menu.addSeparator()
        self.measure_distance_action = self.popup_menu.addAction(
            icons.load_icon("measure_distance"),
            "Distance and histogram",
            measure_distance_clicked,
        )

        # Layout --------------------------------------------------------------
        self._graphics_view_widget_vlayout = qt_import.QVBoxLayout(
            self.graphics_view_widget
        )
        self._graphics_view_widget_vlayout.setSpacing(0)
        self._graphics_view_widget_vlayout.setContentsMargins(0, 0, 0, 0)

        __button_widget_hlayout = qt_import.QHBoxLayout(button_widget)
        __button_widget_hlayout.addWidget(self.start_centering_button)
        __button_widget_hlayout.addWidget(self.start_n_centering_button)
        __button_widget_hlayout.addWidget(self.accept_centering_button)
        __button_widget_hlayout.addStretch()
        __button_widget_hlayout.setSpacing(2)
        __button_widget_hlayout.setContentsMargins(2, 2, 2, 2)

        __tools_widget_vlayout = qt_import.QVBoxLayout(tools_widget)
        __tools_widget_vlayout.addWidget(button_widget)
        __tools_widget_vlayout.addWidget(self.results_widget)
        __tools_widget_vlayout.addWidget(self.histogram_plot)
        __tools_widget_vlayout.addStretch()
        __tools_widget_vlayout.setSpacing(2)
        __tools_widget_vlayout.setContentsMargins(2, 2, 2, 2)

        __main_hlayout = qt_import.QHBoxLayout(self)
        __main_hlayout.addWidget(self.graphics_view_widget)
        __main_hlayout.addWidget(tools_widget)
        __main_hlayout.setSpacing(0)
        __main_hlayout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.results_widget.data_browse_button.clicked.connect(
            self.data_browse_button_clicked
        )
        self.results_widget.ff_browse_button.clicked.connect(
            self.ff_browse_button_clicked
        )
        self.results_widget.config_browse_button.clicked.connect(
            self.config_browse_button_clicked
        ) 
        self.results_widget.load_button.clicked.connect(
            self.load_button_clicked
        )
        self.results_widget.first_image_button.clicked.connect(
            first_image_button_clicked
        )
        self.results_widget.prev_image_button.clicked.connect(
            self.prev_image_button_clicked
        )
        self.results_widget.next_image_button.clicked.connect(
            self.next_image_button_clicked
        )
        self.results_widget.last_image_button.clicked.connect(
            self.last_image_button_clicked
        )
        self.results_widget.minus_quarter_button.clicked.connect(
            self.minus_quater_button_clicked
        )
        self.results_widget.plus_quarter_button.clicked.connect(
            plus_quater_button_clicked
        )

        self.results_widget.image_dial.valueChanged.connect(
            dial_value_changed
        )

        self.results_widget.image_spinbox.valueChanged.connect(
            spinbox_value_changed
        )

        self.results_widget.play_button.clicked.connect(self.play_button_clicked)
        self.results_widget.stop_button.clicked.connect(stop_button_clicked)
        self.results_widget.repeat_cbox.stateChanged.connect(repeat_state_changed)
        self.results_widget.ff_apply_cbox.stateChanged.connect(
            ff_apply_state_changed
        )

        self.start_centering_button.clicked.connect(start_centering_clicked)
        self.accept_centering_button.clicked.connect(accept_centering_clicked)

        # Other ---------------------------------------------------------------
        self.results_widget.first_image_button.setIcon(icons.load_icon("VCRRewind"))
        self.results_widget.prev_image_button.setIcon(icons.load_icon("VCRPlay4"))
        self.results_widget.next_image_button.setIcon(icons.load_icon("VCRPlay2"))
        self.results_widget.last_image_button.setIcon(
            icons.load_icon("VCRFastForward2")
        )
        self.results_widget.play_button.setIcon(icons.load_icon("VCRPlay"))
        self.results_widget.stop_button.setIcon(icons.load_icon("Stop2"))

        self.start_centering_button.setFixedSize(70, 50)
        self.start_n_centering_button.setFixedSize(70, 50)
        self.accept_centering_button.setFixedSize(70, 50)

        if HWR.beamline.imaging is not None:
            HWR.beamline.imaging.connect("imageInit", self.image_init)
            HWR.beamline.imaging.connect("imageLoaded", self.image_loaded)
            HWR.beamline.imaging.connect(
                "measureItemChanged", self.measure_item_changed
            )

            self.graphics_view = HWR.beamline.imaging.get_graphics_view()
            self._graphics_view_widget_vlayout.addWidget(self.graphics_view)
            self.graphics_view_widget.setFixedSize(
                self.graphics_view.scene().width(), self.graphics_view.scene().height()
            )

            self.setDisabled(False)
        else:
            self.setDisabled(True)
コード例 #22
0
ファイル: ssx_control_brick.py プロジェクト: rhfogh/mxcube
    def __init__(self, *args):
        BaseWidget.__init__(self, *args)

        # Hardware objects ----------------------------------------------------
        self.ssx_control_hwobj = None

        # Internal values -----------------------------------------------------
        self.current_chip_config = None
        self.chip_file_dir = ""
        self.chip_filenames_list = []
        self.shortlist_dir = ""

        # Properties ----------------------------------------------------------

        # Properties to initialize hardware objects --------------------------
        self.add_property("hwobj_ssx_control", "string", "")

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.ssx_widget_layout = qt_import.load_ui_file(
            "ssx_control_widget_layout.ui")

        # Layout --------------------------------------------------------------
        _main_layout = qt_import.QVBoxLayout(self)
        _main_layout.addWidget(self.ssx_widget_layout)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self.ssx_widget_layout.start_button.clicked.connect(
            self.start_experiment)
        self.ssx_widget_layout.chip_file_dir_browse_button.clicked.connect(
            self.get_chip_file_directory)
        self.ssx_widget_layout.shortlist_dir_browse_button.clicked.connect(
            self.get_shortlist_directory)
        self.ssx_widget_layout.save_chip_data_button.clicked.connect(
            self.save_chip_data)
        self.ssx_widget_layout.create_shortlist_button.clicked.connect(
            self.create_short_list)
        self.ssx_widget_layout.enable_all_button.clicked.connect(
            self.enable_all)
        self.ssx_widget_layout.disable_all_button.clicked.connect(
            self.disable_all)
        self.ssx_widget_layout.color_table.itemSelectionChanged.connect(
            self.change_cell_color)
        self.ssx_widget_layout.quarter_density_checkbox.stateChanged.connect(
            self.quarter_density_enabled)
        self.ssx_widget_layout.quarter_density_checkbox.setEnabled(False)
        self.ssx_widget_layout.meandering_checkbox.stateChanged.connect(
            self.meandering_enabled)

        # Other ---------------------------------------------------------------
        self.ssx_widget_layout.crystal_h_pitch_spinbox.valueChanged.connect(
            self.crystal_h_pitch_changed)
        self.ssx_widget_layout.crystal_v_pitch_spinbox.valueChanged.connect(
            self.crystal_v_pitch_changed)
        self.ssx_widget_layout.comp_h_pitch_spinbox.valueChanged.connect(
            self.comp_h_pitch_changed)
        self.ssx_widget_layout.comp_v_pitch_spinbox.valueChanged.connect(
            self.comp_v_pitch_changed)
        self.ssx_widget_layout.num_crystal_h_spinbox.valueChanged.connect(
            self.num_crystal_h_changed)
        self.ssx_widget_layout.num_crystal_v_spinbox.valueChanged.connect(
            self.num_crystal_v_changed)
        self.ssx_widget_layout.num_comp_h_spinbox.valueChanged.connect(
            self.num_comp_h_changed)
        self.ssx_widget_layout.num_comp_v_spinbox.valueChanged.connect(
            self.num_copm_v_changed)

        self.ssx_widget_layout.meandering_checkbox.setEnabled(False)

        # connect exposures per feature
        self.ssx_widget_layout.exp_per_feature_spinbox.valueChanged[
            unicode].connect(self.set_exposures_per_feature)
        # show names and one column at exposures per feature
        self.ssx_widget_layout.dg_channels_table.setRowCount(4)
        self.ssx_widget_layout.dg_channels_table.setColumnCount(1)
        # headers names
        self.ssx_widget_layout.dg_channels_table.setVerticalHeaderLabels(
            qt_import.QString("Detector;Excitation;Aux1;Aux2").split(";"))
        # set first column of checkboxes
        dg_channels_list = []

        for row in range(0, 4):
            checkbox_item = qt_import.QTableWidgetItem()
            checkbox_item.setFlags(qt_import.Qt.ItemIsUserCheckable
                                   | qt_import.Qt.ItemIsEnabled)
            checkbox_item.setCheckState(qt_import.Qt.Unchecked)
            dg_channels_list.append(checkbox_item)
            self.ssx_widget_layout.dg_channels_table.setItem(
                row, 0, checkbox_item)

        # set a color table with 3 by 3 cells
        self.ssx_widget_layout.color_table.setRowCount(3)
        self.ssx_widget_layout.color_table.setColumnCount(3)
        # set min size of cells
        self.ssx_widget_layout.color_table.horizontalHeader(
        ).setDefaultSectionSize(25)
        self.ssx_widget_layout.color_table.verticalHeader(
        ).setDefaultSectionSize(25)
        # table is non editable
        self.ssx_widget_layout.color_table.setEditTriggers(
            qt_import.QAbstractItemView.NoEditTriggers)
        # fill the table with empty items
        for row in range(0, 3):
            for column in range(0, 3):
                self.ssx_widget_layout.color_table.setItem(
                    row, column, qt_import.QTableWidgetItem())
                self.ssx_widget_layout.color_table.item(
                    row, column).setBackground(colors.GREEN)

        # connect scan rate
        self.ssx_widget_layout.scan_rate_ledit.textEdited.connect(
            self.scan_rate_text_changed)
コード例 #23
0
    def __init__(self, parent=None, name="dc_group_widget"):

        qt_import.QWidget.__init__(self, parent)
        if name is not None:
            self.setObjectName(name)

        # Properties ----------------------------------------------------------

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self._data_collection = None
        self.add_dc_cb = None
        self._tree_view_item = None

        _subwedge_widget = qt_import.QGroupBox("Summary", self)
        self.polar_scater_widget = PolarScaterWidget()
        self.subwedge_table = qt_import.QTableWidget(_subwedge_widget)
        self.position_widget = qt_import.load_ui_file("snapshot_widget_layout.ui")

        # Layout --------------------------------------------------------------
        _subwedge_widget_vlayout = qt_import.QVBoxLayout(_subwedge_widget)
        _subwedge_widget_vlayout.addWidget(self.polar_scater_widget)
        _subwedge_widget_vlayout.addWidget(self.subwedge_table)
        _subwedge_widget_vlayout.setContentsMargins(0, 4, 0, 0)
        _subwedge_widget_vlayout.setSpacing(6)
        _subwedge_widget_vlayout.addStretch(0)

        _main_hlayout = qt_import.QHBoxLayout(self)
        _main_hlayout.addWidget(_subwedge_widget)
        _main_hlayout.setContentsMargins(0, 0, 0, 0)
        _main_hlayout.setSpacing(2)
        _main_hlayout.addStretch(0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------

        # Other ---------------------------------------------------------------
        # self.polar_scater_widget.setFixedSize(600, 600)
        font = self.subwedge_table.font()
        font.setPointSize(8)
        self.subwedge_table.setFont(font)
        self.subwedge_table.setEditTriggers(qt_import.QAbstractItemView.NoEditTriggers)
        self.subwedge_table.setColumnCount(7)
        self.subwedge_table.horizontalHeader().setStretchLastSection(False)

        horizontal_headers = [
            "Osc start",
            "Osc range",
            "Images",
            "Exposure time",
            "Energy",
            "Transmission",
            "Resolution",
        ]
        for index, header in enumerate(horizontal_headers):
            self.subwedge_table.setHorizontalHeaderItem(
                index, qt_import.QTableWidgetItem(header)
            )
コード例 #24
0
    def __init__(self, parent=None, name=None, fl=0):
        CreateTaskBase.__init__(
            self, parent, name, qt_import.Qt.WindowFlags(fl), "Advanced"
        )

        if not name:
            self.setObjectName("create_advanced_widget")

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self._advanced_methods = None
        self._grid_map = {}
        self.spacing = [0, 0]
        self.dc_selected = False

        self.init_models()

        # Graphic elements ----------------------------------------------------
        self._advanced_methods_widget = qt_import.load_ui_file(
            "advanced_methods_layout.ui"
        )
        self._acq_widget = AcquisitionWidget(
            self,
            "acquisition_widget",
            layout="vertical",
            acq_params=self._acquisition_parameters,
            path_template=self._path_template,
        )
        self._acq_widget.grid_mode = True

        self._data_path_widget = DataPathWidget(
            self,
            "create_dc_path_widget",
            data_model=self._path_template,
            layout="vertical",
        )

        self._comments_widget = CommentsWidget(self)

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self._advanced_methods_widget)
        _main_vlayout.addWidget(self._acq_widget)
        _main_vlayout.addWidget(self._data_path_widget)
        _main_vlayout.addWidget(self._comments_widget)
        _main_vlayout.addStretch(0)
        _main_vlayout.setSpacing(6)
        _main_vlayout.setContentsMargins(2, 2, 2, 2)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self._acq_widget.acqParametersChangedSignal.connect(self.acq_parameters_changed)
        self._acq_widget.madEnergySelectedSignal.connect(self.mad_energy_selected)

        self._acq_widget.acq_widget_layout.osc_range_ledit.textEdited.connect(
            self.grid_osc_range_ledit_changed
        )
        self._acq_widget.acq_widget_layout.osc_total_range_ledit.textEdited.connect(
            self.grid_osc_total_range_ledit_changed
        )

        self._data_path_widget.pathTemplateChangedSignal.connect(
            self.path_template_changed
        )

        self._advanced_methods_widget.grid_treewidget.itemSelectionChanged.connect(
            self.grid_treewidget_item_selection_changed
        )
        self._advanced_methods_widget.draw_grid_button.clicked.connect(
            self.draw_grid_button_clicked
        )
        self._advanced_methods_widget.remove_grid_button.clicked.connect(
            self.remove_grid_button_clicked
        )
        self._advanced_methods_widget.hor_spacing_ledit.textEdited.connect(
            self.hor_spacing_changed
        )
        self._advanced_methods_widget.ver_spacing_ledit.textEdited.connect(
            self.ver_spacing_changed
        )

        self._advanced_methods_widget.move_right_button.clicked.connect(
            lambda: self.move_grid("right")
        )
        self._advanced_methods_widget.move_left_button.clicked.connect(
            lambda: self.move_grid("left")
        )
        self._advanced_methods_widget.move_up_button.clicked.connect(
            lambda: self.move_grid("up")
        )
        self._advanced_methods_widget.move_down_button.clicked.connect(
            lambda: self.move_grid("down")
        )

        self._advanced_methods_widget.overlay_cbox.toggled.connect(self.overlay_toggled)
        self._advanced_methods_widget.overlay_slider.valueChanged.connect(
            self.overlay_alpha_changed
        )
        self._advanced_methods_widget.overlay_color_button.clicked.connect(
            self.overlay_change_color
        )
        self._advanced_methods_widget.move_to_grid_button.clicked.connect(
            self.move_to_grid
        )
        self._advanced_methods_widget.method_combo.activated.connect(
            self.method_combo_activated
        )

        # Other ---------------------------------------------------------------
        self._acq_widget.use_osc_start(False)
        self._acq_widget.use_kappa(False)
        self._acq_widget.acq_widget_layout.num_images_label.setEnabled(False)
        self._acq_widget.acq_widget_layout.num_images_ledit.setEnabled(False)
        for col in range(self._advanced_methods_widget.grid_treewidget.columnCount()):
            self._advanced_methods_widget.grid_treewidget.resizeColumnToContents(col)

        self._acq_widget.acq_widget_layout.osc_total_range_label.setText(
            "Total osc. range per line"
        )

        self._advanced_methods = list(HWR.beamline.advanced_methods)
        if self._advanced_methods:
            for method in self._advanced_methods:
                self._advanced_methods_widget.method_combo.addItem(method)
        else:
            self.setEnabled(False)

        self._acq_widget.acq_widget_layout.osc_start_label.setText(
            "Oscillation middle:"
        )

        hor_size, ver_size = HWR.beamline.beam.get_beam_size()
        self.spacing[0] = hor_size
        self.spacing[1] = ver_size

        self._advanced_methods_widget.hor_spacing_ledit.setText(
            "%.1f" % (hor_size * 1000)
        )
        self._advanced_methods_widget.ver_spacing_ledit.setText(
            "%.1f" % (ver_size * 1000)
        )

        HWR.beamline.sample_view.connect("shapeCreated", self.shape_created)
        HWR.beamline.sample_view.connect("shapeChanged", self.shape_changed)
        HWR.beamline.sample_view.connect("shapeDeleted", self.shape_deleted)
        self._comments_widget.setHidden(True)
コード例 #25
0
ファイル: beamline_test_brick.py プロジェクト: rhfogh/mxcube
    def __init__(self, *args):
        BaseWidget.__init__(self, *args)

        # Hardware objects ----------------------------------------------------
        self.beamline_test_hwobj = None
        self.unittest_hwobj = None

        # Internal variables --------------------------------------------------
        self.available_tests = None
        self.com_device_list = None

        # Properties ----------------------------------------------------------
        self.add_property("mnemonic", "string", "")
        self.add_property("hwobj_unittest", "string", "")

        # Signals ------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.beamline_test_widget = qt_import.load_ui_file(
            "beamline_test_widget_layout.ui"
        )

        self.test_toolbox = self.beamline_test_widget.test_toolbox
        self.test_queue_page = self.beamline_test_widget.queue_toolbox_page
        self.test_com_page = self.beamline_test_widget.com_toolbox_page
        self.test_focus_page = self.beamline_test_widget.focus_toolbox_page
        self.test_ppu_page = self.beamline_test_widget.ppu_toolbox_page

        self.com_device_table = self.beamline_test_widget.comm_device_table
        # self.current_test_listwidget = self.beamline_test_widget.current_test_listbox
        self.available_tests_listwidget = (
            self.beamline_test_widget.available_tests_listwidget
        )

        _web_view_widget = qt_import.QWidget(self)
        _load_last_test_button = qt_import.QPushButton(
            "View last results", _web_view_widget
        )
        self.test_result_browser = WebViewWidget(_web_view_widget)

        # Layout --------------------------------------------------------------
        _web_view_widget_vlayout = qt_import.QVBoxLayout(_web_view_widget)
        _web_view_widget_vlayout.addWidget(_load_last_test_button)
        _web_view_widget_vlayout.addWidget(self.test_result_browser)
        _web_view_widget_vlayout.setSpacing(2)
        _web_view_widget_vlayout.setContentsMargins(0, 0, 0, 0)

        _main_vlayout = qt_import.QHBoxLayout(self)
        _main_vlayout.addWidget(self.beamline_test_widget)
        _main_vlayout.addWidget(_web_view_widget)
        _main_vlayout.setSpacing(2)
        _main_vlayout.setContentsMargins(2, 2, 2, 2)

        # Qt signal/slot connections ------------------------------------------
        self.beamline_test_widget.execute_all_button.clicked.connect(
            self.execute_all_tests_clicked
        )
        self.beamline_test_widget.test_button.clicked.connect(self.execute_test_clicked)
        self.beamline_test_widget.focus_modes_combo.activated.connect(
            self.set_focus_mode_pressed
        )
        self.available_tests_listwidget.itemDoubleClicked.connect(
            self.available_tests_double_clicked
        )

        _load_last_test_button.clicked.connect(self.load_latest_test_results)
        self.beamline_test_widget.ppu_restart_button.clicked.connect(self.restart_ppu)

        # Other ---------------------------------------------------------------
        # self.beamline_test_widget.setFixedWidth(600)
        self.test_result_browser.setSizePolicy(
            qt_import.QSizePolicy.Expanding, qt_import.QSizePolicy.Expanding
        )
        _load_last_test_button.setFixedWidth(200)

        self.test_toolbox.setCurrentWidget(self.test_queue_page)
        self.beamline_test_widget.setFixedWidth(700)
        self.test_result_browser.navigation_bar.setHidden(True)
コード例 #26
0
    def __init__(self, parent=None, name=None, fl=0):

        CreateTaskBase.__init__(self, parent, name, fl, "Helical")

        if not name:
            self.setObjectName("create_helical_widget")
        self.init_models()

        # Hardware objects ----------------------------------------------------

        # Internal variables --------------------------------------------------
        self._lines_map = {}

        # Graphic elements ----------------------------------------------------
        self._lines_widget = qt_import.load_ui_file(
            "helical_line_widget_layout.ui")

        self._acq_widget = AcquisitionWidget(
            self,
            "acquisition_widget",
            layout="vertical",
            acq_params=self._acquisition_parameters,
            path_template=self._path_template,
        )

        self._data_path_widget = DataPathWidget(
            self,
            "create_dc_path_widget",
            data_model=self._path_template,
            layout="vertical",
        )

        self._processing_widget = ProcessingWidget(
            self, data_model=self._processing_parameters)

        self._comments_widget = CommentsWidget(self)

        # Layout --------------------------------------------------------------
        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self._lines_widget)
        _main_vlayout.addWidget(self._acq_widget)
        _main_vlayout.addWidget(self._data_path_widget)
        _main_vlayout.addWidget(self._processing_widget)
        _main_vlayout.addWidget(self._comments_widget)
        _main_vlayout.addStretch(0)
        _main_vlayout.setSpacing(6)
        _main_vlayout.setContentsMargins(2, 2, 2, 2)

        # SizePolicies --------------------------------------------------------
        self._comments_widget.setFixedHeight(100)

        # Qt signal/slot connections ------------------------------------------
        self._lines_widget.lines_treewidget.itemSelectionChanged.connect(
            self.lines_treewidget_selection_changed)
        self._lines_widget.create_line_button.clicked.connect(
            self.create_line_button_clicked)
        self._lines_widget.create_auto_line_button.clicked.connect(
            self.create_auto_line_button_clicked)
        self._lines_widget.remove_line_button.clicked.connect(
            self.remove_line_button_clicked)
        self._lines_widget.overlay_cbox.stateChanged.connect(
            self.overlay_toggled)
        self._lines_widget.overlay_slider.valueChanged.connect(
            self.overlay_alpha_changed)
        self._lines_widget.swap_points_button.clicked.connect(
            self.swap_points_clicked)

        self._acq_widget.acqParametersChangedSignal.connect(
            self.acq_parameters_changed)
        self._acq_widget.madEnergySelectedSignal.connect(
            self.mad_energy_selected)
        self._data_path_widget.pathTemplateChangedSignal.connect(
            self.path_template_changed)
        self._processing_widget.enableProcessingSignal.connect(
            self._run_processing_toggled)
        # Other ---------------------------------------------------------------
        for col in range(self._lines_widget.lines_treewidget.columnCount()):
            self._lines_widget.lines_treewidget.resizeColumnToContents(col)
        # self._processing_widget.processing_widget.\
        #     run_online_processing_cbox.setChecked(False)

        self._processing_widget.processing_widget.run_online_processing_cbox.setChecked(
            HWR.beamline.run_online_processing)
        self.enable_widgets(False)

        shapes = HWR.beamline.sample_view.get_shapes()
        for shape in shapes:
            if isinstance(shape, GraphicsItemLine):
                self.shape_created(shape, "Line")

        HWR.beamline.sample_view.connect("shapeCreated", self.shape_created)
        HWR.beamline.sample_view.connect("shapeChanged", self.shape_changed)
        HWR.beamline.sample_view.connect("shapeDeleted", self.shape_deleted)

        self._comments_widget.setHidden(True)
コード例 #27
0
ファイル: processing_widget.py プロジェクト: rhfogh/mxcube
    def __init__(self, parent=None, name=None, fl=0, data_model=None):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))
        if name is not None:
            self.setObjectName(name)

        if data_model is None:
            self._model = queue_model_objects.ProcessingParameters()
        else:
            self._model = data_model

        self._model_mib = DataModelInputBinder(self._model)

        self.processing_widget = qt_import.load_ui_file(
            "processing_widget_vertical_layout.ui")

        self.main_layout = qt_import.QVBoxLayout(self)
        self.main_layout.addWidget(self.processing_widget)
        self.main_layout.setSpacing(0)
        self.main_layout.setContentsMargins(0, 0, 0, 0)

        self.processing_widget.space_group_combo.addItems(
            queue_model_enumerables.XTAL_SPACEGROUPS)

        self._model_mib.bind_value_update("cell_a",
                                          self.processing_widget.a_ledit,
                                          float, None)

        self._model_mib.bind_value_update("cell_alpha",
                                          self.processing_widget.alpha_ledit,
                                          float, None)

        self._model_mib.bind_value_update("cell_b",
                                          self.processing_widget.b_ledit,
                                          float, None)

        self._model_mib.bind_value_update("cell_beta",
                                          self.processing_widget.beta_ledit,
                                          float, None)

        self._model_mib.bind_value_update("cell_c",
                                          self.processing_widget.c_ledit,
                                          float, None)

        self._model_mib.bind_value_update("cell_gamma",
                                          self.processing_widget.gamma_ledit,
                                          float, None)

        self._model_mib.bind_value_update(
            "num_residues", self.processing_widget.num_residues_ledit, float,
            None)

        self._model_mib.bind_value_update(
            "resolution_cutoff",
            self.processing_widget.resolution_cutoff_ledit, float, None)

        self._model_mib.bind_value_update(
            "pdb_file", self.processing_widget.pdb_file_ledit, str, None)

        self.processing_widget.space_group_combo.activated.connect(
            self._space_group_change)
        self.processing_widget.run_offline_processing_cbox.stateChanged.connect(
            self._run_offline_processing_toggled)
        self.processing_widget.run_online_processing_cbox.stateChanged.connect(
            self._run_online_processing_toggled)
        self.processing_widget.pdb_file_browse_button.clicked.connect(
            self._browse_clicked)

        self.processing_widget.resolution_cutoff_label.setHidden(True)
        self.processing_widget.resolution_cutoff_ledit.setHidden(True)
        self.processing_widget.pdb_file_label.setHidden(True)
        self.processing_widget.pdb_file_ledit.setHidden(True)
        self.processing_widget.pdb_file_browse_button.setHidden(True)

        if HWR.beamline.offline_processing_methods:
            cbox_text = "Run offline processing ("
            for method in HWR.beamline.offline_processing_methods:
                cbox_text += "%s, " % method
            cbox_text = cbox_text[:-2] + ")"
            self.processing_widget.run_offline_processing_cbox.setText(
                cbox_text)
            self.processing_widget.run_offline_processing_cbox.setChecked(
                HWR.beamline.run_offline_processing)
        else:
            self.processing_widget.run_offline_processing_cbox.setChecked(
                False)
            self.processing_widget.run_offline_processing_cbox.setEnabled(
                False)

        if HWR.beamline.online_processing_methods:
            cbox_text = "Run online processing ("
            for method in HWR.beamline.online_processing_methods:
                cbox_text += "%s, " % method
            cbox_text = cbox_text[:-2] + ")"
            self.processing_widget.run_online_processing_cbox.setText(
                cbox_text)
            self.processing_widget.run_online_processing_cbox.setChecked(
                HWR.beamline.run_online_processing)
        else:
            self.processing_widget.run_online_processing_cbox.setChecked(False)
            self.processing_widget.run_online_processing_cbox.setEnabled(False)
コード例 #28
0
    def __init__(self, parent=None, name=None, fl=0, xray_imaging_params=None):

        qt_import.QWidget.__init__(self, parent, qt_import.Qt.WindowFlags(fl))

        if name is not None:
            self.setObjectName(name)

        # Internal variables --------------------------------------------------

        # Properties ----------------------------------------------------------

        # Signals -------------------------------------------------------------

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self._xray_imaging_parameters = xray_imaging_params
        self._xray_imaging_mib = DataModelInputBinder(
            self._xray_imaging_parameters)

        self._parameters_widget = qt_import.load_ui_file(
            "xray_imaging_parameters_widget_layout.ui")
        # Layout --------------------------------------------------------------
        __main_vlayout = qt_import.QVBoxLayout(self)
        __main_vlayout.addWidget(self._parameters_widget)
        __main_vlayout.setSpacing(0)
        __main_vlayout.setContentsMargins(0, 0, 0, 0)

        # SizePolicies --------------------------------------------------------

        # Qt signal/slot connections ------------------------------------------
        self._parameters_widget.ff_pre_cbox.toggled.connect(
            self.ff_pre_toggled)
        self._parameters_widget.ff_post_cbox.toggled.connect(
            self.ff_post_toggled)
        self._parameters_widget.add_button.pressed.connect(
            self.add_distance_pressed)
        self._parameters_widget.remove_button.pressed.connect(
            self.remove_distance_pressed)

        # Other ---------------------------------------------------------------
        # self.detector_distance_validator = qt_import.QIntValidator(
        #     0, 99999, self._parameters_widget.detector_distance_ledit
        # )
        self.detector_distance_validator = qt_import.QDoubleValidator(
            0, 99999, 2, self._parameters_widget.detector_distance_ledit)

        self._xray_imaging_mib.bind_value_update(
            "camera_write_data", self._parameters_widget.store_data_cbox, bool,
            None)

        self._xray_imaging_mib.bind_value_update(
            "ff_pre", self._parameters_widget.ff_pre_cbox, bool, None)

        self._xray_imaging_mib.bind_value_update(
            "ff_post", self._parameters_widget.ff_post_cbox, bool, None)

        self._xray_imaging_mib.bind_value_update(
            "ff_apply", self._parameters_widget.ff_apply_cbox, bool, None)

        self._xray_imaging_mib.bind_value_update(
            "ff_ssim_enabled", self._parameters_widget.ff_ssim_cbox, bool,
            None)

        self._xray_imaging_mib.bind_value_update(
            "ff_num_images", self._parameters_widget.ff_num_images_ledit, int,
            None)

        self._xray_imaging_mib.bind_value_update(
            "sample_offset_a",
            self._parameters_widget.ff_offset_a_ledit,
            float,
            None,
        )

        self._xray_imaging_mib.bind_value_update(
            "sample_offset_b",
            self._parameters_widget.ff_offset_b_ledit,
            float,
            None,
        )

        self._xray_imaging_mib.bind_value_update(
            "sample_offset_c",
            self._parameters_widget.ff_offset_c_ledit,
            float,
            None,
        )

        self._xray_imaging_mib.bind_value_update(
            "detector_distance",
            self._parameters_widget.detector_distance_ledit,
            float,
            self.detector_distance_validator,
        )
コード例 #29
0
    def __init__(self, *args):

        BaseWidget.__init__(self, *args)

        # variables -----------------------------------------------------------

        self.list_of_operational_modes = []
        self.default_session = None

        self.multipos_file_xml_path = None
        self.bliss_session_list = None

        # Hardware objects ----------------------------------------------------
        self.multipos_hwobj = None

        # Internal values -----------------------------------------------------
        self.table_created = False

        # Properties ----------------------------------------------------------
        self.add_property("mnemonic", "string", "/multiple-positions")

        # Signals ------------------------------------------------------------

        self.define_signal("operation_modes_edited", ())
        self.define_signal("operation_modes_saved", ())
        self.define_signal("data_policy_changed", ())

        # Slots ---------------------------------------------------------------

        # Graphic elements ----------------------------------------------------
        self.main_groupbox = qt_import.QGroupBox("Beam Configuration", self)
        self.ui_widgets_manager = qt_import.load_ui_file(
            "esrf_id13_configuration_widget.ui")

        # Size policy --------------------------------
        self.ui_widgets_manager.configuration_table.setSizePolicy(
            qt_import.QSizePolicy.Minimum,
            qt_import.QSizePolicy.Minimum,
        )

        # Layout --------------------------------------------------------------
        _groupbox_vlayout = qt_import.QVBoxLayout(self)
        _groupbox_vlayout.addWidget(self.ui_widgets_manager)
        _groupbox_vlayout.setSpacing(0)
        _groupbox_vlayout.setContentsMargins(0, 0, 0, 0)
        self.main_groupbox.setLayout(_groupbox_vlayout)

        _main_vlayout = qt_import.QVBoxLayout(self)
        _main_vlayout.addWidget(self.main_groupbox)
        _main_vlayout.setSpacing(0)
        _main_vlayout.setContentsMargins(0, 0, 0, 0)
        self.setLayout(_main_vlayout)

        # Qt signal/slot connections ------------------------------------------

        self.ui_widgets_manager.save_table_changes.clicked.connect(
            self.save_table_changes)

        self.ui_widgets_manager.cancel_table_changes.clicked.connect(
            self.cancel_table_changes)

        self.ui_widgets_manager.bliss_session_combo_box.currentIndexChanged.connect(
            self.display_data_policy)

        self.ui_widgets_manager.configuration_table.itemChanged.connect(
            self.configuration_table_item_changed)

        self.ui_widgets_manager.add_label_button.clicked.connect(
            self.add_op_mode_to_list)

        self.ui_widgets_manager.delete_label_button.clicked.connect(
            self.delete_op_mode_from_list)

        self.ui_widgets_manager.save_labels_button.clicked.connect(
            self.save_op_mode_list)

        self.ui_widgets_manager.label_list.itemSelectionChanged.connect(
            self.label_list_selection_changed)

        self.ui_widgets_manager.reload_data_policy_button.clicked.connect(
            self.reload_data_policy)