def set_roi_value(self): print('Setting Roi') proceed = False sender = QObject() sender_object = sender.sender().objectName() indx_ch = sender_object[10] indx_roi = sender_object[15] lo_hi = sender_object[17:] signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index(lo_hi)) value = sender.sender().value() #validate limits if lo_hi == 'lo': counter_signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index('hi')) counter_value = counter_signal.get() * 10 if value < counter_value: proceed = True elif lo_hi == 'hi': counter_signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index('lo')) counter_value = counter_signal.get() * 10 if value > counter_value: proceed = True if proceed: signal.put(int(value / 10)) self.roi_values[int(indx_ch) - 1, int(indx_roi) - 1, self.lo_hi.index(lo_hi)] = value else: sender.sender().setValue(counter_value) self.update_roi_plot()
def fix_rois(self): sender = QObject() sender_object = sender.sender().objectName() indx_ch = sender_object[11] if sender.sender().isChecked(): for jj in range(2): # repeat to make sure no values are forced for indx_roi in range(self.num_rois): for indx_lo_hi in range(2): spinbox_name_ch1 = self.spinbox_roi.format( 1, indx_roi + 1, self.lo_hi[indx_lo_hi]) spinbox_object_ch1 = getattr(self, spinbox_name_ch1) value = spinbox_object_ch1.value() spinbox_name = self.spinbox_roi.format( indx_ch, indx_roi + 1, self.lo_hi[indx_lo_hi]) spinbox_object = getattr(self, spinbox_name) spinbox_object.setValue(value) spinbox_object.setEnabled(False) else: for indx_roi in range(self.num_rois): for indx_lo_hi in range(2): spinbox_name = self.spinbox_roi.format( indx_ch, indx_roi + 1, self.lo_hi[indx_lo_hi]) spinbox_object = getattr(self, spinbox_name) spinbox_object.setEnabled(True)
def set_roi_value(self): sender = QObject() sender_object = sender.sender().objectName() indx_ch = sender_object[10] indx_roi = sender_object[15] lo_hi = sender_object[17:] signal = self.get_roi_signal(indx_ch, indx_roi, self.lo_hi.index(lo_hi)) value = sender.sender().value() signal.put(int(value/10)) print(f' Value {value}') self.roi_values[int(indx_ch)-1, int(indx_roi)-1, self.lo_hi.index(lo_hi)]= value self.update_roi_plot()
def set_mfc_cart_flow(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() value = sender_object.value() indx_mfc = int(re.findall(r'\d+', sender_name)[0]) self.mfcs[indx_mfc - 1].sp.set(value)
def truncate(self): sender = QObject() sender_object = sender.sender().objectName() print(sender_object) selection = self.listView_xasproject.selectedIndexes() if selection != []: for indx, obj in enumerate(selection): print(indx) ds = self.xasproject._datasets[selection[indx].row()] print(ds.name) energy = ds.energy mu = ds.mu indx_energy_to_truncate_at = ( np.abs(energy - float(self.lineEdit_truncate_at.text()))).argmin() if sender_object == 'pushButton_truncate_below': ds.energy = energy[indx_energy_to_truncate_at:] ds.mu = mu[indx_energy_to_truncate_at:] elif sender_object == 'pushButton_truncate_above': ds.energy = energy[0:indx_energy_to_truncate_at] ds.mu = mu[0:indx_energy_to_truncate_at:] ds.update_larch() self.xasproject._datasets[selection[indx].row()] = ds
def set_flow_rates(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() # print(sender_name) indx_ch, indx_mnf = re.findall(r'\d+', sender_name) value = sender_object.value() self.ghs['channels'][indx_ch][f'mfc{indx_mnf}_sp'].set(value)
def toggle_channels(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() indx_ch, indx_mnf = re.findall(r'\d+', sender_name) if sender_object.isChecked(): self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_upstream'].set(1) self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_dnstream'].set(1) else: self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_upstream'].set(0) self.ghs['channels'][indx_ch][f'mnf{indx_mnf}_vlv_dnstream'].set(0)
def push_param(self): self.norm_param_list = [ 'e0', 'pre1', 'pre2', 'norm1', 'norm2', ] self.bkg_param_list = [ 'kmin', 'kmax', 'clamp_lo', 'clamp_hi', 'rbkg', 'kweight' ] self.ft_param_list = [ 'kmin_ft', 'kmax_ft' ] selection = self.list_project.selectedIndexes() if selection != []: sender = QObject() sender_object = sender.sender().objectName() index = selection[0].row() ds_master = self.parent.project[index] if sender_object == 'pushButton_push_norm_param_to_selected': for indx, obj in enumerate(selection): ds = self.parent.project[selection[indx].row()] for param in self.norm_param_list: setattr(ds, param, getattr(ds_master, param)) if sender_object == 'pushButton_push_norm_param_to_all': for indx, obj in enumerate(self.parent.project): for param in self.norm_param_list: setattr(self.parent.project[indx], param, getattr(ds_master, param)) if sender_object == 'pushButton_push_bkg_param_to_selected': for indx, obj in enumerate(selection): ds = self.parent.project[selection[indx].row()] for param in self.bkg_param_list: setattr(ds, param, getattr(ds_master, param)) if sender_object == 'pushButton_push_bkg_param_to_all': for indx, obj in enumerate(self.parent.project): for param in self.bkg_param_list: setattr(self.parent.project[indx], param, getattr(ds_master, param)) if sender_object == 'pushButton_push_ft_param_to_selected': for indx, obj in enumerate(selection): ds = self.parent.project[selection[indx].row()] for param in self.ft_param_list: setattr(ds, param, getattr(ds_master, param)) if sender_object == 'pushButton_push_ft_param_to_all': for indx, obj in enumerate(self.parent.project): for param in self.ft_param_list: setattr(self.parent.project[indx], param, getattr(ds_master, param))
def update_reference(self): sender = QObject() sender_object = sender.sender().objectName() coord = sender_object[-2:] x_value = self.sample_stage.x.position y_value = self.sample_stage.y.position setattr(self, 'reference_x_{}'.format(coord), x_value) setattr(self, 'reference_y_{}'.format(coord), y_value) getattr(self, 'lineEdit_reference_x_{}'.format(coord)).setText( '{:.3f}'.format(x_value)) getattr(self, 'lineEdit_reference_y_{}'.format(coord)).setText( '{:.3f}'.format(y_value))
def toggle_exhaust_reactor(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() ch_num = sender_name[14] if sender_name.endswith('exhaust') and sender_object.isChecked(): self.ghs['channels'][ch_num]['exhaust'].set(1) ttime.sleep(2) self.ghs['channels'][ch_num]['reactor'].set(0) if sender_name.endswith('reactor') and sender_object.isChecked(): self.ghs['channels'][ch_num]['reactor'].set(1) ttime.sleep(2) self.ghs['channels'][ch_num]['exhaust'].set(0)
def update_ds_params(self): sender = QObject() sender_object = sender.sender().objectName() print(sender_object) selection = self.listView_xasproject.selectedIndexes() if selection != []: index=selection[0].row() ds = self.xasproject[index] try: self.statusBar().showMessage(sender_object) print(getattr(self, sender_object).text()) setattr(ds, self.lineEdit_to_ds_parameter_dict[sender_object], float(getattr(self, sender_object).text())) except: self.statusBar().showMessage('Use numbers only')
def load_sample_definition(self): sender = QObject() sender_object = sender.sender().objectName() coord = sender_object[-2:] excel_file = QtWidgets.QFileDialog.getOpenFileNames( directory='/nsls2/xf08id/Sandbox', filter='*.xlsx', parent=self)[0] if len(excel_file): self.label_database_status.setText( 'Loading {} to Sample Frame {}'.format( os.path.basename(excel_file[0]), coord)) setattr(self, 'batch_experiment_{}'.format(coord), XASBatchExperiment(excel_file=excel_file[0], hhm=self.hhm)) print(self.batch_experiment_11)
def toggle_bypass_bubbler(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() ch_num = sender_name[14] bypass_num = sender_name[-1] if (sender_name.endswith('bypass1') or sender_name.endswith('bypass2')) and sender_object.isChecked(): self.RE(bps.mv(self.ghs['channels'][ch_num][f'bypass{bypass_num}'], 1)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_1'], 0)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_2'], 0)) elif (sender_name.endswith('bubbler1') or sender_name.endswith('bubbler2')) and sender_object.isChecked(): self.RE(bps.mv(self.ghs['channels'][ch_num][f'bypass{bypass_num}'], 0)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_1'], 1)) self.RE(bps.mv(self.ghs['channels'][ch_num][f'bubbler{bypass_num}_2'], 1))
def select_gases(self): sender = QObject() sender_object = sender.sender() sender_name = sender_object.objectName() gas = sender_object.currentText() #print(sender_name) indx_ch, indx_mnf = re.findall(r'\d+', sender_name) gas_command = self.ghs['manifolds'][indx_mnf]['gases'][gas] # print(f'Gas command {gas_command}') self.ghs['manifolds'][indx_mnf]['gas_selector'].set(gas_command) #change the gas selection for the other widget - they both come from the same source sub_dict = {'1':'2','2':'1'} other_selector = getattr(self, f'comboBox_ch{sub_dict[indx_ch]}_mnf{indx_mnf}_gas') #print(other_selector.objectName()) st = other_selector.blockSignals(True) other_selector.setCurrentIndex(sender_object.currentIndex()) other_selector.blockSignals(st)
def show_sample_definition(self): sender = QObject() sender_object = sender.sender().objectName() coord = sender_object[-2:] if hasattr(self, 'batch_experiment_{}'.format(coord)): exp = getattr(self, 'batch_experiment_{}'.format(coord)) self.tableWidget_sample_def.setRowCount(len(exp.experiment_table)) self.label_database_status.setText(exp.name) for i in range(len(exp.experiment_table)): d = exp.experiment_table.iloc[i] fields = [ 'Proposal', 'SAF', 'Sample name', 'Composition', 'Element', 'Edge', 'Energy' ] for j, field in enumerate(fields): self.tableWidget_sample_def.setItem( i, j, QtWidgets.QTableWidgetItem(str(d[field]))) self.tableWidget_sample_def.setRowHeight(i, 24) else: self.label_database_status.setText( 'Please load Experimental Definition first')
def set_ds_params_from_plot(self): sender = QObject() self.sender_object = sender.sender().objectName() self.statusBar().showMessage('Click on graph or press Esc') self.cid = self.canvasXASProject.mpl_connect('button_press_event', self.mouse_press_event)
def run_2d_pcl_scan(self): self.figure_scan.ax.set_aspect('auto') sender = QObject() sender_object = sender.sender().objectName() if 'xy' in sender_object: m1 = 'x' m2 = 'y' elif 'py' in sender_object: m1 = 'pitch' m2 = 'yaw' self.canvas_scan.mpl_disconnect(self.cid_scan) detector_name = self.comboBox_pcl_detectors.currentText() detector = self.detector_dictionary[detector_name]['device'] channels = self.detector_dictionary[detector_name]['channels'] channel = channels[self.comboBox_pcl_channels.currentIndex()] motor1 = self.motor_dictionary[f'six_axes_stage_{m1}']['object'] motor2 = self.motor_dictionary[f'six_axes_stage_{m2}']['object'] m1_pos = motor1.read()[motor1.name]['value'] m2_pos = motor2.read()[motor2.name]['value'] motor1_range = getattr(self, f'doubleSpinBox_range_{m1}').value() motor2_range = getattr(self, f'doubleSpinBox_range_{m2}').value() motor1_step = getattr(self, f'doubleSpinBox_step_{m1}').value() motor2_step = getattr(self, f'doubleSpinBox_step_{m2}').value() motor1_nsteps = int(round(motor1_range / float(motor1_step))) + 1 motor2_nsteps = int(round(motor2_range / float(motor2_step))) + 1 #self.figure_scan.clf() update_figure_with_colorbar([self.figure_scan.ax], self.toolbar_scan, self.canvas_scan, self.figure_scan) plan = self.aux_plan_funcs['general_spiral_scan']( [detector], motor1=motor1, motor2=motor2, motor1_range=motor1_range, motor2_range=motor2_range, motor1_nsteps=motor1_nsteps, motor2_nsteps=motor2_nsteps) # xlim = live_scatter = LiveScatter(motor1.name, motor2.name, channel, ax=self.figure_scan.ax, xlim=(m1_pos - motor1_range / 2, m1_pos + motor1_range / 2), ylim=(m2_pos - motor2_range / 2, m2_pos + motor2_range / 2), **{ 's': 100, 'marker': 's', 'cmap': 'nipy_spectral' }) # live_scatter = LivePlot(channel, self.motor.name, ax=self.figure_scan.ax) uid = self.RE(plan, live_scatter) self.figure_scan.ax.set_aspect('auto') self.figure_scan.tight_layout() self.canvas_scan.draw_idle() self.cid_scan = self.canvas_scan.mpl_connect('button_press_event', self.getX_scan) self.last_motor_used = [motor1, motor2]