Ejemplo n.º 1
0
def generate_model(ra0, dec0, pointing_params, repeats=1, cross_scan=False,
                       span_angles=False, band="red", map_header=None, npixels_per_sample=0):
    """
    Generate a PACS projector.
    """
    pointing1 = tm.pacs_create_scan(ra0, dec0, **pointing_params)
    # create obs object
    obs1 = tm.PacsSimulation(pointing1, band)
    if map_header is None:
        map_header = obs1.get_map_header()        
    # create projector
    projection1 = tm.Projection(obs1, header=map_header,
                                npixels_per_sample=npixels_per_sample)
    P = lo.aslinearoperator(projection1)
    # cross scan
    if cross_scan:
        pointing_params["scan_angle"] += 90.
        pointing2 = tm.pacs_create_scan(ra0, dec0, **pointing_params)
        obs2 = tm.PacsSimulation(pointing2, band)
        projection2 = tm.Projection(obs2, header=map_header,
                                    npixels_per_sample=npixels_per_sample)
        P2 = lo.aslinearoperator(projection2)
        P = lo.concatenate((P, P2))
    # repeats
    if repeats > 1:
        P = lo.concatenate((P, ) * repeats)
    if span_angles:
        if cross_scan:
            raise ValueError("Span_angles and cross_scan are incompatible.")
        # equally spaced but exclude 0 and 90
        angles = np.linspace(0, 90, repeats + 2)[1:-1]
        for a in angles:
            pointing_params["scan_angle"] = a
            pointing2 = tm.pacs_create_scan(ra0, dec0, **pointing_params)
            obs2 = tm.PacsSimulation(pointing2, band)
            projection2 = tm.Projection(obs2, header=map_header,
                                        npixels_per_sample=npixels_per_sample)
            P2 = lo.aslinearoperator(projection2)
            P = lo.concatenate((P, P2))
    # noise
    N = generate_noise_filter(obs1, P, band)
    # covered area
    map_shape = map_header['NAXIS2'], map_header['NAXIS1']
    coverage = (P.T * np.ones(P.shape[0])).reshape(map_shape)
    seen = coverage != 0
    M = lo.decimate(coverage < 10)
    # global model
    H = N * P * M.T
    return H
Ejemplo n.º 2
0
def cs(tod, factor, dtype=np.float64):
    """ Compressed sensing compression mode"""
    # shape
    shape = tod.shape
    # transform
    H = lo.fht(shape, axes=0, dtype=dtype)
    # mask
    start_ind = np.resize(np.arange(factor), shape[0])
    mask = np.ones(shape, dtype=bool)
    for i in xrange(mask.shape[0]):
        mask[i, start_ind[i]::factor] = 0.
    # if frames number not a multiple of factor, mask
    mask[:, factor * np.floor(shape[1] / float(factor)):] = 0.
    M = lo.decimate(mask, dtype=dtype)
    C = M * H
    return C
Ejemplo n.º 3
0
def cs(tod, factor, dtype=np.float64):
    """ Compressed sensing compression mode"""
    # shape
    shape = tod.shape
    # transform
    H = lo.fht(shape, axes=0, dtype=dtype)
    # mask
    start_ind = np.resize(np.arange(factor), shape[0])
    mask = np.ones(shape, dtype=bool)
    for i in xrange(mask.shape[0]):
        mask[i, start_ind[i]::factor] = 0.
    # if frames number not a multiple of factor, mask
    mask[:, factor * np.floor(shape[1] / float(factor)):] = 0.
    M = lo.decimate(mask, dtype=dtype)
    C = M * H
    return C
Ejemplo n.º 4
0
def map_mask(tod, model, threshold=10):
    import linear_operators as lo
    import numpy as np

    return lo.decimate(model.T(np.ones(tod.shape)) < threshold)
Ejemplo n.º 5
0
def map_mask(tod, model, threshold=10):
    import linear_operators as lo
    import numpy as np

    return lo.decimate(model.T(np.ones(tod.shape)) < threshold)
Ejemplo n.º 6
0
def decimate_temporal(tod, factor):
    shape = tod.shape
    mask = np.ones(shape, dtype=bool)
    mask[:, 0::factor] = 0.
    return lo.decimate(mask)
Ejemplo n.º 7
0
def decimate_temporal(tod, factor):
    shape = tod.shape
    mask = np.ones(shape, dtype=bool)
    mask[:, 0::factor] = 0.
    return lo.decimate(mask)