Python:如何对一组峰值进行线性基线校正

0 投票
1 回答
1698 浏览
提问于 2025-04-18 07:02

我需要帮助写一段代码,来为一组峰值(热量与时间的等温滴定热量计数据)设定基线。

这些数据是由ITC仪器生成的,格式如下(其中'@#'表示一个峰的开始,下面的数据是时间[秒]、热量[微卡/秒]和温度[摄氏度,但通常保持不变,所以不需要]):

@0
2.00,13.585249,25.00761
4.00,13.585438,25.00699
6.00,13.585557,25.00688
8.00,13.585472,25.00804
@1,6.0000
302.00,13.607173,25.00958
304.00,13.607608,25.00931
306.00,13.607758,25.00965

每个峰值都有超过100个数据点(我上面简化了),我想用一个线性方程把每个峰的热量值归零,这样我就可以对每个峰进行积分,生成一个结合图。我非常欢迎任何帮助或建议,谢谢!

1 个回答

0

我成功做到了。感谢那些回复我的人!我把这个留在这里,供将来需要用线性拟合来基准化峰值的人参考(假设第一个点和最后40个点在像ITC这样的情况下可以得到一个不错的拟合线):

#defining function to calculate baseline of peaks in x vs y graph
def calc_baseline(x,y):   
    zeroed_y=[]   
    for n in range(len(y)): 
        line_y=array(y[n][0:1]+y[n][-41:-1])
        line_x=array(x[n][0:1]+x[n][-41:-1])
        p=scipy.polyfit(baseline_x,baseline_y,1)
        baseline_y=array(x[n])*p[0]+p[1]
        zeroed_y.append(baseline_y)
    return zeroed_y

#defining function to zero baselines of peaks in x vs y graph, assuming number_injections is a known integer
def zero_baseline(number_injections,y,zeroed_y):
    zeroed_y_lists=[]
    for i in range(0,number_injections+1):
        zeroed_y=y[i]-zeroed_y[i]
        zeroed_y_lists.append(zeroed_y)
    return zeroed_y_lists

撰写回答