def gather_metadata(uv, chans, window): M = {} chans = a.scripting.parse_chans(chans, uv['nchan']) freqs = a.cal.get_freqs(uv['sdf'], uv['sfreq'], uv['nchan']) freqs = freqs.take(chans) M['sdf'] = uv['sdf'] M['fq'] = np.average(freqs) M['z'] = pspec.f2z(M['fq']) M['B'] = M['sdf'] * freqs.size / pfb.NOISE_EQUIV_BW[window] M['etas'] = np.fft.fftshift(pspec.f2eta(freqs)) M['kpl'] = M['etas'] * pspec.dk_deta(M['z']) M['bm'] = np.polyval(pspec.DEFAULT_BEAM_POLY, M['fq']) M['scalar'] = pspec.X2Y(M['z']) * M['bm'] * M['B'] return chans, freqs, M
figure(figsize=figsize) ndelays = len(delays) nkparr = n.sum(delays >= 0) #P = F['P'].T #FOLD UP THE PSPEC AROUND ZERO RELATIVE DELAY!!! #XXX THIS WILL BE INCORRECT FOR PHASED UP STUFF. wedge_X = n.sqrt(n.abs(P[nkparr:,:,0]*n.conj(P[nkparr:,:,0]) + \ n.flipud(P[:nkparr,:,0]*n.conj(P[:nkparr,:,0]))/2)) wedge_Y = n.sqrt(n.abs(P[nkparr:,:,1]*n.conj(P[nkparr:,:,1]) + \ n.flipud(P[:nkparr,:,1]*n.conj(P[:nkparr,:,1]))/2)) print n.sum(n.isnan(P)), n.sum(P < 0) wedge_X = n.ma.masked_invalid(n.log10(wedge_X)) wedge_Y = n.ma.masked_invalid(n.log10(wedge_Y)) kparr = delays[delays >= 0] * pspec.dk_deta(z) kperp = bl_lengths * pspec.dk_du(z) horizon = bl_lengths * pspec.dk_deta(z) print bl_lengths, pspec.dk_deta(z), z print horizon windowpad = windowpad_ns * pspec.dk_deta(z) KPERP, KPARR = n.meshgrid(kperp, kparr) MIN = n.min([ n.mean(wedge_X[KPARR > (horizon + windowpad)]), n.mean(wedge_X[KPARR > (horizon + windowpad)]) ]) * 0.8 dfcoarse = 30 / 24. * 1e-3 if PLOTWINDOWCONTOUR: #calculate danny's stat window BL, D = n.meshgrid(bl_lengths, delays[delays >= 0])
ndelays = len(delays) nkparr = n.sum(delays>=0) #P = F['P'].T #FOLD UP THE PSPEC AROUND ZERO RELATIVE DELAY!!! #XXX THIS WILL BE INCORRECT FOR PHASED UP STUFF. wedge_X = n.sqrt(n.abs(P[nkparr:,:,0]*n.conj(P[nkparr:,:,0]) + \ n.flipud(P[:nkparr,:,0]*n.conj(P[:nkparr,:,0]))/2)) wedge_Y = n.sqrt(n.abs(P[nkparr:,:,1]*n.conj(P[nkparr:,:,1]) + \ n.flipud(P[:nkparr,:,1]*n.conj(P[:nkparr,:,1]))/2)) print n.sum(n.isnan(P)),n.sum(P<0) wedge_X = n.ma.masked_invalid(n.log10(wedge_X)) wedge_Y = n.ma.masked_invalid(n.log10(wedge_Y)) kparr = delays[delays>=0]*pspec.dk_deta(z) kperp = bl_lengths*pspec.dk_du(z) horizon = bl_lengths*pspec.dk_deta(z) print bl_lengths,pspec.dk_deta(z),z print horizon windowpad = windowpad_ns*pspec.dk_deta(z) KPERP,KPARR = n.meshgrid(kperp,kparr) MIN = n.min([n.mean(wedge_X[KPARR>(horizon+windowpad)]),n.mean(wedge_X[KPARR>(horizon+windowpad)])])*0.8 dfcoarse=30/24.*1e-3 if PLOTWINDOWCONTOUR: #calculate danny's stat window BL,D = n.meshgrid(bl_lengths,delays[delays>=0]) coarse_chan_delay = 1/(1.28/1e3)# print "coarse_chan_delay",coarse_chan_delay WINDOW = n.zeros_like(D)
t_int = n.diff(times).max()*24*3600 print "t_int = ",t_int totalt = n.ceil((times.max() - times.min())*24*3600 + t_int) print "total observing time = ",totalt Ntimes = n.ceil(totalt/t_int) print "ntimes = ",Ntimes bls = D.data.field('BASELINE') ant2 = (bls%256).astype(int) ant1 = ((bls-ant2)/256).astype(int) uvws = n.array(zip(D.data.field('UU'),D.data.field('VV'),D.data.field('WW')))*1e9 #bl vectors in ns Nants = len(set(ant2)) Nmax = ant2.max() freqs = gethdufreqs(D) z = pspec.f2z(n.mean(freqs)/1e9) print "padding the horizon by k_parr = ",windowpad windowpad_delay = windowpad / pspec.dk_deta(z) print "at z=%4.1f this is %7.5f ns"%(z,windowpad_delay) df = n.diff(freqs)[0] delays = n.fft.fftfreq(freqs.shape[0],df/1e9) #delays in ns print "n_ant = ",Nants print n.sum((ant2-ant1)==0) Nblt = D.data.field('DATA').shape[0] Nbl = Nblt/Ntimes MAXBL = n.max(bls) Nfreqs = D.data.field('DATA').shape[3] Npol = D.data.field('DATA').shape[4] #form up a list of baselines, sorted by length bl_lengths = [] bls_sorted = [] for i in range(Nblt): if bls[i] in bls_sorted:continue
fig = figure() colors='kcmb' for j,RM in enumerate(RMs): Nann = 3 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)