首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在idl中计算指定的时间段

在idl中计算指定的时间段
EN

Stack Overflow用户
提问于 2018-07-25 03:34:49
回答 1查看 46关注 0票数 0

我有由时间(t)和通量(f)组成的光线曲线数据(4067行x 2列)

代码语言:javascript
复制
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))的时间。

我是这样做的:

代码语言:javascript
复制
;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)的第一个值。我该怎么做呢?

EN

回答 1

Stack Overflow用户

发布于 2018-07-27 11:08:31

抛开一些问题不谈,这里有一些示例代码,用于确定流量何时首先超过阈值,然后下降到第二个阈值以下(假设数据在时间上按升序排序):

代码语言:javascript
复制
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)?在上面的plot语句中,你似乎也标准化了你的时间(data[0,*]/data[0,0]) --这是你想要做的吗?

在定义3*exp(-9/2)的第二个阈值时要小心;在IDL中,9/2是一个整数除法,并且给出的答案是4,而不是4.5。请改用3.*exp(-9./2.)

最后,我假设您的数据是有噪声的(而不是无噪声的模拟)。您是否真的希望找到第一个超过阈值的数据点(这可能是由于一个特别大的正异常值?)或者更确切地说,当运行的平均值/中值(或数据的其他平滑版本)超过阈值时?您可以使用例如median(flux, boxwidth)对流量进行中值过滤

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51506313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档