コード例 #1
0
ファイル: TFMeasure.py プロジェクト: kudolab/TFMeasure
class Window(QDialog):
    def __init__(self, parent=None):
        super().__init__(parent)   

        #測定データ保存先
        self.label_Save = QLabel('Save Directory:', self)
        self.edit_Save = QLineEdit(self)
        self.edit_Save.setFocusPolicy(Qt.ClickFocus)
        self.edit_Save.setText(SCRIPT_DIR)
        self.btn_Save = QPushButton('Open', self)
        self.btn_Save.setStyleSheet('background-color:white; color:black;')
        self.btn_Save.clicked.connect(self.showDialog)

        #測定モードの選択
        self.label_Mode = QLabel('Mode:', self)
        self.combo_Mode = QComboBox(self)
        self.combo_Mode.addItems(['RSTF', 'SSTF', 'LSTF', 'Mic_Ajust'])

        #ターゲット
        self.label_Output = QLabel('Target:', self)
        self.combo_Output = QComboBox(self)
        self.combo_Output.addItem("Headphones")

        #被験者記入欄
        self.label_Sub = QLabel('subject:', self)
        self.edit_Sub = QLineEdit(self)

        #同期化算数記入欄
        self.label_averaging_time = QLabel('Avaraging Times:', self)
        self.edit_averaging_time = QLineEdit(self)
        self.edit_averaging_time.setText("10")

        #測定開始ボタン
        self.btn_Start = QPushButton('START', self)
        self.btn_Start.setStyleSheet('background-color:cyan; color:black;')
        self.btn_Start.setFont(QFont("", 40))
        
        #イメージ
        self.image1 = QLabel(self)
        self.image1.setScaledContents(True)
        self.image1.setPixmap(QPixmap(SCRIPT_DIR+"/.texture/RSTF.png"))

        #プロット切り替えボタン
        self.btn_pltChange = QPushButton('↔', self)
        self.btn_pltChange.setStyleSheet('background-color:white; color:black;')
        self.btn_pltChange.setFont(QFont("", 28))
        self.btn_pltChange.setHidden(True)
        self.btn_pltChange.clicked.connect(self.plotChange) 

        #ログ
        self.label_log = QLabel('Log:', self)
        self.te_log = QTextEdit(self)
        self.te_log.setReadOnly(True) 
        self.te_log.setStyleSheet('background-color:black;')
        self.te_log.setTextColor(QColor(0, 255, 0))
        self.te_log.setFontPointSize(16)

        #プロットウィンドウ
        self.figure1 = plt.figure(figsize=(9, 5), dpi=60)
        self.axes1 = self.figure1.add_subplot(111)
        self.axes1.tick_params(labelsize=15)
        self.canvas1 = FigureCanvas(self.figure1)
        self.canvas1.setParent(self)
        
        #プロットウィンドウ2
        self.figure2 = plt.figure(figsize=(9, 5), dpi=60)
        self.axes2 = self.figure2.add_subplot(111)
        self.axes2.tick_params(labelsize=15)
        self.canvas2 = FigureCanvas(self.figure2)
        self.canvas2.setParent(self)

        #ナビゲーションツール
        self.toolbar1 = NavigationToolbar(self.canvas1, self)
        self.toolbar1.setGeometry(800, 80, 20, 30)
        self.toolbar2 = NavigationToolbar(self.canvas2, self)
        self.toolbar2.setGeometry(800, 390, 20, 30)

        self.btn_Start.clicked.connect(self.measure)
        #ウィジェットイベント
        self.combo_Mode.currentIndexChanged.connect(self.wiget_setting)

        self.wigets_layout()

    def showDialog(self):
        frame = QFileDialog.getExistingDirectory(self)
        if frame != "": self.edit_Save.setText(frame+'/') 

    #各ウィジェットの配置
    def wigets_layout(self):
        x1=20; y1=350;y2=380
        x2=150;y3=450;y4=480

        self.setGeometry(300,300,900,800) #ウィンドウサイズ
        self.image1.setGeometry(20, 60, 250, 250)
        self.label_Save.move(x1, 10) 
        self.edit_Save.setGeometry(130, 10, 650, 20)
        self.btn_Save.setGeometry(800, 10, 80, 20)
        self.label_Mode.move(x1, y1) 
        self.combo_Mode.setGeometry(x1-3, y2, 120, 30)
        self.label_Output.move(x2, y1)
        self.combo_Output.setGeometry(x2-3, y2, 140, 30)
        self.label_Sub.move(x1, y3)
        self.edit_Sub.setGeometry(x1, y4, 100, 20)
        self.label_averaging_time.move(x2, y3)
        self.edit_averaging_time.setGeometry(x2, y4, 100, 20)
        self.btn_Start.setGeometry(60, 540, 180, 80)
        self.label_log.move(50, 640)
        self.te_log.setGeometry(50, 670, 800, 120)
        self.canvas1.move(300, 50)
        self.canvas2.move(300, 360)
        self.btn_pltChange.setGeometry(860, 55, 30, 30)

    #測定モードごとのウィジェットの設定
    def wiget_setting(self):
        self.combo_Output.clear()
        self.edit_Sub.setReadOnly(True)

        #RSTF
        if self.combo_Mode.currentIndex() is 0:
            self.combo_Output.addItem("Headphones")
            self.edit_Sub.setReadOnly(False)
            self.edit_averaging_time.setText("10") 
            self.image1.setPixmap(QPixmap(SCRIPT_DIR+"/.texture/RSTF.png"))


        #SSTF
        elif self.combo_Mode.currentIndex() is 1:
            self.combo_Output.addItems(['angle: 0-85', 'angle: 90-175', 'angle: 180-265', 'angle: 270-355', 'ITD_Check'])   
            self.edit_Sub.setReadOnly(False) 
            self.edit_averaging_time.setText("10")
            self.image1.setPixmap(QPixmap(SCRIPT_DIR+"/.texture/SSTF.png"))

        #LSTF
        elif self.combo_Mode.currentIndex() is 2:
            self.combo_Output.addItems('Speaker No.' + str(n) for n in range(1, 19))
            self.edit_Sub.clear()
            self.edit_averaging_time.setText("10")
            self.image1.setPixmap(QPixmap(SCRIPT_DIR+"/.texture/LSTF.png"))

        #MicAjust
        elif self.combo_Mode.currentIndex() is 3:
            self.combo_Output.addItem("Speaker No.1")
            self.edit_Sub.clear()
            self.image1.setPixmap(QPixmap(SCRIPT_DIR+""))

    #測定
    def measure(self):
        self.averaging_times = self.edit_averaging_time.text()
        self.speaker_index = self.combo_Output.currentIndex()
        self.subject = self.edit_Sub.text()
        self.outdir = self.edit_Save.text() + "/" + self.subject
        self.Reverse = False #プロット切り替えスイッチ
        self.btn_pltChange.setHidden(False)

        #RSTF
        if self.combo_Mode.currentIndex() is 0:
            if self.averaging_times is "":
                QMessageBox.warning(self, "Message", u"SANnum is invalid or empty")
                return
            if self.subject is "":
                QMessageBox.warning(self, "Message", u"subject Name is empty")
                return
            measure.RSTF(self.subject, self.averaging_times, 1, 255, 3801, 4823, self.outdir)
            self.te_log.append('cinv_cRSTF_L.DDB and cinv_cRSTF_R.DDB are measured. ('
                                + datetime.now().strftime("%H:%M:%S")  + ')')
            self.plotChange()

        #SSTF
        elif self.combo_Mode.currentIndex() is 1:
            self.btn_pltChange.setHidden(True)
            if os.path.exists("/Volumes/share/angle") is False:
                QMessageBox.warning(self, "Message", u"Speaker selector is not connecting.")
                return
            if self.averaging_times is "":
                QMessageBox.warning(self, "Message", u"SANnum is invalid or empty")
                return
            if self.subject is "":
                QMessageBox.warning(self, "Message", u"subject Name is empty")
                return
            if self.speaker_index is 4: 
                with open('/Volumes/share/angle', 'w') as select: select.write("1")
                measure.SSTF(self.subject, self.averaging_times, 'check', 150, 405, self.outdir)
                self.plot(self.outdir + '/SSTF/cSSTF_check_L.DDB'
                        , self.outdir + '/SSTF/cSSTF_check_R.DDB')        #/SSTF/cSSTF_000_R.DDBから/SSTF/cSSTF_check_R.DDBに名称変更
                return

            for n in range(18):
                angle = self.speaker_index * 90 + n * 5
                with open('/Volumes/share/angle', 'w') as select: select.write(str(n+1))
                measure.SSTF(self.subject, self.averaging_times, angle, 150, 405, self.outdir)
                self.te_log.append('SSTF_' + str(angle) + '_L.DDB and SSTF_' 
                                + str(angle) + '_R.DDB are measured. ('+ datetime.now().strftime("%H:%M:%S")  + ')')
                self.plot(self.outdir + '/SSTF/cSSTF_' + str(angle) + '_L.DDB'
                        , self.outdir + '/SSTF/cSSTF_' + str(angle) + '_R.DDB')
                self.canvas1.flush_events()
                self.canvas2.flush_events()

        #LSTF
        elif self.combo_Mode.currentIndex() is 2:
            if os.path.exists("/Volumes/share/angle") is False:
                QMessageBox.warning(self, "Message", u"Speaker selector is not connecting.")
                return
            if self.averaging_times is "":
                QMessageBox.warning(self, "Message", u"SANnum is invalid or empty")
                return
            with open('/Volumes/share/angle', 'w') as select:
                        select.write(str(self.speaker_index+1))
            measure.LSTF(self.speaker_index+1, self.averaging_times, 150, 405, 3800, 4823, self.edit_Save.text())
            self.te_log.append('/LSTF_' + str(self.speaker_index+1) + '.DDB is measured. ('
                                + datetime.now().strftime("%H:%M:%S")  + ')')
            self.plotChange()

        #MicAjust
        elif self.combo_Mode.currentIndex() is 3:
            with open('/Volumes/share/angle', 'w') as select: select.write("1")
            measure.mic_ajust()
            self.te_log.append('rec_L.DDB and rec_R.DDB are measured. ('+ datetime.now().strftime("%H:%M:%S")  + ')')
            self.plotChange()
        
        # elif self.combo_Mode.currentIndex() is 4:
        #     cpyconv.closedloop()
        #     with open(SCRIPT_DIR+"/DOUKI_START", 'r') as douki_start: iodelay = douki_start.read()
        #     QMessageBox.about(self, "Message", "The I/O delay is "+iodelay+" sample")

    #データのプロット
    def plot(self, file_L, file_R): 
        data_bin = open(file_L, 'rb').read()
        data = np.fromstring(data_bin,dtype=np.float64)
        if file_R != None:
            data_bin2 = open(file_R, 'rb').read()
            data2 = np.fromstring(data_bin2,dtype=np.float64)

        #プロット1
        self.axes1.clear()
        self.axes1.set_title('Impulse Response', fontsize=15)
        self.axes1.set_xlabel("Sample", fontsize=15)
        self.axes1.set_ylabel("Level", fontsize=15)
        self.axes1.plot(data, '-', label=re.search("(.*)/(.*)", file_L).group(2))
        if file_R != None:
            self.axes1.plot(data2, '-', label=re.search("(.*)/(.*)", file_R).group(2))
        self.axes1.legend(bbox_to_anchor=(0., 1.02, 1., .102),borderaxespad=-0.2)
        self.canvas1.draw()

        #プロット2
        self.axes2.clear()
        self.axes2.set_title('Frequency Characteristic', fontsize=15)
        self.axes2.set_xlabel("Frequency [Hz]", fontsize=15)
        self.axes2.set_ylabel("Amplitude [dB]", fontsize=15)
        self.axes2.set_xlim(100, 24000)
        self.axes2.set_xscale('log')
        N = 255
        x = np.fft.fftfreq(N*2,d=1.0/48000)*2
        freq = np.fft.fft(data[0:N])
        data_amplitude = [np.sqrt(c.real ** 2  + c.imag ** 2 ) for c in freq]
        data_decibel = 10.0 * np.log10(data_amplitude)
        self.axes2.plot(x[0:N], data_decibel, '-', label=re.search("(.*)/(.*)", file_L).group(2))

        if file_R != None:
            freq2 = np.fft.fft(data2[0:N])
            data_amplitude2 = [np.sqrt(c.real ** 2  + c.imag ** 2 ) for c in freq2]
            data_decibel2 = 10.0 * np.log10(data_amplitude2)
            self.axes2.plot(x[0:N], data_decibel2, '-', label=re.search("(.*)/(.*)", file_R).group(2))
        
        self.axes2.legend(bbox_to_anchor=(0., 1.02, 1., .102),borderaxespad=-0.2)
        self.canvas2.draw()

    def plotChange(self):
        if self.Reverse is False: 
            #RSTF
            if self.combo_Mode.currentIndex() is 0:
                self.plot(self.outdir + '/RSTF/cRSTF_L.DDB'
                        , self.outdir + '/RSTF/cRSTF_R.DDB')
            #LSTF
            elif self.combo_Mode.currentIndex() is 2:
                self.plot(self.edit_Save.text() + '/LSTF/cLSTF_' + str(self.speaker_index+1) + '.DDB', None)
            #MicAjust
            elif self.combo_Mode.currentIndex() is 3:
                self.plot('/tmp/rec_L.DDB', '/tmp/rec_R.DDB')
            self.Reverse = True

        elif self.Reverse is True:
            #RSTF
            if self.combo_Mode.currentIndex() is 0:
                self.plot(self.outdir + '/RSTF/cinv_cRSTF_L.DDB'
                        , self.outdir + '/RSTF/cinv_cRSTF_R.DDB')
            #LSTF
            elif self.combo_Mode.currentIndex() is 2:
                self.plot(self.edit_Save.text() + '/LSTF/cinv_cLSTF_' + str(self.speaker_index+1) + '.DDB', None)
            #MicAjust
            elif self.combo_Mode.currentIndex() is 3:
                self.plot('/tmp/rec_R.DDB', '/tmp/rec_L.DDB')
            self.Reverse = False


    #ウィンドウ内の座標を表示
    def mousePressEvent(self, event):
        print('x='+ str(event.x()) + ', y=' + str(event.y()))
コード例 #2
0
ファイル: visualzer.py プロジェクト: celeron367/DataViewer
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1112, 857)
        MainWindow.setFixedSize(1112, 817)
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(12)
        font.setBold(True)
        font.setWeight(75)
        MainWindow.setFont(font)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(760, 280, 341, 321))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.tableWidget.setFont(font)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        self.tableWidget.setHorizontalHeaderItem(1, item)
        self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox.setGeometry(QtCore.QRect(20, 10, 731, 671))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.groupBox.setFont(font)
        self.groupBox.setObjectName("groupBox")
        self.widget = PlotCanvas(self.groupBox)
        self.widget.setGeometry(QtCore.QRect(10, 40, 711, 621))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setPointSize(7)
        font.setBold(False)
        font.setWeight(50)
        self.widget.setFont(font)
        self.widget.setObjectName("widget")
        self.widget_3 = NavigationToolbar(self.widget, self.groupBox)
        self.widget_3.setGeometry(QtCore.QRect(10, 10, 321, 31))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.widget_3.setFont(font)
        self.widget_3.setObjectName("widget_3")
        self.pushButton_3 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_3.setGeometry(QtCore.QRect(648, 13, 75, 23))
        self.pushButton_3.setObjectName("pushButton_3")
        self.pushButton_4 = QtWidgets.QPushButton(self.groupBox)
        self.pushButton_4.setGeometry(QtCore.QRect(570, 13, 75, 23))
        self.pushButton_4.setObjectName("pushButton_4")
        self.groupBox_3 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_3.setGeometry(QtCore.QRect(760, 10, 341, 71))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.groupBox_3.setFont(font)
        self.groupBox_3.setObjectName("groupBox_3")
        self.horizontalLayoutWidget = QtWidgets.QWidget(self.groupBox_3)
        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 20, 331, 41))
        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
        self.horizontalLayout = QtWidgets.QHBoxLayout(
            self.horizontalLayoutWidget)
        self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.lineEdit = QtWidgets.QLineEdit(self.horizontalLayoutWidget)
        self.lineEdit.setObjectName("lineEdit")
        self.horizontalLayout.addWidget(self.lineEdit)
        self.pushButton = QtWidgets.QPushButton(self.horizontalLayoutWidget)
        self.pushButton.setObjectName("pushButton")
        self.horizontalLayout.addWidget(self.pushButton)
        self.groupBox_5 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_5.setGeometry(QtCore.QRect(20, 680, 731, 121))
        font = QtGui.QFont()
        font.setPointSize(9)
        self.groupBox_5.setFont(font)
        self.groupBox_5.setObjectName("groupBox_5")
        self.textBrowser = QtWidgets.QTextBrowser(self.groupBox_5)
        self.textBrowser.setGeometry(QtCore.QRect(10, 20, 711, 91))
        font = QtGui.QFont()
        font.setBold(False)
        font.setWeight(50)
        self.textBrowser.setFont(font)
        self.textBrowser.setObjectName("textBrowser")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(760, 240, 341, 31))
        self.pushButton_2.setObjectName("pushButton_2")
        self.groupBox_4 = QtWidgets.QGroupBox(self.centralwidget)
        self.groupBox_4.setGeometry(QtCore.QRect(760, 90, 341, 141))
        font = QtGui.QFont()
        font.setFamily("Arial")
        font.setPointSize(9)
        font.setBold(True)
        font.setWeight(75)
        self.groupBox_4.setFont(font)
        self.groupBox_4.setObjectName("groupBox_4")
        self.label = QtWidgets.QLabel(self.groupBox_4)
        self.label.setGeometry(QtCore.QRect(10, 20, 54, 21))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.label_2 = QtWidgets.QLabel(self.groupBox_4)
        self.label_2.setGeometry(QtCore.QRect(180, 20, 54, 21))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.label_2.setFont(font)
        self.label_2.setObjectName("label_2")
        self.label_3 = QtWidgets.QLabel(self.groupBox_4)
        self.label_3.setGeometry(QtCore.QRect(10, 60, 54, 21))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.label_3.setFont(font)
        self.label_3.setObjectName("label_3")
        self.label_4 = QtWidgets.QLabel(self.groupBox_4)
        self.label_4.setGeometry(QtCore.QRect(180, 60, 91, 21))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.label_4.setFont(font)
        self.label_4.setObjectName("label_4")
        self.label_5 = QtWidgets.QLabel(self.groupBox_4)
        self.label_5.setGeometry(QtCore.QRect(10, 100, 81, 21))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.label_5.setFont(font)
        self.label_5.setObjectName("label_5")
        self.lineEdit_2 = QtWidgets.QLineEdit(self.groupBox_4)
        self.lineEdit_2.setGeometry(QtCore.QRect(80, 20, 51, 20))
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.lineEdit_3 = QtWidgets.QLineEdit(self.groupBox_4)
        self.lineEdit_3.setGeometry(QtCore.QRect(270, 20, 51, 20))
        self.lineEdit_3.setObjectName("lineEdit_3")
        self.lineEdit_4 = QtWidgets.QLineEdit(self.groupBox_4)
        self.lineEdit_4.setGeometry(QtCore.QRect(80, 60, 51, 20))
        self.lineEdit_4.setObjectName("lineEdit_4")
        self.lineEdit_5 = QtWidgets.QLineEdit(self.groupBox_4)
        self.lineEdit_5.setGeometry(QtCore.QRect(270, 60, 51, 20))
        self.lineEdit_5.setObjectName("lineEdit_5")
        self.radioButton = QtWidgets.QRadioButton(self.groupBox_4)
        self.radioButton.setGeometry(QtCore.QRect(120, 100, 61, 16))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.radioButton.setFont(font)
        self.radioButton.setObjectName("radioButton")
        self.radioButton_2 = QtWidgets.QRadioButton(self.groupBox_4)
        self.radioButton_2.setGeometry(QtCore.QRect(230, 100, 91, 16))
        font = QtGui.QFont()
        font.setFamily("宋体")
        font.setBold(False)
        font.setWeight(50)
        self.radioButton_2.setFont(font)
        self.radioButton_2.setObjectName("radioButton_2")
        self.textBrowser_2 = QtWidgets.QTextBrowser(self.centralwidget)
        self.textBrowser_2.setGeometry(QtCore.QRect(760, 610, 341, 191))
        font = QtGui.QFont()
        font.setPointSize(9)
        font.setBold(False)
        font.setWeight(50)
        self.textBrowser_2.setFont(font)
        self.textBrowser_2.setObjectName("textBrowser_2")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1112, 23))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "DataViewer"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("MainWindow", "文件名"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("MainWindow", "平均交叉关联"))
        self.groupBox.setTitle(_translate("MainWindow", "图表"))
        self.pushButton_3.setText(_translate("MainWindow", "刷新"))
        self.pushButton_4.setText(_translate("MainWindow", "交叉关联"))
        self.groupBox_3.setTitle(_translate("MainWindow", "数据源"))
        self.pushButton.setText(_translate("MainWindow", "数据文件夹"))
        self.groupBox_5.setTitle(_translate("MainWindow", "消息"))
        self.pushButton_2.setText(_translate("MainWindow", "分析"))
        self.groupBox_4.setTitle(_translate("MainWindow", "设置"))
        self.label.setText(_translate("MainWindow", "强度阈值:"))
        self.label_2.setText(_translate("MainWindow", "寻峰阈值:"))
        self.label_3.setText(_translate("MainWindow", "寻峰数目:"))
        self.label_4.setText(_translate("MainWindow", "匹配容差(%):"))
        self.label_5.setText(_translate("MainWindow", "交叉关联算法:"))
        self.radioButton.setText(_translate("MainWindow", "Raw"))
        self.radioButton_2.setText(_translate("MainWindow", "Peaks"))