From 8a1f88dd3ee5f131e24c8b9d35f56e466cafbe8b Mon Sep 17 00:00:00 2001 From: XIAN-SHENG-576692 Date: Fri, 15 Aug 2025 23:50:10 +0800 Subject: [PATCH] feat: add a checkbox to select whether to use the upper baseline. --- main_baseline_subtraction.py | 34 ++++++++++++++++++++++++++++++---- 1 file changed, 30 insertions(+), 4 deletions(-) diff --git a/main_baseline_subtraction.py b/main_baseline_subtraction.py index e8e52a9..0becba6 100644 --- a/main_baseline_subtraction.py +++ b/main_baseline_subtraction.py @@ -64,7 +64,15 @@ def __init__(self, master): Button(lf_x, text = 'update x range', command = self.on_updateXrange).pack() self.var1 = IntVar() Checkbutton(leftFrame, text = 'export as normalized data', variable = self.var1).pack() - + # 新增:是否使用上方基線 + self.var_upper = IntVar(value=0) + Checkbutton( + leftFrame, + text='use upper baseline (上方扣除)', + variable=self.var_upper, + command=lambda: self.baseline(self.baseline_choose) + ).pack() + self.menubar() @@ -154,12 +162,21 @@ def baseline(self, method): self.x, self.y = x0[self.index_range], y0[self.index_range] try: + use_upper = (self.var_upper.get() == 1) if self.baseline_choose == 'auto': if self.alsPara is not None: self.alsPara.pack_forget() - baseline_values = peakutils.baseline(self.y) + # auto 模式的上方基線:對稱技巧 + baseline_values = (-peakutils.baseline(-self.y)) if use_upper else peakutils.baseline(self.y) elif self.baseline_choose == 'ALS': - baseline_values = self.baseline_als2(self.y,lam = float(self.lam_l.cget('text')), p = float(self.p_l.cget('text'))) if None not in (self.lam_l, self.p_l) else self.baseline_als2(self.y) + if None not in (self.lam_l, self.p_l): + lam_v = float(self.lam_l.cget('text')) + p_v = float(self.p_l.cget('text')) + # 上方基線:將 p 換成 1-p + p_eff = (1.0 - p_v) if use_upper else p_v + baseline_values = self.baseline_als2(self.y, lam=lam_v, p=p_eff) + else: + baseline_values = self.baseline_als2(self.y) self.line_baseline = self.ax.plot(self.x, baseline_values, label = 'baseline', color = 'red') self.line_corrected = self.ax.plot(self.x, self.y - baseline_values, label = 'baseline corrected', color = 'blue') @@ -208,7 +225,16 @@ def batch(self): j = i+1 y0 = self.expData.iloc[:, j] self.y= y0[self.index_range] - y_baseline = peakutils.baseline(self.y) if self.baseline_choose == 'auto' else self.baseline_als2(self.y,lam = float(self.lam_l.cget('text')), p = float(self.p_l.cget('text'))) + + use_upper = (self.var_upper.get() == 1) + if self.baseline_choose == 'auto': + y_baseline = (-peakutils.baseline(-self.y)) if use_upper else peakutils.baseline(self.y) + else: + lam_v = float(self.lam_l.cget('text')) + p_v = float(self.p_l.cget('text')) + p_eff = (1.0 - p_v) if use_upper else p_v + y_baseline = self.baseline_als2(self.y, lam=lam_v, p=p_eff) + y_corr = self.y - y_baseline if self.var1.get() == 0 else self.normalization(self.y - y_baseline) data_corr.insert(j, self.expData.columns[j], y_corr) return data_corr