Beispiel #1
0
def gaussianfg(ctx):
    """Generate a full-sky Gaussian random field for synchrotron emission.
    """

    import numpy as np

    from cora.core import skysim
    from cora.util import hputil
    from cora.foreground import galaxy

    fsyn = galaxy.FullSkySynchrotron()
    fpol = galaxy.FullSkyPolarisedSynchrotron()

    # Set frequency parameters
    fsyn.frequencies = ctx.obj.freq
    nfreq = len(fsyn.frequencies)

    nside = ctx.obj.nside
    lmax = 3 * nside
    npol = 4 if ctx.obj.full_pol else 1

    cv_fg = np.zeros((lmax + 1, npol, nfreq, npol, nfreq))

    cv_fg[:, 0, :, 0, :] = skysim.clarray(fsyn.angular_powerspectrum, lmax,
                                          fsyn.nu_pixels)

    if ctx.obj.full_pol:
        cv_fg[:, 1, :, 1, :] = skysim.clarray(fpol.angular_powerspectrum, lmax,
                                              fsyn.nu_pixels)
        cv_fg[:, 2, :, 2, :] = skysim.clarray(fpol.angular_powerspectrum, lmax,
                                              fsyn.nu_pixels)

    cv_fg = cv_fg.reshape(lmax + 1, npol * nfreq, npol * nfreq)

    alms = skysim.mkfullsky(cv_fg, nside,
                            alms=True).reshape(npol, nfreq, lmax + 1, lmax + 1)
    alms = alms.transpose((1, 0, 2, 3))

    maps = hputil.sphtrans_inv_sky(alms, nside)
    write_map(ctx.obj.filename, maps, fsyn.frequencies, ctx.obj.freq_width,
              ctx.obj.include_pol)
Beispiel #2
0
def test_corr_foreground():
    """Test that the foreground power spectrum is being calculated correctly.

    Correct here is referenced to a specific version believed to have no errors.
    """
    cr = galaxy.FullSkySynchrotron()

    aps1 = cr.angular_powerspectrum(np.arange(1000), 800.0, 800.0)
    assert len(aps1) == 1000
    assert np.allclose(aps1.sum(), 75.47681191093129,
                       rtol=1e-7)  # Calculated for commit 02f4d1cd3f402d

    fa = np.linspace(400.0, 800.0, 64)
    aps2 = cr.angular_powerspectrum(
        np.arange(1000)[:, None, None], fa[None, :, None], fa[None, None, :])
    assert aps2.shape == (1000, 64, 64)

    # Calculated for commit 02f4d1cd3f402d
    v1 = 9.690708728692975e-06  # l=400, fi=40, fj=40
    v2 = 0.00017630767166797886  # l=200, fi=10, fj=40
    assert np.allclose(aps2[400, 40, 40], v1, rtol=1e-7)
    assert np.allclose(aps2[200, 10, 40], v2, rtol=1e-7)
Beispiel #3
0
def foreground_model(lmax, frequencies, npol, pol_frac=1.0, pol_length=None):

    fsyn = galaxy.FullSkySynchrotron()
    fps = PointSources()

    nfreq = frequencies.size

    cv_fg = np.zeros((npol, npol, lmax + 1, nfreq, nfreq))

    cv_fg[0, 0] = skysim.clarray(fsyn.angular_powerspectrum, lmax, frequencies)

    if npol >= 3:
        fpol = galaxy.FullSkyPolarisedSynchrotron()

        if pol_length is not None:
            fpol.zeta = pol_length

        cv_fg[1, 1] = pol_frac * skysim.clarray(fpol.angular_powerspectrum,
                                                lmax, frequencies)
        cv_fg[2, 2] = pol_frac * skysim.clarray(fpol.angular_powerspectrum,
                                                lmax, frequencies)

    cv_fg[0, 0] += skysim.clarray(fps.angular_powerspectrum, lmax, frequencies)
    return cv_fg