我的光曲线数据由时间(t)和通量(f)组成(4067行x 2列)
nx=4067
t=fltarr(nx)
f=fltarr(nx)
data=read_table('kplr4830001.dat')
;print,data(0,*) ;this is t
;print,data(1,*) ;this is f
window,0
plot,data(0,*)/data(0,0),data(1,*)/data(1,0),xrange=[1.045,1.13],yrange=[0.98,1.03],xstyle=1,ystyle=1
我设法计算出阈值(thr = 0.0067621339)。
我想计算一个特定的时间段(t_start)和(t_end)。
t_start:磁通首次超过阈值(0.0067621339)的时间。
t_end:磁通首次变得小于(3 * exp(-9/2))的时间。
这是我的方法:
;t_start
for i=0,nx-2 do begin
IF (data(1,i)/data(1,0) GT (thr)) THEN begin
print, data(1,i)/data(1,0)
endif
endfor
;t_end
for i=0,nx-2 do begin
IF (data(1,i)/data(1,0) LT (3*exp(-9/2))) THEN begin
print, data(0,i)/data(0,0)
endif
endfor
end
我需要的只是满足这些条件的data(0,i)/ data(0,0)的第一个值。我该怎么办?
答案 0 :(得分:0)
我还有一些问题,这里有一些示例代码来确定流量何时先超过阈值,然后下降到第二阈值以下(假设数据按时间顺序升序排列):
thr1 = 0.0067621339
thr2 = 3.*exp(-9./2.)
time = data[*,0]
flux = data[*,1]
ind1 = where(flux gt thr1)
t_start = time[ind1[0]]
ind2 = where(flux[ind1[0]:*] lt thr2)
t_end = (time[ind1[0]:*])[ind2[0]]
一些附加说明:您已指定希望通量超过阈值thr
,但在代码中已指定flux/flux[0] > thr
。我将假设您要测量对象的相对通量(但在那种情况下,为什么要除以光曲线的第一个元素而不是median(flux)
?在上面的绘图语句中,您似乎也可以将时间标准化(data[0,*]/data[0,0]
)-您打算这样做吗?
定义3*exp(-9/2)
的第二个门槛时要小心; IDL 9/2
中的整数除法,给出的答案为4,而不是4.5。而是使用3.*exp(-9./2.)
。
最后,我假设您的数据很嘈杂(而不是无噪音的模拟)。您是否真的要查找超出阈值的第一个数据点(这可能是由于特别大的正离群值?)还是当运行均值/中位数(或数据的其他平滑版本)超过阈值时?您可以使用median(flux, boxwidth)