Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 30 additions & 4 deletions main_baseline_subtraction.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()


Expand Down Expand Up @@ -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')
Expand Down Expand Up @@ -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
Expand Down