Exemplo n.º 1
0
    def __init__(self, symbol):

        self.symbol = symbol
        self.Z = Xrf.atomic_number(self.symbol)
        self.show = False

        k_lines = {
            'Ka': False,
            'Ka1': True,
            'Ka2': True,
            'Kb': False,
            'Kb1': True,
            'Kb2': True
        }
        l_lines = {
            'La1': False,
            'Lb1': False,
            'Lb2': False,
            'Lg1': False,
            'Lg2': False,
            'Lg3': False,
            'Lg4': False,
            'Ll': False
        }
        g_lines = {'G1': True, 'G2': True, 'G3': True}
        self.toggles = {
            'Ka': ['Ka1', 'Ka2'],
            'Kb': ['Kb1', 'Kb2'],
            'Ka1': ['Ka'],
            'Kb1': ['Kb'],
            'Ka2': ['Ka'],
            'Kb2': ['Kb']
        }

        # dict = {key: [e, selected]}
        self.k_selection = dict()
        for k in k_lines:
            e = Xrf.lookup_xrf_line(self.symbol + ' ' + k)
            #if (e != 0.):
            self.k_selection.update({k: [e, k_lines[k]]})
        self.l_selection = dict()
        for l in l_lines:
            e = Xrf.lookup_xrf_line(self.symbol + ' ' + l)
            #if (e != 0.):
            show = False
            self.l_selection.update({l: [e, l_lines[l] or show]})

        self.g_selection = dict()
        for g in g_lines:
            e = Xrf.lookup_xrf_line(self.symbol + ' ' + g)
            #if (e != 0.):
            self.g_selection.update({g: [e, g_lines[g]]})

        self.all_lines = dict()
        self.all_lines.update(self.k_selection)
        self.all_lines.update(self.l_selection)
        self.all_lines.update(self.g_selection)
Exemplo n.º 2
0
 def menu_line(self, roi):
     """ Private method """
     line = self.widgets.line[roi].text()
     energy = Xrf.lookup_xrf_line(line)
     if (energy == None):
         energy = Xrf.lookup_gamma_line(line)
     if (energy != None):
         self.roi[roi].energy = energy
         self.widgets.energy[roi].setText('%.3f' % energy)
     print('line: ' + line)
Exemplo n.º 3
0
 def search_by_symbol(self, symbol):
     
     ind = Xrf.atomic_index(symbol)
     if ind is not None:
         self.show_state_changed(0,True)
         self.xrf_tw.selectRow(ind-1)
     else:
         self.clear_xrf()
Exemplo n.º 4
0
 def cbs_changed(self, cb):
     curr_row = self.xrf_tw.currentRow()
     symbol = Xrf.atomic_symbol(curr_row+1)
     cur_atom = self.get_stored_atom(symbol)
     line = cb.text()
     cb_item = self.kl_cbs[line]
     checked = cb.isChecked()
     cur_atom.set_line_checked(line,checked)
     self.update_row(curr_row)
Exemplo n.º 5
0
    def xrf_roi_btn_clicked(self, index):
        symbol = Xrf.atomic_symbol( index+1)
        my_atom = self.get_stored_atom(symbol)
        xrf = dict()
        for cb in self.kl_cbs:
            line = self.kl_cbs[cb].text()
            e = my_atom.get_e(line)
            checked = my_atom.is_line_checked(line)
            if e != 0 and checked:
                xrf[symbol+' '+line] = e
        rois = []
        for line in xrf:
            lbl = line
            E = xrf[line]
            fwhm = int(round(0.07936 * E + 4.95677))

            rois.append([xrf[line],fwhm, lbl])
        self.roi_controller.addROISbyE(rois)
Exemplo n.º 6
0
    def update_row(self,row):
        symbol = Xrf.atomic_symbol( row+1)
        if symbol is not None:

            my_atom = self.get_stored_atom(symbol)

            for cb in self.kl_cbs:
                line = self.kl_cbs[cb].text()
                e = my_atom.get_e(line)
                if e != 0:
                    self.kl_cbs[cb].setEnabled(True)
                    checked = my_atom.is_line_checked(line)
                    self.kl_cbs[cb].setChecked(checked)
                    self.kl_cbs[cb].setStyleSheet("")
                else:
                    self.kl_cbs[cb].setEnabled(False)
                    self.kl_cbs[cb].setChecked(False)
                    self.kl_cbs[cb].setStyleSheet("color: rgb(100, 100, 100); ") 
            self.show_state_changed(0,True)
            self.update_xrf_lines(symbol)
            self.xrf_selection_updated_signal.emit(symbol)
            self.blockSignals(True)
            self.search_item.setText(symbol)
            self.blockSignals(False)
Exemplo n.º 7
0
    def __init__(self, plotWidget, plotContoller, roiController, mca):
        super().__init__()

        self.set_mca(mca) # in future change to get cal. from  plot model
        
        self.x_scale = 'E'
        
        
        self.pattern_widget = plotWidget
        self.roi_controller = roiController
        self.plotController = plotContoller
        self.log_scale = self.plotController.logMode
        self._layout = QtWidgets.QVBoxLayout()  
        self.setWindowTitle('XRF control')
        self.button_widget = QtWidgets.QWidget(self)
        self.button_widget.setObjectName('xrfs_control_button_widget')
        self._button_layout = QtWidgets.QHBoxLayout()
        self._button_layout.setContentsMargins(0, 0, 0, 0)
        self._button_layout.setSpacing(6)
        self.add_btn = QtWidgets.QPushButton('Add ROIs')
        self.add_btn.clicked.connect(self.rois_btn_click_callback)

        self.clear_btn = QtWidgets.QPushButton('Clear')
        self.clear_btn.clicked.connect(self.clear_xrf)
        self._button_layout.addWidget(QtWidgets.QLabel('Search:'),0)
        self.search_item = s =  QtWidgets.QLineEdit('')
        s.textChanged.connect(lambda:self.search_by_symbol(s.text()))
        self._button_layout.addWidget(self.search_item, 0)
        self._button_layout.addSpacerItem(HorizontalSpacerItem())
        self._button_layout.addWidget(self.add_btn,0)
        self._button_layout.addWidget(self.clear_btn,0)
        self.button_widget.setLayout(self._button_layout)
        self._layout.addWidget(self.button_widget)
        self._body_layout = QtWidgets.QHBoxLayout()
        self.header = ['Z', 'Symbol']
        self.cols = len(self.header)
        self.xrf_tw = ListTableWidget(columns=self.cols)
        self._body_layout.addWidget(self.xrf_tw)

        self.k_lines_tags = ['Ka','Ka1', 'Ka2','Kb', 'Kb1', 'Kb2']
        self.l_lines_tags = ['La1', 'Lb1', 'Lb2', 'Lg1', 'Lg2', 'Lg3', 'Lg4', 'Ll']
        self.g_lines_tags = ['G1','G2', 'G3']

        self.parameter_widget = QtWidgets.QWidget()
        self._parameter_layout = QtWidgets.QGridLayout()

        self.k_cbs = dict()
        for k in self.k_lines_tags:
            k_line = QtWidgets.QCheckBox(k)
            k_line.setEnabled(False)
            k_line.toggled.connect(partial(self.cbs_changed, k_line))
            self._parameter_layout.addWidget(k_line, 0, self.k_lines_tags.index(k)+2)
            self.k_cbs[k]=k_line
        
        self.l_cbs = dict()
        for l in self.l_lines_tags:
            l_line = QtWidgets.QCheckBox(l)
            l_line.setEnabled(False)
            l_line.toggled.connect(partial(self.cbs_changed, l_line))
            self._parameter_layout.addWidget(l_line,1, self.l_lines_tags.index(l)+2)
            self.l_cbs[l]=l_line

        self.g_cbs = dict()
        for g in self.g_lines_tags:
            g_line = QtWidgets.QCheckBox(g)
            g_line.setEnabled(False)
            g_line.toggled.connect(partial(self.cbs_changed, g_line))
            self._parameter_layout.addWidget(g_line,2, self.g_lines_tags.index(g)+2)
            self.g_cbs[g]=g_line
        
        self.parameter_widget.setLayout(self._parameter_layout)
        self._body_layout.addWidget(self.parameter_widget, 0)
        self._layout.addLayout(self._body_layout)
        self.setLayout(self._layout)
        self.style_widgets()
        self.xrf_show_cbs = []
        self.name_items = []
        self.index_items = []
        self.kl_cbs = dict()
        self.kl_cbs.update(self.k_cbs) 
        self.kl_cbs.update(self.l_cbs)
        self.kl_cbs.update(self.g_cbs)
        self.xrf = []

        self.atoms = dict()

        #self.show_parameter_in_pattern = True
        header_view = QtWidgets.QHeaderView(QtCore.Qt.Horizontal, self.xrf_tw)
        self.xrf_tw.setHorizontalHeader(header_view)

        header_view.setResizeMode(0, QtWidgets.QHeaderView.Stretch)
        header_view.setResizeMode(1, QtWidgets.QHeaderView.Stretch)  
        
        self.xrf_tw.setHorizontalHeaderLabels(self.header)
        #header_view.hide()
        self.xrf_tw.setItemDelegate(NoRectDelegate())
        #self.xrf_tw.itemChanged.connect(self.xrf_name_item_changed)

        for atom in Xrf.atomic_symbols:
            self.add_xrf_row(Xrf.atomic_number(atom),atom)
        #self.xrf_tw.selectRow(Xrf.atomic_symbols.index(None))

        color = self.add_xrf_plot()
        self.xrf_tw.currentCellChanged.connect(self.selection_changed)
        #self.xrf_tw.setColumnWidth(0, 35)

        self.plotController.unitUpdated.connect(self.update_x_scale)
        self.plotController.dataPlotUpdated.connect(self.update_all_xrf_lines)
Exemplo n.º 8
0
 def get_current_symbol (self):
     curr_row = self.xrf_tw.currentRow()
     if curr_row >=0:
         symbol = Xrf.atomic_symbol(curr_row+1)
         return symbol
     return None
Exemplo n.º 9
0
 def xrf_show_cb_changed(self, checkbox):
     #self.show_cb_state_changed.emit(self.xrf_show_cbs.index(checkbox), checkbox.isChecked())
     symbol = Xrf.atomic_symbol(self.xrf_show_cbs.index(checkbox)+1)
     cur_atom = self.get_stored_atom(symbol)
     cur_atom.show = checkbox.isChecked()
Exemplo n.º 10
0
    def initUI(self):

        self.verticalLayout_4 = QtWidgets.QVBoxLayout(self)
        self.groupBox = QtWidgets.QGroupBox(self)
        self.container = self.groupBox
        self.gridLayout = QtWidgets.QGridLayout(self.container)
        self.gridLayout.setContentsMargins(7, 15, 7, 7)
        self.gridLayout.setSpacing(5)

        header = {
            'ROI': 0,
            'Use?': 1,
            'Centroid': 2,
            'FWHM': 3,
            'Energy': 4,
            'Fluor. line': 5,
            'Energy error': 6
        }

        row = 0
        for key, col in header.items():
            t = QtWidgets.QLabel(self.groupBox)
            t.setText(key)
            t.setAlignment(QtCore.Qt.AlignHCenter)
            #t.setMinimumSize(QtCore.QSize(60, 0))
            self.gridLayout.addWidget(t, row, col, QtCore.Qt.AlignHCenter)

        for i in range(self.nrois):
            row = i + 1

            t = QtWidgets.QLabel(self.groupBox)
            t.setText(str(i))
            t.setAlignment(QtCore.Qt.AlignHCenter)
            self.gridLayout.addWidget(t, row, 0, QtCore.Qt.AlignHCenter)

            self.widgets.use_flag[i] = t = QtWidgets.QCheckBox(self.groupBox)
            t.setChecked(self.roi[i].use == 1)
            t.toggled.connect(
                functools.partial(self.menu_use, i)
            )  # lambda expression didn't work so using functools.partial instead
            self.gridLayout.addWidget(t, row, 1, QtCore.Qt.AlignHCenter)

            self.widgets.centroid[i] = t = QtWidgets.QLineEdit(self.groupBox)
            t.setText('%.3f' % self.roi[i].centroid)
            t.setFixedWidth(70)
            t.setAlignment(QtCore.Qt.AlignHCenter)
            t.returnPressed.connect(functools.partial(self.menu_centroid, i))
            self.gridLayout.addWidget(t, row, 2, QtCore.Qt.AlignHCenter)

            self.widgets.fwhm[i] = t = QtWidgets.QLineEdit(self.groupBox)
            t.setText('%.3f' % self.roi[i].fwhm)
            t.setFixedWidth(70)
            t.setAlignment(QtCore.Qt.AlignHCenter)
            self.gridLayout.addWidget(t, row, 3, QtCore.Qt.AlignHCenter)

            # If the ROI energy is zero, then try to use the label to lookup an
            # XRF line energy
            self.roi[i].energy = 0
            if (self.roi[i].energy == 0.0):
                self.roi[i].energy = Xrf.lookup_xrf_line(self.roi[i].label)
                if (self.roi[i].energy == None):
                    self.roi[i].energy = Xrf.lookup_gamma_line(
                        self.roi[i].label)
                if (self.roi[i].energy == None): self.roi[i].energy = 0.0

            self.widgets.energy[i] = t = QtWidgets.QLineEdit(self.groupBox)
            t.setText('%.3f' % self.roi[i].energy)
            t.setFixedWidth(70)
            t.setAlignment(QtCore.Qt.AlignHCenter)
            t.returnPressed.connect(functools.partial(self.menu_energy, i))
            self.gridLayout.addWidget(t, row, 4, QtCore.Qt.AlignHCenter)

            self.widgets.line[i] = t = QtWidgets.QLineEdit(self.groupBox)
            t.setText(self.roi[i].label)
            t.setFixedWidth(70)
            t.setAlignment(QtCore.Qt.AlignHCenter)
            self.widgets.line[i].returnPressed.connect(
                functools.partial(self.menu_line, i))
            self.gridLayout.addWidget(t, row, 5, QtCore.Qt.AlignHCenter)

            self.widgets.energy_diff[i] = t = QtWidgets.QLineEdit(
                self.groupBox)
            t.setText('%.3f' % 0.0)
            t.setFixedWidth(70)
            t.setAlignment(QtCore.Qt.AlignHCenter)
            self.gridLayout.addWidget(t, row, 6, QtCore.Qt.AlignHCenter)

        self.verticalLayout_4.addWidget(self.groupBox)

        self.groupBox_2 = QtWidgets.QGroupBox(self)
        self.groupBox_2.setTitle("")
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.groupBox_2)
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.lblCalibrationType = QtWidgets.QLabel(self.groupBox_2)
        self.lblCalibrationType.setText("Calibration type:")
        self.lblCalibrationType.setAlignment(QtCore.Qt.AlignRight)
        self.horizontalLayout.addWidget(self.lblCalibrationType)
        self.fit_type = QtWidgets.QComboBox(self.groupBox_2)
        self.fit_type.addItem('Linear')
        self.fit_type.addItem('Quadratic')
        self.horizontalLayout.addWidget(self.fit_type)

        # in QtDialong, setting default=False, autoDefault=False prevents button from default trigger by Enter key
        self.do_fit = QtWidgets.QPushButton(self.groupBox_2,
                                            default=False,
                                            autoDefault=False)

        self.do_fit.setText("Compute calibration")
        self.do_fit.clicked.connect(self.menu_do_fit)
        self.horizontalLayout.addWidget(self.do_fit)
        self.plot_cal = QtWidgets.QPushButton(self.groupBox_2,
                                              default=False,
                                              autoDefault=False)
        self.plot_cal.setText("Plot calibration error")
        self.plot_cal.clicked.connect(self.menu_plot_calibration)
        self.horizontalLayout.addWidget(self.plot_cal)

        self.plot_fwhm = QtWidgets.QPushButton(self.groupBox_2,
                                               default=False,
                                               autoDefault=False)
        self.plot_fwhm.setText("Plot FWHM")
        self.plot_fwhm.clicked.connect(self.menu_plot_fwhm)
        self.horizontalLayout.addWidget(self.plot_fwhm)
        self.verticalLayout_3.addLayout(self.horizontalLayout)
        self.verticalLayout_4.addWidget(self.groupBox_2)

        self.groupBox_3 = QtWidgets.QGroupBox(self)
        self.groupBox_3.setTitle("")
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.groupBox_3)
        self.gridLayout_2 = QtWidgets.QGridLayout()

        self.label_12 = QtWidgets.QLabel(self.groupBox_3)
        self.label_12.setText("Units")
        self.gridLayout_2.addWidget(self.label_12, 0, 1, 1, 1)
        self.label_13 = QtWidgets.QLabel(self.groupBox_3)
        self.label_13.setText("Offset")
        self.gridLayout_2.addWidget(self.label_13, 0, 2, 1, 1)
        self.label_14 = QtWidgets.QLabel(self.groupBox_3)
        self.label_14.setText("Slope")
        self.gridLayout_2.addWidget(self.label_14, 0, 3, 1, 1)
        self.label_15 = QtWidgets.QLabel(self.groupBox_3)
        self.label_15.setText("Quadratic")
        self.gridLayout_2.addWidget(self.label_15, 0, 4, 1, 1)

        self.label_11 = QtWidgets.QLabel(self.groupBox_3)
        self.label_11.setText("Calibration coefficients:")
        self.label_11.setAlignment(QtCore.Qt.AlignRight)
        self.gridLayout_2.addWidget(self.label_11, 1, 0, 1, 1)

        self.cal_units = t = QtWidgets.QLineEdit(self.groupBox_3)
        t.setText(self.calibration.units)
        t.setFixedWidth(90)
        self.gridLayout_2.addWidget(t, 1, 1, 1, 1)

        self.cal_offset = t = QtWidgets.QLineEdit(self.groupBox_3)
        t.setText('%.7f' % (self.calibration.offset))
        t.setFixedWidth(90)
        self.gridLayout_2.addWidget(t, 1, 2, 1, 1)

        self.cal_slope = t = QtWidgets.QLineEdit(self.groupBox_3)
        t.setText('%.7f' % (self.calibration.slope))
        t.setFixedWidth(90)
        self.gridLayout_2.addWidget(t, 1, 3, 1, 1)

        self.cal_quad = t = QtWidgets.QLineEdit(self.groupBox_3)
        t.setText('%.7f' % (self.calibration.quad))
        t.setFixedWidth(90)
        self.gridLayout_2.addWidget(t, 1, 4, 1, 1)

        self.verticalLayout_2.addLayout(self.gridLayout_2)

        self.verticalLayout_4.addWidget(self.groupBox_3)

        self.groupBox_4 = QtWidgets.QGroupBox(self)
        self.groupBox_4.setTitle("")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox_4)

        self.btnOK = QtWidgets.QPushButton(self.groupBox_4,
                                           default=False,
                                           autoDefault=False)
        self.btnOK.clicked.connect(functools.partial(self.menu_ok_cancel,
                                                     'OK'))
        self.btnOK.setText("OK")
        self.horizontalLayout_2.addWidget(self.btnOK)
        self.btnCancel = QtWidgets.QPushButton(self.groupBox_4,
                                               default=False,
                                               autoDefault=False)
        self.btnCancel.clicked.connect(
            functools.partial(self.menu_ok_cancel, 'Cancel'))
        self.btnCancel.setText("Cancel")
        self.horizontalLayout_2.addWidget(self.btnCancel)

        self.verticalLayout_4.addWidget(self.groupBox_4)

        self.setWindowTitle("Energy Calibration")
        self.groupBox.setTitle("Defined regions")

        self.setFixedSize(self.verticalLayout_4.sizeHint())