记录“TDE”工作常用代码(光变分析)

  TDE光学光变工作,主要从光变数据的下载,处理作图,统计分析来展开。之后是其TDE-type的统计分析,以及光谱得到。下面是本人工作的步骤,并附上处理代码,以防止遗失和缺漏。

1.TDE光学数据的处理(以ZTF数据为例子,在irsa-ztf网址中,选取一个给定坐标一个角秒内的观测波段,以zr,zg,zi,将不同观测id的观测结果折叠在一起,得到对应波段的fits文件),实际上是对fits文件的处理。

######ztf 作图
import numpy as np
import matplotlib.pyplot as plt
from astropy.io import fits
import os
import math

ax = plt.gca()
ax.invert_yaxis() #反转y轴,因为星等跟光度反比
name='AT2021yzv' #TNS名称
num=59511.5 #peak处mjd
num1='59511.5'
path1 = 'R/lc(39).fits' #zr
path2 = 'G/lc(39).fits' #zg
#for file_name in os.listdir(path1):
    #print(file_name)

hdul1 = fits.open(path1) #
data1 = hdul1[1].data
chi1 = data1['chi']
catf1 = data1['catflags']
MAG1 = data1['mag'] 
MJD1 = data1['mjd']
MAGERR1 = data1['magerr']
r = []
mjd1 = []
yerr1 = []
yerr2 = []
yerr4 = []
l1 = len(MAG1)
v = 0

hdul2 = fits.open(path2)
data2 = hdul2[1].data
chi2 = data2['chi']
catf2 =data2['catflags']
MAG2 = data2['mag'] 
MJD2 = data2['mjd']
MAGERR2 = data2['magerr']
g = []
mjd2 = []
magerr1 = []
magerr2 = []
j = 0
l2 = len(MAG2)
for v in range (0, l1): #筛选条件 chi<4
    if chi1[v] < 4:
        if catf1[v]==0:
            r.append(MAG1[v])
            mjd1 = np.append(mjd1, MJD1[v]) 
            yerr1.append(MAGERR1[v])
            magerr1.append(MAGERR1[v])
            v=v+1


for j in range(0,l2):
    if chi2[j] < 4:
        if catf2[j]==0 :
            g.append(MAG2[j])
            mjd2 = np.append(mjd2,MJD2[j]) 
            yerr2.append(MAGERR2[j])
            magerr2.append(MAGERR2[j])
            j=j+1
            
print('done')
plt.xlabel('mjd-'+num1)
plt.ylabel('mag')
plt.errorbar(mjd1,r,yerr1,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='r',elinewidth=1,color='k',ms=2)
plt.errorbar(mjd2,g,yerr2,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='b',elinewidth=1,color='k',ms=2)
#plt.errorbar(mjd3,I,yerr4,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='m',elinewidth=1,color='k',ms=2)
label=['r','g']
plt.legend(label,loc=1)
plt.axvline(num,color="grey",linewidth=1, linestyle='--')
plt.title(name+' light curve')
plt.show()

gnew = []
rnew = []
mjd1new = []
mjd2new = []
rerr = []
gerr = []
yerr3 = []
m=0
z=0
for m in range (0, len(g)):  
    for z in range (0, len(r)-1):
        delta = (mjd1[z] - mjd2[m]) **2
        delta_1 = (mjd1[z-1] - mjd2[m]) **2
        delta1 = (mjd1[z+1] - mjd2[m]) **2
        if delta<0.25:  #筛选0.5天的两个波段数据,作g-r
            if delta_1>delta<delta1:
                mjd1new.append(mjd1[z])
                mjd2new.append(mjd2[m])
                rnew.append(r[z])
                gnew.append(g[m])
                rerr.append(magerr1[z])
                gerr.append(magerr2[m])
                break;
                z=z+1
            
            else:
                continue;
                m=m+1
n=0
g_r =[]
for n in range(0,len(rnew)):
    g__r = gnew[n] - rnew[n]
    g_r.append(g__r)
    yerr3.append(((rerr[n])**2 + (gerr[n])**2)**0.5)

#plt.plot(mjd2new,g_r,'b.')
#plt.plot(mjd2,g,'r.')
plt.errorbar(mjd2new,g_r,yerr3,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='m',elinewidth=1,color='k',ms=1.5)
#plt.xlim(58400,59000)
#plt.ylim(0.3,1)
plt.title(name+'  g-r')
plt.xlabel('mjd')
plt.ylabel('g-r')
plt.axvline(num,color="grey",linewidth=1,linestyle='--')
plt.show()

运行展示:

附: 多波段的光学数据绘图:

import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import leastsq
import os
from astropy.io import fits
import pandas as pd


#from astropy.io import fits
ax = plt.gca()
ax.invert_yaxis() 
path1 = 'R/lc(33).fits'
path2 = 'G/lc(31).fits'

filename='iPTF16axa light-curve'
f2 = np.genfromtxt("V-iPTF-16axa.csv", delimiter=",")
f1 = np.genfromtxt("iPTF-16axa.csv", delimiter="")

####ZTF
hdul1 = fits.open(path1)
data1 = hdul1[1].data
chi1 = data1['chi']
catf1 =data1['catflags']
MAG1 = data1['mag'] 
MJD1 = data1['mjd']
MAGERR1 = data1['magerr']
r = []
mjd1 = []
l1 = len(MAG1)
i = 0
hdul2 = fits.open(path2)
data2 = hdul2[1].data
chi2 = data2['chi']
catf2 =data2['catflags']
MAG2 = data2['mag'] 
MJD2 = data2['mjd']
MAGERR2 = data2['magerr']
g = []
mjd2 = []
magerr1 = []
magerr2 = []
j = 0
l2 = len(MAG2)
for i in range (0, l1):
    if chi1[i] < 4:
        if catf1[i]==0:
            r.append(MAG1[i])
            mjd1 = np.append(mjd1, MJD1[i]) 
            magerr1.append(MAGERR1[i])
            i=i+1

print(i)
for j in range (0, l2):
    if chi2[j] < 4:
        if catf2[j]==0:
            g.append(MAG2[j])
            mjd2 = np.append(mjd2, MJD2[j]) 
            magerr2.append(MAGERR2[j])
            j=j+1
print(j)
####

#print(f1.to_string())##to_string() 用于返回 DataFrame 类型的数据,避免中间部分以 ... 代替。

####ATLAS
#MJD = f1[:,0]
#Band = f1[:,5]
#Ra = f1[:,8]
#Dec = f1[:,9]
#MAG = f1[:,1]
#MAGerr = f1[:,2]
#uJy = f1[:,3]
#duJy = f1[:,4]

#a = 0
#mjd3=[]
#mjd4=[]
#mag3=[]
#yerr3=[]
#mag4=[]
#yerr4=[]
#l = len(MJD)
#for a in range(l):
    #if uJy[a]>=30:
        #if 0<=duJy[a]<=70:
            #if Band[a] ==0:
                #mjd3.append(MJD[a])
                #mag3.append(MAG[a])
                #yerr3.append(MAGerr[a])
            #if Band[a]==1:
                #mjd4.append(MJD[a])
                #mag4.append(MAG[a])
                #yerr4.append(MAGerr[a])
f1 = np.genfromtxt("iPTF-16axa-1day.csv",delimiter=",")  ##与上面相比,加了一天的bin
MJD = f1[:,0]
Band = f1[:,3]
uJy = f1[:,1]
duJy = f1[:,2]
num = f1[:,4]
a = 0

mjd3=[]
mjd4=[]
flux3=[]
yerr3=[]
flux4=[]
yerr4=[]
l = len(MJD)
for a in range(l): #限制条件
    if uJy[a]>=30:
        if 0<=duJy[a]<=70:
            if Band[a] ==0:
                mjd3.append(MJD[a])
                flux3.append(uJy[a])
                yerr3.append(duJy[a])
            if Band[a]==1:
                mjd4.append(MJD[a])
                flux4.append(uJy[a])
                yerr4.append(duJy[a])

mag_ao = -2.5 * np.log10(np.abs(flux3)) + 23.9
m_ao_err_up = -2.5 * np.log10(np.abs(flux3) + yerr3) + 23.9
m_ao_err_down = -2.5 * np.log10(np.abs(flux3) - yerr3) + 23.9
magerr_ao = np.abs(m_ao_err_up - m_ao_err_down) / 2

mag_ac = -2.5 * np.log10(np.abs(flux4)) + 23.9
m_ac_err_up = -2.5 * np.log10(np.abs(flux4)+yerr4) + 23.9
m_ac_err_down = -2.5 * np.log10(np.abs(flux4)-yerr4) + 23.9
magerr_ac = np.abs(m_ac_err_up - m_ac_err_down) / 2
                                
                
####

####CATALINA

VMAG = f2[:,1]
VMJD = f2[:,5]
VRA = f2[:,3]
VDEC = f2[:,4]
VMAGerr = f2[:,2]
Blend = f2[:,6]
b=0
mjd5 =[]
mag5=[]
yerr5=[]
l3 = len(VMAG)
for b in range(l3):
    if Blend[b]==0:
        mjd5.append(VMJD[b])
        mag5.append(VMAG[b])
        yerr5.append(VMAGerr[b])

###ASASSN
data = np.genfromtxt("AS15-oi.csv",delimiter=",")
umjd=data[:,0];
umag=data[:,1];
umagerr=data[:,2]
bmjd=data[:,3];
bmag=data[:,4];
bmagerr=data[:,5]
vmjd=data[:,6];
vmag=data[:,7];
vmagerr=data[:,8]

###WISE
f3 = np.genfromtxt("iPTF16axa-wise.csv",delimiter=",")
mjd6 = f3[:,0]
mag6 = f3[:,1]
magerr6 = f3[:,2]


###
r_2=[a-3 for a in r] 
g_2=[a-3 for a in g]
mag4_=[a+1 for a in mag4]
plt.errorbar(mjd1,r_2,magerr1,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='r',elinewidth=1,color='k',ms=1)#mjd1=r
plt.errorbar(mjd2,g_2,magerr2,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='b',elinewidth=1,color='k',ms=1)#mjd2=g
#plt.plot(mjd3,mag3,'y3')
#plt.plot(mjd4,mag4,'c4')
#plt.errorbar(mjd3,mag3,yerr3,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='orange',elinewidth=1,color='k',ms=1)#mjd3=o
#plt.errorbar(mjd4,mag4_,yerr4,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='green',elinewidth=1,color='k',ms=1)#mjd4=c
plt.errorbar(mjd3,mag_ao-1,magerr_ao,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='orange',elinewidth=1,color='orange',ms=1.5)
plt.errorbar(mjd4,mag_ac,magerr_ac,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='green',elinewidth=1,color='green',ms=1.5)
plt.errorbar(mjd5,mag5,yerr5,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='m',elinewidth=1,color='k',ms=1)#mjd5=v
plt.errorbar(mjd6,mag6+1,magerr6,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='r',elinewidth=1,color='k',ms=1)
#plt.errorbar(umjd,umag,umagerr,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='violet',elinewidth=1,color='k',ms=1)#U
#plt.errorbar(bmjd,bmag,bmagerr,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='turquoise',elinewidth=1,color='k',ms=1)#B
#plt.errorbar(vmjd,vmag,vmagerr,xerr=None,fmt='o',capthick=1,capsize=1.5,ecolor='springgreen',elinewidth=1,color='k',ms=1)#V


plt.title(filename)
#plt.ylim(23,17)
#plt.xlim(59000,60000)
plt.xlabel('mjd(57414)')
plt.ylabel('mag')
label=['r-3','g-3','o','c+1','v','W1+1']
plt.legend(label,loc=0)
plt.axvline(57414, color="grey", linewidth=1,  linestyle='--')
plt.show()

效果大概这样:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值