修改粗对齐文件读取后时间显示为秒数

修改计算对齐按钮位置到对齐板块
添加数据文件相关错误提示
添加粗对齐文件读取自动识别文件名称中的采样率
添加粗对齐选择对其位置后逐epoch拟合视图接口
This commit is contained in:
marques
2025-05-19 09:42:17 +08:00
parent 0be88d9be7
commit adb90c258c
8 changed files with 557 additions and 242 deletions

View File

@ -20,7 +20,6 @@ from func.utils.Result import Result
from ui.MainWindow.MainWindow_approximately_align import Ui_MainWindow_approximately_align from ui.MainWindow.MainWindow_approximately_align import Ui_MainWindow_approximately_align
from ui.setting.approximately_align_input_setting import Ui_MainWindow_approximately_align_input_setting from ui.setting.approximately_align_input_setting import Ui_MainWindow_approximately_align_input_setting
Config = { Config = {
} }
@ -32,6 +31,7 @@ ButtonState = {
"pushButton_Standardize": False, "pushButton_Standardize": False,
"pushButton_CutOff": False, "pushButton_CutOff": False,
"pushButton_GetPos": False, "pushButton_GetPos": False,
"pushButton_ChangeView": False,
"pushButton_JUMP": False, "pushButton_JUMP": False,
"pushButton_EM1": False, "pushButton_EM1": False,
"pushButton_EM10": False, "pushButton_EM10": False,
@ -39,7 +39,12 @@ ButtonState = {
"pushButton_EP1": False, "pushButton_EP1": False,
"pushButton_EP10": False, "pushButton_EP10": False,
"pushButton_EP100": False, "pushButton_EP100": False,
"pushButton_save": False "pushButton_save": False,
"radioButton_PTHO": False,
"radioButton_PABD": False,
"radioButton_NTHO": False,
"radioButton_NABD": False,
"radioButton_custom": False
}, },
"Current": { "Current": {
"pushButton_input_setting": True, "pushButton_input_setting": True,
@ -47,6 +52,7 @@ ButtonState = {
"pushButton_Standardize": False, "pushButton_Standardize": False,
"pushButton_CutOff": False, "pushButton_CutOff": False,
"pushButton_GetPos": False, "pushButton_GetPos": False,
"pushButton_ChangeView": False,
"pushButton_JUMP": False, "pushButton_JUMP": False,
"pushButton_EM1": False, "pushButton_EM1": False,
"pushButton_EM10": False, "pushButton_EM10": False,
@ -54,7 +60,12 @@ ButtonState = {
"pushButton_EP1": False, "pushButton_EP1": False,
"pushButton_EP10": False, "pushButton_EP10": False,
"pushButton_EP100": False, "pushButton_EP100": False,
"pushButton_save": False "pushButton_save": False,
"radioButton_PTHO": False,
"radioButton_PABD": False,
"radioButton_NTHO": False,
"radioButton_NABD": False,
"radioButton_custom": False
} }
} }
@ -93,20 +104,16 @@ class SettingWindow(QMainWindow):
Config.update(file_config) Config.update(file_config)
self.config = file_config self.config = file_config
# 更新配置
Config.update({ Config.update({
"Path": { "Path": {
"Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT / "Input_orgBcg": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_ORGBCG_TEXT /
Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME + Path(str(self.sampID)))),
str(Config["InputConfig"]["orgBcgFreq"]) +
ConfigParams.ENDSWITH_TXT))),
"Input_Tho": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / "Input_Tho": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_INPUT_THO_FILENAME + Path(str(self.sampID)))),
str(Config["InputConfig"]["ThoFreq"]) +
ConfigParams.ENDSWITH_TXT))),
"Input_Abd": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / "Input_Abd": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_INPUT_ABD_FILENAME + Path(str(self.sampID)))),
str(Config["InputConfig"]["AbdFreq"]) +
ConfigParams.ENDSWITH_TXT))),
"Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT / "Save": str((Path(self.root_path) / ConfigParams.PUBLIC_PATH_PSG_TEXT /
Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_SAVE_FILENAME + Path(str(self.sampID)) / Path(ConfigParams.APPROXIMATELY_ALIGN_SAVE_FILENAME +
ConfigParams.ENDSWITH_CSV))) ConfigParams.ENDSWITH_CSV)))
@ -207,7 +214,7 @@ class MainWindow_approximately_align(QMainWindow):
self.progressbar = None self.progressbar = None
PublicFunc.add_progressbar(self) PublicFunc.add_progressbar(self)
#初始化画框 # 初始化画框
self.fig = None self.fig = None
self.canvas = None self.canvas = None
@ -231,7 +238,7 @@ class MainWindow_approximately_align(QMainWindow):
PublicFunc.__resetAllButton__(self, ButtonState) PublicFunc.__resetAllButton__(self, ButtonState)
self.ui.groupBox_align_position.setEnabled(False) # self.ui.groupBox_align_position.setEnabled(False)
self.ui.pushButton_input.clicked.connect(self.__slot_btn_input__) self.ui.pushButton_input.clicked.connect(self.__slot_btn_input__)
self.ui.pushButton_input_setting.clicked.connect(self.setting.show) self.ui.pushButton_input_setting.clicked.connect(self.setting.show)
@ -295,7 +302,6 @@ class MainWindow_approximately_align(QMainWindow):
self.ui.radioButton_PTHO.setText("备选1") self.ui.radioButton_PTHO.setText("备选1")
self.ui.radioButton_NABD.setText("备选4") self.ui.radioButton_NABD.setText("备选4")
self.ui.radioButton_NTHO.setText("备选2") self.ui.radioButton_NTHO.setText("备选2")
self.ui.groupBox_align_position.setEnabled(False)
self.ui.spinBox_SelectEpoch.setMinimum(0) self.ui.spinBox_SelectEpoch.setMinimum(0)
def __plot__(self, *args, **kwargs): def __plot__(self, *args, **kwargs):
@ -357,14 +363,14 @@ class MainWindow_approximately_align(QMainWindow):
else: else:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO) PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO)
orgBcg_minutes = round(self.data.raw_orgBcg.shape[0] / Config["InputConfig"]["orgBcgFreq"] / 60) orgBcg_seconds = round(self.data.raw_orgBcg.shape[0] / Config["InputConfig"]["orgBcgFreq"])
PSG_minutes = round(self.data.raw_Tho.shape[0] / Config["InputConfig"]["ThoFreq"] / 60) PSG_seconds = round(self.data.raw_Tho.shape[0] / Config["InputConfig"]["ThoFreq"])
Config.update({ Config.update({
"orgBcg_minutes": orgBcg_minutes, "orgBcg_seconds": orgBcg_seconds,
"PSG_minutes": PSG_minutes "PSG_seconds": PSG_seconds
}) })
self.ui.label_orgBcg_length.setText(str(orgBcg_minutes)) self.ui.label_orgBcg_length.setText(str(orgBcg_seconds))
self.ui.label_PSG_length.setText(str(PSG_minutes)) self.ui.label_PSG_length.setText(str(PSG_seconds))
self.__reset__() self.__reset__()
PublicFunc.finish_operation(self, ButtonState) PublicFunc.finish_operation(self, ButtonState)
@ -482,6 +488,7 @@ class MainWindow_approximately_align(QMainWindow):
PublicFunc.progressbar_update(self, 1, 1, Constants.DRAWING_DATA, 0) PublicFunc.progressbar_update(self, 1, 1, Constants.DRAWING_DATA, 0)
result = self.__plot__() result = self.__plot__()
if not result.status: if not result.status:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_ERROR) PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR) PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
@ -489,8 +496,8 @@ class MainWindow_approximately_align(QMainWindow):
return return
else: else:
PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO) PublicFunc.text_output(self.ui, "(1/1)" + result.info, Constants.TIPS_TYPE_INFO)
ButtonState["Current"]["pushButton_GetPos"] = True ButtonState["Current"]["pushButton_GetPos"] = True
PublicFunc.finish_operation(self, ButtonState) PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_GetPosition__(self): def __slot_btn_GetPosition__(self):
@ -520,7 +527,8 @@ class MainWindow_approximately_align(QMainWindow):
# 绘图 # 绘图
PublicFunc.progressbar_update(self, 3, 4, Constants.DRAWING_DATA, 50) PublicFunc.progressbar_update(self, 3, 4, Constants.DRAWING_DATA, 50)
result = self.__plot__(result1.data["tho_relate"], result1.data["tho_relate2"], result2.data["abd_relate"], result2.data["abd_relate2"]) result = self.__plot__(result1.data["tho_relate"], result1.data["tho_relate2"], result2.data["abd_relate"],
result2.data["abd_relate2"])
if not result.status: if not result.status:
PublicFunc.text_output(self.ui, "(3/4)" + result.info, Constants.TIPS_TYPE_ERROR) PublicFunc.text_output(self.ui, "(3/4)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR) PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
@ -531,7 +539,8 @@ class MainWindow_approximately_align(QMainWindow):
# 计算最大值位置 # 计算最大值位置
PublicFunc.progressbar_update(self, 4, 4, Constants.APPROXIMATELY_MAXVALUE_POS_CALCULATING, 90) PublicFunc.progressbar_update(self, 4, 4, Constants.APPROXIMATELY_MAXVALUE_POS_CALCULATING, 90)
result = self.data.calculate_maxvalue_pos(result1.data["tho_relate"], result1.data["tho_relate2"], result2.data["abd_relate"], result2.data["abd_relate2"]) result = self.data.calculate_maxvalue_pos(result1.data["tho_relate"], result1.data["tho_relate2"],
result2.data["abd_relate"], result2.data["abd_relate2"])
if not result.status: if not result.status:
PublicFunc.text_output(self.ui, "(4/4)" + result.info, Constants.TIPS_TYPE_ERROR) PublicFunc.text_output(self.ui, "(4/4)" + result.info, Constants.TIPS_TYPE_ERROR)
PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR) PublicFunc.msgbox_output(self, result.info, Constants.MSGBOX_TYPE_ERROR)
@ -544,7 +553,12 @@ class MainWindow_approximately_align(QMainWindow):
self.ui.radioButton_PTHO.setText(str(result.data["tho_max"] + result.data["bias"])) self.ui.radioButton_PTHO.setText(str(result.data["tho_max"] + result.data["bias"]))
self.ui.radioButton_NABD.setText(str(result.data["abd_max2"] + result.data["bias"])) self.ui.radioButton_NABD.setText(str(result.data["abd_max2"] + result.data["bias"]))
self.ui.radioButton_NTHO.setText(str(result.data["tho_max2"] + result.data["bias"])) self.ui.radioButton_NTHO.setText(str(result.data["tho_max2"] + result.data["bias"]))
self.ui.groupBox_align_position.setEnabled(True) ButtonState["Current"]["radioButton_PTHO"] = True
ButtonState["Current"]["radioButton_PABD"] = True
ButtonState["Current"]["radioButton_NTHO"] = True
ButtonState["Current"]["radioButton_NABD"] = True
ButtonState["Current"]["radioButton_custom"] = True
# self.ui.groupBox_align_position.setEnabled(True)
PublicFunc.finish_operation(self, ButtonState) PublicFunc.finish_operation(self, ButtonState)
def __slot_btn_jump__(self): def __slot_btn_jump__(self):
@ -638,7 +652,8 @@ class MainWindow_approximately_align(QMainWindow):
self.ui.spinBox_SelectEpoch.setMinimum(result3.data["epoch_min"]) self.ui.spinBox_SelectEpoch.setMinimum(result3.data["epoch_min"])
self.ui.spinBox_SelectEpoch.setMaximum(result3.data["epoch_max"]) self.ui.spinBox_SelectEpoch.setMaximum(result3.data["epoch_max"])
self.ui.spinBox_SelectEpoch.setValue(result3.data["epoch_min"]) self.ui.spinBox_SelectEpoch.setValue(result3.data["epoch_min"])
self.ui.spinBox_SelectEpoch.setToolTip("最小值:{}\n最大值:{}".format(result3.data["epoch_min"], result3.data["epoch_max"])) self.ui.spinBox_SelectEpoch.setToolTip(
"最小值:{}\n最大值:{}".format(result3.data["epoch_min"], result3.data["epoch_max"]))
self.ui.spinBox_SelectEpoch.setEnabled(True) self.ui.spinBox_SelectEpoch.setEnabled(True)
ButtonState["Current"]["pushButton_JUMP"] = True ButtonState["Current"]["pushButton_JUMP"] = True
ButtonState["Current"]["pushButton_EM1"] = True ButtonState["Current"]["pushButton_EM1"] = True
@ -648,23 +663,25 @@ class MainWindow_approximately_align(QMainWindow):
ButtonState["Current"]["pushButton_EP10"] = True ButtonState["Current"]["pushButton_EP10"] = True
ButtonState["Current"]["pushButton_EP100"] = True ButtonState["Current"]["pushButton_EP100"] = True
ButtonState["Current"]["pushButton_save"] = True ButtonState["Current"]["pushButton_save"] = True
ButtonState["Current"]["pushButton_ChangeView"] = True
PublicFunc.finish_operation(self, ButtonState) PublicFunc.finish_operation(self, ButtonState)
def DrawPicRawOverview(self): def DrawPicRawOverview(self):
try: try:
max_x = max(self.data.processed_Tho.shape[0], self.data.processed_Abd.shape[0], self.data.processed_orgBcg.shape[0]) max_x = max(self.data.processed_downsample_Tho.shape[0], self.data.processed_downsample_Abd.shape[0],
self.data.processed_downsample_orgBcg.shape[0])
ax1 = self.fig.add_subplot(311) ax1 = self.fig.add_subplot(311)
ax1.plot(self.data.processed_Tho, color='blue') ax1.plot(self.data.processed_downsample_Tho, color='blue')
ax1.set_xlim(0, max_x) ax1.set_xlim(0, max_x)
ax1.set_title("THO") ax1.set_title("THO")
ax2 = self.fig.add_subplot(312, sharex=ax1, sharey=ax1) ax2 = self.fig.add_subplot(312, sharex=ax1, sharey=ax1)
ax2.plot(self.data.processed_orgBcg, color='blue') ax2.plot(self.data.processed_downsample_orgBcg, color='blue')
ax2.set_xlim(0, max_x) ax2.set_xlim(0, max_x)
ax2.set_title("orgBcg") ax2.set_title("orgBcg")
ax3 = self.fig.add_subplot(313, sharex=ax1, sharey=ax1) ax3 = self.fig.add_subplot(313, sharex=ax1, sharey=ax1)
ax3.plot(self.data.processed_Abd, color='blue') ax3.plot(self.data.processed_downsample_Abd, color='blue')
ax3.set_xlim(0, max_x) ax3.set_xlim(0, max_x)
ax3.set_title("ABD") ax3.set_title("ABD")
@ -676,19 +693,20 @@ class MainWindow_approximately_align(QMainWindow):
def DrawPicOverviewWithCutOff(self): def DrawPicOverviewWithCutOff(self):
try: try:
max_x = max(self.data.processed_Tho.shape[0] + Config["PSGConfig"]["PreA"], max_x = max(self.data.processed_downsample_Tho.shape[0] + Config["PSGConfig"]["PreA"],
self.data.processed_orgBcg.shape[0] + Config["orgBcgConfig"]["PreA"]) self.data.processed_downsample_orgBcg.shape[0] + Config["orgBcgConfig"]["PreA"])
min_x = min(Config["PSGConfig"]["PreA"], Config["orgBcgConfig"]["PreA"], 0) min_x = min(Config["PSGConfig"]["PreA"], Config["orgBcgConfig"]["PreA"], 0)
ax1 = self.fig.add_subplot(311) ax1 = self.fig.add_subplot(311)
ax1.plot( ax1.plot(
linspace(Config["PSGConfig"]["PreA"], linspace(Config["PSGConfig"]["PreA"],
len(self.data.processed_Tho) + Config["PSGConfig"]["PreA"], len(self.data.processed_downsample_Tho) + Config["PSGConfig"]["PreA"],
len(self.data.processed_Tho)), self.data.processed_Tho, color='blue') len(self.data.processed_downsample_Tho)), self.data.processed_downsample_Tho, color='blue')
# 绘制x = PreCut的线 和 x = PostCut的虚线 # 绘制x = PreCut的线 和 x = PostCut的虚线
ax1.axvline(x=Config["PSGConfig"]["PreCut"] + Config["PSGConfig"]["PreA"], color='red', ax1.axvline(x=Config["PSGConfig"]["PreCut"] + Config["PSGConfig"]["PreA"], color='red',
linestyle='--') linestyle='--')
ax1.axvline( ax1.axvline(
x=len(self.data.processed_Tho) - Config["PSGConfig"]["PostCut"] + Config["PSGConfig"]["PreA"], x=len(self.data.processed_downsample_Tho) - Config["PSGConfig"]["PostCut"] + Config["PSGConfig"][
"PreA"],
color='red', linestyle='--') color='red', linestyle='--')
ax1.set_xlim(min_x, max_x) ax1.set_xlim(min_x, max_x)
@ -696,11 +714,15 @@ class MainWindow_approximately_align(QMainWindow):
ax2 = self.fig.add_subplot(312, sharex=ax1, sharey=ax1) ax2 = self.fig.add_subplot(312, sharex=ax1, sharey=ax1)
ax2.plot( ax2.plot(
linspace(Config["orgBcgConfig"]["PreA"], len(self.data.processed_orgBcg) + Config["orgBcgConfig"]["PreA"], linspace(Config["orgBcgConfig"]["PreA"],
len(self.data.processed_orgBcg)), self.data.processed_orgBcg, color='blue') len(self.data.processed_downsample_orgBcg) + Config["orgBcgConfig"]["PreA"],
len(self.data.processed_downsample_orgBcg)), self.data.processed_downsample_orgBcg,
color='blue')
ax2.axvline(x=Config["orgBcgConfig"]["PreCut"] + Config["orgBcgConfig"]["PreA"], color='red', ax2.axvline(x=Config["orgBcgConfig"]["PreCut"] + Config["orgBcgConfig"]["PreA"], color='red',
linestyle='--') linestyle='--')
ax2.axvline(x=len(self.data.processed_orgBcg) - Config["orgBcgConfig"]["PostCut"] + Config["orgBcgConfig"]["PreA"], ax2.axvline(
x=len(self.data.processed_downsample_orgBcg) - Config["orgBcgConfig"]["PostCut"] +
Config["orgBcgConfig"]["PreA"],
color='red', linestyle='--') color='red', linestyle='--')
ax2.set_xlim(min_x, max_x) ax2.set_xlim(min_x, max_x)
ax2.set_title("orgBcg") ax2.set_title("orgBcg")
@ -708,12 +730,13 @@ class MainWindow_approximately_align(QMainWindow):
ax3 = self.fig.add_subplot(313, sharex=ax1, sharey=ax1) ax3 = self.fig.add_subplot(313, sharex=ax1, sharey=ax1)
ax3.plot( ax3.plot(
linspace(Config["PSGConfig"]["PreA"], linspace(Config["PSGConfig"]["PreA"],
len(self.data.processed_Abd) + Config["PSGConfig"]["PreA"], len(self.data.processed_downsample_Abd) + Config["PSGConfig"]["PreA"],
len(self.data.processed_Abd)), self.data.processed_Abd, color='blue') len(self.data.processed_downsample_Abd)), self.data.processed_downsample_Abd, color='blue')
ax3.axvline(x=Config["PSGConfig"]["PreCut"] + Config["PSGConfig"]["PreA"], color='red', ax3.axvline(x=Config["PSGConfig"]["PreCut"] + Config["PSGConfig"]["PreA"], color='red',
linestyle='--') linestyle='--')
ax3.axvline( ax3.axvline(
x=len(self.data.processed_Tho) - Config["PSGConfig"]["PostCut"] + Config["PSGConfig"]["PreA"], x=len(self.data.processed_downsample_Tho) - Config["PSGConfig"]["PostCut"] + Config["PSGConfig"][
"PreA"],
color='red', linestyle='--') color='red', linestyle='--')
ax3.set_xlim(min_x, max_x) ax3.set_xlim(min_x, max_x)
ax3.set_title("ABD") ax3.set_title("ABD")
@ -750,29 +773,30 @@ class MainWindow_approximately_align(QMainWindow):
def DrawPicTryAlign(self): def DrawPicTryAlign(self):
try: try:
max_x = max(self.data.processed_Tho.shape[0], max_x = max(self.data.processed_downsample_Tho.shape[0],
self.data.processed_orgBcg.shape[0] + Config["pos"]) self.data.processed_downsample_orgBcg.shape[0] + Config["pos"])
min_x = min(Config["PSGConfig"]["PreA"], Config["orgBcgConfig"]["PreA"] + Config["pos"], 0) min_x = min(Config["PSGConfig"]["PreA"], Config["orgBcgConfig"]["PreA"] + Config["pos"], 0)
ax1 = self.fig.add_subplot(311) ax1 = self.fig.add_subplot(311)
ax1.plot( ax1.plot(
linspace(0, len(self.data.processed_Tho), linspace(0, len(self.data.processed_downsample_Tho),
len(self.data.processed_Tho)), self.data.processed_Tho, color='blue') len(self.data.processed_downsample_Tho)), self.data.processed_downsample_Tho, color='blue')
# 绘制x = PreCut的线 和 x = PostCut的虚线 # 绘制x = PreCut的线 和 x = PostCut的虚线
ax1.set_xlim(min_x, max_x) ax1.set_xlim(min_x, max_x)
ax1.set_title("THO") ax1.set_title("THO")
ax2 = self.fig.add_subplot(312, sharex=ax1, sharey=ax1) ax2 = self.fig.add_subplot(312, sharex=ax1, sharey=ax1)
ax2.plot(linspace(Config["pos"], ax2.plot(linspace(Config["pos"],
len(self.data.processed_orgBcg) + Config["pos"], len(self.data.processed_downsample_orgBcg) + Config["pos"],
len(self.data.processed_orgBcg)), self.data.processed_orgBcg, color='blue') len(self.data.processed_downsample_orgBcg)), self.data.processed_downsample_orgBcg,
color='blue')
ax2.set_xlim(min_x, max_x) ax2.set_xlim(min_x, max_x)
ax2.set_title("orgBcg") ax2.set_title("orgBcg")
ax3 = self.fig.add_subplot(313, sharex=ax1, sharey=ax1) ax3 = self.fig.add_subplot(313, sharex=ax1, sharey=ax1)
ax3.plot( ax3.plot(
linspace(0, len(self.data.processed_Abd), linspace(0, len(self.data.processed_downsample_Abd),
len(self.data.processed_Abd)), self.data.processed_Abd, color='blue') len(self.data.processed_downsample_Abd)), self.data.processed_downsample_Abd, color='blue')
ax3.set_xlim(min_x, max_x) ax3.set_xlim(min_x, max_x)
ax3.set_title("ABD") ax3.set_title("ABD")
@ -790,9 +814,9 @@ class MainWindow_approximately_align(QMainWindow):
orgBcg_SP = PSG_SP - Config["pos"] orgBcg_SP = PSG_SP - Config["pos"]
orgBcg_EP = PSG_EP - Config["pos"] orgBcg_EP = PSG_EP - Config["pos"]
tho_seg = self.data.processed_Tho[PSG_SP:PSG_EP] tho_seg = self.data.processed_downsample_Tho[PSG_SP:PSG_EP]
orgBcg_seg = self.data.processed_orgBcg[orgBcg_SP:orgBcg_EP] * Config["orgBcg_reverse"] orgBcg_seg = self.data.processed_downsample_orgBcg[orgBcg_SP:orgBcg_EP] * Config["orgBcg_reverse"]
abd_seg = self.data.processed_Abd[PSG_SP:PSG_EP] abd_seg = self.data.processed_downsample_Abd[PSG_SP:PSG_EP]
# 根据PSG来和绘制 # 根据PSG来和绘制
ax1 = self.fig.add_subplot(321) ax1 = self.fig.add_subplot(321)
@ -842,6 +866,9 @@ class MainWindow_approximately_align(QMainWindow):
# 返回图片以便存到QPixImage # 返回图片以便存到QPixImage
return Result().success(info=Constants.DRAWING_FINISHED) return Result().success(info=Constants.DRAWING_FINISHED)
def DrawAlignScatter(self):
pass
class Data: class Data:
@ -852,22 +879,90 @@ class Data:
self.processed_orgBcg = None self.processed_orgBcg = None
self.processed_Tho = None self.processed_Tho = None
self.processed_Abd = None self.processed_Abd = None
self.processed_downsample_orgBcg = None
self.processed_downsample_Tho = None
self.processed_downsample_Abd = None
self.relate_list = None
self.relate_point = None
def open_file(self): def open_file(self):
if not Path(Config["Path"]["Input_orgBcg"]).exists(): if not Path(Config["Path"]["Input_orgBcg"]).exists():
return Result().failure( return Result().failure(
info=Constants.INPUT_FAILURE + "orgBcg: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[ info=Constants.INPUT_FAILURE + "orgBcg: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_Path_Not_Exist"]) "Data_Path_Not_Exist"])
temp_orgBcg_path = list(
Path(Config["Path"]["Input_orgBcg"]).glob(f"{ConfigParams.APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME}*"))
if len(temp_orgBcg_path) == 0:
return Result().failure(
info=Constants.INPUT_FAILURE + "orgBcg: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_File_Not_Exist"])
elif len(temp_orgBcg_path) > 1:
return Result().failure(
info=Constants.INPUT_FAILURE + "orgBcg: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_File_More_Than_One"])
else:
orgBcg_path = temp_orgBcg_path[0]
Config["Path"]["Input_orgBcg"] = str(orgBcg_path)
orgBcg_freq = orgBcg_path.stem.split("_")[-1]
# 验证是否为整数或是否存在
if not orgBcg_freq.isdigit():
return Result().failure(
info=Constants.INPUT_FAILURE + "orgBcg: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_Frequency_Not_In_Filename"])
Config["InputConfig"]["orgBcgFreq"] = int(orgBcg_freq)
if not Path(Config["Path"]["Input_Tho"]).exists(): if not Path(Config["Path"]["Input_Tho"]).exists():
return Result().failure( return Result().failure(
info=Constants.INPUT_FAILURE + "Tho: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[ info=Constants.INPUT_FAILURE + "Tho: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_Path_Not_Exist"]) "Data_Path_Not_Exist"])
temp_Tho_path = list(
Path(Config["Path"]["Input_Tho"]).glob(f"{ConfigParams.APPROXIMATELY_ALIGN_INPUT_THO_FILENAME}*"))
if len(temp_Tho_path) == 0:
return Result().failure(
info=Constants.INPUT_FAILURE + "Tho: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_File_Not_Exist"])
elif len(temp_Tho_path) > 1:
return Result().failure(
info=Constants.INPUT_FAILURE + "Tho: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_File_More_Than_One"])
else:
tho_path = temp_Tho_path[0]
Config["Path"]["Input_Tho"] = str(tho_path)
tho_freq = tho_path.stem.split("_")[-1]
# 验证是否为整数或是否存在
if not tho_freq.isdigit():
return Result().failure(
info=Constants.INPUT_FAILURE + "Tho: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_Frequency_Not_In_Filename"])
Config["InputConfig"]["ThoFreq"] = int(tho_freq)
if not Path(Config["Path"]["Input_Abd"]).exists(): if not Path(Config["Path"]["Input_Abd"]).exists():
return Result().failure( return Result().failure(
info=Constants.INPUT_FAILURE + "Abd: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[ info=Constants.INPUT_FAILURE + "Abd: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_Path_Not_Exist"]) "Data_Path_Not_Exist"])
temp_Abd_path = list(
Path(Config["Path"]["Input_Abd"]).glob(f"{ConfigParams.APPROXIMATELY_ALIGN_INPUT_ABD_FILENAME}*"))
if len(temp_Abd_path) == 0:
return Result().failure(
info=Constants.INPUT_FAILURE + "Abd: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_File_Not_Exist"])
elif len(temp_Abd_path) > 1:
return Result().failure(
info=Constants.INPUT_FAILURE + "Abd: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_File_More_Than_One"])
else:
abd_path = temp_Abd_path[0]
Config["Path"]["Input_Abd"] = str(abd_path)
abd_freq = abd_path.stem.split("_")[-1]
# 验证是否为整数或是否存在
if not abd_freq.isdigit():
return Result().failure(
info=Constants.INPUT_FAILURE + "Abd: " + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Data_Frequency_Not_In_Filename"])
Config["InputConfig"]["AbdFreq"] = int(abd_freq)
try: try:
self.raw_orgBcg = read_csv(Config["Path"]["Input_orgBcg"], self.raw_orgBcg = read_csv(Config["Path"]["Input_orgBcg"],
encoding=ConfigParams.UTF8_ENCODING, encoding=ConfigParams.UTF8_ENCODING,
@ -879,7 +974,8 @@ class Data:
encoding=ConfigParams.UTF8_ENCODING, encoding=ConfigParams.UTF8_ENCODING,
header=None).to_numpy().reshape(-1) header=None).to_numpy().reshape(-1)
except Exception as e: except Exception as e:
return Result().failure(info=Constants.INPUT_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Read_Data_Exception"] + "\n" + format_exc()) return Result().failure(info=Constants.INPUT_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Read_Data_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.INPUT_FINISHED) return Result().success(info=Constants.INPUT_FINISHED)
@ -891,20 +987,31 @@ class Data:
df = DataFrame({"pos": [pos], "epoch": [epoch], "ApplyFrequency": [ApplyFrequency]}) df = DataFrame({"pos": [pos], "epoch": [epoch], "ApplyFrequency": [ApplyFrequency]})
df.to_csv(Path(Config["Path"]["Save"]), mode="w", header=True, index=False) df.to_csv(Path(Config["Path"]["Save"]), mode="w", header=True, index=False)
except Exception as e: except Exception as e:
return Result().failure(info=Constants.SAVING_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Save_Exception"] + "\n" + format_exc()) return Result().failure(info=Constants.SAVING_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Save_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.SAVING_FINISHED) return Result().success(info=Constants.SAVING_FINISHED)
def Standardize_0(self): def Standardize_0(self):
# 仅重采样 # 仅重采样
if self.raw_orgBcg is None or self.raw_Tho is None or self.raw_Abd is None: if self.raw_orgBcg is None or self.raw_Tho is None or self.raw_Abd is None:
return Result().failure(info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Raw_Data_Not_Exist"]) return Result().failure(
info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Raw_Data_Not_Exist"])
try: try:
self.processed_orgBcg = resample(self.raw_orgBcg, int(Config["orgBcg_minutes"] * 60 * Config["ApplyFrequency"])) # 按照秒数进行截断
self.processed_Tho = resample(self.raw_Tho, int(Config["PSG_minutes"] * 60 * Config["ApplyFrequency"])) self.raw_orgBcg = self.raw_orgBcg[:int(Config["orgBcg_seconds"] * Config["InputConfig"]["orgBcgFreq"])]
self.processed_Abd = resample(self.raw_Abd, int(Config["PSG_minutes"] * 60 * Config["ApplyFrequency"])) self.raw_Tho = self.raw_Tho[:int(Config["PSG_seconds"] * Config["InputConfig"]["ThoFreq"])]
self.raw_Abd = self.raw_Abd[:int(Config["PSG_seconds"] * Config["InputConfig"]["AbdFreq"])]
self.processed_orgBcg = resample(self.raw_orgBcg,
int(Config["orgBcg_seconds"] * Config["ApplyFrequency"]))
self.processed_Tho = resample(self.raw_Tho, int(Config["PSG_seconds"] * Config["ApplyFrequency"]))
self.processed_Abd = resample(self.raw_Abd, int(Config["PSG_seconds"] * Config["ApplyFrequency"]))
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Only_Resample_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Only_Resample_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FINISHED) return Result().success(info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FINISHED)
@ -915,24 +1022,32 @@ class Data:
high = highCut / (fs * 0.5) high = highCut / (fs * 0.5)
sos = butter(order, [low, high], btype="bandpass", output='sos') sos = butter(order, [low, high], btype="bandpass", output='sos')
return sosfiltfilt(sos, data) return sosfiltfilt(sos, data)
if self.raw_orgBcg is None or self.raw_Tho is None or self.raw_Abd is None: if self.raw_orgBcg is None or self.raw_Tho is None or self.raw_Abd is None:
return Result().failure(info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Raw_Data_Not_Exist"]) return Result().failure(
info=Constants.APPROXIMATELY_ONLY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Raw_Data_Not_Exist"])
try: try:
# 滤波 # 滤波
self.processed_orgBcg = butter_bandpass_filter(self.raw_orgBcg, Config["Filter"]["BandPassLow"], self.processed_orgBcg = butter_bandpass_filter(
self.raw_orgBcg, Config["Filter"]["BandPassLow"],
Config["Filter"]["BandPassHigh"], Config["Filter"]["BandPassHigh"],
Config["InputConfig"]["orgBcgFreq"], Config["InputConfig"]["orgBcgFreq"],
Config["Filter"]["BandPassOrder"]) Config["Filter"]["BandPassOrder"])
self.processed_Tho = butter_bandpass_filter(self.raw_Tho, Config["Filter"]["BandPassLow"], self.processed_Tho = butter_bandpass_filter(
self.raw_Tho, Config["Filter"]["BandPassLow"],
Config["Filter"]["BandPassHigh"], Config["Filter"]["BandPassHigh"],
Config["InputConfig"]["ThoFreq"], Config["InputConfig"]["ThoFreq"],
Config["Filter"]["BandPassOrder"]) Config["Filter"]["BandPassOrder"])
self.processed_Abd = butter_bandpass_filter(self.raw_Abd, Config["Filter"]["BandPassLow"], self.processed_Abd = butter_bandpass_filter(
self.raw_Abd, Config["Filter"]["BandPassLow"],
Config["Filter"]["BandPassHigh"], Config["Filter"]["BandPassHigh"],
Config["InputConfig"]["AbdFreq"], Config["InputConfig"]["AbdFreq"],
Config["Filter"]["BandPassOrder"]) Config["Filter"]["BandPassOrder"])
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_RESP_GET_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Resp_Get_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_RESP_GET_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Resp_Get_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_RESP_GET_FINISHED) return Result().success(info=Constants.APPROXIMATELY_RESP_GET_FINISHED)
@ -940,27 +1055,24 @@ class Data:
# 预重采样 # 预重采样
try: try:
# TODO这里的采样率处理如果THO和ABD的采样率不同可能还是会导致之后的ApplyFrequency出问题最后导致得到的粗同步坐标不正确 # TODO这里的采样率处理如果THO和ABD的采样率不同可能还是会导致之后的ApplyFrequency出问题最后导致得到的粗同步坐标不正确
# 修改Config #
if Config["InputConfig"]["ThoFreq"] < Config["InputConfig"]["AbdFreq"]: if Config["InputConfig"]["ThoFreq"] != Config["TempFrequency"]:
Config.update({"TempFrequency": Config["InputConfig"]["ThoFreq"]}) print(int(Config["InputConfig"]["ThoFreq"]), int(Config["TempFrequency"]))
self.processed_Abd = self.processed_Abd[::int(Config["InputConfig"]["AbdFreq"] / Config["TempFrequency"])] self.processed_Tho = resample(self.processed_Tho,
elif Config["InputConfig"]["ThoFreq"] > Config["InputConfig"]["AbdFreq"]: int(Config["PSG_seconds"] * Config["TempFrequency"]))
Config.update({"TempFrequency": Config["InputConfig"]["AbdFreq"]})
self.processed_Tho = self.processed_Tho[::int(Config["InputConfig"]["ThoFreq"] / Config["TempFrequency"])]
else:
Config.update({"TempFrequency": Config["InputConfig"]["ThoFreq"]})
# 如果orgBcg采样率大于PSG采样率那么orgBcg重采样到PSG采样率 if Config["InputConfig"]["AbdFreq"] != Config["TempFrequency"]:
if Config["InputConfig"]["orgBcgFreq"] > Config["TempFrequency"]: self.processed_Abd = resample(self.processed_Abd,
# 用[::]完成 int(Config["PSG_seconds"] * Config["TempFrequency"]))
self.processed_orgBcg = self.processed_orgBcg[::int(Config["InputConfig"]["orgBcgFreq"] / Config["TempFrequency"])]
# 如果orgBcg采样率小于PSG采样率那么orgBcg重采样到PSG采样率 if Config["InputConfig"]["orgBcgFreq"] != Config["TempFrequency"]:
elif Config["InputConfig"]["orgBcgFreq"] < Config["TempFrequency"]: self.processed_orgBcg = resample(self.processed_orgBcg,
# 用repeat完成 int(Config["orgBcg_seconds"] * Config["TempFrequency"]))
self.processed_orgBcg = repeat(self.processed_orgBcg, int(Config["TempFrequency"] / Config["InputConfig"]["orgBcgFreq"]), axis=0)
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_PRE_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Pre_Resample_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_PRE_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Pre_Resample_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_PRE_ALIGN_RESAMPLE_FINISHED) return Result().success(info=Constants.APPROXIMATELY_PRE_ALIGN_RESAMPLE_FINISHED)
@ -970,18 +1082,17 @@ class Data:
temp_frequency = Config["TempFrequency"] temp_frequency = Config["TempFrequency"]
if Config["PSGConfig"]["PSGDelBase"]: if Config["PSGConfig"]["PSGDelBase"]:
# 减去四秒钟平均滤波 # 减去四秒钟平均滤波
self.processed_Tho = self.processed_Tho - convolve(self.processed_Tho, self.processed_Tho = self.processed_Tho - convolve(
ones(int(4 * temp_frequency)) / int(4 * temp_frequency), self.processed_Tho, ones(int(4 * temp_frequency)) / int(4 * temp_frequency), mode='same')
mode='same') self.processed_Abd = self.processed_Abd - convolve(
self.processed_Abd = self.processed_Abd - convolve(self.processed_Abd, self.processed_Abd, ones(int(4 * temp_frequency)) / int(4 * temp_frequency), mode='same')
ones(int(4 * temp_frequency)) / int(4 * temp_frequency),
mode='same')
if Config["orgBcgConfig"]["orgBcgDelBase"]: if Config["orgBcgConfig"]["orgBcgDelBase"]:
self.processed_orgBcg = self.processed_orgBcg - convolve(self.processed_orgBcg, self.processed_orgBcg = self.processed_orgBcg - convolve(
ones(int(4 * temp_frequency)) / int(4 * temp_frequency), self.processed_orgBcg, ones(int(4 * temp_frequency)) / int(4 * temp_frequency), mode='same')
mode='same')
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_DELETE_BASE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Delete_Base_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_DELETE_BASE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Delete_Base_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_DELETE_BASE_FINISHED) return Result().success(info=Constants.APPROXIMATELY_DELETE_BASE_FINISHED)
@ -993,9 +1104,12 @@ class Data:
self.processed_Tho = (self.processed_Tho - mean(self.processed_Tho)) / std(self.processed_Tho) self.processed_Tho = (self.processed_Tho - mean(self.processed_Tho)) / std(self.processed_Tho)
self.processed_Abd = (self.processed_Abd - mean(self.processed_Abd)) / std(self.processed_Abd) self.processed_Abd = (self.processed_Abd - mean(self.processed_Abd)) / std(self.processed_Abd)
if Config["orgBcgConfig"]["orgBcgZScore"]: if Config["orgBcgConfig"]["orgBcgZScore"]:
self.processed_orgBcg = (self.processed_orgBcg - mean(self.processed_orgBcg)) / std(self.processed_orgBcg) self.processed_orgBcg = (self.processed_orgBcg - mean(self.processed_orgBcg)) / std(
self.processed_orgBcg)
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_STANDARDIZE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Standardize_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_STANDARDIZE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Standardize_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_STANDARDIZE_FINISHED) return Result().success(info=Constants.APPROXIMATELY_STANDARDIZE_FINISHED)
@ -1004,11 +1118,13 @@ class Data:
try: try:
# 用[::]完成 # 用[::]完成
temp_frequency = Config["TempFrequency"] temp_frequency = Config["TempFrequency"]
self.processed_Tho = self.processed_Tho[::int(temp_frequency / Config["ApplyFrequency"])] self.processed_downsample_Tho = self.processed_Tho[::int(temp_frequency / Config["ApplyFrequency"])]
self.processed_Abd = self.processed_Abd[::int(temp_frequency / Config["ApplyFrequency"])] self.processed_downsample_Abd = self.processed_Abd[::int(temp_frequency / Config["ApplyFrequency"])]
self.processed_orgBcg = self.processed_orgBcg[::int(temp_frequency / Config["ApplyFrequency"])] self.processed_downsample_orgBcg = self.processed_orgBcg[::int(temp_frequency / Config["ApplyFrequency"])]
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Resample_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_ALIGN_RESAMPLE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Resample_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_ALIGN_RESAMPLE_FINISHED) return Result().success(info=Constants.APPROXIMATELY_ALIGN_RESAMPLE_FINISHED)
@ -1017,8 +1133,12 @@ class Data:
try: try:
# 计算因子 # 计算因子
MULTIPLE_FACTOER = ConfigParams.APPROXIMATELY_ALIGN_CONFIG_NEW_CONTENT["Multiple_Factor"] MULTIPLE_FACTOER = ConfigParams.APPROXIMATELY_ALIGN_CONFIG_NEW_CONTENT["Multiple_Factor"]
a = self.processed_Tho[Config["PSGConfig"]["PreCut"]:len(self.processed_Tho) - Config["PSGConfig"]["PostCut"]].copy() a = self.processed_downsample_Tho[
v = self.processed_orgBcg[Config["orgBcgConfig"]["PreCut"]:len(self.processed_orgBcg) - Config["orgBcgConfig"]["PostCut"]].copy() Config["PSGConfig"]["PreCut"]:len(self.processed_downsample_Tho) - Config["PSGConfig"][
"PostCut"]].copy()
v = self.processed_downsample_orgBcg[
Config["orgBcgConfig"]["PreCut"]:len(self.processed_downsample_orgBcg) - Config["orgBcgConfig"][
"PostCut"]].copy()
a *= MULTIPLE_FACTOER a *= MULTIPLE_FACTOER
v *= MULTIPLE_FACTOER v *= MULTIPLE_FACTOER
a = a.astype(int64) a = a.astype(int64)
@ -1029,15 +1149,21 @@ class Data:
result = {"tho_relate": tho_relate, "tho_relate2": tho_relate2} result = {"tho_relate": tho_relate, "tho_relate2": tho_relate2}
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE1_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Calculate_Correlation1_Exception"] + "\n" + format_exc()) return Result().failure(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE1_FAILURE +
Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Calculate_Correlation1_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE1_FINISHED, data=result) return Result().success(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE1_FINISHED, data=result)
def calculate_correlation2(self): def calculate_correlation2(self):
# 计算互相关2/2 # 计算互相关2/2
try: try:
a = self.processed_Abd[Config["PSGConfig"]["PreCut"]:len(self.processed_Abd) - Config["PSGConfig"]["PostCut"]].copy() a = self.processed_downsample_Abd[
v = self.processed_orgBcg[Config["orgBcgConfig"]["PreCut"]:len(self.processed_orgBcg) - Config["orgBcgConfig"]["PostCut"]].copy() Config["PSGConfig"]["PreCut"]:len(self.processed_downsample_Abd) - Config["PSGConfig"][
"PostCut"]].copy()
v = self.processed_downsample_orgBcg[
Config["orgBcgConfig"]["PreCut"]:len(self.processed_downsample_orgBcg) - Config["orgBcgConfig"][
"PostCut"]].copy()
a *= 100 a *= 100
v *= 100 v *= 100
a = a.astype(int64) a = a.astype(int64)
@ -1048,7 +1174,9 @@ class Data:
result = {"abd_relate": abd_relate, "abd_relate2": abd_relate2} result = {"abd_relate": abd_relate, "abd_relate2": abd_relate2}
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE2_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Calculate_Correlation2_Exception"] + "\n" + format_exc()) return Result().failure(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE2_FAILURE +
Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Calculate_Correlation2_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE2_FINISHED, data=result) return Result().success(info=Constants.APPROXIMATELY_CORRELATION_CALCULATE2_FINISHED, data=result)
@ -1061,11 +1189,13 @@ class Data:
abd_max2 = argmax(abd_relate2) abd_max2 = argmax(abd_relate2)
pre = Config["PSGConfig"]["PreCut"] + Config["orgBcgConfig"]["PostCut"] pre = Config["PSGConfig"]["PreCut"] + Config["orgBcgConfig"]["PostCut"]
bias = pre - len(self.processed_orgBcg) + 1 bias = pre - len(self.processed_downsample_orgBcg) + 1
result = {"tho_max": tho_max, "tho_max2": tho_max2, "abd_max": abd_max, "abd_max2": abd_max2, "bias": bias} result = {"tho_max": tho_max, "tho_max2": tho_max2, "abd_max": abd_max, "abd_max2": abd_max2, "bias": bias}
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_MAXVALUE_POS_CALCULATE_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Calculate_Maxvalue_Pos_Exception"] + "\n" + format_exc()) return Result().failure(info=Constants.APPROXIMATELY_MAXVALUE_POS_CALCULATE_FAILURE +
Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Calculate_Maxvalue_Pos_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_MAXVALUE_POS_CALCULATE_FINISHED, data=result) return Result().success(info=Constants.APPROXIMATELY_MAXVALUE_POS_CALCULATE_FINISHED, data=result)
@ -1073,12 +1203,61 @@ class Data:
# 获取epoch # 获取epoch
try: try:
epoch_min = max(0, Config["pos"] // 30 // Config["ApplyFrequency"] + 1) epoch_min = max(0, Config["pos"] // 30 // Config["ApplyFrequency"] + 1)
epoch_max = min(len(self.processed_Tho) // 30 // Config["ApplyFrequency"] - 1, epoch_max = min(len(self.processed_downsample_Tho) // 30 // Config["ApplyFrequency"] - 1,
(len(self.processed_orgBcg) + Config["pos"]) // 30 // Config["ApplyFrequency"] - 1) (len(self.processed_downsample_orgBcg) + Config["pos"]) // 30 // Config[
"ApplyFrequency"] - 1)
result = {"epoch_min": epoch_min, "epoch_max": epoch_max} result = {"epoch_min": epoch_min, "epoch_max": epoch_max}
except Exception as e: except Exception as e:
return Result().failure(info=Constants.APPROXIMATELY_EPOCH_GET_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON["Get_Epoch_Exception"] + "\n" + format_exc()) return Result().failure(
info=Constants.APPROXIMATELY_EPOCH_GET_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Get_Epoch_Exception"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_EPOCH_GET_FINISHED, data=result) return Result().success(info=Constants.APPROXIMATELY_EPOCH_GET_FINISHED, data=result)
def get_corr_by_epoch(self):
# 获取相关系数
try:
# 获取 epoch 区间
response = self.get_epoch()
if not response.status:
raise Exception(response.info)
epoch_min = response.data["epoch_min"]
epoch_max = response.data["epoch_max"]
"""
bias_list = []
samp_rate4 = 100
for epoch in tqdm(range(epoch_min, epoch_max)):
win1 = 30 * epoch
win2 = win1 + 30 * 3
SP = win1 * samp_rate4
EP = win2 * samp_rate4
tho_seg = tho_pn * tho_low[SP: EP]
abd_seg = abd_pn * abd_low[SP: EP]
resp_seg = resp_pn * resp_low[SP - tho_pos *
samp_rate4: EP - tho_pos * samp_rate4]
abd_relate_seg = correlate(abd_seg, resp_seg, mode="full")
abd_seg_pos = np.argmax(abd_relate_seg) - len(resp_seg)
bias_list.append(abd_seg_pos)
plt.figure()
plt.scatter(np.linspace(0, len(bias_list), len(bias_list)), bias_list, alpha=0.2)
"""
for epoch in range(epoch_min, epoch_max):
SP = epoch * 30
result = None
except Exception as e:
return Result().failure(
info=Constants.APPROXIMATELY_EPOCH_GET_FAILURE + Constants.APPROXIMATELY_ALIGN_FAILURE_REASON[
"Get_Corr_By_Epoch"] + "\n" + format_exc())
return Result().success(info=Constants.APPROXIMATELY_EPOCH_GET_FINISHED, data=result)

View File

@ -38,12 +38,17 @@ class ConfigParams:
"AbdFreq": 100 "AbdFreq": 100
}, },
"ApplyFrequency": 5, "ApplyFrequency": 5,
"TempFrequency": 100,
"Filter": { "Filter": {
"BandPassOrder": 4, "BandPassOrder": 4,
"BandPassLow": 0.01, "BandPassLow": 0.01,
"BandPassHigh": 0.7 "BandPassHigh": 0.7
}, },
"Multiple_Factor":100 "Multiple_Factor":100,
"CorrByEpoch":
{
"window_second": 30
}
} }
APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "orgBcg_Raw_" APPROXIMATELY_ALIGN_INPUT_ORGBCG_FILENAME: str = "orgBcg_Raw_"
APPROXIMATELY_ALIGN_INPUT_THO_FILENAME: str = "Effort Tho_Raw_" APPROXIMATELY_ALIGN_INPUT_THO_FILENAME: str = "Effort Tho_Raw_"

View File

@ -118,6 +118,9 @@ class Constants:
APPROXIMATELY_ALIGN_FAILURE_REASON = { APPROXIMATELY_ALIGN_FAILURE_REASON = {
"Data_Path_Not_Exist": "(路径不存在)", "Data_Path_Not_Exist": "(路径不存在)",
"Data_File_Not_Exist": "(数据文件不存在)",
"Data_File_More_Than_One": "(数据文件超过一个)",
"Data_Frequency_Not_In_Filename": "(数据频率不在文件名中)",
"Read_Data_Exception": "(读取数据异常)", "Read_Data_Exception": "(读取数据异常)",
"Raw_Data_Not_Exist": "(原始数据不存在)", "Raw_Data_Not_Exist": "(原始数据不存在)",
"Only_Resample_Exception": "(仅重采样异常)", "Only_Resample_Exception": "(仅重采样异常)",

View File

@ -1,7 +1,7 @@
from datetime import datetime from datetime import datetime
from logging import error, info from logging import error, info
from PySide6.QtWidgets import QMessageBox, QWidget, QPushButton, QProgressBar, QApplication from PySide6.QtWidgets import QMessageBox, QWidget, QPushButton, QProgressBar, QApplication, QRadioButton
from func.utils.Constants import Constants from func.utils.Constants import Constants
from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError from func.utils.CustomException import TipsTypeValueNotExistError, MsgBoxTypeValueNotExistError
@ -106,6 +106,10 @@ class PublicFunc:
if widget.objectName() in buttonState["Current"].keys(): if widget.objectName() in buttonState["Current"].keys():
widget.setEnabled(False) widget.setEnabled(False)
if isinstance(widget, QRadioButton):
if widget.objectName() in buttonState["Current"].keys():
widget.setEnabled(False)
@staticmethod @staticmethod
def __enableAllButton__(mainWindow, buttonState): def __enableAllButton__(mainWindow, buttonState):
# 启用按钮 # 启用按钮
@ -117,6 +121,10 @@ class PublicFunc:
if widget.objectName() in buttonState["Current"].keys(): if widget.objectName() in buttonState["Current"].keys():
widget.setEnabled(buttonState["Current"][widget.objectName()]) widget.setEnabled(buttonState["Current"][widget.objectName()])
if isinstance(widget, QRadioButton):
if widget.objectName() in buttonState["Current"].keys():
widget.setEnabled(buttonState["Current"][widget.objectName()])
@staticmethod @staticmethod
def __resetAllButton__(mainWindow, buttonState): def __resetAllButton__(mainWindow, buttonState):
# 启用按钮 # 启用按钮
@ -128,6 +136,10 @@ class PublicFunc:
if widget.objectName() in buttonState["Default"].keys(): if widget.objectName() in buttonState["Default"].keys():
widget.setEnabled(buttonState["Default"][widget.objectName()]) widget.setEnabled(buttonState["Default"][widget.objectName()])
if isinstance(widget, QRadioButton):
if widget.objectName() in buttonState["Default"].keys():
widget.setEnabled(buttonState["Default"][widget.objectName()])
@staticmethod @staticmethod
def add_progressbar(mainWindow): def add_progressbar(mainWindow):
mainWindow.progressbar = QProgressBar() mainWindow.progressbar = QProgressBar()

View File

@ -3,7 +3,7 @@
################################################################################ ################################################################################
## Form generated from reading UI file 'MainWindow_approximately_align.ui' ## Form generated from reading UI file 'MainWindow_approximately_align.ui'
## ##
## Created by: Qt User Interface Compiler version 6.8.2 ## Created by: Qt User Interface Compiler version 6.7.0
## ##
## WARNING! All changes made in this file will be lost when recompiling UI file! ## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################ ################################################################################
@ -177,7 +177,9 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_orgBcgPreA = QSpinBox(self.groupBox_get_position) self.spinBox_orgBcgPreA = QSpinBox(self.groupBox_get_position)
self.spinBox_orgBcgPreA.setObjectName(u"spinBox_orgBcgPreA") self.spinBox_orgBcgPreA.setObjectName(u"spinBox_orgBcgPreA")
self.spinBox_orgBcgPreA.setMinimumSize(QSize(93, 0))
self.spinBox_orgBcgPreA.setFont(font1) self.spinBox_orgBcgPreA.setFont(font1)
self.spinBox_orgBcgPreA.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_orgBcgPreA.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_orgBcgPreA.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_orgBcgPreA.setMaximum(999999) self.spinBox_orgBcgPreA.setMaximum(999999)
@ -191,7 +193,9 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_PSGPreA = QSpinBox(self.groupBox_get_position) self.spinBox_PSGPreA = QSpinBox(self.groupBox_get_position)
self.spinBox_PSGPreA.setObjectName(u"spinBox_PSGPreA") self.spinBox_PSGPreA.setObjectName(u"spinBox_PSGPreA")
self.spinBox_PSGPreA.setMinimumSize(QSize(93, 0))
self.spinBox_PSGPreA.setFont(font1) self.spinBox_PSGPreA.setFont(font1)
self.spinBox_PSGPreA.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_PSGPreA.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_PSGPreA.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_PSGPreA.setMaximum(999999) self.spinBox_PSGPreA.setMaximum(999999)
@ -215,6 +219,7 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_orgBcgPreCut = QSpinBox(self.groupBox_get_position) self.spinBox_orgBcgPreCut = QSpinBox(self.groupBox_get_position)
self.spinBox_orgBcgPreCut.setObjectName(u"spinBox_orgBcgPreCut") self.spinBox_orgBcgPreCut.setObjectName(u"spinBox_orgBcgPreCut")
self.spinBox_orgBcgPreCut.setFont(font1) self.spinBox_orgBcgPreCut.setFont(font1)
self.spinBox_orgBcgPreCut.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_orgBcgPreCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_orgBcgPreCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_orgBcgPreCut.setMaximum(999999) self.spinBox_orgBcgPreCut.setMaximum(999999)
@ -229,6 +234,7 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_PSGPreCut = QSpinBox(self.groupBox_get_position) self.spinBox_PSGPreCut = QSpinBox(self.groupBox_get_position)
self.spinBox_PSGPreCut.setObjectName(u"spinBox_PSGPreCut") self.spinBox_PSGPreCut.setObjectName(u"spinBox_PSGPreCut")
self.spinBox_PSGPreCut.setFont(font1) self.spinBox_PSGPreCut.setFont(font1)
self.spinBox_PSGPreCut.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_PSGPreCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_PSGPreCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_PSGPreCut.setMaximum(999999) self.spinBox_PSGPreCut.setMaximum(999999)
@ -251,7 +257,9 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_orgBcgPostCut = QSpinBox(self.groupBox_get_position) self.spinBox_orgBcgPostCut = QSpinBox(self.groupBox_get_position)
self.spinBox_orgBcgPostCut.setObjectName(u"spinBox_orgBcgPostCut") self.spinBox_orgBcgPostCut.setObjectName(u"spinBox_orgBcgPostCut")
self.spinBox_orgBcgPostCut.setMinimumSize(QSize(93, 0))
self.spinBox_orgBcgPostCut.setFont(font1) self.spinBox_orgBcgPostCut.setFont(font1)
self.spinBox_orgBcgPostCut.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_orgBcgPostCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_orgBcgPostCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_orgBcgPostCut.setMaximum(999999) self.spinBox_orgBcgPostCut.setMaximum(999999)
@ -265,7 +273,9 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_PSGPostCut = QSpinBox(self.groupBox_get_position) self.spinBox_PSGPostCut = QSpinBox(self.groupBox_get_position)
self.spinBox_PSGPostCut.setObjectName(u"spinBox_PSGPostCut") self.spinBox_PSGPostCut.setObjectName(u"spinBox_PSGPostCut")
self.spinBox_PSGPostCut.setMinimumSize(QSize(93, 0))
self.spinBox_PSGPostCut.setFont(font1) self.spinBox_PSGPostCut.setFont(font1)
self.spinBox_PSGPostCut.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_PSGPostCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_PSGPostCut.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_PSGPostCut.setMaximum(999999) self.spinBox_PSGPostCut.setMaximum(999999)
@ -278,36 +288,28 @@ class Ui_MainWindow_approximately_align(object):
self.verticalLayout_8.addLayout(self.horizontalLayout_9) self.verticalLayout_8.addLayout(self.horizontalLayout_9)
self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding) self.verticalSpacer_2 = QSpacerItem(20, 10, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding)
self.verticalLayout_8.addItem(self.verticalSpacer_2) self.verticalLayout_8.addItem(self.verticalSpacer_2)
self.horizontalLayout_7 = QHBoxLayout() self.horizontalLayout_7 = QHBoxLayout()
self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") self.horizontalLayout_7.setObjectName(u"horizontalLayout_7")
self.horizontalSpacer_5 = QSpacerItem(30, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_7.addItem(self.horizontalSpacer_5)
self.pushButton_CutOff = QPushButton(self.groupBox_get_position) self.pushButton_CutOff = QPushButton(self.groupBox_get_position)
self.pushButton_CutOff.setObjectName(u"pushButton_CutOff") self.pushButton_CutOff.setObjectName(u"pushButton_CutOff")
self.pushButton_CutOff.setFont(font1) self.pushButton_CutOff.setFont(font1)
self.horizontalLayout_7.addWidget(self.pushButton_CutOff) self.horizontalLayout_7.addWidget(self.pushButton_CutOff)
self.horizontalSpacer_5 = QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum)
self.horizontalLayout_7.addItem(self.horizontalSpacer_5)
self.pushButton_GetPos = QPushButton(self.groupBox_get_position)
self.pushButton_GetPos.setObjectName(u"pushButton_GetPos")
self.pushButton_GetPos.setFont(font1)
self.horizontalLayout_7.addWidget(self.pushButton_GetPos)
self.verticalLayout_8.addLayout(self.horizontalLayout_7) self.verticalLayout_8.addLayout(self.horizontalLayout_7)
self.verticalLayout_8.setStretch(0, 2) self.verticalLayout_8.setStretch(0, 2)
self.verticalLayout_8.setStretch(1, 2) self.verticalLayout_8.setStretch(1, 2)
self.verticalLayout_8.setStretch(2, 2) self.verticalLayout_8.setStretch(2, 2)
self.verticalLayout_8.setStretch(3, 1)
self.verticalLayout_8.setStretch(4, 2)
self.verticalLayout.addWidget(self.groupBox_get_position) self.verticalLayout.addWidget(self.groupBox_get_position)
@ -315,44 +317,60 @@ class Ui_MainWindow_approximately_align(object):
self.groupBox_align_position.setObjectName(u"groupBox_align_position") self.groupBox_align_position.setObjectName(u"groupBox_align_position")
self.gridLayout_2 = QGridLayout(self.groupBox_align_position) self.gridLayout_2 = QGridLayout(self.groupBox_align_position)
self.gridLayout_2.setObjectName(u"gridLayout_2") self.gridLayout_2.setObjectName(u"gridLayout_2")
self.radioButton_NTHO = QRadioButton(self.groupBox_align_position)
self.radioButton_NTHO.setObjectName(u"radioButton_NTHO")
self.radioButton_NTHO.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_NTHO, 0, 1, 1, 1)
self.radioButton_PTHO = QRadioButton(self.groupBox_align_position)
self.radioButton_PTHO.setObjectName(u"radioButton_PTHO")
self.radioButton_PTHO.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_PTHO, 0, 0, 1, 1)
self.radioButton_PABD = QRadioButton(self.groupBox_align_position) self.radioButton_PABD = QRadioButton(self.groupBox_align_position)
self.radioButton_PABD.setObjectName(u"radioButton_PABD") self.radioButton_PABD.setObjectName(u"radioButton_PABD")
self.radioButton_PABD.setFont(font1) self.radioButton_PABD.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_PABD, 0, 2, 1, 1) self.gridLayout_2.addWidget(self.radioButton_PABD, 1, 2, 1, 1)
self.radioButton_NABD = QRadioButton(self.groupBox_align_position) self.radioButton_NTHO = QRadioButton(self.groupBox_align_position)
self.radioButton_NABD.setObjectName(u"radioButton_NABD") self.radioButton_NTHO.setObjectName(u"radioButton_NTHO")
self.radioButton_NABD.setFont(font1) self.radioButton_NTHO.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_NABD, 1, 0, 1, 1) self.gridLayout_2.addWidget(self.radioButton_NTHO, 1, 1, 1, 1)
self.radioButton_custom = QRadioButton(self.groupBox_align_position) self.radioButton_custom = QRadioButton(self.groupBox_align_position)
self.radioButton_custom.setObjectName(u"radioButton_custom") self.radioButton_custom.setObjectName(u"radioButton_custom")
self.radioButton_custom.setFont(font1) self.radioButton_custom.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_custom, 1, 1, 1, 1) self.gridLayout_2.addWidget(self.radioButton_custom, 2, 1, 1, 1)
self.spinBox_custom = QSpinBox(self.groupBox_align_position) self.spinBox_custom = QSpinBox(self.groupBox_align_position)
self.spinBox_custom.setObjectName(u"spinBox_custom") self.spinBox_custom.setObjectName(u"spinBox_custom")
self.spinBox_custom.setMinimumSize(QSize(90, 0))
self.spinBox_custom.setFont(font1) self.spinBox_custom.setFont(font1)
self.spinBox_custom.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_custom.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_custom.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_custom.setMinimum(-1000000) self.spinBox_custom.setMinimum(-1000000)
self.spinBox_custom.setMaximum(1000000) self.spinBox_custom.setMaximum(1000000)
self.gridLayout_2.addWidget(self.spinBox_custom, 1, 2, 1, 1) self.gridLayout_2.addWidget(self.spinBox_custom, 2, 2, 1, 1)
self.radioButton_PTHO = QRadioButton(self.groupBox_align_position)
self.radioButton_PTHO.setObjectName(u"radioButton_PTHO")
self.radioButton_PTHO.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_PTHO, 1, 0, 1, 1)
self.radioButton_NABD = QRadioButton(self.groupBox_align_position)
self.radioButton_NABD.setObjectName(u"radioButton_NABD")
self.radioButton_NABD.setFont(font1)
self.gridLayout_2.addWidget(self.radioButton_NABD, 2, 0, 1, 1)
self.pushButton_GetPos = QPushButton(self.groupBox_align_position)
self.pushButton_GetPos.setObjectName(u"pushButton_GetPos")
self.pushButton_GetPos.setMinimumSize(QSize(0, 30))
self.pushButton_GetPos.setFont(font1)
self.gridLayout_2.addWidget(self.pushButton_GetPos, 0, 0, 1, 1)
self.pushButton_ChangeView = QPushButton(self.groupBox_align_position)
self.pushButton_ChangeView.setObjectName(u"pushButton_ChangeView")
self.pushButton_ChangeView.setMinimumSize(QSize(0, 30))
self.pushButton_ChangeView.setFont(font1)
self.gridLayout_2.addWidget(self.pushButton_ChangeView, 0, 2, 1, 1)
self.verticalLayout.addWidget(self.groupBox_align_position) self.verticalLayout.addWidget(self.groupBox_align_position)
@ -371,7 +389,9 @@ class Ui_MainWindow_approximately_align(object):
self.spinBox_SelectEpoch = QSpinBox(self.groupBox_view_partially) self.spinBox_SelectEpoch = QSpinBox(self.groupBox_view_partially)
self.spinBox_SelectEpoch.setObjectName(u"spinBox_SelectEpoch") self.spinBox_SelectEpoch.setObjectName(u"spinBox_SelectEpoch")
self.spinBox_SelectEpoch.setMinimumSize(QSize(90, 0))
self.spinBox_SelectEpoch.setFont(font1) self.spinBox_SelectEpoch.setFont(font1)
self.spinBox_SelectEpoch.setAlignment(Qt.AlignmentFlag.AlignRight|Qt.AlignmentFlag.AlignTrailing|Qt.AlignmentFlag.AlignVCenter)
self.spinBox_SelectEpoch.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons) self.spinBox_SelectEpoch.setButtonSymbols(QAbstractSpinBox.ButtonSymbols.NoButtons)
self.spinBox_SelectEpoch.setMaximum(2000) self.spinBox_SelectEpoch.setMaximum(2000)
@ -463,7 +483,6 @@ class Ui_MainWindow_approximately_align(object):
self.verticalLayout.setStretch(0, 1) self.verticalLayout.setStretch(0, 1)
self.verticalLayout.setStretch(1, 1) self.verticalLayout.setStretch(1, 1)
self.verticalLayout.setStretch(2, 3) self.verticalLayout.setStretch(2, 3)
self.verticalLayout.setStretch(3, 5)
self.verticalLayout.setStretch(4, 2) self.verticalLayout.setStretch(4, 2)
self.verticalLayout.setStretch(5, 4) self.verticalLayout.setStretch(5, 4)
self.verticalLayout.setStretch(6, 1) self.verticalLayout.setStretch(6, 1)
@ -502,9 +521,9 @@ class Ui_MainWindow_approximately_align(object):
self.groupBox_left.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u6570\u636e\u7c97\u540c\u6b65", None)) self.groupBox_left.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u6570\u636e\u7c97\u540c\u6b65", None))
self.pushButton_input_setting.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5bfc\u5165\u8bbe\u7f6e", None)) self.pushButton_input_setting.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5bfc\u5165\u8bbe\u7f6e", None))
self.pushButton_input.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5f00\u59cb\u5bfc\u5165", None)) self.pushButton_input.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5f00\u59cb\u5bfc\u5165", None))
self.label_3.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg\u65f6\u957f(min)\uff1a", None)) self.label_3.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg\u65f6\u957f(\u79d2)\uff1a", None))
self.label_orgBcg_length.setText(QCoreApplication.translate("MainWindow_approximately_align", u"0", None)) self.label_orgBcg_length.setText(QCoreApplication.translate("MainWindow_approximately_align", u"0", None))
self.label_6.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG\u65f6\u957f(min)\uff1a", None)) self.label_6.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG\u65f6\u957f(\u79d2)\uff1a", None))
self.label_PSG_length.setText(QCoreApplication.translate("MainWindow_approximately_align", u"0", None)) self.label_PSG_length.setText(QCoreApplication.translate("MainWindow_approximately_align", u"0", None))
self.groupBox_standardize.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u6807\u51c6\u5316", None)) self.groupBox_standardize.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u6807\u51c6\u5316", None))
self.checkBox_orgBcgDelBase.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg\u53bb\u57fa\u7ebf", None)) self.checkBox_orgBcgDelBase.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg\u53bb\u57fa\u7ebf", None))
@ -516,18 +535,19 @@ class Ui_MainWindow_approximately_align(object):
self.groupBox_get_position.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u622a\u65ad", None)) self.groupBox_get_position.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u622a\u65ad", None))
self.label.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg_\u8865\u96f6\uff1a", None)) self.label.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg_\u8865\u96f6\uff1a", None))
self.label_2.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG_\u8865\u96f6\uff1a", None)) self.label_2.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG_\u8865\u96f6\uff1a", None))
self.label_4.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg_Pre\uff1a", None)) self.label_4.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg_Pre \uff1a", None))
self.label_5.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG_Pre\uff1a", None)) self.label_5.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG_Pre \uff1a", None))
self.label_7.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg_Post\uff1a", None)) self.label_7.setText(QCoreApplication.translate("MainWindow_approximately_align", u"orgBcg_Post\uff1a", None))
self.label_8.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG_Post\uff1a", None)) self.label_8.setText(QCoreApplication.translate("MainWindow_approximately_align", u"PSG_Post\uff1a", None))
self.pushButton_CutOff.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5e94\u7528", None)) self.pushButton_CutOff.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5e94\u7528", None))
self.pushButton_GetPos.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u8ba1\u7b97\u5bf9\u9f50", None))
self.groupBox_align_position.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u5bf9\u9f50\u8d77\u59cb\u4f4d\u7f6e", None)) self.groupBox_align_position.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u5bf9\u9f50\u8d77\u59cb\u4f4d\u7f6e", None))
self.radioButton_NTHO.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90092", None))
self.radioButton_PTHO.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90091", None))
self.radioButton_PABD.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90093", None)) self.radioButton_PABD.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90093", None))
self.radioButton_NABD.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90094", None)) self.radioButton_NTHO.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90092", None))
self.radioButton_custom.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u81ea\u5b9a\u4e49", None)) self.radioButton_custom.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u81ea\u5b9a\u4e49", None))
self.radioButton_PTHO.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90091", None))
self.radioButton_NABD.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5907\u90094", None))
self.pushButton_GetPos.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u8ba1\u7b97\u5bf9\u9f50", None))
self.pushButton_ChangeView.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u5207\u6362\u89c6\u56fe", None))
self.groupBox_view_partially.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u5c40\u90e8\u89c2\u6d4b", None)) self.groupBox_view_partially.setTitle(QCoreApplication.translate("MainWindow_approximately_align", u"\u5c40\u90e8\u89c2\u6d4b", None))
self.label_9.setText(QCoreApplication.translate("MainWindow_approximately_align", u"Epoch\uff1a", None)) self.label_9.setText(QCoreApplication.translate("MainWindow_approximately_align", u"Epoch\uff1a", None))
self.pushButton_JUMP.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u8df3\u8f6c", None)) self.pushButton_JUMP.setText(QCoreApplication.translate("MainWindow_approximately_align", u"\u8df3\u8f6c", None))

View File

@ -25,7 +25,7 @@
<property name="title"> <property name="title">
<string>数据粗同步</string> <string>数据粗同步</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,1,3,5,2,4,1,1,4"> <layout class="QVBoxLayout" name="verticalLayout" stretch="1,1,3,0,2,4,1,1,4">
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_4"> <layout class="QHBoxLayout" name="horizontalLayout_4">
<item> <item>
@ -76,7 +76,7 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>orgBcg时长(min)</string> <string>orgBcg时长()</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -113,7 +113,7 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>PSG时长(min)</string> <string>PSG时长()</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -263,7 +263,7 @@
<property name="title"> <property name="title">
<string>截断</string> <string>截断</string>
</property> </property>
<layout class="QVBoxLayout" name="verticalLayout_8" stretch="2,2,2,1,2"> <layout class="QVBoxLayout" name="verticalLayout_8" stretch="2,2,2,0,0">
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,2,1,2"> <layout class="QHBoxLayout" name="horizontalLayout_6" stretch="1,2,1,2">
<item> <item>
@ -280,11 +280,20 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_orgBcgPreA"> <widget class="QSpinBox" name="spinBox_orgBcgPreA">
<property name="minimumSize">
<size>
<width>93</width>
<height>0</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -307,11 +316,20 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_PSGPreA"> <widget class="QSpinBox" name="spinBox_PSGPreA">
<property name="minimumSize">
<size>
<width>93</width>
<height>0</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -332,7 +350,7 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>orgBcg_Pre</string> <string>orgBcg_Pre </string>
</property> </property>
</widget> </widget>
</item> </item>
@ -343,6 +361,9 @@
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -359,7 +380,7 @@
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>PSG_Pre</string> <string>PSG_Pre </string>
</property> </property>
</widget> </widget>
</item> </item>
@ -370,6 +391,9 @@
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -396,11 +420,20 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_orgBcgPostCut"> <widget class="QSpinBox" name="spinBox_orgBcgPostCut">
<property name="minimumSize">
<size>
<width>93</width>
<height>0</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -423,11 +456,20 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_PSGPostCut"> <widget class="QSpinBox" name="spinBox_PSGPostCut">
<property name="minimumSize">
<size>
<width>93</width>
<height>0</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -446,13 +488,26 @@
<property name="sizeHint" stdset="0"> <property name="sizeHint" stdset="0">
<size> <size>
<width>20</width> <width>20</width>
<height>40</height> <height>10</height>
</size> </size>
</property> </property>
</spacer> </spacer>
</item> </item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_7" stretch="0,0,0"> <layout class="QHBoxLayout" name="horizontalLayout_7" stretch="0,0">
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>30</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item> <item>
<widget class="QPushButton" name="pushButton_CutOff"> <widget class="QPushButton" name="pushButton_CutOff">
<property name="font"> <property name="font">
@ -465,31 +520,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<spacer name="horizontalSpacer_5">
<property name="orientation">
<enum>Qt::Orientation::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QPushButton" name="pushButton_GetPos">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>计算对齐</string>
</property>
</widget>
</item>
</layout> </layout>
</item> </item>
</layout> </layout>
@ -501,31 +531,7 @@
<string>对齐起始位置</string> <string>对齐起始位置</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="1"> <item row="1" column="2">
<widget class="QRadioButton" name="radioButton_NTHO">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>备选2</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QRadioButton" name="radioButton_PTHO">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>备选1</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QRadioButton" name="radioButton_PABD"> <widget class="QRadioButton" name="radioButton_PABD">
<property name="font"> <property name="font">
<font> <font>
@ -537,19 +543,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0"> <item row="1" column="1">
<widget class="QRadioButton" name="radioButton_NABD"> <widget class="QRadioButton" name="radioButton_NTHO">
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="text"> <property name="text">
<string>备选4</string> <string>备选2</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="1"> <item row="2" column="1">
<widget class="QRadioButton" name="radioButton_custom"> <widget class="QRadioButton" name="radioButton_custom">
<property name="font"> <property name="font">
<font> <font>
@ -561,13 +567,22 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2"> <item row="2" column="2">
<widget class="QSpinBox" name="spinBox_custom"> <widget class="QSpinBox" name="spinBox_custom">
<property name="minimumSize">
<size>
<width>90</width>
<height>0</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>
@ -579,6 +594,66 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="0">
<widget class="QRadioButton" name="radioButton_PTHO">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>备选1</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QRadioButton" name="radioButton_NABD">
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>备选4</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QPushButton" name="pushButton_GetPos">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>计算对齐</string>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QPushButton" name="pushButton_ChangeView">
<property name="minimumSize">
<size>
<width>0</width>
<height>30</height>
</size>
</property>
<property name="font">
<font>
<pointsize>12</pointsize>
</font>
</property>
<property name="text">
<string>切换视图</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -604,11 +679,20 @@
</item> </item>
<item> <item>
<widget class="QSpinBox" name="spinBox_SelectEpoch"> <widget class="QSpinBox" name="spinBox_SelectEpoch">
<property name="minimumSize">
<size>
<width>90</width>
<height>0</height>
</size>
</property>
<property name="font"> <property name="font">
<font> <font>
<pointsize>12</pointsize> <pointsize>12</pointsize>
</font> </font>
</property> </property>
<property name="alignment">
<set>Qt::AlignmentFlag::AlignRight|Qt::AlignmentFlag::AlignTrailing|Qt::AlignmentFlag::AlignVCenter</set>
</property>
<property name="buttonSymbols"> <property name="buttonSymbols">
<enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum> <enum>QAbstractSpinBox::ButtonSymbols::NoButtons</enum>
</property> </property>

View File

@ -3,7 +3,7 @@
################################################################################ ################################################################################
## Form generated from reading UI file 'approximately_align_input_setting.ui' ## Form generated from reading UI file 'approximately_align_input_setting.ui'
## ##
## Created by: Qt User Interface Compiler version 6.8.2 ## Created by: Qt User Interface Compiler version 6.7.0
## ##
## WARNING! All changes made in this file will be lost when recompiling UI file! ## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################ ################################################################################
@ -59,8 +59,9 @@ class Ui_MainWindow_approximately_align_input_setting(object):
self.spinBox_input_orgBcg_freq = QSpinBox(self.groupBox_2) self.spinBox_input_orgBcg_freq = QSpinBox(self.groupBox_2)
self.spinBox_input_orgBcg_freq.setObjectName(u"spinBox_input_orgBcg_freq") self.spinBox_input_orgBcg_freq.setObjectName(u"spinBox_input_orgBcg_freq")
self.spinBox_input_orgBcg_freq.setFont(font) self.spinBox_input_orgBcg_freq.setFont(font)
self.spinBox_input_orgBcg_freq.setMinimum(1) self.spinBox_input_orgBcg_freq.setMinimum(0)
self.spinBox_input_orgBcg_freq.setMaximum(1000000) self.spinBox_input_orgBcg_freq.setMaximum(1000000)
self.spinBox_input_orgBcg_freq.setValue(0)
self.horizontalLayout.addWidget(self.spinBox_input_orgBcg_freq) self.horizontalLayout.addWidget(self.spinBox_input_orgBcg_freq)
@ -92,8 +93,9 @@ class Ui_MainWindow_approximately_align_input_setting(object):
self.spinBox_input_Tho_freq = QSpinBox(self.groupBox_3) self.spinBox_input_Tho_freq = QSpinBox(self.groupBox_3)
self.spinBox_input_Tho_freq.setObjectName(u"spinBox_input_Tho_freq") self.spinBox_input_Tho_freq.setObjectName(u"spinBox_input_Tho_freq")
self.spinBox_input_Tho_freq.setFont(font) self.spinBox_input_Tho_freq.setFont(font)
self.spinBox_input_Tho_freq.setMinimum(1) self.spinBox_input_Tho_freq.setMinimum(0)
self.spinBox_input_Tho_freq.setMaximum(1000000) self.spinBox_input_Tho_freq.setMaximum(1000000)
self.spinBox_input_Tho_freq.setValue(0)
self.horizontalLayout_2.addWidget(self.spinBox_input_Tho_freq) self.horizontalLayout_2.addWidget(self.spinBox_input_Tho_freq)
@ -125,8 +127,9 @@ class Ui_MainWindow_approximately_align_input_setting(object):
self.spinBox_input_Abd_freq = QSpinBox(self.groupBox_4) self.spinBox_input_Abd_freq = QSpinBox(self.groupBox_4)
self.spinBox_input_Abd_freq.setObjectName(u"spinBox_input_Abd_freq") self.spinBox_input_Abd_freq.setObjectName(u"spinBox_input_Abd_freq")
self.spinBox_input_Abd_freq.setFont(font) self.spinBox_input_Abd_freq.setFont(font)
self.spinBox_input_Abd_freq.setMinimum(1) self.spinBox_input_Abd_freq.setMinimum(0)
self.spinBox_input_Abd_freq.setMaximum(1000000) self.spinBox_input_Abd_freq.setMaximum(1000000)
self.spinBox_input_Abd_freq.setValue(0)
self.horizontalLayout_3.addWidget(self.spinBox_input_Abd_freq) self.horizontalLayout_3.addWidget(self.spinBox_input_Abd_freq)

View File

@ -66,11 +66,14 @@
</font> </font>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>1000000</number> <number>1000000</number>
</property> </property>
<property name="value">
<number>0</number>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -116,11 +119,14 @@
</font> </font>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>1000000</number> <number>1000000</number>
</property> </property>
<property name="value">
<number>0</number>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>
@ -166,11 +172,14 @@
</font> </font>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>1000000</number> <number>1000000</number>
</property> </property>
<property name="value">
<number>0</number>
</property>
</widget> </widget>
</item> </item>
</layout> </layout>