def load_snr(fcode=None, box=None, pol=False, downgrade=1, use='coadd'): # load map and ivar imap = load_map(filedb[fcode][use], fcode=fcode, box=box) ivar = load_ivar(filedb[fcode][f"{use}_ivar"], fcode=fcode, box=box) if not pol: # total intensity snr = imap[0] * ivar[0]**0.5 else: # polarization intensity P = np.sum(imap[1:]**2, axis=0)**0.5 P_err = lib.P_error(imap, ivar) snr = P / P_err return snr # optionally downgrade if downgrade > 1: snr = snr.downgrade(downgrade) * downgrade if box is not None: return snr.submap(box) else: return snr
'norm': colors.LogNorm(vmin=1e-5, vmax=1e-2), } plotstyle.setup_axis(ax, nticks=[5, 5], yticks=False, fmt=None) irmap[irmap < 0] = 1e-6 im = ax.imshow(irmap, **opts) # polarization angle plot # reload imap to get the original resolution theta = lib.Bangle(imap[1], imap[2], toIAU=True) theta += (np.pi / 2) # this gets the B-field angle corrected # x- and y-components of magnetic field Bx = np.cos(theta) By = np.sin(theta) # mask by polarization intensity if args.mask: P = np.sum(imap[1:]**2, axis=0)**0.5 P_err = lib.P_error(imap, ivar * s**2) Psnr = P / P_err mask = Psnr < 3 # Pangle_err = lib.Pangle_error(imap, ivar*s**2, deg=True) # mask = Pangle_err > 10 cmap_ = plt.get_cmap('binary') # actual cmap doesn't matter color = cmap_(np.ones_like(X)) # color[ mask,-1] = 0.2 # color[~mask,-1] = 1 val = np.min([Psnr, np.ones_like(Psnr) * 3], axis=0) val /= 3 color[..., -1] = val color = color.reshape(color.shape[0] * color.shape[1], 4) else: color = 'k' ax.quiver(X,
else: Y_, X_ = imap.posmap()/np.pi*180 im = ax.contourf(back, colors=color, levels=level) xmin, xmax = box2extent(box)[:2]/np.pi*180 ax.set_xlim([xmin, xmax]) # revert x axis theta = lib.Bangle(imap_ds[1], imap_ds[2], toIAU=True) theta += (np.pi/2.) # x- and y-components of magnetic field Bx = np.cos(theta) By = np.sin(theta) # optionally mask regions above certain angular uncertainty level # and high the segments through alpha if args.mask == 'Psnr': # mask by Polarization intensity SNR P = np.sum(imap_ds[1:]**2, axis=0)**0.5 P_err = lib.P_error(imap_ds, ivar_ds*s**2) mask = (P/P_err) <= 3 elif args.mask == 'Pangle': Pa_err= lib.Pangle_error(imap_ds, ivar_ds*s**2, deg=True) mask = Pa_err >= 20 else: print("No mask applied") mask = np.zeros_like(imap_ds) cmap_ = plt.get_cmap('binary') # actual cmap doesn't matter color = cmap_(np.ones_like(X)) color[mask,-1] = 0.3 color[~mask,-1] = args.alpha color=color.reshape(color.shape[0]*color.shape[1],4) ax.quiver(X,Y,Bx,By,pivot='middle', headlength=0, headaxislength=0, color=color, scale=args.scale, transform=ax.get_transform('world'))
imap = enmap.smooth_gauss(imap, args.smooth * u.fwhm * u.arcmin) ivar = enmap.smooth_gauss(ivar, args.smooth * u.fwhm * u.arcmin) s = sfactor(args.freq, args.smooth) else: s = 1 # optionally apply downgrade if args.downgrade > 1: imap = imap.downgrade(args.downgrade) ivar = ivar.downgrade(args.downgrade) # decide whether to look at I or P if not args.pol: noise = ivar[0]**-0.5 / s label = "Noise (I)" if title: label = f'{title}: ' + label else: noise = lib.P_error(imap, ivar * s**2) label = "Noise (P)" if title: label = f'{title}: ' + label # start plotting opts = {'cmap': 'gray', 'vmin': args.min, 'vmax': args.max} fig = plt.figure() ax = plt.subplot(111, projection=imap.wcs) plotstyle.setup_axis(ax, nticks=[5, 5], fmt=None) im = ax.imshow(noise, **opts) plt.xlabel('$l$') plt.ylabel('$b$') cax = plotstyle.add_colorbar_hpad(ax) fig.colorbar(im, cax=cax, orientation='horizontal').set_label( texify(f"{label} {fcode} [MJy/sr]"), fontsize=12)
# imap = load_map(filedb[fcode]['coadd'], fcode=fcode, mJy=False) # ivar = load_ivar(filedb[fcode]['coadd_ivar'], fcode=fcode, mJy=False) # optionally apply smoothing if args.smooth > 0: imap = enmap.smooth_gauss(imap, args.smooth*u.fwhm*u.arcmin) ivar = enmap.smooth_gauss(ivar, args.smooth*u.fwhm*u.arcmin) # optionally apply downgrade if args.downgrade > 1: imap = imap.downgrade(args.downgrade) ivar = ivar.downgrade(args.downgrade)*args.downgrade**2 # decide whether to look at I or P if not args.pol: snr = imap[0] * ivar[0]**0.5 else: perr = lib.P_error(imap, ivar, method=args.method) snr = np.sum(imap[1:]**2,axis=0)**0.5/perr # start plotting opts = { 'origin': 'lower', 'cmap': 'jet', 'extent': box2extent(box)/np.pi*180, 'vmin': args.min, 'vmax': args.max } if args.log: plt.imshow(np.log10(snr), **opts) else: plt.imshow(snr, **opts) plt.xlabel('l [deg]') plt.ylabel('b [deg]') if not args.pol: plt.colorbar(shrink=0.55).set_label('Total intensity S/N')