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
+
+
+
+ 确定
+
+
+
+
+
+
+
+
+
+