コード例 #1
0
ファイル: spec_utils.py プロジェクト: thibautlouis/QUBE-
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()
コード例 #2
0
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]
コード例 #3
0
ファイル: simple_test.py プロジェクト: alulujasmine/pitas
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,
コード例 #4
0
            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)
コード例 #5
0
ファイル: ptsrc_lik.py プロジェクト: guanyilun/tenki
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):
コード例 #6
0
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 = []
コード例 #7
0
ファイル: simtod.py プロジェクト: amaurea/tenki
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
コード例 #8
0
ファイル: get_spectra.py プロジェクト: thibautlouis/QUBE-
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)
コード例 #9
0
ファイル: find_candidates.py プロジェクト: msyriac/tenki
# 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)
コード例 #10
0
ファイル: simtod.py プロジェクト: guanyilun/tenki
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
コード例 #11
0
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:]
コード例 #12
0
ファイル: ptsrc_gibbs.py プロジェクト: guanyilun/tenki
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
コード例 #13
0
ファイル: gibbs.py プロジェクト: amaurea/talk-bmode
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):
コード例 #14
0
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")
コード例 #15
0
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):
コード例 #16
0
ファイル: sim_map.py プロジェクト: amaurea/tenki
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)
コード例 #17
0
ファイル: polar_sim.py プロジェクト: amaurea/tenki
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]
コード例 #18
0
ファイル: dirtymaps.py プロジェクト: amaurea/talk-bmode
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)
コード例 #19
0
ファイル: ptsrc_lik.py プロジェクト: amaurea/tenki
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):
コード例 #20
0
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