TDE工作(光变曲线拟合)

对所得到的TDE光变数据,想要得到其光变的特征,包括峰值星等,爆发时间,上升和下降持续时间等信息,因此对其光变的拟合是极为重要的。这里采用简单的自定义函数拟合,上升阶段用高斯函数,下降用power-law函数。值得注意,做拟合时,采用取对数方法,从而让拟合函数更为简单,目的在于提高拟合精度。

import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize as op
from scipy.optimize import minimize
import os
from scipy.optimize import curve_fit

plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文
plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号

name='AT2018hco'
n=52
quiet=19.5637726

data = np.genfromtxt(name+ ".csv", delimiter=",")
mjd=data[:,0]
mag=-np.log(data[:,1])
mag_true=-(data[:,1]) #方便画图显示
magerr=data[:,2]

x1 = mjd[n:n+400] #定义拟合区间
y1 = mag[n:n+400]
x2=mjd[n-9:n+2]
y2=mag[n-9:n+2]

#phase=data[:,3]
###### PL
def f_1(x, A, B, C):
    return  A - C*np.log(x-B)


A, B, C = op.curve_fit(f_1, x1, y1, maxfev = 1000000)[0]
print("PL:"'  %-10.4f' %np.exp(-A))
print("PL:"'  %-10.4f' %B)
print("PL:"'  %-10.4f' %np.exp(C))

###### Gauss

def f_2(x, a, u, sig):
    return   a-((x - u) ** 2 / (2 * sig ** 2))
popt, pcov = curve_fit(f_2, x2, y2, maxfev=8000000)
a = popt[0]
u = popt[1]
sig = popt[2]
print("Gauss:"'  %-10.4f' %np.exp(-a))
print("Gauss:"'  %-10.4f' %u)
#print(sig)
#########一半处画线

delta1=quiet-np.exp(-A) 
delta2=quiet+mag_true[n]
delta3=quiet-np.exp(-a)
yline1=(-quiet+0.5*delta1)
yline2=(-quiet+0.5*delta2)
yline3=(-quiet+0.5*delta3)
good=yline1-yline2
#print(good)
######得到一半处time
x_1 = np.arange(np.min(x1), np.max(x1), 0.01)
x_2 = np.arange(np.min(x2), np.max(x2), 0.01)
yfit1 = A - C*np.log(x_1-B)
yfit2 = f_2(x_2, *popt)
yli=-np.log(-yline1)
yli2=-np.log(-yline2)
tdecay=np.exp((A-yli)/C)+B
t_decay=tdecay-B
trise=-((a-yli2)*2*sig**2)**0.5 +u
t_rise=u-trise
print("1/2decay:"'  %-10.4f' %t_decay)  
print("1/2rise:"'  %-10.4f' %t_rise)
########作图
plt.xlabel('mjd')
plt.ylabel('-mag')
plt.axhline(yline1,color="grey",linewidth=1,linestyle='--',label='1/2 下降(拟合)')
plt.axhline(yline2,color="grey",linewidth=1,linestyle='-.',label='1/2 (数据)')
plt.axhline(yline3,color="grey",linewidth=1,linestyle=':',label='1/2 上升(拟合)')
plt.title(name)
plt.errorbar(mjd[n:-1], mag_true[n:-1], yerr=0, fmt=".b", capsize=0)
mag_true=-data[:,1]
plt.errorbar(mjd[0:n], mag_true[0:n], yerr=0, fmt=".b", capsize=0)
plt.plot(x_1, -np.exp(-yfit1),color='red',label='PL曲线')
plt.plot(x_2, -np.exp(-yfit2),color='y',label='高斯曲线')
plt.legend() #指定legend的位置右下角
plt.show()

结果显示:

这个方法能够得到较好的近似参数,但是对拟合区间和拟合参数调整有着一定挑战性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值