fiber_utils.py 文件源码

python
阅读 29 收藏 0 点赞 0 评论 0

项目:Panacea 作者: grzeimann 项目源码 文件源码
def get_wavelength_offsets(fibers, binsize, wvstep=0.2, colsize=300):
    bins = np.hstack([np.arange(0,fibers[0].D,binsize),fibers[0].D])
    mn = np.min([fiber.wavelength.min() for fiber in fibers])
    mx = np.min([fiber.wavelength.max() for fiber in fibers])
    yf = []
    wv = np.arange(mn,mx,wvstep)
    pd = []
    nbins = len(bins)-1
    for fiber in fibers:
        y = fiber.spectrum
        w = fiber.wavelength
        x = np.arange(fiber.D)
        s = -999*np.ones((nbins,fiber.D))
        for i in np.arange(nbins):
            x0 = int(np.max([0,(bins[i]+bins[i+1])/2 - colsize/2]))
            x1 = int(np.min([1032,(bins[i]+bins[i+1])/2 + colsize/2]))

            s[i,x0:x1], flag = polynomial_normalization(x, y, x0, x1)
        s = np.ma.array(s,mask=s==-999.)
        ym = s.mean(axis=0)
        ym = biweight_filter(ym, 5, ignore_central=1)
        pr, ph = find_maxima(w, -1.*(y/ym-1)+1, interp_window=3)
        pd.append(pr[~np.isnan(pr)])
        yf.append(np.interp(wv,w,-1.*(y/ym-1)+1,left=0.0,right=0.0))
    master = biweight_location(yf,axis=(0,))
    pr,ph = find_maxima(wv, master, y_window=10, interp_window=2.5, 
                        repeat_length=3, first_order_iter=5, 
                        max_to_min_dist=15)
    sel = (ph>1.03) * (~np.isnan(pr))
    pr = pr[sel]
    ph = ph[sel]
    wk = []
    for p,fiber in zip(pd,fibers):

        c = p[:,None] - pr
        a = np.where(np.abs(c)<4.)
        x = pr[a[1]]
        y = p[a[0]] - pr[a[1]]
        sel = np.argsort(x)
        x = x[sel]
        y = y[sel]
        m = medfilt(y,15)
        good = ~is_outlier(y-m) 
        p0 = np.polyfit(x[good],y[good],3)
        wk.append(np.polyval(p0,fiber.wavelength))
    return wk
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号