Beispiel #1
0
    def collect_mmodes_kl(self):
        def evfunc(mi):
            evf = np.zeros(self.beamtransfer.ndofmax, dtype=np.complex128)

            ev = self.mmode_kl(mi)
            if ev.size > 0:
                evf[-ev.size:] = ev

            return evf

        if mpiutil.rank0:
            print("Creating eigenvalues file (process 0 only).")

        mlist = list(range(self.telescope.mmax + 1))
        shape = (self.beamtransfer.ndofmax, )
        evarray = kltransform.collect_m_array(mlist, evfunc, shape,
                                              np.complex128)

        if mpiutil.rank0:
            fname = self.output_directory + ("/klmodes_%s_%f.hdf5" %
                                             (self.klname, self.klthreshold))
            if os.path.exists(fname):
                print("File: %s exists. Skipping..." % (fname))
                return

            with h5py.File(fname, "w") as f:
                f.create_dataset("evals", data=evarray)
Beispiel #2
0
    def _collect(self):
        def evfunc(mi):

            ta = np.zeros(shape, dtype=np.float64)

            f = h5py.File(self._evfile % mi, "r")

            if f["evals_full"].shape[0] > 0:
                ev = f["evals_full"][:]
                fev = f["f_evals"][:]
                ta[0, -ev.size :] = ev
                ta[1, -fev.size :] = fev

            f.close()

            return ta

        if mpiutil.rank0:
            logger.info("Creating eigenvalues file (process 0 only).")

        mlist = list(range(self.telescope.mmax + 1))
        shape = (2, self.beamtransfer.ndofmax)

        evarray = kltransform.collect_m_array(mlist, evfunc, shape, np.float64)

        if mpiutil.rank0:
            fname = self.evdir + "/evals.hdf5"
            if os.path.exists(fname):
                logger.info("File: {fname} exists. Skipping...")
                return

            f = h5py.File(fname, "w")
            f.create_dataset("evals", data=evarray[:, 0])
            f.create_dataset("f_evals", data=evarray[:, 1])
            f.close()
Beispiel #3
0
    def collect_mmodes_kl(self):

        def evfunc(mi):
            evf = np.zeros(self.beamtransfer.ndofmax, dtype=np.complex128)

            ev = self.mmode_kl(mi)
            if ev.size > 0:
                evf[-ev.size:] = ev

            return evf

        if mpiutil.rank0:
            print "Creating eigenvalues file (process 0 only)."
        
        mlist = range(self.telescope.mmax+1)
        shape = (self.beamtransfer.ndofmax, )
        evarray = kltransform.collect_m_array(mlist, evfunc, shape, np.complex128)

        if mpiutil.rank0:
            fname =  self.output_directory + ("/klmodes_%s_%f.hdf5"% (self.klname, self.klthreshold))
            if os.path.exists(fname):
                print "File: %s exists. Skipping..." % (fname)
                return

            with h5py.File(fname, 'w') as f:
                f.create_dataset('evals', data=evarray)
Beispiel #4
0
    def _collect(self):

        def evfunc(mi):


            ta = np.zeros(shape, dtype=np.float64)

            f = h5py.File(self._evfile % mi, 'r')

            if f['evals_full'].shape[0] > 0:
                ev = f['evals_full'][:]
                fev = f['f_evals'][:]
                ta[0, -ev.size:] = ev
                ta[1, -fev.size:] = fev

            f.close()

            return ta

        if mpiutil.rank0:
            print "Creating eigenvalues file (process 0 only)."

        mlist = range(self.telescope.mmax+1)
        shape = (2, self.beamtransfer.ndofmax)

        evarray = kltransform.collect_m_array(mlist, evfunc, shape, np.float64)

        if mpiutil.rank0:
            if os.path.exists(self.evdir + "/evals.hdf5"):
                print "File: %s exists. Skipping..." % (self.evdir + "/evals.hdf5")
                return

            f = h5py.File(self.evdir + "/evals.hdf5", 'w')
            f.create_dataset('evals', data=evarray[:, 0])
            f.create_dataset('f_evals', data=evarray[:, 1])
            f.close()
Beispiel #5
0
            bf = bf[:, :3, :]
            bf = bf.reshape(bt.ntel, 3 * (bt.telescope.lmax + 1))

            # Weight by noise matrix
            noisew = bt.telescope.noisepower(np.arange(bt.telescope.npairs),
                                             fi).flatten()**(-0.5)
            noisew = np.concatenate([noisew, noisew])
            bf = bf * noisew[:, np.newaxis]

            # Regularise me.
            bf = bf + bf.max() * 1e-11 * np.eye(bf.shape[0], bf.shape[1])

            u, s, v = la.svd(bf)
            # s = np.linalg.svd(bf, compute_uv=False)
            sv[fi] = s

    return sv


svdspectrum = kltransform.collect_m_array(list(range(bt.telescope.mmax + 1)),
                                          svd_func, (bt.nfreq, svd_len),
                                          np.float64)

if mpiutil.rank0:

    with h5py.File(bt.directory + "/allsvdspectrum.hdf5", "w") as f:

        f.create_dataset("singularvalues", data=svdspectrum)

mpiutil.barrier()
            bf = bf.reshape(bt.ntel, 3 * (bt.telescope.lmax+1))

            # Weight by noise matrix
            noisew = bt.telescope.noisepower(np.arange(bt.telescope.npairs), fi).flatten()**(-0.5)
            noisew = np.concatenate([noisew, noisew])
            bf = bf * noisew[:, np.newaxis]

            # Regularise me.
            bf = bf + bf.max() * 1e-11 * np.eye(bf.shape[0], bf.shape[1])

            u, s, v = la.svd(bf)
            #s = np.linalg.svd(bf, compute_uv=False)
            sv[fi] = s

    return sv


    

    
svdspectrum = kltransform.collect_m_array(range(bt.telescope.mmax + 1), svd_func, (bt.nfreq, svd_len,), np.float64)

if mpiutil.rank0:

    with h5py.File(bt.directory + '/allsvdspectrum.hdf5', 'w') as f:

        f.create_dataset('singularvalues', data=svdspectrum)

mpiutil.barrier()

Beispiel #7
0
    def generate(self):

        for mentry in self.maps:

            mfile = mentry['file']
            stem = mentry['stem']

            if mpiutil.rank0 and not os.path.exists(os.path.dirname(stem)):
                os.makedirs(os.path.dirname(stem))

            mpiutil.barrier()

            if self.copy_orig:
                shutil.copy(mfile, stem + 'orig.hdf5')

            print "============\nProjecting file %s\n============\n" % mfile

            ## Load map and perform spherical harmonic transform
            if mpiutil.rank0:
                # Calculate alm's and broadcast
                print "Read in skymap."
                f = h5py.File(mfile, 'r')
                skymap = f['map'][:]
                f.close()
                nside = healpy.get_nside(skymap[0])
                alm = hputil.sphtrans_sky(skymap, lmax=self.telescope.lmax)
            else:
                alm = None

            ## Function to write out a map from the collected array of alms
            def _write_map_from_almarray(almp, filename, attrs=None):
                if mpiutil.rank0:

                    almp = np.squeeze(np.transpose(almp, axes=(2, 1, 3, 0)))
                    almf = np.zeros(
                        (almp.shape[0], almp.shape[1], almp.shape[1]),
                        dtype=np.complex128)
                    almf[:, :, :almp.shape[2]] = almp

                    pmap = hputil.sphtrans_inv_sky(almf, self.nside)

                    f = h5py.File(filename, 'w')
                    if attrs is not None:
                        for key, val in attrs.items():
                            f.attrs[repr(key)] = val
                    f.create_dataset('/map', data=pmap)
                    f.close()

            mpiutil.barrier()

            ## Broadcast set of alms to the world
            alm = mpiutil.world.bcast(alm, root=0)
            mlist = range(self.kltransform.telescope.mmax + 1)
            nevals = self.beamtransfer.ntel * self.beamtransfer.nfreq

            ## Construct beam projection of map
            if self.beam_proj:

                def proj_beam(mi):
                    print "Projecting %i" % mi
                    bproj = self.beamtransfer.project_vector_forward(
                        mi, alm[:, :, mi]).flatten()
                    return self.beamtransfer.project_vector_backward(mi, bproj)

                shape = (self.telescope.nfreq, self.telescope.num_pol_sky,
                         self.telescope.lmax + 1)
                almp = kltransform.collect_m_array(mlist, proj_beam, shape,
                                                   np.complex128)
                _write_map_from_almarray(almp, stem + "beam.hdf5")

            mpiutil.barrier()

            ## Construct EV projection of map
            if self.evec_proj:

                def proj_evec(mi):
                    ## Worker function for mapping over list and projecting onto signal modes.
                    print "Projecting %i" % mi
                    p2 = np.zeros(nevals, dtype=np.complex128)
                    if self.kltransform.modes_m(mi)[0] is not None:
                        p1 = self.kltransform.project_sky_vector_forward(
                            mi, alm[:, :, mi])
                        p2[-p1.size:] = p1

                    return p2

                shape = (nevals, )
                evp = kltransform.collect_m_array(mlist, proj_evec, shape,
                                                  np.complex128)

                if mpiutil.rank0:
                    f = h5py.File(stem + "ev.hdf5", 'w')
                    f.create_dataset("/evec_proj", data=evp)
                    f.close()

            mpiutil.barrier()

            ## Iterate over noise cuts and filter out noise.
            for cut in self.thresholds:

                def filt_kl(mi):
                    ## Worker function for mapping over list and projecting onto signal modes.
                    print "Projecting %i" % mi

                    mvals, mvecs = self.kltransform.modes_m(mi, threshold=cut)

                    if mvals is None:
                        return None

                    ev_vec = self.kltransform.project_sky_vector_forward(
                        mi, alm[:, :, mi], threshold=cut)
                    tel_vec = self.kltransform.project_tel_vector_backward(
                        mi, ev_vec, threshold=cut)

                    alm2 = self.beamtransfer.project_vector_backward(
                        mi, tel_vec)

                    return alm2

                shape = (self.telescope.nfreq, self.telescope.num_pol_sky,
                         self.telescope.lmax + 1)
                almp = kltransform.collect_m_array(mlist, filt_kl, shape,
                                                   np.complex128)
                _write_map_from_almarray(almp, stem + ("kl_%g.hdf5" % cut),
                                         {'threshold': cut})

                mpiutil.barrier()
Beispiel #8
0
    def generate(self):

        for mentry in self.maps:

            mfile = mentry['file']
            stem = mentry['stem']

            if mpiutil.rank0 and not os.path.exists(os.path.dirname(stem)):
                os.makedirs(os.path.dirname(stem))

            mpiutil.barrier()

            if self.copy_orig:
                shutil.copy(mfile, stem + 'orig.hdf5')

            print "============\nProjecting file %s\n============\n" % mfile

            ## Load map and perform spherical harmonic transform
            if mpiutil.rank0:
                # Calculate alm's and broadcast
                print "Read in skymap."
                f = h5py.File(mfile, 'r')
                skymap = f['map'][:]
                f.close()
                nside = healpy.get_nside(skymap[0])
                alm = hputil.sphtrans_sky(skymap, lmax=self.telescope.lmax)
            else:
                alm = None

            ## Function to write out a map from the collected array of alms
            def _write_map_from_almarray(almp, filename, attrs=None):
                if mpiutil.rank0:

                    almp = np.squeeze(np.transpose(almp, axes=(2, 1, 3, 0)))
                    almf = np.zeros((almp.shape[0], almp.shape[1], almp.shape[1]), dtype=np.complex128)
                    almf[:, :, :almp.shape[2]] = almp

                    pmap = hputil.sphtrans_inv_sky(almf, self.nside)

                    f = h5py.File(filename, 'w')
                    if attrs is not None:
                        for key, val in attrs.items():
                            f.attrs[repr(key)] = val
                    f.create_dataset('/map', data=pmap)
                    f.close()

            mpiutil.barrier()

            ## Broadcast set of alms to the world
            alm = mpiutil.world.bcast(alm, root=0)
            mlist = range(self.kltransform.telescope.mmax+1)
            nevals = self.beamtransfer.ntel * self.beamtransfer.nfreq


            ## Construct beam projection of map
            if self.beam_proj:

                def proj_beam(mi):
                    print "Projecting %i" % mi
                    bproj = self.beamtransfer.project_vector_forward(mi, alm[:, :, mi]).flatten()
                    return self.beamtransfer.project_vector_backward(mi, bproj)

                shape = (self.telescope.nfreq, self.telescope.num_pol_sky, self.telescope.lmax+1)
                almp = kltransform.collect_m_array(mlist, proj_beam, shape, np.complex128)
                _write_map_from_almarray(almp, stem + "beam.hdf5")

            mpiutil.barrier()

            ## Construct EV projection of map
            if self.evec_proj:

                def proj_evec(mi):
                    ## Worker function for mapping over list and projecting onto signal modes.
                    print "Projecting %i" % mi
                    p2 = np.zeros(nevals, dtype=np.complex128)
                    if self.kltransform.modes_m(mi)[0] is not None:
                        p1 = self.kltransform.project_sky_vector_forward(mi, alm[:, :, mi])
                        p2[-p1.size:] = p1

                    return p2

                shape = (nevals,)
                evp = kltransform.collect_m_array(mlist, proj_evec, shape, np.complex128)

                if mpiutil.rank0:
                    f = h5py.File(stem + "ev.hdf5", 'w')
                    f.create_dataset("/evec_proj", data=evp)
                    f.close()

            mpiutil.barrier()

            ## Iterate over noise cuts and filter out noise.
            for cut in self.thresholds:

                def filt_kl(mi):
                    ## Worker function for mapping over list and projecting onto signal modes.
                    print "Projecting %i" % mi

                    mvals, mvecs = self.kltransform.modes_m(mi, threshold=cut)

                    if mvals is None:
                        return None

                    ev_vec = self.kltransform.project_sky_vector_forward(mi, alm[:, :, mi], threshold=cut)
                    tel_vec = self.kltransform.project_tel_vector_backward(mi, ev_vec, threshold=cut)

                    alm2 = self.beamtransfer.project_vector_backward(mi, tel_vec)

                    return alm2

                shape = (self.telescope.nfreq, self.telescope.num_pol_sky, self.telescope.lmax+1)
                almp = kltransform.collect_m_array(mlist, filt_kl, shape, np.complex128)
                _write_map_from_almarray(almp, stem + ("kl_%g.hdf5" % cut), {'threshold' : cut})

                mpiutil.barrier()