def populate_widget(self, beam_energies={}, **kw): data_object = self._data_object = GphlAcquisitionData() parameter_mib = self._parameter_mib = DataModelInputBinder(data_object) widget_data = self._widget_data skip_fields = [] for tag in self.beam_energy_tags[len(beam_energies):]: skip_fields.append(tag) skip_fields.append(self._get_label_name(tag)) if not beam_energies: skip_fields.append('beam_energies_label') for tag, tt in widget_data.items(): if tag in skip_fields: tt[0].hide() else: widget, w_type, validator, value = tt widget.show() if tag in kw: value = kw[tag] elif tag in self.beam_energy_tags: ii = self.beam_energy_tags.index(tag) if ii < len(beam_energies): name = list(beam_energies)[ii] value = beam_energies[name] label_tag = self._get_label_name(tag) setattr(data_object, label_tag, name) setattr(data_object, tag, value) parameter_mib.bind_value_update(tag, widget, w_type, validator) parameter_mib.init_bindings()
def __init__(self, parent=None, name='', fl=0, data_model=None, layout=None): QtGui.QWidget.__init__(self, parent, QtCore.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._base_image_dir = None self._base_process_dir = None self.path_conflict_state = 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 = uic.loadUi( os.path.join( os.path.dirname(__file__), "ui_files/Qt4_data_path_widget_vertical_layout.ui")) else: self.data_path_layout = uic.loadUi( os.path.join( os.path.dirname(__file__), "ui_files/Qt4_data_path_widget_horizontal_layout.ui")) # Layout -------------------------------------------------------------- self.main_layout = QtGui.QVBoxLayout(self) self.main_layout.addWidget(self.data_path_layout) self.main_layout.setSpacing(0) self.main_layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.main_layout) # 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) # 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, QtGui.QIntValidator(0, 1000, self))
def populate_widget(self, tree_view_item): self._tree_view_item = tree_view_item if isinstance(tree_view_item, Qt4_queue_item.XrayCenteringQueueItem): self._data_collection = tree_view_item.get_model().reference_image_collection else: self._data_collection = tree_view_item.get_model() executed = self._data_collection.is_executed() self._acq_widget.setEnabled(not executed) self._data_path_widget.setEnabled(not executed) self._acquisition_mib = DataModelInputBinder(self._data_collection.\ acquisitions[0].acquisition_parameters) # The acq_widget sends a signal to the path_widget, and it relies # on that both models upto date, we need to refactor this part # so that both models are set before taking ceratin actions. # This workaround, works for the time beeing. self._data_path_widget._data_model = self._data_collection.\ acquisitions[0].path_template self._data_path_widget.update_data_model(self._data_collection.\ acquisitions[0].path_template) self._acq_widget.update_data_model(\ self._data_collection.acquisitions[0].acquisition_parameters, self._data_collection.acquisitions[0].path_template) #self._acq_widget.use_osc_start(False) invalid = self._acquisition_mib.validate_all() if invalid: msg = "This data collection has one or more incorrect parameters,"+\ " correct the fields marked in red to solve the problem." logging.getLogger("GUI").warning(msg)
def populate_widget(self, item): data_collection = item.get_model() self._tree_view_item = item self._data_collection = data_collection self._acquisition_mib = DataModelInputBinder(self._data_collection.\ acquisitions[0].acquisition_parameters) # The acq_widget sends a signal to the path_widget, and it relies # on that both models upto date, we need to refactor this part # so that both models are set before taking ceratin actions. # This workaround, works for the time beeing. self._data_path_widget._data_model = data_collection.acquisitions[ 0].path_template self._acq_widget.set_energies( data_collection.crystal.energy_scan_result) self._acq_widget.update_data_model(data_collection.acquisitions[0].\ acquisition_parameters, data_collection.acquisitions[0].\ path_template) self._data_path_widget.update_data_model(data_collection.\ acquisitions[0].path_template) self._processing_widget.update_data_model(data_collection.\ processing_parameters) invalid = self._acquisition_mib.validate_all() if invalid: msg = "This data collection has one or more incorrect parameters,"+\ " correct the fields marked in red to solve the problem." logging.getLogger("GUI").warning(msg)
def __init__(self, parent=None, name=None, fl=0, data_model=None): QWidget.__init__(self, parent, 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 = self.acq_widget_layout = loadUi( os.path.join(os.path.dirname(__file__), "ui_files/Qt4_processing_widget_vertical_layout.ui")) self.main_layout = 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.processing_widget.space_group_combo.activated.\ connect(self._space_group_change) self.processing_widget.run_processing_after_cbox.stateChanged.\ connect(self._run_processing_after_toggled) self.processing_widget.run_processing_parallel_cbox.stateChanged.\ connect(self._run_processing_parallel_toggled)
def __init__(self, parent = None, name = None, fl = 0, acq_params = None, path_template = None, layout = None): """ Descript. : """ QtGui.QWidget.__init__(self, parent, QtCore.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- self._beamline_setup_hwobj = None # Internal variables -------------------------------------------------- # 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 = uic.loadUi(os.path.join(os.path.dirname(__file__), "ui_files/Qt4_acquisition_widget_vertical_simple_layout.ui")) # Layout -------------------------------------------------------------- main_layout = QtGui.QVBoxLayout(self) main_layout.addWidget(self.acq_widget) main_layout.setSpacing(0) main_layout.setContentsMargins(0, 0, 0, 0) self.setLayout(main_layout) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.acq_widget.num_images_cbox.activated.connect(self.update_num_images) self.acq_widget.detector_mode_combo.activated.connect(self.detector_mode_changed) self.acq_widget.osc_start_cbox.toggled.connect(self.osc_start_cbox_click) # Other --------------------------------------------------------------- self.energy_validator = QtGui.QDoubleValidator(0, 25, 5, self) self.resolution_validator = QtGui.QDoubleValidator(0, 15, 3, self) self.transmission_validator = QtGui.QDoubleValidator(0, 100, 3, self) self.exp_time_validator = QtGui.QDoubleValidator(0, 10000, 5, self) self.acq_widget.osc_start_ledit.setEnabled(False) self.acq_widget.kappa_ledit.setEnabled(False) self.acq_widget.kappa_phi_ledit.setEnabled(False) self.acq_widget.num_images_cbox.setCurrentIndex(1)
def populate_widget(self, item): data_collection = item.get_model() self._tree_view_item = item self._data_collection = data_collection self._acquisition_mib = DataModelInputBinder(self._data_collection.\ acquisitions[0].acquisition_parameters) # The acq_widget sends a signal to the path_widget, and it relies # on that both models upto date, we need to refactor this part # so that both models are set before taking ceratin actions. # This workaround, works for the time beeing. self.path_widget._data_model = data_collection.acquisitions[ 0].path_template self.acq_widget.set_energies( data_collection.crystal.energy_scan_result) self.acq_widget.update_data_model(data_collection.acquisitions[0].\ acquisition_parameters, data_collection.acquisitions[0].\ path_template) self.acq_widget.use_osc_start(True) self.path_widget.update_data_model(data_collection.\ acquisitions[0].path_template) self.processing_widget.update_data_model(data_collection.\ processing_parameters) if data_collection.acquisitions[0].acquisition_parameters.\ centred_position.snapshot_image: image = data_collection.acquisitions[0].\ acquisition_parameters.centred_position.snapshot_image ration = image.height() / float(image.width()) image = image.scaled(400, 400 * ration, QtCore.Qt.KeepAspectRatio) self.position_widget.svideo.setPixmap(QtGui.QPixmap(image)) invalid = self._acquisition_mib.validate_all() if invalid: msg = "This data collection has one or more incorrect parameters,"+\ " correct the fields marked in red to solve the problem." logging.getLogger("user_level_log").\ warning(msg)
def populate_widget(self, tree_view_item): self._tree_view_item = tree_view_item advanced_model = tree_view_item.get_model() self._data_collection = advanced_model.reference_image_collection executed = self._data_collection.is_executed() self._acq_widget.setEnabled(not executed) self._data_path_widget.setEnabled(not executed) image = advanced_model.grid_object.get_snapshot() try: image = image.scaled(427, 320, QtCore.Qt.KeepAspectRatio) self.position_widget.svideo.setPixmap(QtGui.QPixmap(image)) except: pass self._acquisition_mib = DataModelInputBinder(self._data_collection.\ acquisitions[0].acquisition_parameters) # The acq_widget sends a signal to the path_widget, and it relies # on that both models upto date, we need to refactor this part # so that both models are set before taking ceratin actions. # This workaround, works for the time beeing. self._data_path_widget._data_model = self._data_collection.\ acquisitions[0].path_template self._data_path_widget.update_data_model(self._data_collection.\ acquisitions[0].path_template) self._acq_widget.update_data_model(\ self._data_collection.acquisitions[0].acquisition_parameters, self._data_collection.acquisitions[0].path_template) #self._acq_widget.use_osc_start(False) invalid = self._acquisition_mib.validate_all() if invalid: msg = "This data collection has one or more incorrect parameters,"+\ " correct the fields marked in red to solve the problem." logging.getLogger("user_level_log").\ warning(msg)
def __init__(self, parent=None, name=None, fl=0, xray_imaging_params=None): QWidget.__init__(self, parent, Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- self._beamline_setup_hwobj = None # Internal variables -------------------------------------------------- # Properties ---------------------------------------------------------- # Signals ------------------------------------------------------------- # Slots --------------------------------------------------------------- # Graphic elements ---------------------------------------------------- if xray_imaging_params is None: self._xray_imaging_parameters = \ queue_model_objects.XrayImagingParameters() else: self._xray_imaging_parameters = xray_imaging_params self._xray_imaging_mib = DataModelInputBinder( self._xray_imaging_parameters) self._parameters_widget = loadUi(os.path.join(\ os.path.dirname(__file__), "ui_files/Qt4_xray_imaging_parameters_widget_layout.ui")) # Layout -------------------------------------------------------------- __main_vlayout = QVBoxLayout(self) __main_vlayout.addWidget(self._parameters_widget) __main_vlayout.setSpacing(0) __main_vlayout.setContentsMargins(0, 0, 0, 0)
def __init__(self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout='horizontal'): """ Descript. : """ QtGui.QWidget.__init__(self, parent, QtCore.Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- self._beamline_setup_hwobj = None # Internal variables -------------------------------------------------- self.previous_energy = 0 # 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 = uic.loadUi( os.path.join( os.path.dirname(__file__), "ui_files/Qt4_acquisition_widget_horizontal_layout.ui")) self.acq_widget.inverse_beam_cbx.hide() self.acq_widget.subwedge_size_label.hide() self.acq_widget.subwedge_size_ledit.hide() else: self.acq_widget = uic.loadUi( os.path.join( os.path.dirname(__file__), "ui_files/Qt4_acquisition_widget_vertical_layout.ui")) # Layout -------------------------------------------------------------- self.main_layout = QtGui.QVBoxLayout(self) self.main_layout.addWidget(self.acq_widget) self.main_layout.setSpacing(0) self.main_layout.setContentsMargins(0, 0, 0, 0) self.setLayout(self.main_layout) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ self.acq_widget.energies_combo.activated.connect(self.energy_selected) self.acq_widget.mad_cbox.toggled.connect(self.use_mad) self.acq_widget.inverse_beam_cbx.toggled.connect( self.set_use_inverse_beam) self.acq_widget.first_image_ledit.textChanged.connect( self.first_image_ledit_change) self.acq_widget.num_images_ledit.textChanged.connect( self.num_images_ledit_change) overlap_ledit = self.acq_widget.findChild(QtGui.QLineEdit, "overlap_ledit") if overlap_ledit is not None: overlap_ledit.textChanged.connect(self.overlap_changed) self.acq_widget.subwedge_size_ledit.textChanged.connect( self.subwedge_size_ledit_change) self.acq_widget.osc_start_cbox.toggled.connect( self.osc_start_cbox_click) # Other --------------------------------------------------------------- self.acq_widget.subwedge_size_ledit.setDisabled(True) self.acq_widget.energies_combo.setDisabled(True) self.acq_widget.energies_combo.addItems( ['ip: -', 'pk: -', 'rm1: -', 'rm2: -']) self.acq_widget.osc_start_ledit.setEnabled(False) self.osc_start_validator = QtGui.QDoubleValidator( -10000, 10000, 4, self) self.osc_range_validator = QtGui.QDoubleValidator( -10000, 10000, 4, self) self.kappa_validator = QtGui.QDoubleValidator(0, 360, 4, self) self.kappa_phi_validator = QtGui.QDoubleValidator(0, 360, 4, self) self.energy_validator = QtGui.QDoubleValidator(0, 25, 4, self) self.resolution_validator = QtGui.QDoubleValidator(0, 15, 3, self) self.transmission_validator = QtGui.QDoubleValidator(0, 100, 3, self) self.exp_time_validator = QtGui.QDoubleValidator( 0.0001, 10000, 4, self) self.first_img_validator = QtGui.QIntValidator(0, 99999, self) self.num_img_validator = QtGui.QIntValidator(1, 99999, self)
def __init__(self, parent=None, name=None, fl=0): """ Descript. : """ 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.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 = loadUi( os.path.join( os.path.dirname(__file__), 'ui_files/Qt4_vertical_crystal_dimension_widget_layout.ui')) self._char_widget = loadUi( os.path.join( os.path.dirname(__file__), 'ui_files/Qt4_characterise_simple_widget_vertical_layout.ui')) # Layout -------------------------------------------------------------- _main_vlayout = 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.connect(induced_burn_cbx, QtCore.SIGNAL("toggled(bool)"), # self.use_induced_burn) 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 --------------------------------------------------------------- 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('determine_rad_params', # induced_burn_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, QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.\ bind_value_update('min_crystal_vdim', self._vertical_dimension_widget.min_vdim_ledit, float, QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.\ bind_value_update('min_crystal_vphi', self._vertical_dimension_widget.min_vphi_ledit, float, QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.\ bind_value_update('max_crystal_vphi', self._vertical_dimension_widget.max_vphi_ledit, float, QDoubleValidator(0.0, 1000, 2, self)) self._vertical_dimension_widget.space_group_ledit.addItems( XTAL_SPACEGROUPS)
def __init__(self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout='horizontal'): QWidget.__init__(self, parent, Qt.WindowFlags(fl)) if name is not None: self.setObjectName(name) # Hardware objects ---------------------------------------------------- self._beamline_setup_hwobj = None self._diffractometer_hwobj = None # 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 = loadUi(os.path.join(\ os.path.dirname(__file__), "ui_files/Qt4_acquisition_widget_horizontal_layout.ui")) self.use_osc_start(False) else: self.acq_widget_layout = loadUi(os.path.join(\ os.path.dirname(__file__), "ui_files/Qt4_acquisition_widget_vertical_layout.ui")) # Layout -------------------------------------------------------------- __main_vlayout = 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.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(QLineEdit, "overlap_ledit"): self.acq_widget_layout.overlap_ledit.textChanged.connect(\ self.overlap_changed) if self.acq_widget_layout.findChild(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 = QDoubleValidator(\ -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit) self.osc_range_per_frame_validator = QDoubleValidator(\ 0, 10000, 4, self.acq_widget_layout.osc_range_ledit) self.osc_total_range_validator = QDoubleValidator(\ 0, 10000, 4, self.acq_widget_layout.osc_total_range_ledit) self.kappa_validator = QDoubleValidator(\ 0, 360, 4, self.acq_widget_layout.kappa_ledit) self.kappa_phi_validator = QDoubleValidator(\ 0, 360, 4, self.acq_widget_layout.kappa_phi_ledit) self.energy_validator = QDoubleValidator(\ 4, 25, 4, self.acq_widget_layout.energy_ledit) self.resolution_validator = QDoubleValidator(\ 0, 15, 3, self.acq_widget_layout.resolution_ledit) self.transmission_validator = QDoubleValidator(\ 0, 100, 3, self.acq_widget_layout.transmission_ledit) self.exp_time_validator = QDoubleValidator(\ 0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit) self.first_img_validator = QIntValidator(\ 0, 99999, self.acq_widget_layout.first_image_ledit) self.num_img_validator = QIntValidator(\ 1, 99999, 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)
def __init__(self, *args): """ Descript. : """ BlissWidget.__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.defineSlot("populate_sample_details", ({})) # Graphic elements ---------------------------------------------------- _info_widget = QWidget(self) self.crystal_widget = loadUi(\ os.path.join(os.path.dirname(__file__), "widgets/ui_files/Qt4_crystal_widget_layout.ui")) self.sample_info_widget = loadUi( os.path.join(os.path.dirname(__file__), "widgets/ui_files/Qt4_sample_info_widget_layout.ui")) #self.ispyb_sample_info_widget = ISPyBSampleInfoWidget(self) # Layout -------------------------------------------------------------- _info_widget_hlayout = 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 = 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)
def __init__(self, parent=None, name="parameter_widget"): """ Descript. : """ QtGui.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 ---------------------------------------------------- rone_widget = QtGui.QWidget(self) 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 = uic.loadUi( os.path.join(os.path.dirname(__file__), 'ui_files/Qt4_snapshot_widget_layout.ui')) self.position_widget.setMinimumSize(450, 340) rtwo_widget = QtGui.QWidget(self) 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 = QtGui.QWidget(self) self.rad_dmg_widget = uic.loadUi( os.path.join( os.path.dirname(__file__), 'ui_files/Qt4_radiation_damage_model_widget_layout.ui')) self.vertical_dimension_widget = uic.loadUi( os.path.join( os.path.dirname(__file__), 'ui_files/Qt4_vertical_crystal_dimension_widget_layout.ui')) # Layout -------------------------------------------------------------- rone_widget_layout = QtGui.QHBoxLayout(self) 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) rone_widget.setLayout(rone_widget_layout) rtwo_widget_layout = QtGui.QHBoxLayout(self) 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) rtwo_widget.setLayout(rtwo_widget_layout) rtree_widget_layout = QtGui.QHBoxLayout(self) rtree_widget_layout.addWidget(self.rad_dmg_widget) rtree_widget_layout.addWidget(self.vertical_dimension_widget) rtree_widget_layout.addStretch(0) rtree_widget_layout.setSpacing(2) rtree_widget_layout.setContentsMargins(0, 0, 0, 0) rtree_widget.setLayout(rtree_widget_layout) _main_vlayout = QtGui.QVBoxLayout(self) _main_vlayout.addWidget(rone_widget) _main_vlayout.addWidget(rtwo_widget) _main_vlayout.addWidget(rtree_widget) _main_vlayout.setSpacing(2) _main_vlayout.setContentsMargins(0, 0, 0, 0) self.setLayout(_main_vlayout) # 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, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'min_time', self.routine_dc_widget.time_ledit, float, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.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, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'beta', self.rad_dmg_widget.beta_over_gray_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'gamma', self.rad_dmg_widget.gamma_over_gray_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'max_crystal_vdim', self.vertical_dimension_widget.max_vdim_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'min_crystal_vdim', self.vertical_dimension_widget.min_vdim_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'min_crystal_vphi', self.vertical_dimension_widget.min_vphi_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.bind_value_update( 'max_crystal_vphi', self.vertical_dimension_widget.max_vphi_ledit, float, QtGui.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)
def __init__(self, parent=None, name=None, fl=0): """ Descript. : """ CreateTaskBase.__init__(self, parent, name, fl, 'Characterisation') if not name: self.setName("create_char_widget") # Hardware objects ---------------------------------------------------- # Internal variables -------------------------------------------------- self._current_selected_item = 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_gbox = QtGui.QGroupBox('Data location', self) self._data_path_widget = DataPathWidget(self._data_path_gbox, data_model=self._path_template, layout='vertical') self._vertical_dimension_widget = uic.loadUi( os.path.join( os.path.dirname(__file__), 'ui_files/Qt4_vertical_crystal_dimension_widget_layout.ui')) self._char_widget = uic.loadUi( os.path.join( os.path.dirname(__file__), 'ui_files/Qt4_characterise_simple_widget_vertical_layout.ui')) gbox = self._char_widget.findChild(QtGui.QGroupBox, "characterisation_gbox") p = gbox.palette() p.setColor(QtGui.QPalette.Window, QtCore.Qt.red) p.setColor(QtGui.QPalette.Highlight, QtCore.Qt.red) gbox.setPalette(p) # Layout -------------------------------------------------------------- _data_path_gbox_layout = QtGui.QVBoxLayout(self) _data_path_gbox_layout.addWidget(self._data_path_widget) _data_path_gbox_layout.setSpacing(0) _data_path_gbox_layout.setContentsMargins(0, 0, 0, 0) self._data_path_gbox.setLayout(_data_path_gbox_layout) _main_vlayout = QtGui.QVBoxLayout(self) _main_vlayout.addWidget(self._acq_widget) _main_vlayout.addWidget(self._data_path_gbox) _main_vlayout.addWidget(self._char_widget) _main_vlayout.addWidget(self._vertical_dimension_widget) _main_vlayout.setSpacing(0) _main_vlayout.setContentsMargins(0, 0, 0, 0) self.setLayout(_main_vlayout) # SizePolicies -------------------------------------------------------- # Qt signal/slot connections ------------------------------------------ # Other --------------------------------------------------------------- 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('determine_rad_params', # induced_burn_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, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.\ bind_value_update('min_crystal_vdim', self._vertical_dimension_widget.min_vdim_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.\ bind_value_update('min_crystal_vphi', self._vertical_dimension_widget.min_vphi_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._char_params_mib.\ bind_value_update('max_crystal_vphi', self._vertical_dimension_widget.max_vphi_ledit, float, QtGui.QDoubleValidator(0.0, 1000, 2, self)) self._vertical_dimension_widget.space_group_ledit.addItems( XTAL_SPACEGROUPS) self._data_path_widget.data_path_layout.prefix_ledit.textChanged.\ connect(self._prefix_ledit_change) self._data_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) self.connect(self._data_path_widget, QtCore.SIGNAL("pathTemplateChanged"), self.handle_path_conflict)