示例#1
0
    def test_synfast_flat_stats(self):
        # Temperature only
        m_t = nmt.synfast_flat(self.nx,
                               self.ny,
                               self.lx,
                               self.ly,
                               self.cl1, [0],
                               beam=np.array([self.beam]),
                               seed=1234)[0]
        # Polarization
        m_p1 = nmt.synfast_flat(self.nx,
                                self.ny,
                                self.lx,
                                self.ly,
                                self.cl12, [0, 2],
                                beam=np.array([self.beam, self.beam]),
                                seed=1234)
        km, nk, ctt1 = self.anafast(m_t)
        km, nk, [ctt2, cee2, cbb2, cte2, ceb2, ctb2] = self.anafast(m_p1)
        lint = km.astype(int)

        def get_diff(c_d, c_t, c11, c22, c12, nmodes, facsig=5):
            diff = np.fabs(c_d - c_t[lint])  # Residuals
            sig = np.sqrt((c11[lint] * c22[lint] + c12[lint]**2) / nmodes)
            return diff < facsig * sig

        # Check TT
        self.assertTrue(
            get_diff(ctt1, self.cltt, self.cltt, self.cltt, self.cltt,
                     nk).all())
        self.assertTrue(
            get_diff(ctt2, self.cltt, self.cltt, self.cltt, self.cltt,
                     nk).all())
        # Check EE
        self.assertTrue(
            get_diff(cee2, self.clee, self.clee, self.clee, self.clee,
                     nk).all())
        # Check BB
        self.assertTrue(
            get_diff(cbb2, self.clbb, self.clbb, self.clbb, self.clbb,
                     nk).all())
        # Check TE
        self.assertTrue(
            get_diff(cte2, self.clte, self.cltt, self.clee, self.clte,
                     nk).all())
        # Check EB
        self.assertTrue(
            get_diff(ceb2, self.cleb, self.clbb, self.clee, self.cleb,
                     nk).all())
        # Check TB
        self.assertTrue(
            get_diff(ctb2, self.cltb, self.cltt, self.clbb, self.cltb,
                     nk).all())
示例#2
0
    def generate_maps(self):
        """
        Generates a set of maps by computing correlated realisations of the
        provided power spectra.
        :return:
        """

        logger.info('Generating Gaussian map realizations.')
        np.random.seed(seed=None)
        # Now create the maps with the correlations between both spin-0 and spin-2 fields
        maps = nmt.synfast_flat(self.fsk.nx, self.fsk.ny, np.radians(self.fsk.lx), np.radians(self.fsk.ly), \
                                self.cls, spin_arr=self.params['spins'], seed=-1, beam=None)
        logger.info('Gaussian maps done.')

        if self.params['nspin2'] > 0:
            logger.info('Spin 2 fields present. Reordering maps.')
            reordered_maps = self.reorder_maps(maps)

            if self.params['nspin2'] == 1:
                assert np.sum([np.all(maps[i] == reordered_maps[i]) for i in range(len(maps))]) == len(maps), \
                    'Something went wrong with map reordering.'
        else:
            logger.info('No spin 2 fields. Keeping map ordering.')
            reordered_maps = copy.deepcopy(maps)

        return reordered_maps
def get_fields(fsk,mask,w_cont=False) :
    """
    Generate a simulated field.
    It returns two NmtField objects for a spin-0 and a spin-2 field.

    :param fsk: a fm.FlatMapInfo object.
    :param mask: a sky mask.
    :param w_cont: deproject any contaminants? (not implemented yet)
    """
    st,sq,su=nmt.synfast_flat(int(fsk.nx),int(fsk.ny),fsk.lx_rad,fsk.ly_rad,
                              [cltt+nltt,clte+nlte,0*cltt,clee+nlee,0*clee,clbb+nlbb],[0,2])
    if w_cont :
        if np.any(templates_all):
            tst, tsq, tsu = templates_all.sum(axis=0)
            st+=tst; sq+=tsq; su+=tsu;
        if o.no_deproject :
            ff0=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
                                 [st])
            ff2=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
                                 [sq, su])
        else :
            ff0=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
                                 [st],
                                 templates=templates_all[:,0,None,:])
            ff2=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
                                 [sq,su],
                                 templates=templates_all[:,1:, :])
    else :
        ff0=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
                             [st])
        ff2=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
                             [sq,su])
    return ff0,ff2
示例#4
0
def create_templates_flat(nx, ny, lx_rad, ly_rad, l, clTT, clEE, clBB,
                          **kwards):
    TT_cl = create_cl_templates(l, clTT, **kwards)
    EE_cl = create_cl_templates(l, clEE, **kwards)
    BB_cl = create_cl_templates(l, clBB, **kwards)

    templates = []
    for tt, ee, bb in zip(TT_cl, EE_cl, BB_cl):
        templates.append(
            nmt.synfast_flat(nx, ny, lx_rad, ly_rad,
                             [tt, 0 * tt, 0 * tt, ee, 0 * tt, bb], [0, 2]))

    return np.array(templates)
示例#5
0
    def gaussnoisemap(self, probe, data):
        """
        Generates a noise-only HEALPix map as a Gaussian realisation of a theoretical noise power spectrum
        :param probe: string tag of desired probe
        :param data: the power spectrum needed to generate the noisemap
        :return noisemap: HEALPix map of the noise for the respective probe
        """

        if probe == 'galaxy_shear':
            # In the new healpy ordering the order of the power spectra is
            # TT, EE, BB, TE, EB, TB
            # and one needs to set at least 4 of those
            # We set the E and B mode power spectra to the theoretical shape noise power spectrum
            zeroarr = np.zeros(data['noisecls'].shape[0])
            cl_inp = [data['noisecls'], zeroarr, data['noisecls']]
            noisemap = nmt.synfast_flat(data['fsk'].nx, data['fsk'].ny, np.radians(data['fsk'].lx),
                                        np.radians(data['fsk'].ly), cl_inp, spin_arr=[2], seed=-1, beam=None)
        else:
            noisemap = nmt.synfast_flat(data['fsk'].nx, data['fsk'].ny, np.radians(data['fsk'].lx),
                                        np.radians(data['fsk'].ly), [data['noisecls']], spin_arr=[0],
                                        seed=-1, beam=None)[0]

        return noisemap
示例#6
0
def get_fields() :
    st,sq,su=nmt.synfast_flat(int(fmi.nx),int(fmi.ny),fmi.lx_rad,fmi.ly_rad,
                              np.array([cltt*beam**2+nltt,clte*beam**2+nlte,0*cltt,
                                        clee*beam**2+nlee,0*clee,
                                        clbb*beam**2+nlbb]),[0,2])
    st=st.flatten(); sq=sq.flatten(); su=su.flatten()
    if w_cont :
        sq+=np.sum(fgp,axis=0)[0,:]; su+=np.sum(fgp,axis=0)[1,:];
        ff2=nmt.NmtFieldFlat(fmi.lx_rad,fmi.ly_rad,mask.reshape([fmi.ny,fmi.nx]),
                             [sq.reshape([fmi.ny,fmi.nx]),su.reshape([fmi.ny,fmi.nx])],
                             templates=fgp.reshape([1,2,fmi.ny,fmi.nx]),beam=[l,beam],
                             purify_e=False,purify_b=w_pureb)
    else :
        ff2=nmt.NmtFieldFlat(fmi.lx_rad,fmi.ly_rad,mask.reshape([fmi.ny,fmi.nx]),
                             [sq.reshape([fmi.ny,fmi.nx]),su.reshape([fmi.ny,fmi.nx])],
                             beam=[l,beam],purify_e=False,purify_b=w_pureb)
    return ff2
def get_fields(fsk_ar, mask_ar, w_cont=False) :
    """
    Generate a simulated field.
    It returns two NmtField objects for a spin-0 and a spin-2 field.

    :param fsk: a fm.FlatMapInfo object.
    :param mask: a sky mask.
    :param w_cont: deproject any contaminants? (not implemented yet)
    """
    nbins = 2
    spins = [0,2] * nbins

    fsk = fsk_ar[0]  # They share fsk.nx, ny, etc.

    # maps == [st1, sq1, su1, st2, sq2, su2, ...] (oredered as in spins)
    maps = nmt.synfast_flat(int(fsk.nx),int(fsk.ny),fsk.lx_rad,fsk.ly_rad,
                              cls_ar + nls_ar, spins)
    st1, sq1, su1, st2, sq2, su2 = maps

    if w_cont :
        raise ValueError('Contaminants not implemented yet')
        # if np.any(templates_all):
        #     tst, tsq, tsu = templates_all.sum(axis=0)
        #     st+=tst; sq+=tsq; su+=tsu;
        # if o.no_deproject :
        #     ff0=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
        #                          [st])
        #     ff2=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
        #                          [sq, su])
        # else :
        #     ff0=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
        #                          [st],
        #                          templates=templates_all[:,0,None,:])
        #     ff2=nmt.NmtFieldFlat(fsk.lx_rad,fsk.ly_rad,mask.reshape([fsk.ny,fsk.nx]),
        #                          [sq,su],
        #                          templates=templates_all[:,1:, :])
    else :
        ff0_1=nmt.NmtFieldFlat(fsk.lx_rad, fsk.ly_rad, mask_ar[0].reshape([fsk.ny, fsk.nx]),
                             [st1])
        ff0_2=nmt.NmtFieldFlat(fsk.lx_rad, fsk.ly_rad, mask_ar[1].reshape([fsk.ny, fsk.nx]),
                             [st2])
        ff2_1=nmt.NmtFieldFlat(fsk.lx_rad, fsk.ly_rad, mask_ar[0].reshape([fsk.ny, fsk.nx]),
                             [sq1, su1])
        ff2_2=nmt.NmtFieldFlat(fsk.lx_rad, fsk.ly_rad, mask_ar[1].reshape([fsk.ny, fsk.nx]),
                             [sq2, su2])
    return (ff0_1,ff2_1), (ff0_2, ff2_2)
示例#8
0
def get_fields():
    mppt, mppq, mppu = nmt.synfast_flat(int(mi.nx),
                                        int(mi.ny),
                                        mi.lx * DTOR,
                                        mi.ly * DTOR, [cltt, clee, clbb, clte],
                                        pol=True)
    if w_cont:
        mppt += alpha_cont_0 * fgt
        mppq += alpha_cont_2 * fgq
        mppu += alpha_cont_2 * fgu
        ff0 = nmt.NmtFieldFlat(mi.lx * DTOR, mi.ly * DTOR, mask, [mppt],
                               [[fgt]])
        ff2 = nmt.NmtFieldFlat(mi.lx * DTOR, mi.ly * DTOR, mask, [mppq, mppu],
                               [[fgq, fgu]])
    else:
        ff0 = nmt.NmtFieldFlat(mi.lx * DTOR, mi.ly * DTOR, mask, [mppt])
        ff2 = nmt.NmtFieldFlat(mi.lx * DTOR, mi.ly * DTOR, mask, [mppq, mppu])
    return mppt, mppq, mppu, ff0, ff2
示例#9
0
def get_fields():
    st, sq, su = nmt.synfast_flat(
        int(fmi.nx),
        int(fmi.ny),
        fmi.lx_rad,
        fmi.ly_rad, [cltt + nltt, clee + nlee, clbb + nlbb, clte + nlte],
        pol=True)
    st = st.flatten()
    sq = sq.flatten()
    su = su.flatten()
    if w_cont:
        st += np.sum(fgt, axis=0)[0, :]
        sq += np.sum(fgp, axis=0)[0, :]
        su += np.sum(fgp, axis=0)[1, :]
        if o.no_deproject:
            ff0 = nmt.NmtFieldFlat(fmi.lx_rad, fmi.ly_rad,
                                   mask.reshape([fmi.ny, fmi.nx]),
                                   [st.reshape([fmi.ny, fmi.nx])])
            ff2 = nmt.NmtFieldFlat(
                fmi.lx_rad, fmi.ly_rad, mask.reshape([fmi.ny, fmi.nx]),
                [sq.reshape([fmi.ny, fmi.nx]),
                 su.reshape([fmi.ny, fmi.nx])])
        else:
            ff0 = nmt.NmtFieldFlat(
                fmi.lx_rad,
                fmi.ly_rad,
                mask.reshape([fmi.ny, fmi.nx]), [st.reshape([fmi.ny, fmi.nx])],
                templates=fgt.reshape([2, 1, fmi.ny, fmi.nx]))
            ff2 = nmt.NmtFieldFlat(
                fmi.lx_rad,
                fmi.ly_rad,
                mask.reshape([fmi.ny, fmi.nx]),
                [sq.reshape([fmi.ny, fmi.nx]),
                 su.reshape([fmi.ny, fmi.nx])],
                templates=fgp.reshape([2, 2, fmi.ny, fmi.nx]))
    else:
        ff0 = nmt.NmtFieldFlat(fmi.lx_rad, fmi.ly_rad,
                               mask.reshape([fmi.ny, fmi.nx]),
                               [st.reshape([fmi.ny, fmi.nx])])
        ff2 = nmt.NmtFieldFlat(
            fmi.lx_rad, fmi.ly_rad, mask.reshape([fmi.ny, fmi.nx]),
            [sq.reshape([fmi.ny, fmi.nx]),
             su.reshape([fmi.ny, fmi.nx])])
    return ff0, ff2
示例#10
0
def test_synfast_flat_errors():
    with pytest.raises(ValueError):  # Negative spin
        nmt.synfast_flat(ST.nx,
                         ST.ny,
                         ST.lx,
                         ST.ly,
                         ST.cl1, [-1],
                         beam=ST.beam,
                         seed=1234)
    with pytest.raises(ValueError):  # Not enough power spectra
        nmt.synfast_flat(ST.nx,
                         ST.ny,
                         ST.lx,
                         ST.ly,
                         ST.cl2, [0, 2],
                         beam=np.array([ST.beam, ST.beam]),
                         seed=1234)
    with pytest.raises(ValueError):  # Not enough beams
        nmt.synfast_flat(ST.nx,
                         ST.ny,
                         ST.lx,
                         ST.ly,
                         ST.cl12, [0, 2],
                         beam=np.array([ST.beam]),
                         seed=1234)
    with pytest.raises(ValueError):  # Inconsistent beam
        nmt.synfast_flat(ST.nx,
                         ST.ny,
                         ST.lx,
                         ST.ly,
                         ST.cl12, [0, 2],
                         beam=np.array([ST.beam[:15], ST.beam[:15]]),
                         seed=1234)
    with pytest.raises(RuntimeError):  # Negative dimensions
        nmt.synfast_flat(ST.nx,
                         ST.ny,
                         -ST.lx,
                         ST.ly,
                         ST.cl2, [2],
                         beam=np.array([ST.beam]),
                         seed=1234)
    m = nmt.synfast_flat(ST.nx,
                         ST.ny,
                         ST.lx,
                         ST.ly,
                         ST.cl12, [0, 2],
                         beam=None,
                         seed=-1)
    assert m.shape == (3, ST.ny, ST.nx)
示例#11
0
Nx = 602
Ny = 410

#Gaussian simulations:
#pymaster allows you to generate random realizations of both spherical and
#flat fields given a power spectrum. These are returned as 2D arrays with
#shape (Ny,Nx)
l, cl_tt, cl_ee, cl_bb, cl_te = np.loadtxt('cls.txt', unpack=True)
beam = np.exp(-(0.25 * np.pi / 180 * l)**2)
cl_tt *= beam
cl_ee *= beam
cl_bb *= beam
cl_te *= beam
mpt, mpq, mpu = nmt.synfast_flat(Nx,
                                 Ny,
                                 Lx,
                                 Ly, [cl_tt, cl_ee, cl_bb, cl_te],
                                 pol=True)

#You can have a look at the maps using matplotlib's imshow:
plt.figure()
plt.imshow(mpt, interpolation='nearest', origin='lower')
plt.colorbar()
plt.figure()
plt.imshow(mpq, interpolation='nearest', origin='lower')
plt.colorbar()
plt.figure()
plt.imshow(mpu, interpolation='nearest', origin='lower')
plt.colorbar()
plt.show()
示例#12
0
# Gaussian simulations:
# pymaster allows you to generate random realizations of both spherical and
# flat fields given a power spectrum. These are returned as 2D arrays with
# shape (Ny,Nx)
l, cl_tt, cl_ee, cl_bb, cl_te = np.loadtxt(
    '../data/cls_cmb.txt', unpack=True
)  # this one goes plenty high enough: max(l) = 9134 corresponding to 1.2 arcmin, around the pixel scale
ell_max = np.pi / (pix * np.pi / 180)  # max expected l based on pixel size

# Generate random realisation of the power spectrum, just in temperature (spin-0).
# Set random seed for repeatability - doesn't work?!
rseed = 10
np.random.seed(rseed)
mpt, = nmt.synfast_flat(Nx,
                        Ny,
                        Lx,
                        Ly,
                        np.expand_dims(cl_tt, 0), [0],
                        seed=rseed)

# Convolve with instrumental beam
x = np.arange(Nx) - Nx / 2 - 1
y = np.arange(Ny) - Ny / 2 - 1
X, Y = np.meshgrid(x, y)
R = np.sqrt(X**2 + Y**2) * pix  # deg
Planck_res = 10. / 60  # deg
Planck_sig = Planck_res / 2. / np.sqrt(2 * np.log(2.))  # deg
PSF = np.exp(-R**2 / 2 / Planck_sig**2)
mpt_conv = convolve2d(mpt, PSF, mode='same') / np.sum(PSF)

# Check this method looks the same - can't check because random seed doesn't work!!
beam = np.exp(
示例#13
0
 def test_synfast_flat_errors(self):
     with self.assertRaises(ValueError):  #Single array for polarization
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cltt,
                          pol=True,
                          seed=1234)
     with self.assertRaises(
             ValueError):  #Inconsistent array for polarization
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly, [self.cltt, self.clee],
                          pol=True,
                          seed=1234)
     with self.assertRaises(
             ValueError):  #Inconsistent array for temperature-only
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl4,
                          seed=1234)
     with self.assertRaises(ValueError):  #Inconsistent beam
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl4,
                          pol=True,
                          beam=self.beam[:15],
                          seed=1234)
     with self.assertRaises(RuntimeError):  #Negative dimensions
         nmt.synfast_flat(self.nx,
                          self.ny,
                          -self.lx,
                          self.ly,
                          self.cl4,
                          pol=True,
                          beam=self.beam,
                          seed=1234)
     m = nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl4,
                          pol=True,
                          beam=self.beam,
                          seed=1234)
     self.assertEqual(m.shape, (3, self.ny, self.nx))
示例#14
0
    def test_synfast_flat_stats(self):
        #Temperature only
        m_t = nmt.synfast_flat(self.nx,
                               self.ny,
                               self.lx,
                               self.ly,
                               self.cltt,
                               beam=self.beam,
                               seed=1234)[0]
        #Polarization (omitting EB and TB)
        m_p1 = nmt.synfast_flat(self.nx,
                                self.ny,
                                self.lx,
                                self.ly,
                                self.cl4,
                                pol=True,
                                beam=self.beam,
                                seed=1234)
        #Polarization (full monty)
        m_p2 = nmt.synfast_flat(self.nx,
                                self.ny,
                                self.lx,
                                self.ly,
                                self.cl6,
                                pol=True,
                                beam=self.beam,
                                seed=1234)
        km, nk, ctt1 = self.anafast(m_t)
        km, nk, [ctt2, cee2, cbb2, cte2, ceb2, ctb2] = self.anafast(m_p1)
        km, nk, [ctt3, cee3, cbb3, cte3, ceb3, ctb3] = self.anafast(m_p1)
        lint = km.astype(int)

        def get_diff(c_d, c_t, c11, c22, c12, nmodes, facsig=5):
            diff = np.fabs(c_d - c_t[lint])  #Residuals
            sig = np.sqrt((c11[lint] * c22[lint] + c12[lint]**2) / nmodes)
            return diff < facsig * sig

        #Check TT
        self.assertTrue(
            get_diff(ctt1, self.cltt, self.cltt, self.cltt, self.cltt,
                     nk).all())
        self.assertTrue(
            get_diff(ctt2, self.cltt, self.cltt, self.cltt, self.cltt,
                     nk).all())
        self.assertTrue(
            get_diff(ctt3, self.cltt, self.cltt, self.cltt, self.cltt,
                     nk).all())
        #Check EE
        self.assertTrue(
            get_diff(cee2, self.clee, self.clee, self.clee, self.clee,
                     nk).all())
        self.assertTrue(
            get_diff(cee3, self.clee, self.clee, self.clee, self.clee,
                     nk).all())
        #Check BB
        self.assertTrue(
            get_diff(cbb2, self.clbb, self.clbb, self.clbb, self.clbb,
                     nk).all())
        self.assertTrue(
            get_diff(cbb3, self.clbb, self.clbb, self.clbb, self.clbb,
                     nk).all())
        #Check TE
        self.assertTrue(
            get_diff(cte2, self.clte, self.cltt, self.clee, self.clte,
                     nk).all())
        self.assertTrue(
            get_diff(cte3, self.clte, self.cltt, self.clee, self.clte,
                     nk).all())
        #Check EB
        self.assertTrue(
            get_diff(ceb2, self.cleb, self.clbb, self.clee, self.cleb,
                     nk).all())
        self.assertTrue(
            get_diff(ceb3, self.cleb, self.clbb, self.clee, self.cleb,
                     nk).all())
        #Check TB
        self.assertTrue(
            get_diff(ctb2, self.cltb, self.cltt, self.clbb, self.cltb,
                     nk).all())
        self.assertTrue(
            get_diff(ctb3, self.cltb, self.cltt, self.clbb, self.cltb,
                     nk).all())
示例#15
0
def get_sample_field():
    mpt = nmt.synfast_flat(Nx, Ny, Lx, Ly, clarr, pol=False)[0]
    return nmt.NmtFieldFlat(Lx, Ly, mask, [mpt])
import numpy as np
import pymaster as nmt
import flatmaps as fm
import matplotlib.pyplot as plt

DTOR = np.pi / 180

#Create information for a flat-sky map covering the GAMA15H field with resolution ~1.2 arcmin
mi = fm.FlatMapInfo([212.5, 222.], [-2., 2.], nx=396, ny=168)

#Generate a map as a Gaussian random field
larr = np.arange(8000.)
clarr = ((larr + 1000.) / 1000.)**(-1.5)
mp = (nmt.synfast_flat(mi.nx, mi.ny, mi.lx * DTOR, mi.ly * DTOR,
                       clarr)[0]).flatten()

#Generate up-graded and de-graded versions (just for show)
mi_hi, mp_hi = mi.u_grade(mp, 2)
mi_lo, mp_lo = mi.d_grade(mp, 2)
mi.view_map(mp, title='normal')
mi_hi.view_map(mp_hi, title='u-grade')
mi_lo.view_map(mp_lo, title='d-grade')

#Generate a mask (just remove the edges of the field)
mask = np.ones([mi.ny, mi.nx])
mask[:mi.ny / 5, :] = 0
mask[4 * mi.ny / 5:, :] = 0
mask[:, :mi.nx / 11] = 0
mask[:, 10 * mi.nx / 11:] = 0
mask = mask.flatten()
mi.view_map(mask * mp)
示例#17
0
  #Read theory power spectra
  nsims=10*n_cross*n_ell #Use 10 times as many simulations as there are data points
  print("Computing covariance from %d Gaussian simulations"%nsims)
  msk_binary=msk_t.reshape([fsk.ny,fsk.nx])
  weights=(msk_t*mskfrac).reshape([fsk.ny,fsk.nx])
  if temps is not None :
    conts=[[t.reshape([fsk.ny,fsk.nx])] for t in temps]
  else :
    conts=None
  
  cells_sims=[]
  for isim in range(nsims) :
    if isim%100==0 :
      print(" %d-th isim"%isim)
    #Generate random maps
    mps=nmt.synfast_flat(fsk.nx,fsk.ny,np.radians(fsk.lx),np.radians(fsk.ly),clth,np.zeros(nbins),seed=1000+isim)
    #Nmt fields
    flds=[nmt.NmtFieldFlat(np.radians(fsk.lx),np.radians(fsk.ly),weights,[m],templates=conts) for m in mps]
    #Compute power spectra (possibly with deprojection)
    i_x=0
    cells_this=[]
    for i in range(nbins) :
      for j in range(i,nbins) :
        cells_this.append(wsp.decouple_cell(nmt.compute_coupled_cell_flat(flds[i],flds[j],bpws),
                                            cl_bias=cl_deproj_all[i_x])[0])
        i_x+=1
    cells_sims.append(np.array(cells_this).flatten())
  cells_sims=np.array(cells_sims)
  #Save simulations for further analysis
  np.savez(o.prefix_out+".cls",cl_sims=cells_sims)
示例#18
0
 def test_synfast_flat_errors(self):
     with self.assertRaises(ValueError):  # Spin != 0 or 2
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl1, [1],
                          beam=self.beam,
                          seed=1234)
     with self.assertRaises(ValueError):  # Not enough power spectra
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl2, [0, 2],
                          beam=np.array([self.beam, self.beam]),
                          seed=1234)
     with self.assertRaises(ValueError):  # Not enough beams
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl12, [0, 2],
                          beam=np.array([self.beam]),
                          seed=1234)
     with self.assertRaises(ValueError):  # Inconsistent beam
         nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl12, [0, 2],
                          beam=np.array([self.beam[:15], self.beam[:15]]),
                          seed=1234)
     with self.assertRaises(RuntimeError):  # Negative dimensions
         nmt.synfast_flat(self.nx,
                          self.ny,
                          -self.lx,
                          self.ly,
                          self.cl2, [2],
                          beam=np.array([self.beam]),
                          seed=1234)
     m = nmt.synfast_flat(self.nx,
                          self.ny,
                          self.lx,
                          self.ly,
                          self.cl12, [0, 2],
                          beam=np.array([self.beam, self.beam]),
                          seed=1234)
     self.assertEqual(m.shape, (3, self.ny, self.nx))
示例#19
0
    mask_raw = mask.copy()
    if aposize > 0:
        mask = nmt.mask_apodization_flat(mask_raw.reshape([mi.ny, mi.nx]),
                                         mi.lx * DTOR, mi.ly * DTOR, aposize)
    mi.write_flat_map(fname_mask, mask.flatten())
mi, mask = fm.read_flat_map(fname_mask + '.npz')
mi = fm.FlatMapInfo([212.5, 222.], [-2., 2.], nx=792, ny=336)
mask = mask.reshape([mi.ny, mi.nx])
if plotres:
    mi.view_map(mask.flatten(), addColorbar=False, colorMax=1, colorMin=0)

if w_cont:
    if not os.path.isfile(prefix + "_contaminants.npz"):
        fgt, fgq, fgu = nmt.synfast_flat(int(mi.nx),
                                         int(mi.ny),
                                         mi.lx * DTOR,
                                         mi.ly * DTOR,
                                         [clttfg, cleefg, clbbfg, cltefg],
                                         pol=True)
        mi.write_flat_map(
            prefix + "_contaminants",
            np.array([fgt.flatten(),
                      fgq.flatten(),
                      fgu.flatten()]))
    else:
        mii, fgs = fm.read_flat_map(prefix + "_contaminants.npz", i_map=-1)
        fgt = fgs[0].reshape([mi.ny, mi.nx])
        fgq = fgs[1].reshape([mi.ny, mi.nx])
        fgu = fgs[2].reshape([mi.ny, mi.nx])

#Binning scheme
lx_rad = mi.lx * DTOR
示例#20
0
    hdul=fits.open(filename)
    w=WCS(hdul[0].header)

    maps=hdul[i_map].data
    ny,nx=maps.shape

    return w,maps

wcs,msk=read_flat_map("msk_flat.fits")
(ny,nx)=msk.shape
lx=np.fabs(nx*wcs.wcs.cdelt[0])*np.pi/180
ly=np.fabs(ny*wcs.wcs.cdelt[1])*np.pi/180
d_ell=20; lmax=500.; ledges=np.arange(int(lmax/d_ell)+1)*d_ell+2
b=nmt.NmtBinFlat(ledges[:-1],ledges[1:])
leff=b.get_effective_ells();
dt,dq,du=nmt.synfast_flat(int(nx),int(ny),lx,ly,
                          [cltt,cltt,0*cltt,cltt,0*cltt,0*cltt],[0,1])
write_flat_map("mps_sp1_flat.fits", np.array([dt,dq,du]),wcs,["T", "Q", "U"])
prefix = 'bm_f_sp1'
f0=nmt.NmtFieldFlat(lx,ly,msk,[dt])
f1=nmt.NmtFieldFlat(lx,ly,msk,[dq,du], spin=1)

w00=nmt.NmtWorkspaceFlat(); w00.compute_coupling_matrix(f0,f0,b);
w00.write_to(prefix+'_w00.fits')
c00=w00.decouple_cell(nmt.compute_coupled_cell_flat(f0,f0,b))
np.savetxt(prefix+'_c00.txt', np.transpose([leff, c00[0]]))

w01=nmt.NmtWorkspaceFlat(); w01.compute_coupling_matrix(f0,f1,b);
w01.write_to(prefix+'_w01.fits')
c01=w01.decouple_cell(nmt.compute_coupled_cell_flat(f0,f1,b))
np.savetxt(prefix+'_c01.txt', np.transpose([leff, c01[0], c01[1]]))
示例#21
0
        for tick in ax.yaxis.get_major_ticks():
            tick.label.set_fontsize(12)

def read_cls(fname) :
    l,ctt,cte,ctb,cee,ceb,cbe,cbb=np.loadtxt(fname,unpack=True);
    return l,ctt,cte,ctb,cee,ceb,cbe,cbb
l_th,clTT_th,clTE_th,clTB_th,clEE_th,clEB_th,clBE_th,clBB_th=read_cls(prefix_clean+"_cl_th.txt")
ndof=len(l_th)

print("Plotting contamination figure")
l,cltt,clee,clbb,clte,nltt,nlee,nlbb,nlte=np.loadtxt("data/cls_lss.txt",unpack=True)    
cltt[0]=0; clee[0]=0; clbb[0]=0; clte[0]=0;
nltt[0]=0; nlee[0]=0; nlbb[0]=0; nlte[0]=0;
fmi,mask_hsc=fm.read_flat_map("data/mask_lss_flat.fits")
dum,fgt=fm.read_flat_map("data/cont_lss_dust_flat.fits") #Dust
st,sq,su=nmt.synfast_flat(int(fmi.nx),int(fmi.ny),fmi.lx_rad,fmi.ly_rad,
                          [cltt+nltt,clte+nlte,0*cltt,clee+nlee,0*clee,clbb+nlbb],[0,2])
mask_hsc[:]=1
ff0=nmt.NmtFieldFlat(fmi.lx_rad,fmi.ly_rad,mask_hsc.reshape([fmi.ny,fmi.nx]),
                     [st+fgt.reshape([fmi.ny,fmi.nx])],
                     templates=fgt.reshape([1,1,fmi.ny,fmi.nx]))
plt.figure(figsize=(12,4.75))
fs_or=matplotlib.rcParams['font.size']
ax=plt.subplot(221,projection=fmi.wcs);
fmi.view_map(st.flatten(),ax=ax,addColorbar=False,title='Signal',
             colorMin=np.amin(st),colorMax=np.amax(st))
ax=plt.subplot(222,projection=fmi.wcs);
fmi.view_map(4*fgt,ax=ax,addColorbar=False,title='Contaminant',
             colorMin=np.amin(st),colorMax=np.amax(st))
ax=plt.subplot(223,projection=fmi.wcs);
fmi.view_map(st.flatten()+4*fgt,ax=ax,addColorbar=False,title='Contaminated map',
             colorMin=np.amin(st),colorMax=np.amax(st))
示例#22
0
plt.imshow(sl * mask, interpolation='nearest', origin='lower')
plt.figure()
plt.imshow(sw_q * mask, interpolation='nearest', origin='lower')
plt.figure()
plt.imshow(sw_u * mask, interpolation='nearest', origin='lower')
plt.show()
exit(1)

##########################
# Flat-sky stuff
wcs, msk = read_flat_map("msk_flat.fits")
(ny, nx) = msk.shape
lx = np.fabs(nx * wcs.wcs.cdelt[0]) * np.pi / 180
ly = np.fabs(ny * wcs.wcs.cdelt[1]) * np.pi / 180
dt, dq, du = nmt.synfast_flat(
    int(nx), int(ny), lx, ly,
    [cltt + nltt, clte + nlte, 0 * cltt, clee + nlee, 0 * clee, clbb + nlbb],
    [0, 2])
write_flat_map("mps_flat.fits", np.array([dt, dq, du]), wcs, ["T", "Q", "U"])
d_ell = 20
lmax = 500.
ledges = np.arange(int(lmax / d_ell) + 1) * d_ell + 2
_, st = read_flat_map("tmp_flat.fits", 0)
_, sq = read_flat_map("tmp_flat.fits", 1)
_, su = read_flat_map("tmp_flat.fits", 2)

b = nmt.NmtBinFlat(ledges[:-1], ledges[1:])
leff = b.get_effective_ells()

#No contaminants
prefix = 'bm_f_nc_np'
f0 = nmt.NmtFieldFlat(lx, ly, msk, [dt])
示例#23
0
    def get_covar_gaussim(self, lth, clth, bpws, wsp, temps, cl_dpj_all):
        """
        Estimate the power spectrum covariance from Gaussian simulations
        :param lth: list of multipoles.
        :param clth: list of guess power spectra sampled at the multipoles stored in `lth`.
        :param bpws: NaMaster bandpowers.
        :param wsp: NaMaster workspace.
        :param temps: list of contaminatn templates.
        :params cl_dpj_all: list of deprojection biases for each bin pair combination.
        """
        #Create a dummy file for the covariance MCM
        f = open(self.get_output_fname('cov_mcm', ext='dat'), "w")
        f.close()

        #Setup
        nsims = 10 * self.ncross * self.nell
        print("Computing covariance from %d Gaussian simulations" % nsims)
        msk_binary = self.msk_bi.reshape([self.fsk.ny, self.fsk.nx])
        weights = (self.msk_bi * self.mskfrac).reshape(
            [self.fsk.ny, self.fsk.nx])
        if temps is not None:
            conts = [[t.reshape([self.fsk.ny, self.fsk.nx])] for t in temps]
            cl_dpj = [[c] for c in cl_dpj_all]
        else:
            conts = None
            cl_dpj = [None for i in range(self.ncross)]

        #Iterate
        cells_sims = []
        for isim in range(nsims):
            if isim % 100 == 0:
                print(" %d-th sim" % isim)
            #Generate random maps
            mps = nmt.synfast_flat(self.fsk.nx,
                                   self.fsk.ny,
                                   np.radians(self.fsk.lx),
                                   np.radians(self.fsk.ly),
                                   clth,
                                   np.zeros(self.nbins),
                                   seed=1000 + isim)
            #Nmt fields
            flds = [
                nmt.NmtFieldFlat(np.radians(self.fsk.lx),
                                 np.radians(self.fsk.ly),
                                 weights, [m],
                                 templates=conts) for m in mps
            ]
            #Compute power spectra (possibly with deprojection)
            i_x = 0
            cells_this = []
            for i in range(self.nbins):
                for j in range(i, self.nbins):
                    cl = nmt.compute_coupled_cell_flat(flds[i], flds[j], bpws)
                    cells_this.append(
                        wsp.decouple_cell(cl, cl_bias=cl_dpj[i_x])[0])
                    i_x += 1
            cells_sims.append(np.array(cells_this).flatten())
        cells_sims = np.array(cells_sims)
        #Save simulations for further
        np.savez(self.get_output_fname('gaucov_sims'), cl_sims=cells_sims)

        #Compute covariance
        covar = np.cov(cells_sims.T)
        return covar
示例#24
0
# - Nx and Ny: the number of pixels in the x and y dimensions
Nx = 602
Ny = 410

#Gaussian simulations:
#pymaster allows you to generate random realizations of both spherical and
#flat fields given a power spectrum. These are returned as 2D arrays with
#shape (Ny,Nx)
l, cl_tt, cl_ee, cl_bb, cl_te = np.loadtxt('cls.txt', unpack=True)
beam = np.exp(-(0.25 * np.pi / 180 * l)**2)
cl_tt *= beam
cl_ee *= beam
cl_bb *= beam
cl_te *= beam
mpt, mpq, mpu = nmt.synfast_flat(
    Nx, Ny, Lx, Ly,
    np.array([cl_tt, cl_te, 0 * cl_tt, cl_ee, 0 * cl_ee, cl_bb]), [0, 2])

#You can have a look at the maps using matplotlib's imshow:
plt.figure()
plt.imshow(mpt, interpolation='nearest', origin='lower')
plt.colorbar()
plt.figure()
plt.imshow(mpq, interpolation='nearest', origin='lower')
plt.colorbar()
plt.figure()
plt.imshow(mpu, interpolation='nearest', origin='lower')
plt.colorbar()
plt.show()

#Masks:
示例#25
0
def get_sample_field():
    mpt = nmt.synfast_flat(Nx, Ny, Lx, Ly, np.array([clarr]), [0])[0]
    return nmt.NmtFieldFlat(Lx, Ly, mask, [mpt])
示例#26
0
    hdul = fits.open(filename)
    w = WCS(hdul[0].header)

    maps = hdul[i_map].data
    ny, nx = maps.shape

    return w, maps


wcs, msk = read_flat_map("msk_flat.fits")
(ny, nx) = msk.shape
lx = np.fabs(nx * wcs.wcs.cdelt[0]) * np.pi / 180
ly = np.fabs(ny * wcs.wcs.cdelt[1]) * np.pi / 180
dt, dq, du = nmt.synfast_flat(
    int(nx),
    int(ny),
    lx,
    ly, [cltt + nltt, clee + nlee, clbb + nlbb, clte + nlte],
    pol=True)
write_flat_map("mps_flat.fits", np.array([dt, dq, du]), wcs, ["T", "Q", "U"])
d_ell = 20
lmax = 500.
ledges = np.arange(int(lmax / d_ell) + 1) * d_ell + 2
_, st = read_flat_map("tmp_flat.fits", 0)
_, sq = read_flat_map("tmp_flat.fits", 1)
_, su = read_flat_map("tmp_flat.fits", 2)

b = nmt.NmtBinFlat(ledges[:-1], ledges[1:])
leff = b.get_effective_ells()

#No contaminants
prefix = 'bm_f_nc_np'