Ejemplo n.º 1
0
def get_qubic_map(instrument, sampling, scene, input_maps, withplanck=True, covlim=0.1):
    acq = QubicAcquisition(instrument, sampling, scene, photon_noise=True, effective_duration=1)
    C = acq.get_convolution_peak_operator()
    coverage = acq.get_coverage()
    observed = coverage > covlim * np.max(coverage)
    acq_restricted = acq[:, :, observed]
    H = acq_restricted.get_operator()
    x0_convolved = C(input_maps)
    if not withplanck:
        pack = PackOperator(observed, broadcast='rightward')
        y_noiseless = H(pack(x0_convolved))
        noise = acq.get_noise()
        y = y_noiseless + noise
        invntt = acq.get_invntt_operator()
        A = H.T * invntt * H
        b = (H.T * invntt)(y)
        preconditioner = DiagonalOperator(1 / coverage[observed], broadcast='rightward')
        solution_qubic = pcg(A, b, M=preconditioner, disp=True, tol=1e-3, maxiter=1000)
        maps = pack.T(solution_qubic['x'])
        maps[~observed] = 0
    else:
        acq_planck = PlanckAcquisition(150, acq.scene, true_sky=x0_convolved)#, fix_seed=True)
        acq_fusion = QubicPlanckAcquisition(acq, acq_planck)
        map_planck_obs=acq_planck.get_observation()
        H = acq_fusion.get_operator()
        invntt = acq_fusion.get_invntt_operator()
        y = acq_fusion.get_observation()
        A = H.T * invntt * H
        b = H.T * invntt * y
        solution_fusion = pcg(A, b, disp=True, maxiter=1000, tol=1e-3)
        maps = solution_fusion['x']
        maps[~observed] = 0
    x0_convolved[~observed] = 0
    return(maps, x0_convolved, observed)    
Ejemplo n.º 2
0
def test():
    np.random.seed(0)
    scene = SceneHealpixCMB(256, kind='IQU')
    acq = PlanckAcquisition(150, scene, true_sky=SKY)
    obs = acq.get_observation()
    invNtt = acq.get_invntt_operator()
    chi2_red = np.sum((obs - SKY) * invNtt(obs - SKY) / SKY.size)
    assert abs(chi2_red - 1) <= 0.001
Ejemplo n.º 3
0
def test():
    np.random.seed(0)
    scene = SceneHealpixCMB(256, kind='IQU')
    acq = PlanckAcquisition(150, scene, true_sky=SKY)
    obs = acq.get_observation()
    invNtt = acq.get_invntt_operator()
    chi2_red = np.sum((obs - SKY) * invNtt(obs - SKY) / SKY.size)
    assert abs(chi2_red - 1) <= 0.001
Ejemplo n.º 4
0
def test_noiseless():
    sampling = create_random_pointings([0, 90], 100, 10)
    acq_qubic = QubicAcquisition(150, sampling)
    acq_planck = PlanckAcquisition(150, acq_qubic.scene, true_sky=SKY)
    acq_fusion = QubicPlanckAcquisition(acq_qubic, acq_planck)
    np.random.seed(0)
    y1 = acq_fusion.get_observation()
    np.random.seed(0)
    y2 = acq_fusion.get_observation(noiseless=True) + acq_fusion.get_noise()
    assert_same(y1, y2)
Ejemplo n.º 5
0
mp.figure(1)
_max = [300, 5, 5]
for i, (inp, rec, iqu) in enumerate(zip(maps_convolved.T, maps_recon.T, 'IQU')):
    inp[cov < cov.max() * 0.01] = hp.UNSEEN
    rec[cov < cov.max() * 0.01] = hp.UNSEEN
    diff = inp - rec
    diff[cov < cov.max() * 0.01] = hp.UNSEEN
    hp.gnomview(inp, rot=center_gal, reso=5, xsize=700, fig=1,
        sub=(3, 3, i + 1), min=-_max[i], max=_max[i], title='Input, {}'.format(iqu))
    hp.gnomview(rec, rot=center_gal, reso=5, xsize=700, fig=1,
        sub=(3, 3, i + 4), min=-_max[i], max=_max[i], title='Recon, {}'.format(iqu))
    hp.gnomview(diff, rot=center_gal, reso=5, xsize=700, fig=1,
        sub=(3, 3, i+7), min=-_max[i], max=_max[i], title='Diff, {}'.format(iqu))

# Now let's play with the fusion acquisition
planck = PlanckAcquisition(band, a.scene, true_sky=maps_convolved)
acq_fusion = QubicPlanckAcquisition(a, acq_planck)

TOD, maps_convolved = a.get_observation(x0)
maps_recon_fusion = a.tod2map(TOD, tol=tol)

mp.figure(2)
for i, (inp, rec, iqu) in enumerate(zip(maps_convolved.T, maps_recon_fusion.T, 'IQU')):
    inp[cov < cov.max() * 0.01] = hp.UNSEEN
    rec[cov < cov.max() * 0.01] = hp.UNSEEN
    diff = inp - rec
    diff[cov < cov.max() * 0.01] = hp.UNSEEN
    hp.gnomview(inp, rot=center_gal, reso=5, xsize=700, fig=1,
        sub=(3, 3, i + 1), min=-_max[i], max=_max[i], title='Input, {}'.format(iqu))
    hp.gnomview(rec, rot=center_gal, reso=5, xsize=700, fig=1,
        sub=(3, 3, i + 4), min=-_max[i], max=_max[i], title='Recon, {}'.format(iqu))
Ejemplo n.º 6
0
x0 = read_map(PATH + 'syn256_pol.fits')

q = MultiQubicInstrument(NPOINTS=NPOINTS,
                         NFREQS=NFREQS,
                         filter_name=filter_name,
                         detector_nep=detector_nep)

C_nf = q.get_convolution_peak_operator()
conv_sky_ = C_nf(x0)

fwhm_t = np.sqrt(q.synthbeam.peak150.fwhm**2 - C_nf.fwhm**2)
C_transf = HealpixConvolutionGaussianOperator(fwhm=fwhm_t)

acq = MultiQubicAcquisition(q, sampling, scene=scene)
acq_planck = PlanckAcquisition(np.int(filter_name / 1e9),
                               scene,
                               true_sky=conv_sky_)
H = acq.get_operator()
COV = acq.get_coverage(H)

conv_sky = C_transf(conv_sky_)

x_rec_fusion = read_map('maps_test/fusion_n{}_N{}_s{}_mi{}.fits'.format(
    NFREQS, NPOINTS, len(sampling), maxiter))

x_rec_qubic = read_map('maps_test/qubic_n{}_N{}_s{}_mi{}.fits'.format(
    NFREQS, NPOINTS, len(sampling), maxiter))


# some display
def display(input, msg, iplot=1):
Ejemplo n.º 7
0
racenter = 0.0  # deg
deccenter = -57.0  # deg
maxiter = 1000
tol = 5e-6

sky = read_map(PATH + 'syn256_pol.fits')
nside = 256
sampling = create_random_pointings([racenter, deccenter], 1000, 10)
scene = QubicScene(nside)

acq_qubic = QubicAcquisition(150, sampling, scene, effective_duration=1)
convolved_sky = acq_qubic.instrument.get_convolution_peak_operator()(sky)
cov = acq_qubic.get_coverage()
mask = cov < cov.max() * 0.2
acq_planck = PlanckAcquisition(150,
                               acq_qubic.scene,
                               true_sky=convolved_sky,
                               mask=mask)
acq_fusion = QubicPlanckAcquisition(acq_qubic, acq_planck)

H = acq_fusion.get_operator()
invntt = acq_fusion.get_invntt_operator()
y = acq_fusion.get_observation()

A = H.T * invntt * H
b = H.T * invntt * y

solution_fusion = pcg(A, b, disp=True, maxiter=maxiter, tol=tol)

acq_qubic = QubicAcquisition(150, sampling, scene, effective_duration=1)
H = acq_qubic.get_operator()
invntt = acq_qubic.get_invntt_operator()
Ejemplo n.º 8
0
    maps = getmapsready(allfiles[i], newns, pixok)
    allmaps[i,:,:] = maps[pixok,:].T

meanmaps = np.mean(allmaps,axis=0)
iqumeanmaps = np.zeros((12*newns**2, 3))
for i in [0,1,2]: iqumeanmaps[pixok, i] = meanmaps[i,:]
display(iqumeanmaps, range=[1, 1, 1])


from qubic import (QubicAcquisition,
                   PlanckAcquisition,
                   QubicPlanckAcquisition, QubicScene)
nside = 256
scene = QubicScene(nside)
sky = scene.zeros()
acq_planck = PlanckAcquisition(150, scene, true_sky=sky)
obs_planck = acq_planck.get_observation()
Iplanck = hp.ud_grade(obs_planck[:,0], nside_out=newns)
Qplanck = hp.ud_grade(obs_planck[:,1], nside_out=newns)
Uplanck = hp.ud_grade(obs_planck[:,2], nside_out=newns)
planckmaps = np.array([Iplanck, Qplanck, Uplanck]).T

figure()
clf()
display(iqumeanmaps, range=[1, 1, 1])
figure()
clf()
display(iqumeanmaps-planckmaps, range=[1, 1, 1])


clf()