From 74f9d357a1f68b7d913b61fc18116da68175d58b Mon Sep 17 00:00:00 2001 From: Yorusora <2944763079@qq.com> Date: Mon, 28 Apr 2025 19:31:04 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BB=98=E5=88=B6=E4=BA=86<=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E7=B2=BE=E5=AF=B9=E9=BD=90>=E7=9A=84=E7=95=8C=E9=9D=A2=20?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E4=BA=86<=E6=95=B0=E6=8D=AE=E7=B2=BE?= =?UTF-8?q?=E5=AF=B9=E9=BD=90>=E7=9A=84=E7=9B=B8=E5=85=B3=E5=B7=A5?= =?UTF-8?q?=E5=85=B7=E5=8C=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- func/utils/precisely_align_util.py | 465 +++++++++++++++++ ui/MainWindow/MainWindow_artifact_label.py | 15 +- ui/MainWindow/MainWindow_artifact_label.ui | 14 +- ui/MainWindow/MainWindow_label_check.py | 16 +- ui/MainWindow/MainWindow_label_check.ui | 14 +- ui/MainWindow/MainWindow_menu.py | 112 ++-- ui/MainWindow/MainWindow_menu.ui | 16 +- ui/MainWindow/MainWindow_precisely_align.py | 368 +++++++++++++ ui/MainWindow/MainWindow_precisely_align.ui | 543 ++++++++++++++++++++ ui/setting/label_check_input_setting.py | 29 +- ui/setting/label_check_input_setting.ui | 19 +- ui/setting/precisely_align_input_setting.py | 197 +++++++ ui/setting/precisely_align_input_setting.ui | 216 ++++++++ 13 files changed, 1942 insertions(+), 82 deletions(-) create mode 100644 func/utils/precisely_align_util.py create mode 100644 ui/MainWindow/MainWindow_precisely_align.py create mode 100644 ui/MainWindow/MainWindow_precisely_align.ui create mode 100644 ui/setting/precisely_align_input_setting.py create mode 100644 ui/setting/precisely_align_input_setting.ui diff --git a/func/utils/precisely_align_util.py b/func/utils/precisely_align_util.py new file mode 100644 index 0000000..3f6252f --- /dev/null +++ b/func/utils/precisely_align_util.py @@ -0,0 +1,465 @@ +import os +import shutil +import pandas as pd + +from resampy import resample +from scipy import signal + + +import numpy as np +import matplotlib.pyplot as plt + +def read_data(root): + orgBCGpath = os.path.join(root, 'raw_org.txt') + BCGpath = os.path.join(root, 'DSbcg_sig_1000hz3.txt') + ECGpath = os.path.join(root, 'filter_ecg.txt') + Jpeakspath = os.path.join(root, 'Jpeak.txt') + Rpeakspath = os.path.join(root, 'final_Rpeak.txt') + + orgBCG = np.array(pd.read_csv(orgBCGpath, header=None)).reshape(-1) + # B, A = signal.butter(4, np.array([2,8])*2/1000, 'bandpass') + # BCG = signal.filtfilt(B, A, orgBCG) + BCG = np.array(pd.read_csv(BCGpath)).reshape(-1) + ECG = np.array(pd.read_csv(ECGpath, header=None)).reshape(-1) + + + Jpeaks = np.loadtxt(Jpeakspath).astype(int) + Rpeaks = np.loadtxt(Rpeakspath).astype(int) + + return orgBCG, BCG, ECG, Jpeaks, Rpeaks + + + +def Align_two_way(Jpeaks, Rpeaks, fs=1000): + def get_info(Jpeaks, Rpeaks): + """ + + :param Jpeaks: + :param Rpeaks: + :return: + """ + RRIs = np.diff(Rpeaks) + JJIs = np.diff(Jpeaks) + RRIVs = np.diff(RRIs) + JJIVs = np.diff(JJIs) + + N_JJIV = get_area(Jpeaks, JJIVs, Rpeaks, RRIVs, title='JJIV') + N_RRIV = get_area(Rpeaks, RRIVs, Jpeaks, JJIVs, N_JJIV=N_JJIV[0], title='RRIV') + JJIs_cut = JJIs[N_JJIV[1, 0]: N_JJIV[1, 1]] + RRIs_cut = RRIs[N_RRIV[1, 0]: N_RRIV[1, 1]] + Rpeaks_cut = Rpeaks[N_RRIV[1, 0]:N_RRIV[1, 1] + 2] + Jpeaks_cut = Jpeaks[N_JJIV[1, 0]:N_JJIV[1, 1] + 2] + RRI = np.diff(Rpeaks_cut) + # shift = get_IIV_shift(JJIs_cut, RRIs_cut) + shift, correlation_IIV, correlation_II, total_time_ratio = get_IIV_shift(JJIs_cut, RRIs_cut) + offset_interval = np.sum(RRI[:shift]) - (Jpeaks_cut[0] - Rpeaks_cut[0]) # BCG 相对于ECG的偏移量 + anchor_R = Rpeaks[N_RRIV[1, 0] + shift] + anchor_J = Jpeaks[N_JJIV[1, 0]] + + # info = {'N_JJIV':N_JJIV, 'N_RRIV':N_RRIV, 'shift':shift, 'offset_interval':offset_interval, 'anchors':[anchor_R, anchor_J]} + info = {'N_JJIV': N_JJIV, 'N_RRIV': N_RRIV, 'correlation_IIV': correlation_IIV, + 'correlation_II': correlation_II, 'shift': shift, 'total_time_ratio': total_time_ratio, + 'offset_interval': offset_interval, 'anchors': [anchor_R, anchor_J]} + return info + + info1 = get_info(Jpeaks, Rpeaks) + offset_interval1 = info1['offset_interval'] + anchor1 = info1['anchors'] + offset_interval1_T = offset_interval1 / fs # 前端偏移时间量,大于0 + print("前端对齐的偏移量为:{}s".format(offset_interval1_T)) + + # while True: + info2 = get_info(Jpeaks, Rpeaks) + anchor2 = info2['anchors'] + offset_interval2 = info2['offset_interval'] + offset_interval2_T = offset_interval2 / fs # 后端偏移时间量,大于0 + print("后端对齐的偏移量为:{}s".format(offset_interval2_T)) + + orgfs = (int(anchor2[1]) - int(anchor1[1])) * fs / (int(anchor2[0]) - int(anchor1[0])) + + offset_anchor = anchor1[0] - anchor1[1] + info = {'1': info1, '2': info2, 'offset_anchor': offset_anchor, 'orgfs': orgfs} + + return info + + +################################################ Align utils ############################################################# +def get_area(peaks1_, data1, peaks2_, data2, fs=1000, N_JJIV=None, title='JJIV'): + global N, line0, line1 + + peaks1 = peaks1_[:-2] / fs + peaks2 = peaks2_[:-2] / fs + ylim = [-500, 500] + + '''手动选择区域''' + N = np.array([]).astype(int) + fig, ax = plt.subplots(nrows=2, ncols=1, sharex=True, sharey=True) + ax0, ax1 = ax[0], ax[1] + ax0.set_title(title) + ax0.stem(peaks1, data1, markerfmt='C0.') + line0, = ax0.plot(peaks1, data1, 'o', c='b', markersize=2, picker=True, pickradius=5) + line1, = ax0.plot(peaks1[N], data1[N] + 1, 'v', c='r', picker=True, pickradius=5) + ax0.set_ylim(ylim[0], ylim[1]) + ax0.grid() + ax1.stem(peaks2, data2, markerfmt='C0.') + if N_JJIV is not None: + N_JJIV2 = np.copy(N_JJIV) + N_JJIV2 = N_JJIV2 / fs + ax1.plot([N_JJIV2[0], N_JJIV2[0]], [ylim[0], ylim[1]], 'k--') + ax1.plot([N_JJIV2[1], N_JJIV2[1]], [ylim[0], ylim[1]], 'k--') + ax1.set_ylim(ylim[0], ylim[1]) + + def onpick(event): + global line0, line1 + global N + thisline = event.artist + xdata = thisline.get_xdata() + ind = event.ind[-1] + MM = ind + if thisline == line0: + if len(N) < 2: + N = np.append(N, MM) + N.sort() + elif thisline == line1: + N = np.delete(N, int(ind)) + + xlime = ax0.get_xlim() + ylime = ax0.get_ylim() + ax0.clear() + ax0.set_title(title) + ax0.stem(peaks1, data1, markerfmt='C0.') + line0, = ax0.plot(peaks1, data1, 'o', c='b', markersize=2, picker=True, pickradius=5) + line1, = ax0.plot(peaks1[N], data1[N] + 1, 'v', c='r', picker=True, pickradius=5) + ax0.set_xlim(xlime) + ax0.set_ylim(ylime) + ax0.grid() + plt.draw() + + fig.canvas.mpl_connect('pick_event', onpick) + plt.show() + + if len(N) == 0: + N = np.array([0, len(data1) - 1]).astype(int) + + N_peak = peaks1_[N] + N_out = np.asarray([N_peak[:2], N[:2]]).astype(int) + + return N_out + + +def get_IIV_shift(JJIs, RRIs): + global shift, line0 + + RRIVs = np.diff(RRIs) + JJIVs = np.diff(JJIs) + corre_ = np.correlate(RRIVs, JJIVs, 'valid') + + '''手动选择偏移''' + corre = np.copy(corre_) + shift = np.argmax(corre) + RRIVs_cut = RRIVs[shift:shift + len(JJIVs)] + RRIs_cut = RRIs[shift:shift + len(JJIs)] + + correlation = np.corrcoef(RRIVs_cut, JJIVs) + correlation_IIV = (correlation[0, 1] + correlation[1, 0]) / 2 + + correlation = np.corrcoef(RRIs_cut, JJIs) + correlation_II = (correlation[0, 1] + correlation[1, 0]) / 2 + + tmp = RRIVs_cut * JJIVs + same_sign_rate = np.sum(tmp > 0) / len(JJIVs) + total_time_ratio = np.sum(JJIs) / np.sum(RRIs[shift:shift + len(JJIs)]) + fig, ax = plt.subplots(2, 1) + ax0, ax1 = ax[0], ax[1] + ax0.set_title( + "corre_IIV: {}, corre_II: {}\n same_sign_rate:{}, total_time_ratio: {}\n shift: {}".format(correlation_IIV, + correlation_II, + same_sign_rate, + total_time_ratio, + shift)) + ax0.stem(corre, markerfmt='C0.', label='corre(RRIV, JJIV)') + line0, = ax0.plot(corre, 'o', c='b', markersize=2, picker=True, pickradius=5) + ax0.plot(shift, corre[shift] + 1, 'v', c='r', picker=True, pickradius=5) + ax0.legend() + ax0.grid() + ax1.stem(RRIVs, markerfmt='b.', label='RRIV') + ax1.stem(np.arange(shift, shift + len(JJIVs)), JJIVs, markerfmt='ko', label='JJIV') + ax1.legend() + + def onpick(event): + global line0 + global shift + thisline = event.artist + xdata = thisline.get_xdata() + ind = event.ind[-1] + shift = int(xdata[ind]) + RRIVs_cut = RRIVs[shift:shift + len(JJIVs)] + RRIs_cut = RRIs[shift:shift + len(JJIs)] + + correlation = np.corrcoef(RRIVs_cut, JJIVs) + correlation_IIV = (correlation[0, 1] + correlation[1, 0]) / 2 + + correlation = np.corrcoef(RRIs_cut, JJIs) + correlation_II = (correlation[0, 1] + correlation[1, 0]) / 2 + + tmp = RRIVs_cut * JJIVs + same_sign_rate = np.sum(tmp > 0) / len(JJIVs) + total_time_ratio = np.sum(JJIs) / np.sum(RRIs[shift:shift + len(JJIs)]) + + xlime = ax0.get_xlim() + ylime = ax0.get_ylim() + ax0.clear() + ax0.set_title( + "corre_IIV: {}, corre_II: {}\n same_sign_rate:{}, total_time_ratio: {}\n shift: {}".format(correlation_IIV, + correlation_II, + same_sign_rate, + total_time_ratio, + shift)) + ax0.stem(corre, markerfmt='C0.', label='corre(RRIV, JJIV)') + line0, = ax0.plot(corre, 'o', c='b', markersize=2, picker=True, pickradius=5) + ax0.plot(shift, corre[shift] + 1, 'v', c='r', picker=True, pickradius=5) + ax0.legend() + ax0.grid() + ax0.set_xlim(xlime) + ax0.set_ylim(ylime) + xlime = ax1.get_xlim() + ylime = ax1.get_ylim() + ax1.clear() + ax1.stem(RRIVs, markerfmt='b.', label='RRIV') + ax1.stem(np.arange(shift, shift + len(JJIVs)), JJIVs, markerfmt='ko', label='JJIV') + ax1.legend() + ax1.set_xlim(xlime) + ax1.set_ylim(ylime) + plt.draw() + + fig.canvas.mpl_connect('pick_event', onpick) + plt.show() + + # return shift + return shift, correlation_IIV, correlation_II, total_time_ratio + + +def main(): + def offset_correct(BCG, ECG, anchors): + global line0, line1, N, M + a = np.max([np.max(ECG), np.max(BCG)]) + b = np.min([np.min(ECG), np.min(BCG)]) + peaks_ECG, _ = signal.find_peaks(ECG) + peaks_BCG, _ = signal.find_peaks(BCG) + N, M = np.array([]).astype(int), np.array([]).astype(int) + fig, ax = plt.subplots() + ax.set_title("offset correct") + ax.plot(ECG) + ax.plot(BCG) + ax.plot([anchors[0], anchors[0]], [b, a], 'k--') + ax.plot([anchors[1], anchors[1]], [b, a], 'k--') + ax.plot(N, ECG[N] + 1, 'rv') + ax.plot(M, BCG[M] + 1, 'yv') + line0, = ax.plot(peaks_ECG, ECG[peaks_ECG], 'o', markersize=2, c='g', picker=True, pickradius=5) + line1, = ax.plot(peaks_BCG, BCG[peaks_BCG], 'o', markersize=2, c='g', picker=True, pickradius=5) + ax.grid() + + def onpick(event): + global line0, line1, N, M + thisline = event.artist + xdata = thisline.get_xdata() + ind = event.ind[-1] + nm = int(xdata[ind]) + if thisline == line0: + if nm in N: + idx = np.where(N == nm)[0] + N = np.delete(N, idx) + elif len(N) < 2: + N = np.append(N, nm) + elif thisline == line1: + if nm in M: + idx = np.where(M == nm)[0] + M = np.delete(M, idx) + elif len(M) < 2: + M = np.append(M, nm) + + xlime = ax.get_xlim() + ylime = ax.get_ylim() + ax.clear() + ax.set_title("offset correct") + ax.plot(ECG) + ax.plot(BCG) + ax.plot([anchors[0], anchors[0]], [b, a], 'k--') + ax.plot([anchors[1], anchors[1]], [b, a], 'k--') + ax.plot(N, ECG[N] + 1, 'rv') + ax.plot(M, BCG[M] + 1, 'yv') + line0, = ax.plot(peaks_ECG, ECG[peaks_ECG], 'o', markersize=2, c='g', picker=True, pickradius=5) + line1, = ax.plot(peaks_BCG, BCG[peaks_BCG], 'o', markersize=2, c='g', picker=True, pickradius=5) + ax.grid() + ax.set_xlim(xlime) + ax.set_ylim(ylime) + plt.draw() + + fig.canvas.mpl_connect('pick_event', onpick) + plt.show() + + if len(N) == 0 or len(M) == 0: + off = 0 + else: + M.sort() + N.sort() + off = round(((int(N[1]) - int(M[1])) + (int(N[0]) - int(M[0]))) / 2) + + return off + + '''输入信息(如数据路径、采样频率)''' + fs = 1000 + root = r"E:\data_annotation\pratice_data\282" # E:\BCG_data\703 + + saveroot = os.path.join(root, 'Align') + if not os.path.exists(saveroot): + os.mkdir(saveroot) + else: + shutil.rmtree(saveroot) + os.mkdir(saveroot) + + '''获取数据(BCG、ECG、J_peak、R_peak)''' + raw_org_, DSbcg_sig_1000hz3_, filter_ecg_, Jpeak_, final_Rpeak_ = read_data(root) + + orgBCG = raw_org_ + BCG = DSbcg_sig_1000hz3_ + ECG = filter_ecg_ + Rpeaks = final_Rpeak_ + Jpeaks = Jpeak_ + + orgbcg_len = len(BCG) + argmax_bcg = np.argmax(BCG) + orgecg_len = len(ECG) + argmax_ecg = np.argmax(ECG) + + # plt.figure() + # plt.subplot(2,1,1) + # plt.plot(BCG[:3600000]) + # plt.subplot(2,1,2) + # plt.plot(ECG) + + info = Align_two_way(Jpeaks, Rpeaks, fs=fs) + + print(info) + + anchor0 = info['1']['anchors'] + anchor1 = info['2']['anchors'] + + off = info['offset_anchor'] + orgfs = info['orgfs'] + + if off > 0: + ECG = ECG[off:] + anchor0[0] = anchor0[0] - off + anchor1[0] = anchor1[0] - off + idxs = np.where(Rpeaks > off)[0] + Rpeaks = Rpeaks[idxs] - off + else: + BCG = BCG[-off:] + orgBCG = orgBCG[-off:] + anchor0[1] = anchor0[1] + off + anchor1[1] = anchor1[1] + off + + BCG_res = resample(BCG, orgfs, fs) + orgBCG_res = resample(orgBCG, orgfs, fs) + + # ———————————————————————————————————————————————————————————————— + anchor0[1] = round(int(anchor0[1]) * fs / orgfs) + anchor1[1] = round(int(anchor1[1]) * fs / orgfs) + off = anchor1[0] - anchor1[1] + if off > 0: + ECG = ECG[off:] + anchor0[0] = anchor0[0] - off + anchor1[0] = anchor1[0] - off + idxs = np.where(Rpeaks > off)[0] + Rpeaks = Rpeaks[idxs] - off + else: + BCG_res = BCG_res[-off:] + orgBCG_res = orgBCG_res[-off:] + anchor0[1] = anchor0[1] + off + anchor1[1] = anchor1[1] + off + + datalen = np.min([len(ECG), len(BCG_res)]) + ECG = ECG[:datalen] + BCG_res = BCG_res[:datalen] + orgBCG_res = orgBCG_res[:datalen] + + idxs = np.where(Rpeaks < datalen)[0] + Rpeaks = Rpeaks[idxs] + + # —————————————————————————————————————————————————————————————————— + off = offset_correct(BCG_res, ECG, [anchor0[0], anchor1[0]]) + if off > 0: + ECG = ECG[off:] + anchor0[0] = anchor0[0] - off + anchor1[0] = anchor1[0] - off + idxs = np.where(Rpeaks > off)[0] + Rpeaks = Rpeaks[idxs] - off + else: + BCG_res = BCG_res[-off:] + orgBCG_res = orgBCG_res[-off:] + anchor0[1] = anchor0[1] + off + anchor1[1] = anchor1[1] + off + + info['offset_correct'] = off + + datalen = np.min([len(ECG), len(BCG_res)]) + ECG = ECG[:datalen] + BCG_res = BCG_res[:datalen] + orgBCG_res = orgBCG_res[:datalen] + + idxs = np.where(Rpeaks < datalen)[0] + Rpeaks = Rpeaks[idxs] + + Jpeaks = [] + peaks, _ = signal.find_peaks(BCG_res) + for i in Rpeaks: + tmp = np.abs(peaks - i) + idx = np.argmin(tmp) + Jpeaks.append(peaks[idx]) + Jpeaks = np.asarray(Jpeaks).astype(int) + + # ----------------2024.4.17 CYS 新增计算BCG与ECG前后两端切割的横坐标---------------- + orgfs = info['orgfs'] # 原始数据采样频率 + frontcut_index_bcg = int((argmax_bcg - np.argmax(BCG_res) / 1000 * orgfs)) + backcut_index_bcg = int((len(BCG_res) / 1000 * orgfs + argmax_bcg - np.argmax(BCG_res) / 1000 * orgfs)) + + frontcut_index_ecg = argmax_ecg - np.argmax(ECG) + backcut_index_ecg = len(ECG) + argmax_ecg - np.argmax(ECG) + + print("1. BCG前段被切割的坐标值为:", frontcut_index_bcg) + print("1. BCG后段被切割的坐标值为:", backcut_index_bcg) + print("2. ECG前段被切割的坐标值为:", frontcut_index_ecg) + print("2. ECG后段被切割的坐标值为:", backcut_index_ecg) + info = {'0': info, 'frontcut_index_bcg': frontcut_index_bcg, 'backcut_index_bcg': backcut_index_bcg, + 'frontcut_index_ecg': frontcut_index_ecg, 'backcut_index_ecg': backcut_index_ecg} + # ------------------------------------------------------------------------------ + + plt.figure() + plt.plot(ECG, label='ECG') + plt.plot(BCG_res, label='BCG') + plt.plot(Rpeaks, ECG[Rpeaks], 'ko', label='Rpeaks') + plt.plot(Jpeaks, BCG_res[Jpeaks], 'rv', label='Jpeaks') + # plt.legend() + plt.show() + + savepath = os.path.join(saveroot, 'Align_info.npy') + np.save(savepath, info) + savepath = os.path.join(saveroot, 'Align_info.txt') + with open(savepath, 'w') as file: + file.write(str(info)) + + savepath = os.path.join(saveroot, 'orgData_sync.txt') + pd.DataFrame(np.round(orgBCG_res, 4)).to_csv(savepath, index=None, header=None) + savepath = os.path.join(saveroot, 'BCG_sync.txt') + pd.DataFrame(np.round(BCG_res, 4)).to_csv(savepath, index=None, header=None) + savepath = os.path.join(saveroot, 'ECG_sync.txt') + pd.DataFrame(ECG).to_csv(savepath, index=None, header=None) + savepath = os.path.join(saveroot, 'Jpeaks_sync.txt') + pd.DataFrame(Jpeaks).to_csv(savepath, index=None, header=None) + savepath = os.path.join(saveroot, 'Rpeaks_sync.txt') + pd.DataFrame(Rpeaks).to_csv(savepath, index=None, header=None) + + +if __name__ == "__main__": + main() diff --git a/ui/MainWindow/MainWindow_artifact_label.py b/ui/MainWindow/MainWindow_artifact_label.py index 6f41df3..62bdaa6 100644 --- a/ui/MainWindow/MainWindow_artifact_label.py +++ b/ui/MainWindow/MainWindow_artifact_label.py @@ -19,7 +19,7 @@ from PySide6.QtWidgets import (QAbstractSpinBox, QApplication, QGridLayout, QGro QHBoxLayout, QHeaderView, QLabel, QLineEdit, QMainWindow, QPushButton, QRadioButton, QSizePolicy, QSpacerItem, QSpinBox, QStatusBar, QTableWidget, - QTableWidgetItem, QVBoxLayout, QWidget) + QTableWidgetItem, QTextBrowser, QVBoxLayout, QWidget) class Ui_MainWindow_artifact_label(object): def setupUi(self, MainWindow_artifact_label): @@ -391,6 +391,18 @@ class Ui_MainWindow_artifact_label(object): self.verticalLayout_2.addWidget(self.pushButton) + self.groupBox_4 = QGroupBox(self.groupBox_left) + self.groupBox_4.setObjectName(u"groupBox_4") + self.verticalLayout_6 = QVBoxLayout(self.groupBox_4) + self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.textBrowser_info = QTextBrowser(self.groupBox_4) + self.textBrowser_info.setObjectName(u"textBrowser_info") + + self.verticalLayout_6.addWidget(self.textBrowser_info) + + + self.verticalLayout_2.addWidget(self.groupBox_4) + self.verticalLayout_2.setStretch(0, 1) self.verticalLayout_2.setStretch(1, 1) self.verticalLayout_2.setStretch(2, 3) @@ -690,6 +702,7 @@ class Ui_MainWindow_artifact_label(object): self.label_6.setText(QCoreApplication.translate("MainWindow_artifact_label", u"\u6700\u5927\u8303\u56f4", None)) self.label_8.setText(QCoreApplication.translate("MainWindow_artifact_label", u"\u79fb\u52a8\u95f4\u9694(ms)", None)) self.pushButton.setText(QCoreApplication.translate("MainWindow_artifact_label", u"\u5bfc\u51fa\u6807\u7b7e", None)) + self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow_artifact_label", u"\u65e5\u5fd7", None)) self.groupBox_right.setTitle(QCoreApplication.translate("MainWindow_artifact_label", u"\u6807\u6ce8\u64cd\u4f5c\u548c\u4fe1\u606f", None)) self.pushButton_type_1.setText(QCoreApplication.translate("MainWindow_artifact_label", u"\u5267\u70c8\u4f53\u52a8", None)) self.label_13.setText(QCoreApplication.translate("MainWindow_artifact_label", u"\u4e2a\u6570&\u7d2f\u8ba1\u65f6\u957f(ms)", None)) diff --git a/ui/MainWindow/MainWindow_artifact_label.ui b/ui/MainWindow/MainWindow_artifact_label.ui index 592a275..b978175 100644 --- a/ui/MainWindow/MainWindow_artifact_label.ui +++ b/ui/MainWindow/MainWindow_artifact_label.ui @@ -42,7 +42,7 @@ 体动标注 - + @@ -676,6 +676,18 @@ + + + + 日志 + + + + + + + + diff --git a/ui/MainWindow/MainWindow_label_check.py b/ui/MainWindow/MainWindow_label_check.py index 07be1b7..60650ea 100644 --- a/ui/MainWindow/MainWindow_label_check.py +++ b/ui/MainWindow/MainWindow_label_check.py @@ -19,7 +19,8 @@ from PySide6.QtWidgets import (QAbstractSpinBox, QApplication, QCheckBox, QDoubl QGridLayout, QGroupBox, QHBoxLayout, QHeaderView, QLabel, QMainWindow, QPushButton, QRadioButton, QSizePolicy, QSpacerItem, QSpinBox, QStatusBar, - QTableWidget, QTableWidgetItem, QVBoxLayout, QWidget) + QTableWidget, QTableWidgetItem, QTextBrowser, QVBoxLayout, + QWidget) class Ui_MainWindow(object): def setupUi(self, MainWindow): @@ -351,6 +352,18 @@ class Ui_MainWindow(object): self.verticalLayout_2.addLayout(self.horizontalLayout_3) + self.groupBox_4 = QGroupBox(self.groupBox_left) + self.groupBox_4.setObjectName(u"groupBox_4") + self.verticalLayout_6 = QVBoxLayout(self.groupBox_4) + self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.textBrowser_info = QTextBrowser(self.groupBox_4) + self.textBrowser_info.setObjectName(u"textBrowser_info") + + self.verticalLayout_6.addWidget(self.textBrowser_info) + + + self.verticalLayout_2.addWidget(self.groupBox_4) + self.verticalLayout_2.setStretch(0, 1) self.verticalLayout_2.setStretch(1, 1) self.verticalLayout_2.setStretch(2, 1) @@ -485,6 +498,7 @@ class Ui_MainWindow(object): self.label_8.setText(QCoreApplication.translate("MainWindow", u"\u79fb\u52a8\u95f4\u9694(ms)", None)) self.checkBox.setText(QCoreApplication.translate("MainWindow", u"\u7ed8\u5236\u53c2\u8003\u7ebf", None)) self.pushButton.setText(QCoreApplication.translate("MainWindow", u"\u5bfc\u51fa\u6807\u7b7e", None)) + self.groupBox_4.setTitle(QCoreApplication.translate("MainWindow", u"\u65e5\u5fd7", None)) self.groupBox_right.setTitle(QCoreApplication.translate("MainWindow", u"\u5cf0\u503c\u5750\u6807\u548c\u4fe1\u606f", None)) self.label_9.setText(QCoreApplication.translate("MainWindow", u"\u6570\u636e\u957f\u5ea6(\u70b9\u6570)", None)) self.label_11.setText(QCoreApplication.translate("MainWindow", u"\u7ea0\u6b63\u524d\u5cf0\u503c\u4e2a\u6570", None)) diff --git a/ui/MainWindow/MainWindow_label_check.ui b/ui/MainWindow/MainWindow_label_check.ui index 3289935..8a43f0a 100644 --- a/ui/MainWindow/MainWindow_label_check.ui +++ b/ui/MainWindow/MainWindow_label_check.ui @@ -42,7 +42,7 @@ 人工纠正 - + @@ -603,6 +603,18 @@ + + + + 日志 + + + + + + + + diff --git a/ui/MainWindow/MainWindow_menu.py b/ui/MainWindow/MainWindow_menu.py index 12425ab..6470880 100644 --- a/ui/MainWindow/MainWindow_menu.py +++ b/ui/MainWindow/MainWindow_menu.py @@ -80,13 +80,13 @@ class Ui_Signal_Label(object): self.verticalLayout.addLayout(self.horizontalLayout) - self.pushButton_2 = QPushButton(self.centralwidget) - self.pushButton_2.setObjectName(u"pushButton_2") - sizePolicy.setHeightForWidth(self.pushButton_2.sizePolicy().hasHeightForWidth()) - self.pushButton_2.setSizePolicy(sizePolicy) - self.pushButton_2.setFont(font) + self.pushButton_approximately_align = QPushButton(self.centralwidget) + self.pushButton_approximately_align.setObjectName(u"pushButton_approximately_align") + sizePolicy.setHeightForWidth(self.pushButton_approximately_align.sizePolicy().hasHeightForWidth()) + self.pushButton_approximately_align.setSizePolicy(sizePolicy) + self.pushButton_approximately_align.setFont(font) - self.verticalLayout.addWidget(self.pushButton_2) + self.verticalLayout.addWidget(self.pushButton_approximately_align) self.horizontalLayout_2 = QHBoxLayout() self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") @@ -132,64 +132,64 @@ class Ui_Signal_Label(object): self.horizontalLayout_6 = QHBoxLayout() self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") - self.pushButton_7 = QPushButton(self.centralwidget) - self.pushButton_7.setObjectName(u"pushButton_7") - sizePolicy.setHeightForWidth(self.pushButton_7.sizePolicy().hasHeightForWidth()) - self.pushButton_7.setSizePolicy(sizePolicy) - self.pushButton_7.setFont(font) + self.pushButton_label_check_BCG = QPushButton(self.centralwidget) + self.pushButton_label_check_BCG.setObjectName(u"pushButton_label_check_BCG") + sizePolicy.setHeightForWidth(self.pushButton_label_check_BCG.sizePolicy().hasHeightForWidth()) + self.pushButton_label_check_BCG.setSizePolicy(sizePolicy) + self.pushButton_label_check_BCG.setFont(font) - self.horizontalLayout_6.addWidget(self.pushButton_7) + self.horizontalLayout_6.addWidget(self.pushButton_label_check_BCG) - self.pushButton_8 = QPushButton(self.centralwidget) - self.pushButton_8.setObjectName(u"pushButton_8") - sizePolicy.setHeightForWidth(self.pushButton_8.sizePolicy().hasHeightForWidth()) - self.pushButton_8.setSizePolicy(sizePolicy) - self.pushButton_8.setFont(font) + self.pushButton_label_check_ECG = QPushButton(self.centralwidget) + self.pushButton_label_check_ECG.setObjectName(u"pushButton_label_check_ECG") + sizePolicy.setHeightForWidth(self.pushButton_label_check_ECG.sizePolicy().hasHeightForWidth()) + self.pushButton_label_check_ECG.setSizePolicy(sizePolicy) + self.pushButton_label_check_ECG.setFont(font) - self.horizontalLayout_6.addWidget(self.pushButton_8) + self.horizontalLayout_6.addWidget(self.pushButton_label_check_ECG) self.verticalLayout.addLayout(self.horizontalLayout_6) - self.pushButton_10 = QPushButton(self.centralwidget) - self.pushButton_10.setObjectName(u"pushButton_10") - sizePolicy.setHeightForWidth(self.pushButton_10.sizePolicy().hasHeightForWidth()) - self.pushButton_10.setSizePolicy(sizePolicy) - self.pushButton_10.setFont(font) + self.pushButton_precisely_align = QPushButton(self.centralwidget) + self.pushButton_precisely_align.setObjectName(u"pushButton_precisely_align") + sizePolicy.setHeightForWidth(self.pushButton_precisely_align.sizePolicy().hasHeightForWidth()) + self.pushButton_precisely_align.setSizePolicy(sizePolicy) + self.pushButton_precisely_align.setFont(font) - self.verticalLayout.addWidget(self.pushButton_10) + self.verticalLayout.addWidget(self.pushButton_precisely_align) - self.pushButton_9 = QPushButton(self.centralwidget) - self.pushButton_9.setObjectName(u"pushButton_9") - sizePolicy.setHeightForWidth(self.pushButton_9.sizePolicy().hasHeightForWidth()) - self.pushButton_9.setSizePolicy(sizePolicy) - self.pushButton_9.setFont(font) + self.pushButton_artifact_label = QPushButton(self.centralwidget) + self.pushButton_artifact_label.setObjectName(u"pushButton_artifact_label") + sizePolicy.setHeightForWidth(self.pushButton_artifact_label.sizePolicy().hasHeightForWidth()) + self.pushButton_artifact_label.setSizePolicy(sizePolicy) + self.pushButton_artifact_label.setFont(font) - self.verticalLayout.addWidget(self.pushButton_9) + self.verticalLayout.addWidget(self.pushButton_artifact_label) - self.pushButton_11 = QPushButton(self.centralwidget) - self.pushButton_11.setObjectName(u"pushButton_11") - sizePolicy.setHeightForWidth(self.pushButton_11.sizePolicy().hasHeightForWidth()) - self.pushButton_11.setSizePolicy(sizePolicy) - self.pushButton_11.setFont(font) + self.pushButton_bcg_quality_label = QPushButton(self.centralwidget) + self.pushButton_bcg_quality_label.setObjectName(u"pushButton_bcg_quality_label") + sizePolicy.setHeightForWidth(self.pushButton_bcg_quality_label.sizePolicy().hasHeightForWidth()) + self.pushButton_bcg_quality_label.setSizePolicy(sizePolicy) + self.pushButton_bcg_quality_label.setFont(font) - self.verticalLayout.addWidget(self.pushButton_11) + self.verticalLayout.addWidget(self.pushButton_bcg_quality_label) - self.pushButton_12 = QPushButton(self.centralwidget) - self.pushButton_12.setObjectName(u"pushButton_12") - sizePolicy.setHeightForWidth(self.pushButton_12.sizePolicy().hasHeightForWidth()) - self.pushButton_12.setSizePolicy(sizePolicy) - self.pushButton_12.setFont(font) + self.pushButton_resp_quality_label = QPushButton(self.centralwidget) + self.pushButton_resp_quality_label.setObjectName(u"pushButton_resp_quality_label") + sizePolicy.setHeightForWidth(self.pushButton_resp_quality_label.sizePolicy().hasHeightForWidth()) + self.pushButton_resp_quality_label.setSizePolicy(sizePolicy) + self.pushButton_resp_quality_label.setFont(font) - self.verticalLayout.addWidget(self.pushButton_12) + self.verticalLayout.addWidget(self.pushButton_resp_quality_label) - self.pushButton_13 = QPushButton(self.centralwidget) - self.pushButton_13.setObjectName(u"pushButton_13") - sizePolicy.setHeightForWidth(self.pushButton_13.sizePolicy().hasHeightForWidth()) - self.pushButton_13.setSizePolicy(sizePolicy) - self.pushButton_13.setFont(font) + self.pushButton_SA_label = QPushButton(self.centralwidget) + self.pushButton_SA_label.setObjectName(u"pushButton_SA_label") + sizePolicy.setHeightForWidth(self.pushButton_SA_label.sizePolicy().hasHeightForWidth()) + self.pushButton_SA_label.setSizePolicy(sizePolicy) + self.pushButton_SA_label.setFont(font) - self.verticalLayout.addWidget(self.pushButton_13) + self.verticalLayout.addWidget(self.pushButton_SA_label) self.verticalLayout.setStretch(0, 1) self.verticalLayout.setStretch(1, 1) @@ -218,17 +218,17 @@ class Ui_Signal_Label(object): Signal_Label.setWindowTitle(QCoreApplication.translate("Signal_Label", u"Signal_Label", None)) self.label.setText(QCoreApplication.translate("Signal_Label", u"\u6570\u636e\u6839\u76ee\u5f55\uff1a", None)) self.pushButton_open.setText(QCoreApplication.translate("Signal_Label", u"\u6253\u5f00", None)) - self.pushButton_2.setText(QCoreApplication.translate("Signal_Label", u"\u6570\u636e\u7c97\u540c\u6b65", None)) + self.pushButton_approximately_align.setText(QCoreApplication.translate("Signal_Label", u"\u6570\u636e\u7c97\u540c\u6b65", None)) self.pushButton_preprocess_BCG.setText(QCoreApplication.translate("Signal_Label", u"BCG\u7684\u9884\u5904\u7406", None)) self.pushButton_preprocess_ECG.setText(QCoreApplication.translate("Signal_Label", u"ECG\u7684\u9884\u5904\u7406", None)) self.pushButton_detect_Jpeak.setText(QCoreApplication.translate("Signal_Label", u"BCG\u7684J\u5cf0\u7b97\u6cd5\u5b9a\u4f4d", None)) self.pushButton_detect_Rpeak.setText(QCoreApplication.translate("Signal_Label", u"ECG\u7684R\u5cf0\u7b97\u6cd5\u5b9a\u4f4d", None)) - self.pushButton_7.setText(QCoreApplication.translate("Signal_Label", u"BCG\u7684J\u5cf0\u4eba\u5de5\u7ea0\u6b63", None)) - self.pushButton_8.setText(QCoreApplication.translate("Signal_Label", u"ECG\u7684R\u5cf0\u4eba\u5de5\u7ea0\u6b63", None)) - self.pushButton_10.setText(QCoreApplication.translate("Signal_Label", u"\u6570\u636e\u7cbe\u540c\u6b65", None)) - self.pushButton_9.setText(QCoreApplication.translate("Signal_Label", u"\u4f53\u52a8\u6807\u6ce8", None)) - self.pushButton_11.setText(QCoreApplication.translate("Signal_Label", u"BCG\u7684\u8d28\u91cf\u6807\u6ce8", None)) - self.pushButton_12.setText(QCoreApplication.translate("Signal_Label", u"\u547c\u5438\u53ef\u7528\u6027\u53ca\u95f4\u671f\u6807\u6ce8", None)) - self.pushButton_13.setText(QCoreApplication.translate("Signal_Label", u"\u7761\u7720\u547c\u5438\u6682\u505c\u4e8b\u4ef6\u6807\u6ce8", None)) + self.pushButton_label_check_BCG.setText(QCoreApplication.translate("Signal_Label", u"BCG\u7684J\u5cf0\u4eba\u5de5\u7ea0\u6b63", None)) + self.pushButton_label_check_ECG.setText(QCoreApplication.translate("Signal_Label", u"ECG\u7684R\u5cf0\u4eba\u5de5\u7ea0\u6b63", None)) + self.pushButton_precisely_align.setText(QCoreApplication.translate("Signal_Label", u"\u6570\u636e\u7cbe\u540c\u6b65", None)) + self.pushButton_artifact_label.setText(QCoreApplication.translate("Signal_Label", u"\u4f53\u52a8\u6807\u6ce8", None)) + self.pushButton_bcg_quality_label.setText(QCoreApplication.translate("Signal_Label", u"BCG\u7684\u8d28\u91cf\u6807\u6ce8", None)) + self.pushButton_resp_quality_label.setText(QCoreApplication.translate("Signal_Label", u"\u547c\u5438\u53ef\u7528\u6027\u53ca\u95f4\u671f\u6807\u6ce8", None)) + self.pushButton_SA_label.setText(QCoreApplication.translate("Signal_Label", u"\u7761\u7720\u547c\u5438\u6682\u505c\u4e8b\u4ef6\u6807\u6ce8", None)) # retranslateUi diff --git a/ui/MainWindow/MainWindow_menu.ui b/ui/MainWindow/MainWindow_menu.ui index 0ae95e4..caad66b 100644 --- a/ui/MainWindow/MainWindow_menu.ui +++ b/ui/MainWindow/MainWindow_menu.ui @@ -85,7 +85,7 @@ - + 0 @@ -185,7 +185,7 @@ - + 0 @@ -203,7 +203,7 @@ - + 0 @@ -223,7 +223,7 @@ - + 0 @@ -241,7 +241,7 @@ - + 0 @@ -259,7 +259,7 @@ - + 0 @@ -277,7 +277,7 @@ - + 0 @@ -295,7 +295,7 @@ - + 0 diff --git a/ui/MainWindow/MainWindow_precisely_align.py b/ui/MainWindow/MainWindow_precisely_align.py new file mode 100644 index 0000000..d4ade48 --- /dev/null +++ b/ui/MainWindow/MainWindow_precisely_align.py @@ -0,0 +1,368 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'MainWindow_precisely_align.ui' +## +## Created by: Qt User Interface Compiler version 6.8.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QAction, QBrush, QColor, QConicalGradient, + QCursor, QFont, QFontDatabase, QGradient, + QIcon, QImage, QKeySequence, QLinearGradient, + QPainter, QPalette, QPixmap, QRadialGradient, + QTransform) +from PySide6.QtWidgets import (QAbstractSpinBox, QApplication, QGridLayout, QGroupBox, + QHBoxLayout, QLabel, QMainWindow, QPushButton, + QSizePolicy, QSpacerItem, QSpinBox, QStatusBar, + QTextBrowser, QVBoxLayout, QWidget) + +class Ui_MainWindow_detect_Jpeak(object): + def setupUi(self, MainWindow_detect_Jpeak): + if not MainWindow_detect_Jpeak.objectName(): + MainWindow_detect_Jpeak.setObjectName(u"MainWindow_detect_Jpeak") + MainWindow_detect_Jpeak.setEnabled(True) + MainWindow_detect_Jpeak.resize(1920, 1080) + sizePolicy = QSizePolicy(QSizePolicy.Policy.Ignored, QSizePolicy.Policy.Preferred) + sizePolicy.setHorizontalStretch(0) + sizePolicy.setVerticalStretch(0) + sizePolicy.setHeightForWidth(MainWindow_detect_Jpeak.sizePolicy().hasHeightForWidth()) + MainWindow_detect_Jpeak.setSizePolicy(sizePolicy) + font = QFont() + font.setPointSize(12) + MainWindow_detect_Jpeak.setFont(font) + self.action_selectPath = QAction(MainWindow_detect_Jpeak) + self.action_selectPath.setObjectName(u"action_selectPath") + font1 = QFont() + font1.setFamilies([u"\u9ed1\u4f53"]) + font1.setPointSize(14) + self.action_selectPath.setFont(font1) + self.action = QAction(MainWindow_detect_Jpeak) + self.action.setObjectName(u"action") + self.action.setFont(font1) + self.centralwidget = QWidget(MainWindow_detect_Jpeak) + self.centralwidget.setObjectName(u"centralwidget") + self.gridLayout = QGridLayout(self.centralwidget) + self.gridLayout.setObjectName(u"gridLayout") + self.groupBox_canvas = QGroupBox(self.centralwidget) + self.groupBox_canvas.setObjectName(u"groupBox_canvas") + font2 = QFont() + font2.setPointSize(10) + self.groupBox_canvas.setFont(font2) + self.verticalLayout_7 = QVBoxLayout(self.groupBox_canvas) + self.verticalLayout_7.setObjectName(u"verticalLayout_7") + self.verticalLayout_canvas = QVBoxLayout() + self.verticalLayout_canvas.setObjectName(u"verticalLayout_canvas") + + self.verticalLayout_7.addLayout(self.verticalLayout_canvas) + + + self.gridLayout.addWidget(self.groupBox_canvas, 0, 1, 1, 1) + + self.groupBox_left = QGroupBox(self.centralwidget) + self.groupBox_left.setObjectName(u"groupBox_left") + self.groupBox_left.setFont(font2) + self.verticalLayout = QVBoxLayout(self.groupBox_left) + self.verticalLayout.setObjectName(u"verticalLayout") + self.horizontalLayout_4 = QHBoxLayout() + self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") + self.pushButton_input_setting = QPushButton(self.groupBox_left) + self.pushButton_input_setting.setObjectName(u"pushButton_input_setting") + sizePolicy1 = QSizePolicy(QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Minimum) + sizePolicy1.setHorizontalStretch(0) + sizePolicy1.setVerticalStretch(0) + sizePolicy1.setHeightForWidth(self.pushButton_input_setting.sizePolicy().hasHeightForWidth()) + self.pushButton_input_setting.setSizePolicy(sizePolicy1) + self.pushButton_input_setting.setFont(font) + + self.horizontalLayout_4.addWidget(self.pushButton_input_setting) + + self.pushButton_input = QPushButton(self.groupBox_left) + self.pushButton_input.setObjectName(u"pushButton_input") + sizePolicy1.setHeightForWidth(self.pushButton_input.sizePolicy().hasHeightForWidth()) + self.pushButton_input.setSizePolicy(sizePolicy1) + self.pushButton_input.setFont(font) + + self.horizontalLayout_4.addWidget(self.pushButton_input) + + + self.verticalLayout.addLayout(self.horizontalLayout_4) + + self.groupBox_args = QGroupBox(self.groupBox_left) + self.groupBox_args.setObjectName(u"groupBox_args") + self.verticalLayout_5 = QVBoxLayout(self.groupBox_args) + self.verticalLayout_5.setObjectName(u"verticalLayout_5") + self.groupBox_2 = QGroupBox(self.groupBox_args) + self.groupBox_2.setObjectName(u"groupBox_2") + self.verticalLayout_2 = QVBoxLayout(self.groupBox_2) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.label_3 = QLabel(self.groupBox_2) + self.label_3.setObjectName(u"label_3") + self.label_3.setFont(font) + self.label_3.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_2.addWidget(self.label_3) + + self.spinBox_BCG_front_1 = QSpinBox(self.groupBox_2) + self.spinBox_BCG_front_1.setObjectName(u"spinBox_BCG_front_1") + self.spinBox_BCG_front_1.setFont(font) + self.spinBox_BCG_front_1.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_BCG_front_1.setMinimum(0) + self.spinBox_BCG_front_1.setMaximum(1000000000) + + self.horizontalLayout_2.addWidget(self.spinBox_BCG_front_1) + + self.label_4 = QLabel(self.groupBox_2) + self.label_4.setObjectName(u"label_4") + self.label_4.setFont(font) + self.label_4.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_2.addWidget(self.label_4) + + self.spinBox_BCG_front_2 = QSpinBox(self.groupBox_2) + self.spinBox_BCG_front_2.setObjectName(u"spinBox_BCG_front_2") + self.spinBox_BCG_front_2.setFont(font) + self.spinBox_BCG_front_2.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_BCG_front_2.setMinimum(0) + self.spinBox_BCG_front_2.setMaximum(1000000000) + + self.horizontalLayout_2.addWidget(self.spinBox_BCG_front_2) + + + self.verticalLayout_2.addLayout(self.horizontalLayout_2) + + self.horizontalLayout_5 = QHBoxLayout() + self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") + self.label_5 = QLabel(self.groupBox_2) + self.label_5.setObjectName(u"label_5") + self.label_5.setFont(font) + self.label_5.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_5.addWidget(self.label_5) + + self.spinBox_ECG_front_1 = QSpinBox(self.groupBox_2) + self.spinBox_ECG_front_1.setObjectName(u"spinBox_ECG_front_1") + self.spinBox_ECG_front_1.setFont(font) + self.spinBox_ECG_front_1.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_ECG_front_1.setMinimum(0) + self.spinBox_ECG_front_1.setMaximum(1000000000) + + self.horizontalLayout_5.addWidget(self.spinBox_ECG_front_1) + + self.label_6 = QLabel(self.groupBox_2) + self.label_6.setObjectName(u"label_6") + self.label_6.setFont(font) + self.label_6.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_5.addWidget(self.label_6) + + self.spinBox_ECG_front_2 = QSpinBox(self.groupBox_2) + self.spinBox_ECG_front_2.setObjectName(u"spinBox_ECG_front_2") + self.spinBox_ECG_front_2.setFont(font) + self.spinBox_ECG_front_2.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_ECG_front_2.setMinimum(0) + self.spinBox_ECG_front_2.setMaximum(1000000000) + + self.horizontalLayout_5.addWidget(self.spinBox_ECG_front_2) + + + self.verticalLayout_2.addLayout(self.horizontalLayout_5) + + + self.verticalLayout_5.addWidget(self.groupBox_2) + + self.groupBox_3 = QGroupBox(self.groupBox_args) + self.groupBox_3.setObjectName(u"groupBox_3") + self.verticalLayout_3 = QVBoxLayout(self.groupBox_3) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.horizontalLayout_6 = QHBoxLayout() + self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") + self.label_7 = QLabel(self.groupBox_3) + self.label_7.setObjectName(u"label_7") + self.label_7.setFont(font) + self.label_7.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_6.addWidget(self.label_7) + + self.spinBox_BCG_back_1 = QSpinBox(self.groupBox_3) + self.spinBox_BCG_back_1.setObjectName(u"spinBox_BCG_back_1") + self.spinBox_BCG_back_1.setFont(font) + self.spinBox_BCG_back_1.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_BCG_back_1.setMinimum(0) + self.spinBox_BCG_back_1.setMaximum(1000000000) + + self.horizontalLayout_6.addWidget(self.spinBox_BCG_back_1) + + self.label_8 = QLabel(self.groupBox_3) + self.label_8.setObjectName(u"label_8") + self.label_8.setFont(font) + self.label_8.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_6.addWidget(self.label_8) + + self.spinBox_BCG_back_2 = QSpinBox(self.groupBox_3) + self.spinBox_BCG_back_2.setObjectName(u"spinBox_BCG_back_2") + self.spinBox_BCG_back_2.setFont(font) + self.spinBox_BCG_back_2.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_BCG_back_2.setMinimum(0) + self.spinBox_BCG_back_2.setMaximum(1000000000) + + self.horizontalLayout_6.addWidget(self.spinBox_BCG_back_2) + + + self.verticalLayout_3.addLayout(self.horizontalLayout_6) + + self.horizontalLayout_7 = QHBoxLayout() + self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") + self.label_9 = QLabel(self.groupBox_3) + self.label_9.setObjectName(u"label_9") + self.label_9.setFont(font) + self.label_9.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_7.addWidget(self.label_9) + + self.spinBox_ECG_back_1 = QSpinBox(self.groupBox_3) + self.spinBox_ECG_back_1.setObjectName(u"spinBox_ECG_back_1") + self.spinBox_ECG_back_1.setFont(font) + self.spinBox_ECG_back_1.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_ECG_back_1.setMinimum(0) + self.spinBox_ECG_back_1.setMaximum(1000000000) + + self.horizontalLayout_7.addWidget(self.spinBox_ECG_back_1) + + self.label_10 = QLabel(self.groupBox_3) + self.label_10.setObjectName(u"label_10") + self.label_10.setFont(font) + self.label_10.setAlignment(Qt.AlignmentFlag.AlignCenter) + + self.horizontalLayout_7.addWidget(self.label_10) + + self.spinBox_ECG_back_2 = QSpinBox(self.groupBox_3) + self.spinBox_ECG_back_2.setObjectName(u"spinBox_ECG_back_2") + self.spinBox_ECG_back_2.setFont(font) + self.spinBox_ECG_back_2.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) + self.spinBox_ECG_back_2.setMinimum(0) + self.spinBox_ECG_back_2.setMaximum(1000000000) + + self.horizontalLayout_7.addWidget(self.spinBox_ECG_back_2) + + + self.verticalLayout_3.addLayout(self.horizontalLayout_7) + + + self.verticalLayout_5.addWidget(self.groupBox_3) + + + self.verticalLayout.addWidget(self.groupBox_args) + + self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) + + self.verticalLayout.addItem(self.verticalSpacer) + + self.horizontalLayout_8 = QHBoxLayout() + self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") + self.pushButton_calculate_correlation = QPushButton(self.groupBox_left) + self.pushButton_calculate_correlation.setObjectName(u"pushButton_calculate_correlation") + sizePolicy1.setHeightForWidth(self.pushButton_calculate_correlation.sizePolicy().hasHeightForWidth()) + self.pushButton_calculate_correlation.setSizePolicy(sizePolicy1) + self.pushButton_calculate_correlation.setFont(font) + + self.horizontalLayout_8.addWidget(self.pushButton_calculate_correlation) + + self.pushButton_correlation_align = QPushButton(self.groupBox_left) + self.pushButton_correlation_align.setObjectName(u"pushButton_correlation_align") + sizePolicy1.setHeightForWidth(self.pushButton_correlation_align.sizePolicy().hasHeightForWidth()) + self.pushButton_correlation_align.setSizePolicy(sizePolicy1) + self.pushButton_correlation_align.setFont(font) + + self.horizontalLayout_8.addWidget(self.pushButton_correlation_align) + + + self.verticalLayout.addLayout(self.horizontalLayout_8) + + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.pushButton_precise_align = QPushButton(self.groupBox_left) + self.pushButton_precise_align.setObjectName(u"pushButton_precise_align") + sizePolicy1.setHeightForWidth(self.pushButton_precise_align.sizePolicy().hasHeightForWidth()) + self.pushButton_precise_align.setSizePolicy(sizePolicy1) + self.pushButton_precise_align.setFont(font) + + self.horizontalLayout_3.addWidget(self.pushButton_precise_align) + + self.pushButton_save = QPushButton(self.groupBox_left) + self.pushButton_save.setObjectName(u"pushButton_save") + sizePolicy1.setHeightForWidth(self.pushButton_save.sizePolicy().hasHeightForWidth()) + self.pushButton_save.setSizePolicy(sizePolicy1) + self.pushButton_save.setFont(font) + + self.horizontalLayout_3.addWidget(self.pushButton_save) + + + self.verticalLayout.addLayout(self.horizontalLayout_3) + + self.groupBox = QGroupBox(self.groupBox_left) + self.groupBox.setObjectName(u"groupBox") + self.verticalLayout_6 = QVBoxLayout(self.groupBox) + self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.textBrowser_info = QTextBrowser(self.groupBox) + self.textBrowser_info.setObjectName(u"textBrowser_info") + + self.verticalLayout_6.addWidget(self.textBrowser_info) + + + self.verticalLayout.addWidget(self.groupBox) + + self.verticalLayout.setStretch(0, 1) + self.verticalLayout.setStretch(1, 7) + self.verticalLayout.setStretch(2, 3) + self.verticalLayout.setStretch(3, 1) + self.verticalLayout.setStretch(4, 1) + self.verticalLayout.setStretch(5, 5) + + self.gridLayout.addWidget(self.groupBox_left, 0, 0, 1, 1) + + self.gridLayout.setColumnStretch(0, 2) + self.gridLayout.setColumnStretch(1, 8) + MainWindow_detect_Jpeak.setCentralWidget(self.centralwidget) + self.statusbar = QStatusBar(MainWindow_detect_Jpeak) + self.statusbar.setObjectName(u"statusbar") + MainWindow_detect_Jpeak.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow_detect_Jpeak) + + QMetaObject.connectSlotsByName(MainWindow_detect_Jpeak) + # setupUi + + def retranslateUi(self, MainWindow_detect_Jpeak): + MainWindow_detect_Jpeak.setWindowTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u6570\u636e\u7cbe\u540c\u6b65", None)) + self.action_selectPath.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u6570\u636e\u8def\u5f84\u9009\u62e9", None)) + self.action.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u52a0\u8f7d\u5b58\u6863", None)) + self.groupBox_canvas.setTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u7ed8\u56fe\u533a", None)) + self.groupBox_left.setTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u9884\u5904\u7406", None)) + self.pushButton_input_setting.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u5bfc\u5165\u8bbe\u7f6e", None)) + self.pushButton_input.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u5f00\u59cb\u5bfc\u5165", None)) + self.groupBox_args.setTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u53c2\u6570\u8f93\u5165", None)) + self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u524d\u6bb5\u533a\u95f4\u5750\u6807\u53d6\u503c", None)) + self.label_3.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"BCG", None)) + self.label_4.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"~", None)) + self.label_5.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"ECG", None)) + self.label_6.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"~", None)) + self.groupBox_3.setTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u540e\u6bb5\u533a\u95f4\u5750\u6807\u53d6\u503c", None)) + self.label_7.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"BCG", None)) + self.label_8.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"~", None)) + self.label_9.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"ECG", None)) + self.label_10.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"~", None)) + self.pushButton_calculate_correlation.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u8ba1\u7b97\u76f8\u5173\u6027", None)) + self.pushButton_correlation_align.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u76f8\u5173\u5bf9\u9f50", None)) + self.pushButton_precise_align.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u7cbe\u7ec6\u5bf9\u9f50", None)) + self.pushButton_save.setText(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u4fdd\u5b58\u7ed3\u679c", None)) + self.groupBox.setTitle(QCoreApplication.translate("MainWindow_detect_Jpeak", u"\u65e5\u5fd7", None)) + # retranslateUi + diff --git a/ui/MainWindow/MainWindow_precisely_align.ui b/ui/MainWindow/MainWindow_precisely_align.ui new file mode 100644 index 0000000..917f00f --- /dev/null +++ b/ui/MainWindow/MainWindow_precisely_align.ui @@ -0,0 +1,543 @@ + + + MainWindow_detect_Jpeak + + + true + + + + 0 + 0 + 1920 + 1080 + + + + + 0 + 0 + + + + + 12 + + + + 数据精同步 + + + + + + + + 10 + + + + 绘图区 + + + + + + + + + + + + + 10 + + + + 预处理 + + + + + + + + + 0 + 0 + + + + + 12 + + + + 导入设置 + + + + + + + + 0 + 0 + + + + + 12 + + + + 开始导入 + + + + + + + + + 参数输入 + + + + + + 前段区间坐标取值 + + + + + + + + + 12 + + + + BCG + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + 12 + + + + ~ + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + + + + + 12 + + + + ECG + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + 12 + + + + ~ + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + + + + + 后段区间坐标取值 + + + + + + + + + 12 + + + + BCG + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + 12 + + + + ~ + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + + + + + 12 + + + + ECG + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + 12 + + + + ~ + + + Qt::AlignmentFlag::AlignCenter + + + + + + + + 12 + + + + QAbstractSpinBox::ButtonSymbols::NoButtons + + + 0 + + + 1000000000 + + + + + + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + + + + 0 + 0 + + + + + 12 + + + + 计算相关性 + + + + + + + + 0 + 0 + + + + + 12 + + + + 相关对齐 + + + + + + + + + + + + 0 + 0 + + + + + 12 + + + + 精细对齐 + + + + + + + + 0 + 0 + + + + + 12 + + + + 保存结果 + + + + + + + + + 日志 + + + + + + + + + + + + + + + + + 数据路径选择 + + + + 黑体 + 14 + + + + + + 加载存档 + + + + 黑体 + 14 + + + + + + + diff --git a/ui/setting/label_check_input_setting.py b/ui/setting/label_check_input_setting.py index 8a3ab0e..583ff85 100644 --- a/ui/setting/label_check_input_setting.py +++ b/ui/setting/label_check_input_setting.py @@ -15,10 +15,10 @@ from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont, QFontDatabase, QGradient, QIcon, QImage, QKeySequence, QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform) -from PySide6.QtWidgets import (QApplication, QGridLayout, QGroupBox, QHBoxLayout, - QLabel, QMainWindow, QPlainTextEdit, QPushButton, - QSizePolicy, QSpinBox, QStatusBar, QVBoxLayout, - QWidget) +from PySide6.QtWidgets import (QApplication, QDoubleSpinBox, QGridLayout, QGroupBox, + QHBoxLayout, QLabel, QMainWindow, QPlainTextEdit, + QPushButton, QSizePolicy, QSpinBox, QStatusBar, + QVBoxLayout, QWidget) class Ui_MainWindow_artifact_label_input_setting(object): def setupUi(self, MainWindow_artifact_label_input_setting): @@ -81,6 +81,9 @@ class Ui_MainWindow_artifact_label_input_setting(object): self.spinBox_bandPassOrder = QSpinBox(self.groupBox_2) self.spinBox_bandPassOrder.setObjectName(u"spinBox_bandPassOrder") self.spinBox_bandPassOrder.setFont(font) + self.spinBox_bandPassOrder.setMinimum(0) + self.spinBox_bandPassOrder.setMaximum(10) + self.spinBox_bandPassOrder.setValue(0) self.horizontalLayout.addWidget(self.spinBox_bandPassOrder) @@ -91,11 +94,12 @@ class Ui_MainWindow_artifact_label_input_setting(object): self.horizontalLayout.addWidget(self.label_3) - self.spinBox_bandPassLow = QSpinBox(self.groupBox_2) - self.spinBox_bandPassLow.setObjectName(u"spinBox_bandPassLow") - self.spinBox_bandPassLow.setFont(font) + self.doubleSpinBox_bandPassLow = QDoubleSpinBox(self.groupBox_2) + self.doubleSpinBox_bandPassLow.setObjectName(u"doubleSpinBox_bandPassLow") + self.doubleSpinBox_bandPassLow.setFont(font) + self.doubleSpinBox_bandPassLow.setMaximum(100.000000000000000) - self.horizontalLayout.addWidget(self.spinBox_bandPassLow) + self.horizontalLayout.addWidget(self.doubleSpinBox_bandPassLow) self.label_4 = QLabel(self.groupBox_2) self.label_4.setObjectName(u"label_4") @@ -104,11 +108,12 @@ class Ui_MainWindow_artifact_label_input_setting(object): self.horizontalLayout.addWidget(self.label_4) - self.spinBox_bandPassHigh = QSpinBox(self.groupBox_2) - self.spinBox_bandPassHigh.setObjectName(u"spinBox_bandPassHigh") - self.spinBox_bandPassHigh.setFont(font) + self.doubleSpinBox_bandPassHigh = QDoubleSpinBox(self.groupBox_2) + self.doubleSpinBox_bandPassHigh.setObjectName(u"doubleSpinBox_bandPassHigh") + self.doubleSpinBox_bandPassHigh.setFont(font) + self.doubleSpinBox_bandPassHigh.setMaximum(100.000000000000000) - self.horizontalLayout.addWidget(self.spinBox_bandPassHigh) + self.horizontalLayout.addWidget(self.doubleSpinBox_bandPassHigh) self.verticalLayout_5.addWidget(self.groupBox_2) diff --git a/ui/setting/label_check_input_setting.ui b/ui/setting/label_check_input_setting.ui index 59b7cb6..890f643 100644 --- a/ui/setting/label_check_input_setting.ui +++ b/ui/setting/label_check_input_setting.ui @@ -103,6 +103,15 @@ 12 + + 0 + + + 10 + + + 0 + @@ -121,12 +130,15 @@ - + 12 + + 100.000000000000000 + @@ -145,12 +157,15 @@ - + 12 + + 100.000000000000000 + diff --git a/ui/setting/precisely_align_input_setting.py b/ui/setting/precisely_align_input_setting.py new file mode 100644 index 0000000..4c9d8c4 --- /dev/null +++ b/ui/setting/precisely_align_input_setting.py @@ -0,0 +1,197 @@ +# -*- coding: utf-8 -*- + +################################################################################ +## Form generated from reading UI file 'precisely_align_input_setting.ui' +## +## Created by: Qt User Interface Compiler version 6.8.2 +## +## WARNING! All changes made in this file will be lost when recompiling UI file! +################################################################################ + +from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, + QMetaObject, QObject, QPoint, QRect, + QSize, QTime, QUrl, Qt) +from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, + QFont, QFontDatabase, QGradient, QIcon, + QImage, QKeySequence, QLinearGradient, QPainter, + QPalette, QPixmap, QRadialGradient, QTransform) +from PySide6.QtWidgets import (QApplication, QGridLayout, QGroupBox, QHBoxLayout, + QLabel, QMainWindow, QPlainTextEdit, QPushButton, + QSizePolicy, QSpinBox, QStatusBar, QVBoxLayout, + QWidget) + +class Ui_MainWindow_precisely_align_input_setting(object): + def setupUi(self, MainWindow_precisely_align_input_setting): + if not MainWindow_precisely_align_input_setting.objectName(): + MainWindow_precisely_align_input_setting.setObjectName(u"MainWindow_precisely_align_input_setting") + MainWindow_precisely_align_input_setting.resize(540, 760) + self.centralwidget = QWidget(MainWindow_precisely_align_input_setting) + self.centralwidget.setObjectName(u"centralwidget") + self.gridLayout = QGridLayout(self.centralwidget) + self.gridLayout.setObjectName(u"gridLayout") + self.pushButton_cancel = QPushButton(self.centralwidget) + self.pushButton_cancel.setObjectName(u"pushButton_cancel") + font = QFont() + font.setPointSize(12) + self.pushButton_cancel.setFont(font) + + self.gridLayout.addWidget(self.pushButton_cancel, 1, 3, 1, 1) + + self.groupBox = QGroupBox(self.centralwidget) + self.groupBox.setObjectName(u"groupBox") + font1 = QFont() + font1.setPointSize(10) + self.groupBox.setFont(font1) + self.verticalLayout_2 = QVBoxLayout(self.groupBox) + self.verticalLayout_2.setObjectName(u"verticalLayout_2") + self.groupBox_file_path_input_BCG = QGroupBox(self.groupBox) + self.groupBox_file_path_input_BCG.setObjectName(u"groupBox_file_path_input_BCG") + self.verticalLayout_5 = QVBoxLayout(self.groupBox_file_path_input_BCG) + self.verticalLayout_5.setObjectName(u"verticalLayout_5") + self.horizontalLayout_2 = QHBoxLayout() + self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") + self.label_2 = QLabel(self.groupBox_file_path_input_BCG) + self.label_2.setObjectName(u"label_2") + self.label_2.setFont(font) + + self.horizontalLayout_2.addWidget(self.label_2) + + self.spinBox_input_freq_BCG = QSpinBox(self.groupBox_file_path_input_BCG) + self.spinBox_input_freq_BCG.setObjectName(u"spinBox_input_freq_BCG") + self.spinBox_input_freq_BCG.setFont(font) + self.spinBox_input_freq_BCG.setMinimum(1) + self.spinBox_input_freq_BCG.setMaximum(1000000) + + self.horizontalLayout_2.addWidget(self.spinBox_input_freq_BCG) + + + self.verticalLayout_5.addLayout(self.horizontalLayout_2) + + self.plainTextEdit_file_path_input_BCG = QPlainTextEdit(self.groupBox_file_path_input_BCG) + self.plainTextEdit_file_path_input_BCG.setObjectName(u"plainTextEdit_file_path_input_BCG") + + self.verticalLayout_5.addWidget(self.plainTextEdit_file_path_input_BCG) + + self.verticalLayout_5.setStretch(0, 2) + self.verticalLayout_5.setStretch(1, 3) + + self.verticalLayout_2.addWidget(self.groupBox_file_path_input_BCG) + + self.groupBox_file_path_input_Jpeak = QGroupBox(self.groupBox) + self.groupBox_file_path_input_Jpeak.setObjectName(u"groupBox_file_path_input_Jpeak") + self.verticalLayout_3 = QVBoxLayout(self.groupBox_file_path_input_Jpeak) + self.verticalLayout_3.setObjectName(u"verticalLayout_3") + self.plainTextEdit_file_path_input_Jpeak = QPlainTextEdit(self.groupBox_file_path_input_Jpeak) + self.plainTextEdit_file_path_input_Jpeak.setObjectName(u"plainTextEdit_file_path_input_Jpeak") + + self.verticalLayout_3.addWidget(self.plainTextEdit_file_path_input_Jpeak) + + self.verticalLayout_3.setStretch(0, 2) + + self.verticalLayout_2.addWidget(self.groupBox_file_path_input_Jpeak) + + self.groupBox_file_path_input_ECG = QGroupBox(self.groupBox) + self.groupBox_file_path_input_ECG.setObjectName(u"groupBox_file_path_input_ECG") + self.verticalLayout_6 = QVBoxLayout(self.groupBox_file_path_input_ECG) + self.verticalLayout_6.setObjectName(u"verticalLayout_6") + self.horizontalLayout_3 = QHBoxLayout() + self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") + self.label_3 = QLabel(self.groupBox_file_path_input_ECG) + self.label_3.setObjectName(u"label_3") + self.label_3.setFont(font) + + self.horizontalLayout_3.addWidget(self.label_3) + + self.spinBox_input_freq_ECG = QSpinBox(self.groupBox_file_path_input_ECG) + self.spinBox_input_freq_ECG.setObjectName(u"spinBox_input_freq_ECG") + self.spinBox_input_freq_ECG.setFont(font) + self.spinBox_input_freq_ECG.setMinimum(1) + self.spinBox_input_freq_ECG.setMaximum(1000000) + + self.horizontalLayout_3.addWidget(self.spinBox_input_freq_ECG) + + + self.verticalLayout_6.addLayout(self.horizontalLayout_3) + + self.plainTextEdit_file_path_input_ECG = QPlainTextEdit(self.groupBox_file_path_input_ECG) + self.plainTextEdit_file_path_input_ECG.setObjectName(u"plainTextEdit_file_path_input_ECG") + + self.verticalLayout_6.addWidget(self.plainTextEdit_file_path_input_ECG) + + self.verticalLayout_6.setStretch(0, 2) + self.verticalLayout_6.setStretch(1, 3) + + self.verticalLayout_2.addWidget(self.groupBox_file_path_input_ECG) + + self.groupBox_file_path_input_Rpeak = QGroupBox(self.groupBox) + self.groupBox_file_path_input_Rpeak.setObjectName(u"groupBox_file_path_input_Rpeak") + self.verticalLayout_7 = QVBoxLayout(self.groupBox_file_path_input_Rpeak) + self.verticalLayout_7.setObjectName(u"verticalLayout_7") + self.plainTextEdit_file_path_input_Rpeak = QPlainTextEdit(self.groupBox_file_path_input_Rpeak) + self.plainTextEdit_file_path_input_Rpeak.setObjectName(u"plainTextEdit_file_path_input_Rpeak") + + self.verticalLayout_7.addWidget(self.plainTextEdit_file_path_input_Rpeak) + + self.verticalLayout_7.setStretch(0, 2) + + self.verticalLayout_2.addWidget(self.groupBox_file_path_input_Rpeak) + + self.groupBox_file_path_save = QGroupBox(self.groupBox) + self.groupBox_file_path_save.setObjectName(u"groupBox_file_path_save") + self.verticalLayout_4 = QVBoxLayout(self.groupBox_file_path_save) + self.verticalLayout_4.setObjectName(u"verticalLayout_4") + self.plainTextEdit_file_path_save = QPlainTextEdit(self.groupBox_file_path_save) + self.plainTextEdit_file_path_save.setObjectName(u"plainTextEdit_file_path_save") + + self.verticalLayout_4.addWidget(self.plainTextEdit_file_path_save) + + + self.verticalLayout_2.addWidget(self.groupBox_file_path_save) + + self.verticalLayout_2.setStretch(0, 5) + self.verticalLayout_2.setStretch(1, 4) + self.verticalLayout_2.setStretch(2, 5) + self.verticalLayout_2.setStretch(3, 4) + self.verticalLayout_2.setStretch(4, 4) + + self.gridLayout.addWidget(self.groupBox, 0, 0, 1, 4) + + self.pushButton_confirm = QPushButton(self.centralwidget) + self.pushButton_confirm.setObjectName(u"pushButton_confirm") + self.pushButton_confirm.setFont(font) + + self.gridLayout.addWidget(self.pushButton_confirm, 1, 2, 1, 1) + + MainWindow_precisely_align_input_setting.setCentralWidget(self.centralwidget) + self.statusbar = QStatusBar(MainWindow_precisely_align_input_setting) + self.statusbar.setObjectName(u"statusbar") + MainWindow_precisely_align_input_setting.setStatusBar(self.statusbar) + + self.retranslateUi(MainWindow_precisely_align_input_setting) + + QMetaObject.connectSlotsByName(MainWindow_precisely_align_input_setting) + # setupUi + + def retranslateUi(self, MainWindow_precisely_align_input_setting): + MainWindow_precisely_align_input_setting.setWindowTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u5bfc\u5165\u8bbe\u7f6e", None)) + self.pushButton_cancel.setText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u53d6\u6d88", None)) + self.groupBox.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_input_BCG.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u9884\u5904\u7406\u540e\u7684BCG\u8def\u5f84", None)) + self.label_2.setText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u91c7\u6837\u7387(Hz)\uff1a", None)) + self.plainTextEdit_file_path_input_BCG.setPlainText("") + self.plainTextEdit_file_path_input_BCG.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_input_Jpeak.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4eba\u5de5\u7ea0\u6b63\u540e\u7684J\u5cf0\u5cf0\u503c\u8def\u5f84", None)) + self.plainTextEdit_file_path_input_Jpeak.setPlainText("") + self.plainTextEdit_file_path_input_Jpeak.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_input_ECG.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u9884\u5904\u7406\u540e\u7684ECG\u8def\u5f84", None)) + self.label_3.setText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u91c7\u6837\u7387(Hz)\uff1a", None)) + self.plainTextEdit_file_path_input_ECG.setPlainText("") + self.plainTextEdit_file_path_input_ECG.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_input_Rpeak.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4eba\u5de5\u7ea0\u6b63\u540e\u7684R\u5cf0\u5cf0\u503c\u8def\u5f84", None)) + self.plainTextEdit_file_path_input_Rpeak.setPlainText("") + self.plainTextEdit_file_path_input_Rpeak.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u6587\u4ef6\u8def\u5f84", None)) + self.groupBox_file_path_save.setTitle(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u5bf9\u9f50\u4fe1\u606f\u4fdd\u5b58\u8def\u5f84", None)) + self.plainTextEdit_file_path_save.setPlaceholderText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u4fdd\u5b58\u8def\u5f84", None)) + self.pushButton_confirm.setText(QCoreApplication.translate("MainWindow_precisely_align_input_setting", u"\u786e\u5b9a", None)) + # retranslateUi + diff --git a/ui/setting/precisely_align_input_setting.ui b/ui/setting/precisely_align_input_setting.ui new file mode 100644 index 0000000..cbe5884 --- /dev/null +++ b/ui/setting/precisely_align_input_setting.ui @@ -0,0 +1,216 @@ + + + MainWindow_precisely_align_input_setting + + + + 0 + 0 + 540 + 760 + + + + 导入设置 + + + + + + + + 12 + + + + 取消 + + + + + + + + 10 + + + + 文件路径 + + + + + + 预处理后的BCG路径 + + + + + + + + + 12 + + + + 采样率(Hz): + + + + + + + + 12 + + + + 1 + + + 1000000 + + + + + + + + + + + + 文件路径 + + + + + + + + + + 人工纠正后的J峰峰值路径 + + + + + + + + + 文件路径 + + + + + + + + + + 预处理后的ECG路径 + + + + + + + + + 12 + + + + 采样率(Hz): + + + + + + + + 12 + + + + 1 + + + 1000000 + + + + + + + + + + + + 文件路径 + + + + + + + + + + 人工纠正后的R峰峰值路径 + + + + + + + + + 文件路径 + + + + + + + + + + 对齐信息保存路径 + + + + + + 保存路径 + + + + + + + + + + + + + + 12 + + + + 确定 + + + + + + + + + +