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
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
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)
def decimate_temporal(tod, factor): shape = tod.shape mask = np.ones(shape, dtype=bool) mask[:, 0::factor] = 0. return lo.decimate(mask)