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
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)