def plot(fields, filename, lbin, Cb, cov=None, theoryfile=None): lmax = int(numpy.max(lbin)) if theoryfile != None: ps = powspec.read_spectrum(theoryfile)[:3, :3] clth = {} clth['TT'] = ps[0, 0, :][:lmax + 100] clth['EE'] = ps[1, 1, :][:lmax + 100] clth['BB'] = ps[2, 2, :][:lmax + 100] clth['TE'] = ps[0, 1, :][:lmax + 100] clth['TB'] = ps[0, 1, :][:lmax + 100] * 0 clth['EB'] = ps[0, 1, :][:lmax + 100] * 0 lth = numpy.arange(len(clth['TT'])) fth = lth * (lth + 1) / (2 * numpy.pi) for l1 in fields: if theoryfile != None: pylab.plot(lth, clth[l1] * fth, color='gray') if cov != None: pylab.errorbar(lbin, Cb[l1], numpy.sqrt(cov[l1 + l1]), fmt='.') else: pylab.errorbar(lbin, Cb[l1], fmt='.') pylab.xlabel(r'$\ell$', fontsize=22) pylab.ylabel(r'$\ell(\ell+1) C^{%s}_\ell/(2 \pi)$' % l1, fontsize=22) pylab.savefig(filename + '_%s.png' % l1) pylab.clf() pylab.close()
class dprint: def __init__(self, desc): self.desc = desc def __enter__(self): self.t1 = time.time() def __exit__(self, type, value, traceback): sys.stderr.write("%6.2f %6.3f %6.3f %s\n" % (time.time() - self.t1, memory.current() / 1024.**3, memory.max() / 1024.**3, self.desc)) with dprint("spec"): ps = powspec.read_spectrum(args.powspec)[:ncomp, :ncomp] # Construct our output coordinates, a zea system. My standard # constructor doesn't handle pole crossing, so do it manually. with dprint("construct omap"): R = args.radius * deg2rad res = args.res * min2rad wo = wcsutils.WCS(naxis=2) wo.wcs.ctype = ["RA---ZEA", "DEC--ZEA"] wo.wcs.crval = [0, 90] wo.wcs.cdelt = [res / deg2rad, res / deg2rad] wo.wcs.crpix = [1, 1] x, y = wo.wcs_world2pix(0, 90 - R / deg2rad, 1) y = int(np.ceil(y)) n = 2 * y - 1 wo.wcs.crpix = [y, y]
pitas_lib = pitas.power.PITAS(mcm_identifier, taper, taper, bin_edges, lmax, transfer, overwrite) binner = pitas_lib.binner lbin = pitas_lib.bin_center # load sims (unlensed 15x15 sq deg) tmap, qmap, umap = enmap.read_fits(resource_path('test_tqu2.fits')) tmap -= np.mean(tmap) qmap -= np.mean(qmap) umap -= np.mean(umap) tmap *= taper qmap *= taper umap *= taper # load theory theo = powspec.read_spectrum(resource_path('cosmo2017_10K_acc3_scalCls.dat')) cltt_th = theo[0, 0, 2:] clee_th = theo[1, 1, 2:] clte_th = theo[2, 2, 2:] cleb_th = clbb_th = np.zeros(cltt_th.shape) l_th = np.arange(len(cltt_th)) + 2. # bin theory (cls) lbin, clttbin_th = pitas_lib.bin_theory_scalarxscalar(l_th, cltt_th) lbin, cltebin_th = pitas_lib.bin_theory_scalarxvector(l_th, clte_th) lbin, cleebin_th, clebbin_th, clbbbin_th = pitas_lib.bin_theory_pureeb( l_th, clee_th, cleb_th, clbb_th) # bin theory (dls) lbin, dlttbin_th = pitas_lib.bin_theory_scalarxscalar(l_th, cltt_th,
raise NotImplementedError("Beam not supported for lensed sims yet") if args.geometry == "curved": m, = lensing.rand_map(shape, wcs, ps, lmax=lmax, maplmax=maplmax, seed=(seed, i), verbose=verbose, dtype=dtype) else: maps = enmap.rand_map((shape[0] + 1, ) + shape[1:], wcs, ps) phi, unlensed = maps[0], maps[1:] m = lensing.lens_map_flat(unlensed, phi) else: ps = powspec.read_spectrum(args.powspec).astype(type) beam = make_beam(ps.shape[-1], args.beam * utils.arcmin * utils.fwhm) ps *= beam if args.geometry == "curved": m = curvedsky.rand_map(shape, wcs, ps, lmax=lmax, seed=(seed, i), method=args.method, direct=args.direct, dtype=dtype, verbose=verbose) else: m = enmap.rand_map(shape, wcs, ps)
ncomp = 1 comm = mpi.COMM_WORLD signals = args.signals.split(",") verbosity = args.verbose - args.quiet highpass_alpha = 3 utils.mkdir(args.odir) debug_tile = None if args.debug_tile is None else [int(w) for w in args.debug_tile.split(",")] # Get the set of bounding boxes, after normalizing them boxes = np.sort(np.array([d.box for d in mapinfo.datasets]),-2) # Read the cmb power spectrum, which is an effective noise # component. T-only cl_path = os.path.join(os.path.dirname(args.config),config.cl_background) cl_bg = powspec.read_spectrum(cl_path)[0,0] # Read our mask. High-resolution and per-dataset masks would be handled otherwise. # This approach only works for low-resolution masks if config.mask_mode == "none": mask = None elif config.mask_mode == "lowres": mask_path = os.path.join(os.path.dirname(args.config), config.mask) mask = enmap.read_map(mask_path).preflat[0] else: raise ValueError("Unrecognized mask mode '%s'" % config.mask_mode) def overlaps_any(box, refboxes): box = np.sort(box, 0) rdec, rra = utils.moveaxis(refboxes - box[0,:], 2,0) wdec, wra = box[1] - box[0] rra -= np.floor(rra[:,0,None]/(2*np.pi)+0.5)*(2*np.pi) for i in range(-1,2):
import numpy import pylab import spec_utils print "Reading dict file" p = dict_utils.flipperDict() p.read_from_file(sys.argv[1]) nSims = p['nSims'] lmax = p['lmax'] binsize = p['binsize'] nbin = lmax / binsize - 1 fields = ['TT', 'EE', 'BB', 'TE', 'EB', 'TB'] ps = powspec.read_spectrum(p['theoryPS'])[:3, :3] clth = {} clth['TT'] = ps[0, 0, :][:lmax + 100] clth['EE'] = ps[1, 1, :][:lmax + 100] clth['BB'] = ps[2, 2, :][:lmax + 100] clth['TE'] = ps[0, 1, :][:lmax + 100] clth['TB'] = ps[0, 1, :][:lmax + 100] * 0 clth['EB'] = ps[0, 1, :][:lmax + 100] * 0 lth = numpy.arange(len(clth['TT'])) lb, Cb = spec_utils.binCl(lth, clth, nbin, binsize, fields) print lb.shape for l1 in fields: cl_all = []
def get_scans(area, signal, bore, dets, noise, seed=0, real=None, noise_override=None): scans = [] # Get real scan information if necessary L.debug("real") if real: real_scans = [] filedb.init() db = filedb.data ids = fileb.scans[real].ids for id in ids: try: real_scans.append(actscan.ACTScan(db[id])) except errors.DataMissing as e: L.debug("Skipped %s (%s)" % (id, e.message)) # Dets L.debug("dets") sim_dets = [] toks = dets.split(":") if toks[0] == "scattered": ngroup, nper, rad = int(toks[1]), int(toks[2]), float(toks[3]) sim_dets = [scansim.dets_scattered(ngroup, nper,rad=rad*np.pi/180/60)] margin = rad*np.pi/180/60 elif toks[0] == "real": ndet = int(toks[1]) dslice = slice(0,ndet) if ndet > 0 else slice(None) sim_dets = [bunch.Bunch(comps=s.comps[dslice], offsets=s.offsets[dslice]) for s in real_scans] margin = np.max([np.sum(s.offsets**2,1)**0.5 for s in sim_dets]) else: raise ValueError # Boresight. Determines our number of scans L.debug("bore") sim_bore = [] toks = bore.split(":") if toks[0] == "grid": nscan, density, short = int(toks[1]), float(toks[2]), float(toks[3]) for i in range(nscan): tbox = shorten(area.box(),i%2,short) sim_bore.append(scansim.scan_grid(tbox, density*np.pi/180/60, dir=i, margin=margin)) elif toks[0] == "ces": nscan = int(toks[1]) azs = [float(w)*utils.degree for w in toks[2].split(",")] els = [float(w)*utils.degree for w in toks[3].split(",")] mjd0 = float(toks[4]) dur = float(toks[5]) azrate= float(toks[6]) if len(toks) > 6 else 1.5*utils.degree srate = float(toks[7]) if len(toks) > 7 else 400 nsamp = utils.nint(dur*srate) for i in range(nscan): mjd = mjd0 + dur*(i//(2*len(els)))/(24*3600) el = els[(i//2)%len(els)] az1, az2 = azs if i%2 == 1: az1, az2 = -az2, -az1 box = np.array([[az1,el],[az2,el]]) sim_bore.append(scansim.scan_ceslike(nsamp, box, mjd0=mjd, srate=srate, azrate=azrate)) elif toks[0] == "real": sim_bore = [bunch.Bunch(boresight=s.boresight, hwp_phase=s.hwp_phase, sys=s.sys, site=s.site, mjd0=s.mjd0) for s in real_scans] else: raise ValueError nsim = len(sim_bore) # Make one det info per scan sim_dets = sim_dets*(nsim/len(sim_dets))+sim_dets[:nsim%len(sim_dets)] # Noise L.debug("noise") sim_nmat = [] toks = noise.split(":") nonoise = False if toks[0] == "1/f": sigma, alpha, fknee = [float(v) for v in toks[1:4]] nonoise = sigma < 0 for i in range(nsim): sim_nmat.append(scansim.oneoverf_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee)) elif toks[0] == "detcorr": sigma, alpha, fknee = [float(v) for v in toks[1:4]] nonoise = sigma < 0 for i in range(nsim): sim_nmat.append(scansim.oneoverf_detcorr_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee)) elif toks[0] == "real": scale = 1.0 if len(toks) < 2 else float(toks[1]) for i,s in enumerate(real_scans): ndet = len(sim_dets[i].offsets) nmat = s.noise[:ndet]*scale**-2 sim_nmat.append(nmat) else: raise ValueError noise_scale = not nonoise if noise_override is None else noise_override sim_nmat = sim_nmat*(nsim/len(sim_nmat))+sim_nmat[:nsim%len(sim_nmat)] # Signal L.debug("signal") toks = signal.split(":") if toks[0] == "none": for i in range(nsim): scans.append(scansim.SimPlain(sim_bore[i], sim_dets[i], sim_nmat[i], seed=seed+i, noise_scale=noise_scale)) elif toks[0] == "ptsrc": # This one always operates in the same coordinates as nsrc, amp, fwhm = int(toks[1]), float(toks[2]), float(toks[3]) np.random.seed(seed) sim_srcs = scansim.rand_srcs(area.box(), nsrc, amp, abs(fwhm)*np.pi/180/60, rand_fwhm=fwhm<0) for i in range(nsim): scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale)) elif toks[0] == "vsrc": # Create a single variable source ra, dec, fwhm = float(toks[1])*np.pi/180, float(toks[2])*np.pi/180, float(toks[3])*np.pi/180/60 amps = [float(t) for t in toks[4].split(",")] for i in range(nsim): sim_srcs = bunch.Bunch(pos=np.array([[dec,ra]]),amps=np.array([[amps[i],0,0,0]]), beam=np.array([fwhm/(8*np.log(2)**0.5)])) scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale, nsigma=20)) elif toks[0] == "cmb": np.random.seed(seed) ps = powspec.read_spectrum(toks[1]) sim_map = enmap.rand_map(area.shape, area.wcs, ps) for i in range(nsim): scans.append(scansim.SimMap(sim_bore[i], sim_dets[i], sim_map, sim_nmat[i], seed=seed+i, noise_scale=noise_scale)) else: raise ValueError return scans
try: os.makedirs(specDir) except: pass try: os.makedirs(plotDir) except: pass minfo = sharp.map_info_healpix(nside) ainfo = sharp.alm_info(lmax) sht = sharp.sht(minfo, ainfo) # Initialize alm but should not be needed #################### ps = powspec.read_spectrum(p['theoryPS'])[:ncomp, :ncomp] alm = curvedsky.rand_alm(ps, ainfo) ########################################################## mask = healpy.read_map(p['maskfile']) fields = ['TT', 'EE', 'BB', 'TE', 'EB', 'TB'] alm_all = [] for j in range(nd): maps = healpy.read_map(patchDir + '/map_%d.fits' % j, field=[0, 1, 2]) T = maps[0] * mask Q = maps[1] * mask U = maps[2] * mask sht.map2alm(T, alm[0]) sht.map2alm((Q, U), alm[1:], spin=2)
# Kill extreme values L.info("Removing extreme outliers above 1e6") map = np.minimum(1e6, np.maximum(-1e6, map)) nmin = 50 #cut = 0x100 #map = map[:,h/2-cut:h/2+cut,w/2-cut:w/2+cut] #inoise = inoise[:,:,h/2-cut:h/2+cut,w/2-cut:w/2+cut] #map = map[:,250:750,700:1700] #inoise = inoise[:,:,250:750,700:1700] L.info("Writing preprocessed map") enmap.write_map(args.odir + "/map.fits", map[0]) L.info("Reading spectrum " + args.powspec) ps_cmb_tmp = powspec.read_spectrum(args.powspec)[:1, :1, :] # Extend to max l lmax = np.max(np.sum(map.lmap()**2, 0)**0.5).astype(int) + 1 lmax_tmp = min(ps_cmb_tmp.shape[-1], lmax) ps_cmb = np.zeros([1, 1, lmax]) ps_cmb[:, :, :lmax_tmp] = ps_cmb_tmp[:, :, :lmax_tmp] ps_cmb[:, :, lmax_tmp:] = ps_cmb_tmp[:, :, -1] sigma = args.beam * np.pi / 180 / 60 / (8 * np.log(2)) l = np.arange(ps_cmb.shape[-1]) ps_src = np.exp(-l * (l + 1) * sigma**2)[None, None, :] * (args.srcrms * np.pi / 180 / 60)**2 L.info("Setting up signal and noise matrices") S = enmap.spec2flat(map.shape, map.wcs, ps_cmb, 1.0) iP = enmap.spec2flat(map.shape, map.wcs, ps_src, -1.0)
def get_scans(area, signal, bore, dets, noise, seed=0, real=None, noise_override=None): scans = [] # Get real scan information if necessary L.debug("real") if real: real_scans = [] filedb.init() db = filedb.data ids = fileb.scans[real].ids for id in ids: try: real_scans.append(actscan.ACTScan(db[id])) except errors.DataMissing as e: L.debug("Skipped %s (%s)" % (id, str(e))) # Dets L.debug("dets") sim_dets = [] toks = dets.split(":") if toks[0] == "scattered": ngroup, nper, rad = int(toks[1]), int(toks[2]), float(toks[3]) sim_dets = [scansim.dets_scattered(ngroup, nper,rad=rad*np.pi/180/60)] margin = rad*np.pi/180/60 elif toks[0] == "real": ndet = int(toks[1]) dslice = slice(0,ndet) if ndet > 0 else slice(None) sim_dets = [bunch.Bunch(comps=s.comps[dslice], offsets=s.offsets[dslice]) for s in real_scans] margin = np.max([np.sum(s.offsets**2,1)**0.5 for s in sim_dets]) else: raise ValueError # Boresight. Determines our number of scans L.debug("bore") sim_bore = [] toks = bore.split(":") if toks[0] == "grid": nscan, density, short = int(toks[1]), float(toks[2]), float(toks[3]) for i in range(nscan): tbox = shorten(area.box(),i%2,short) sim_bore.append(scansim.scan_grid(tbox, density*np.pi/180/60, dir=i, margin=margin)) elif toks[0] == "ces": nscan = int(toks[1]) azs = [float(w)*utils.degree for w in toks[2].split(",")] els = [float(w)*utils.degree for w in toks[3].split(",")] mjd0 = float(toks[4]) dur = float(toks[5]) azrate= float(toks[6]) if len(toks) > 6 else 1.5*utils.degree srate = float(toks[7]) if len(toks) > 7 else 400 nsamp = utils.nint(dur*srate) for i in range(nscan): mjd = mjd0 + dur*(i//(2*len(els)))/(24*3600) el = els[(i//2)%len(els)] az1, az2 = azs if i%2 == 1: az1, az2 = -az2, -az1 box = np.array([[az1,el],[az2,el]]) sim_bore.append(scansim.scan_ceslike(nsamp, box, mjd0=mjd, srate=srate, azrate=azrate)) elif toks[0] == "real": sim_bore = [bunch.Bunch(boresight=s.boresight, hwp_phase=s.hwp_phase, sys=s.sys, site=s.site, mjd0=s.mjd0) for s in real_scans] else: raise ValueError nsim = len(sim_bore) # Make one det info per scan sim_dets = sim_dets*(nsim/len(sim_dets))+sim_dets[:nsim%len(sim_dets)] # Noise L.debug("noise") sim_nmat = [] toks = noise.split(":") nonoise = False if toks[0] == "1/f": sigma, alpha, fknee = [float(v) for v in toks[1:4]] nonoise = sigma < 0 for i in range(nsim): sim_nmat.append(scansim.oneoverf_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee)) elif toks[0] == "detcorr": sigma, alpha, fknee = [float(v) for v in toks[1:4]] nonoise = sigma < 0 for i in range(nsim): sim_nmat.append(scansim.oneoverf_detcorr_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee)) elif toks[0] == "real": scale = 1.0 if len(toks) < 2 else float(toks[1]) for i,s in enumerate(real_scans): ndet = len(sim_dets[i].offsets) nmat = s.noise[:ndet]*scale**-2 sim_nmat.append(nmat) else: raise ValueError noise_scale = not nonoise if noise_override is None else noise_override sim_nmat = sim_nmat*(nsim/len(sim_nmat))+sim_nmat[:nsim%len(sim_nmat)] # Signal L.debug("signal") toks = signal.split(":") if toks[0] == "none": for i in range(nsim): scans.append(scansim.SimPlain(sim_bore[i], sim_dets[i], sim_nmat[i], seed=seed+i, noise_scale=noise_scale)) elif toks[0] == "ptsrc": # This one always operates in the same coordinates as nsrc, amp, fwhm = int(toks[1]), float(toks[2]), float(toks[3]) np.random.seed(seed) sim_srcs = scansim.rand_srcs(area.box(), nsrc, amp, abs(fwhm)*np.pi/180/60, rand_fwhm=fwhm<0) for i in range(nsim): scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale)) elif toks[0] == "vsrc": # Create a single variable source ra, dec, fwhm = float(toks[1])*np.pi/180, float(toks[2])*np.pi/180, float(toks[3])*np.pi/180/60 amps = [float(t) for t in toks[4].split(",")] for i in range(nsim): sim_srcs = bunch.Bunch(pos=np.array([[dec,ra]]),amps=np.array([[amps[i],0,0,0]]), beam=np.array([fwhm/(8*np.log(2)**0.5)])) scans.append(scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed+i, noise_scale=noise_scale, nsigma=20)) elif toks[0] == "cmb": np.random.seed(seed) ps = powspec.read_spectrum(toks[1]) sim_map = enmap.rand_map(area.shape, area.wcs, ps) for i in range(nsim): scans.append(scansim.SimMap(sim_bore[i], sim_dets[i], sim_map, sim_nmat[i], seed=seed+i, noise_scale=noise_scale)) else: raise ValueError return scans
spectra. """ import os, sys from enlib import enmap, powspec, utils from orphics.theory.cosmology import Cosmology import orphics.tools.io as io import numpy as np from scipy.interpolate import interp1d import orphics.tools.stats as stats out_dir = os.environ['WWW'] ps = powspec.read_spectrum("data/cl_lensed.dat") print((ps.shape)) TCMB = 2.7255e6 cc = Cosmology(lmax=3000, pickling=True) ells = np.arange(2, 3000, 1) cctt = cc.theory.lCl('TT', ells) * TCMB**2. ccte = cc.theory.lCl('TE', ells) * TCMB**2. ccee = cc.theory.lCl('EE', ells) * TCMB**2. ccbb = cc.theory.lCl('BB', ells) * TCMB**2. enells = np.asarray(list(range(ps.shape[2])))[2:] entt = ps[0, 0, 2:] ente = ps[0, 1, 2:] enet = ps[1, 0, 2:]
def apod_butter(x, r): return (1 + (x / r)**-4)**-1 def apod_cos(x, r): return (1 - np.cos(np.min(1, nx / r) * np.pi)) / 2 # Read our inputs freqs = parse_floats(args.freqs) maps = read_maps(args.maps, len(freqs)) ncomp = maps.shape[-3] nfreq = maps.shape[-4] noise = read_noise(args.noise, maps.shape, maps.wcs, len(freqs)) ps = powspec.read_spectrum(args.powspec, expand="diag")[:ncomp, :ncomp] poss = np.loadtxt(args.posfile)[:, :2] / r2c R = args.radius / r2c / 60 beam_fiducial = 1.5 / r2b beam_range = [0.8 / r2b, 3.0 / r2b] beam_max_asym = 2 apod_rad = R / 10 # We will cut out small mini-maps around each source candadate and # sample the CMB and source parameters jointly. But some candiates # are so near each other that they aren't independent. These must # be grouped into groups. def build_groups(poss): def dist(a, b): return np.sum((poss[a] - poss[b])**2)**0.5 * 180 * 60 / np.pi
parser.add_argument("-s", "--sigma", type=float, default=50) parser.add_argument("-n", "--nsamp", type=int, default=4) args = parser.parse_args() def sim_scan_fast(imap, sigma, rad, n): mask = np.zeros(imap.shape[-2:]) mask[rad:-rad,rad:-rad] = 1 w = np.maximum(1 - ndimage.distance_transform_edt(1-mask)/rad,0)**3 w = w[None,:,:]*np.array([1,0.5,0.5])[:,None,None]*sigma**-2*n w = enmap.samewcs(w, imap) m = imap + np.random.standard_normal(imap.shape)*w**-0.5 m[~np.isfinite(m)] = 0 return m, w template = enmap.read_map(args.template)[:,::2,::2] ps = powspec.read_spectrum(args.powspec, expand="diag") sim = enmap.rand_map(template.shape, template.wcs, ps) # Simulate noisy data m, w = sim_scan_fast(sim, args.sigma, 128, 1) ncomp = m.shape[0] iN = enmap.zeros((ncomp,ncomp)+w.shape[-2:]) for i in range(ncomp): iN[i,i] = w[i] iS = enmap.spec2flat(m.shape, m.wcs, ps, -1) # Draw samples sampler = gibbs.FieldSampler(iS, iN, m) res = enmap.zeros((1+args.nsamp,)+m.shape,m.wcs) res[0] = m for i in range(args.nsamp):
phi, fphi = kappa_to_phi(kappaMap, modlmap, return_fphi=True) io.quickPlot2d(phi, out_dir + "phi.png") alpha_pix = enmap.grad_pixf(fphi) # alpha_pix2 = enmap.grad_pix(phi) print((alpha_pix.shape)) # print alpha_pix2.shape io.quickPlot2d(alpha_pix[0], out_dir + "alpha_pixx.png") io.quickPlot2d(alpha_pix[1], out_dir + "alpha_pixy.png") io.quickPlot2d(np.sum(alpha_pix**2, 0)**0.5, out_dir + "alpha_pix.png") # io.quickPlot2d(alpha_pix2[0],out_dir+"alpha_pixx2.png") # io.quickPlot2d(alpha_pix2[1],out_dir+"alpha_pixy2.png") TCMB = 2.7255e6 ps = powspec.read_spectrum("../alhazen/data/cl_lensinput.dat") cmb_map = old_div(enmap.rand_map(shape, wcs, ps), TCMB) lensed = lensing.lens_map_flat_pix(cmb_map, alpha_pix, order=5) #lensed = lensing.lens_map_flat(cmb_map, phi) io.quickPlot2d(cmb_map, out_dir + "unlensed.png") io.quickPlot2d(lensed, out_dir + "lensed.png") io.quickPlot2d(lensed - cmb_map, out_dir + "diff.png") alpha = enmap.gradf(fphi) io.quickPlot2d(alpha[0], out_dir + "alphax.png") io.quickPlot2d(alpha[1], out_dir + "alphay.png") io.quickPlot2d(np.sum(alpha**2, 0)**0.5, out_dir + "alpha.png") kappa_inverted = -0.5 * enmap.div(alpha, normalize=False) io.quickPlot2d(kappa_inverted, out_dir + "kappainv.png")
shapeDown, wcsDown = enmap.geometry(pos=[[-hwidth*arcmin,-hwidth*arcmin],[hwidth*arcmin,hwidth*arcmin]], res=pxDown*arcmin, proj="car") thetaMap = enmap.posmap(shape, wcs) thetaMap = np.sum(thetaMap**2,0)**0.5 thetaMapDown = enmap.posmap(shapeDown, wcsDown) thetaMapDown = np.sum(thetaMapDown**2,0)**0.5 comL = cc.results.comoving_radial_distance(zL)*cc.h comS = cc.results.comoving_radial_distance(sourceZ)*cc.h winAtLens = (comS-comL)/comS kappaMap,r500 = NFWkappa(cc,massOverh,concentration,zL,thetaMap*180.*60./np.pi,winAtLens,overdensity=overdensity,critical=critical,atClusterZ=atClusterZ) # === CMB POWER SPECTRUM === ps = powspec.read_spectrum("data/cl_lensinput.dat") # === DEFLECTION MAP === a = alphaMaker(thetaMap) alpha = a.kappaToAlpha(kappaMap,test=False) pos = thetaMap.posmap() + alpha pix = thetaMap.sky2pix(pos, safe=False) gradfit = 2.*np.pi/180./60. from scipy.ndimage.interpolation import rotate N = 100 avgrot = 0. for i in range(N):
def make_beam(nl, bsize): l = np.arange(nl) return np.exp(-l*(l+1)*bsize**2) for i in range(comm.rank, args.nsim, comm.size): if args.lensed: ps = powspec.read_camb_full_lens(args.powspec).astype(dtype) if args.beam: raise NotImplementedError("Beam not supported for lensed sims yet") if args.geometry == "curved": m, = lensing.rand_map(shape, wcs, ps, lmax=lmax, maplmax=maplmax, seed=(seed,i), verbose=verbose, dtype=dtype) else: maps = enmap.rand_map((shape[0]+1,)+shape[1:], wcs, ps) phi, unlensed = maps[0], maps[1:] m = lensing.lens_map_flat(unlensed, phi) else: ps = powspec.read_spectrum(args.powspec).astype(type) beam = make_beam(ps.shape[-1], args.beam*utils.arcmin*utils.fwhm) ps *= beam if args.geometry == "curved": m = curvedsky.rand_map(shape, wcs, ps, lmax=lmax, seed=(seed,i), method=args.method, direct=args.direct, dtype=dtype, verbose=verbose) else: m = enmap.rand_map(shape, wcs, ps) if args.nsim == 1: if verbose: print "Writing %s" % args.ofile enmap.write_map(args.ofile, m) else: if verbose: print "Writing %s" % (args.ofile % i) enmap.write_map(args.ofile % i, m)
args = parser.parse_args() deg2rad = np.pi/180 min2rad = np.pi/180/60 ncomp = args.ncomp class dprint: def __init__(self, desc): self.desc = desc def __enter__(self): self.t1 = time.time() def __exit__(self, type, value, traceback): sys.stderr.write("%6.2f %6.3f %6.3f %s\n" % (time.time()-self.t1,memory.current()/1024.**3, memory.max()/1024.**3, self.desc)) with dprint("spec"): ps = powspec.read_spectrum(args.powspec)[:ncomp,:ncomp] # Construct our output coordinates, a zea system. My standard # constructor doesn't handle pole crossing, so do it manually. with dprint("construct omap"): R = args.radius*deg2rad res = args.res*min2rad wo = wcsutils.WCS(naxis=2) wo.wcs.ctype = ["RA---ZEA","DEC--ZEA"] wo.wcs.crval = [0,90] wo.wcs.cdelt = [res/deg2rad, res/deg2rad] wo.wcs.crpix = [1,1] x, y = wo.wcs_world2pix(0,90-R/deg2rad,1) y = int(np.ceil(y)) n = 2*y-1 wo.wcs.crpix = [y,y]
def add(res, m, desc): m2 = enmap.ifft(enmap.map2harm(m)).real res.tqu.append(m.copy()) res.teb.append(m2) res.desc.append(desc) print desc def output(res, dir): utils.mkdir(dir) for i, (tqu, teb, desc) in enumerate(zip(res.tqu, res.teb, res.desc)): enmap.write_map("%s/%02d_%s_tqu.hdf" % (dir,i+1,desc), tqu) enmap.write_map("%s/%02d_%s_teb.hdf" % (dir,i+1,desc), teb) cl_scal, cl_phi = powspec.read_camb_scalar(args.scal_cls, expand=True) cl_tens = powspec.read_spectrum(args.tens_cls, expand="diag") cl_cmb = cl_scal+cl_tens np.random.seed(args.seed) res = bunch.Bunch(tqu=[],teb=[],desc=[]) # 1. Start with last scattering cmb = enmap.rand_map(shape, wcs, cl_cmb) m = cmb; add(res, m, "cmb") # 2. Add lensing phi = enmap.rand_map(shape[-2:], wcs, cl_phi) lcmb = lensing.lens_map_flat(cmb, phi) m = lcmb; add(res, m, "lens") # 3. Add point sources pinfo = parse_points(args.ptsrc) pmap = sim_points(shape, wcs, pinfo)
def get_scans(area, signal, bore, dets, noise, seed=0, real=None): scans = [] # Get real scan information if necessary L.debug("real") if real: real_scans = [] toks = real.split(":") filelist, fslice = toks[0], ":".join(toks[1:]) filelist = [ line.split()[0] for line in open(filelist, "r") if line[0] != "#" ] filelist = eval("filelist" + fslice) db = filedb.ACTdb(config.get("filedb")) for id in filelist: try: real_scans.append(data.ACTScan(db[id])) except errors.DataMissing as e: L.debug("Skipped %s (%s)" % (filelist[ind], e.message)) # Dets L.debug("dets") sim_dets = [] toks = dets.split(":") if toks[0] == "scattered": ngroup, nper, rad = int(toks[1]), int(toks[2]), float(toks[3]) sim_dets = [ scansim.dets_scattered(ngroup, nper, rad=rad * np.pi / 180 / 60) ] margin = rad * np.pi / 180 / 60 elif toks[0] == "real": ndet = int(toks[1]) dslice = slice(0, ndet) if ndet > 0 else slice(None) sim_dets = [ bunch.Bunch(comps=s.comps[dslice], offsets=s.offsets[dslice]) for s in real_scans ] margin = np.max([np.sum(s.offsets**2, 1)**0.5 for s in sim_dets]) else: raise ValueError # Boresight. Determines our number of scans L.debug("bore") sim_bore = [] toks = bore.split(":") if toks[0] == "grid": nscan, density, short = int(toks[1]), float(toks[2]), float(toks[3]) for i in range(nscan): tbox = shorten(area.box(), i % 2, short) sim_bore.append( scansim.scan_grid(tbox, density * np.pi / 180 / 60, dir=i, margin=margin)) elif toks[0] == "real": sim_bore = [ bunch.Bunch(boresight=s.boresight, sys=s.sys, site=s.site, mjd0=s.mjd0) for s in real_scans ] else: raise ValueError nsim = len(sim_bore) # Make one det info per scan sim_dets = sim_dets * (nsim / len(sim_dets)) + sim_dets[:nsim % len(sim_dets)] # Noise L.debug("noise") sim_nmat = [] toks = noise.split(":") noiseless = False if toks[0] == "1/f": sigma, alpha, fknee = [float(v) for v in toks[1:4]] noiseless = sigma < 0 for i in range(nsim): sim_nmat.append( scansim.oneoverf_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee)) elif toks[0] == "detcorr": sigma, alpha, fknee = [float(v) for v in toks[1:4]] noiseless = sigma < 0 for i in range(nsim): sim_nmat.append( scansim.oneoverf_detcorr_noise(sim_dets[i].comps.shape[0], sim_bore[i].boresight.shape[0], sigma=np.abs(sigma), alpha=alpha, fknee=fknee)) elif toks[0] == "real": scale = 1.0 if len(toks) < 2 else float(toks[1]) for i, s in enumerate(real_scans): ndet = len(sim_dets[i].offsets) nmat = s.noise[:ndet] * scale**-2 sim_nmat.append(nmat) else: raise ValueError sim_nmat = sim_nmat * (nsim / len(sim_nmat)) + sim_nmat[:nsim % len(sim_nmat)] # Signal L.debug("signal") toks = signal.split(":") if toks[0] == "ptsrc": # This one always operates in the same coordinates as nsrc, amp, fwhm = int(toks[1]), float(toks[2]), float(toks[3]) sim_srcs = scansim.rand_srcs(area.box(), nsrc, amp, abs(fwhm) * np.pi / 180 / 60, rand_fwhm=fwhm < 0) for i in range(nsim): scans.append( scansim.SimSrcs(sim_bore[i], sim_dets[i], sim_srcs, sim_nmat[i], seed=seed + i, nonoise=noiseless)) elif toks[0] == "cmb": np.random.seed(seed) ps = powspec.read_spectrum(toks[1]) sim_map = enmap.rand_map(area.shape, area.wcs, ps) for i in range(nsim): scans.append( scansim.SimMap(sim_bore[i], sim_dets[i], sim_map, sim_nmat[i], seed=seed + i, nonoise=noiseless)) else: raise ValueError return scans