Exemplo n.º 1
0
 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()
Exemplo n.º 2
0
    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)
Exemplo n.º 3
0
 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()
Exemplo n.º 4
0
 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)
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
 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)
Exemplo n.º 7
0
 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)
Exemplo n.º 8
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))
Exemplo n.º 9
0
    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))
Exemplo n.º 10
0
 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)
Exemplo n.º 11
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')
Exemplo n.º 12
0
    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)
Exemplo n.º 13
0
 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))
Exemplo n.º 14
0
    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)
Exemplo n.º 15
0
 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')
Exemplo n.º 16
0
 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)
Exemplo n.º 17
0
    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]