def get_default_path_template(self): """ :returns: A PathTemplate object with default parameters. """ path_template = queue_model_objects.PathTemplate() parent_key = "default_acquisition_values" path_template.directory = str() path_template.process_directory = str() path_template.base_prefix = str() path_template.mad_prefix = "" path_template.reference_image_prefix = "" path_template.wedge_prefix = "" path_template.run_number = self[parent_key].getProperty("run_number") path_template.suffix = self.session_hwobj["file_info"].getProperty( "file_suffix") path_template.precision = "04" try: if self.session_hwobj["file_info"].getProperty("precision"): path_template.precision = eval( self.session_hwobj["file_info"].getProperty("precision")) except BaseException: pass path_template.start_num = int( self[parent_key].getProperty("start_image_number")) path_template.num_files = int( self[parent_key].getProperty("number_of_images")) return path_template
def get_default_path_template(self): """ :returns: A PathTemplate object with default parameters. """ # Imported here to avoid circular imports from HardwareRepository.HardwareObjects import queue_model_objects path_template = queue_model_objects.PathTemplate() path_template.directory = str() path_template.process_directory = str() path_template.base_prefix = str() path_template.mad_prefix = "" path_template.reference_image_prefix = "" path_template.wedge_prefix = "" acq_params = self.get_default_acquisition_parameters() path_template.start_num = acq_params.first_image path_template.num_files = acq_params.num_images path_template.run_number = self.run_number file_info = self.session["file_info"] path_template.suffix = file_info.getProperty("file_suffix") path_template.precision = "04" try: if file_info.getProperty("precision"): path_template.precision = eval( file_info.getProperty("precision")) except BaseException: pass return path_template
def init_data_path_model(self): # Initialize the path_template of the widget to default # values read from the beamline setup if self._data_path_widget: if hasattr(HWR.beamline.session, 'get_secondary_image_directory'): self._data_path_widget.set_base_image_directory( HWR.beamline.session.get_secondary_image_directory()) self._data_path_widget.set_base_process_directory( HWR.beamline.session.get_base_process_directory()) (data_directory, proc_directory) = self.get_default_directory() self._path_template = HWR.beamline.get_default_path_template() self._path_template.directory = data_directory self._path_template.process_directory = proc_directory self._path_template.base_prefix = self.get_default_prefix() self._path_template.run_number = HWR.beamline.queue_model.get_next_run_number( self._path_template) self._path_template.compression = self._enable_compression else: self._path_template = queue_model_objects.PathTemplate()
def __init__( self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout=None, ): QtImport.QWidget.__init__(self, parent, QtImport.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 = QtImport.load_ui_file( "acquisition_widget_vertical_simple_layout.ui") # Layout -------------------------------------------------------------- main_layout = QtImport.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 = QtImport.QDoubleValidator( -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit) self.osc_range_validator = QtImport.QDoubleValidator( -10000, 10000, 4, self.acq_widget_layout.osc_range_ledit) self.kappa_validator = QtImport.QDoubleValidator( 0, 360, 4, self.acq_widget_layout.kappa_ledit) self.kappa_phi_validator = QtImport.QDoubleValidator( 0, 360, 4, self.acq_widget_layout.kappa_phi_ledit) self.energy_validator = QtImport.QDoubleValidator( 0, 25, 5, self.acq_widget_layout.energy_ledit) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit) self.exp_time_validator = QtImport.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()
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: """ QtImport.QWidget.__init__(self, parent, QtImport.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 = QtImport.load_ui_file( "acquisition_widget_vertical_still_layout.ui") # Layout -------------------------------------------------------------- __main_vlayout = QtImport.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 = QtImport.QDoubleValidator( 4, 25, 4, self.acq_widget_layout.energy_ledit) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit) self.exp_time_validator = QtImport.QDoubleValidator( 0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit) self.num_triggers_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_triggers_ledit) self.num_images_per_trigger_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_per_trigger_ledit) self.num_img_validator = QtImport.QIntValidator( 1, 9999999, self.acq_widget_layout.num_images_ledit) self.hare_num_validator = QtImport.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()
def __init__( self, parent=None, name=None, fl=0, acq_params=None, path_template=None, layout="horizontal", ): QtImport.QWidget.__init__(self, parent, QtImport.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 = QtImport.load_ui_file( "acquisition_widget_horizontal_layout.ui" ) self.use_osc_start(False) else: self.acq_widget_layout = QtImport.load_ui_file( "acquisition_widget_vertical_layout.ui" ) # Layout -------------------------------------------------------------- __main_vlayout = QtImport.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(QtImport.QLineEdit, "overlap_ledit"): self.acq_widget_layout.overlap_ledit.textChanged.connect( self.overlap_changed ) if self.acq_widget_layout.findChild(QtImport.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 = QtImport.QDoubleValidator( -10000, 10000, 4, self.acq_widget_layout.osc_start_ledit ) self.osc_range_per_frame_validator = QtImport.QDoubleValidator( 0, 10000, 4, self.acq_widget_layout.osc_range_ledit ) self.osc_total_range_validator = QtImport.QDoubleValidator( 0, 10000, 4, self.acq_widget_layout.osc_total_range_ledit ) self.kappa_validator = QtImport.QDoubleValidator( -0.01, 360, 4, self.acq_widget_layout.kappa_ledit ) self.kappa_phi_validator = QtImport.QDoubleValidator( -360, 360, 4, self.acq_widget_layout.kappa_phi_ledit ) self.energy_validator = QtImport.QDoubleValidator( 4, 25, 5, self.acq_widget_layout.energy_ledit ) self.resolution_validator = QtImport.QDoubleValidator( 0, 15, 3, self.acq_widget_layout.resolution_ledit ) self.transmission_validator = QtImport.QDoubleValidator( 0, 100, 3, self.acq_widget_layout.transmission_ledit ) self.exp_time_validator = QtImport.QDoubleValidator( 0.0001, 10000, 7, self.acq_widget_layout.exp_time_ledit ) self.first_img_validator = QtImport.QIntValidator( 0, 99999, self.acq_widget_layout.first_image_ledit ) self.num_img_validator = QtImport.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()
def __init__(self, parent=None, name="", fl=0, data_model=None, layout=None): QtImport.QWidget.__init__(self, parent, QtImport.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 = QtImport.load_ui_file( "data_path_widget_vertical_layout.ui") else: self.data_path_layout = QtImport.load_ui_file( "data_path_widget_horizontal_layout.ui") # Layout -------------------------------------------------------------- _main_vlayout = QtImport.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, QtImport.QIntValidator(0, 1000, self), ) self._data_model_pm.bind_value_update( "compression", self.data_path_layout.compression_cbox, bool, None)