예제 #1
0
def Trms_vs_fq(
    fqs, jy_spec, umag150=20.0, B=0.008, cen_fqs=None, ntaps=3, window="kaiser3", bm_poly=DEFAULT_BEAM_POLY, bm_fqs=None
):
    if bm_fqs is None:
        bm_fqs = fqs
    dfq = fqs[1] - fqs[0]
    dCH = int(n.around(B / dfq))
    if cen_fqs is None:
        cen_fqs = n.arange(fqs[0] + dCH * dfq * ntaps / 2, fqs[-1] - dCH * dfq, dCH * dfq)
    Tspec = jy_spec * jy2T(bm_fqs, bm_poly=bm_poly)
    Trms, ks = {}, {}
    for fq0 in cen_fqs:
        z = f2z(fq0)
        umag_fq0 = umag150 * (fq0 / 0.150)
        k_pr = dk_du(z) * umag_fq0
        ch0 = n.argmin(n.abs(fqs - fq0))
        ch1, ch2 = ch0 - dCH / 2, ch0 + dCH / 2
        _fqs = fqs[ch1:ch2]
        etas = f2eta(_fqs)
        k_pl = dk_deta(z) * etas
        _ks = n.sqrt(k_pr ** 2 + k_pl ** 2)
        V = Tspec[ch1 - ntaps / 2 * (ch2 - ch1) : ch2 + (ntaps - 1) / 2 * (ch2 - ch1)]
        if ntaps <= 1:
            w = a.dsp.gen_window(V.size, window=window)
            _Trms = n.fft.ifft(V * w)
        else:
            _Trms = pfb.pfb(V, taps=ntaps, window=window, fft=n.fft.ifft)
        # Trms has both the primary beam and bandwidth divided out, matching Trms in Parsons et al. (2012).
        Trms[fq0], ks[fq0] = _Trms, (_ks, k_pl, k_pr)
    return Trms, ks
예제 #2
0
    for i in range(Nann):
        if i == 0 or i+1 == Nann: continue
        #if i%4 != 0: continue
        nchan_i = int(Nchan/Nann)
        ntaps = 3
        ch1,ch2 = i*nchan_i,(i+1)*nchan_i
        ch_in,ch_out = ch1-nchan_i, ch2+nchan_i
        freqs_i = freqs[ch_in:ch_out]
        dnu = freqs_i[1] - freqs_i[0]
        eta = np.fft.fftshift(np.fft.fftfreq(nchan_i,dnu))
        z_mid = np.median(pspec.f2z(freqs_i))
        k = np.abs(eta*pspec.dk_deta(z_mid))

        V_nu = RMvis(freqs_i,RM)
        V_nu *= pspec.jy2T(freqs_i)
        Trms = pfb.pfb(V_nu,taps=ntaps,window=window,fft=np.fft.ifft)
        Trms = np.fft.fftshift(Trms)
        DELTA = k3pk(Trms,k=k,fq=np.mean(freqs_i),B=0.1/Nann)


        valid = k!=0.

        DELTA = np.extract(valid,DELTA)
        DELTA /= DELTA.sum()
        k = np.extract(valid,k)

        _k,_DELTA = rebin_log(k,DELTA)

        ax = fig.add_subplot(len(RMs),1,j+1)
        #ax.step(k,DELTA,where='mid',color='k',label='z = %2.1f'%z_mid)
        ax.step(_k,_DELTA,where='mid',color=colors[j],label='z = %2.1f'%z_mid)