Пример #1
0
def pca_common_script(
    paths_in, dtype, sub, weights, correlation, reference, output_prefix,
    num_levels, dump_pcs, unit_name, unit
):
    """Shared code by tr-pca and tr-pca-geom.

       This function has only one purpose: bugs common to tr-pca and tr-pca-geom
       have to be fixed only once.
    """
    if num_levels < 2:
        raise ValueError("num_levels must be at least 2.")
    # call pca routine in tracks.api
    mtr = MultiTracksReader(paths_in, dtype, sub=sub)
    cm, overlap, cbs = pca_levels(mtr, num_levels, weights, correlation, reference)

    # dump some stuff to disk
    dump_track("%s.cov" % output_prefix, cm.cov.ravel())
    dump_track("%s.evals" % output_prefix, cm.evals)
    dump_track("%s.sigmas" % output_prefix, cm.sigmas)
    for i in xrange(len(cm.evals)):
        dump_track("%s.mode.%07i" % (output_prefix, i), cm.evecs[:,i])

    # compute the cosine contents and optionally write the principal components to disk
    mtr = MultiTracksReader(paths_in, dtype, sub=sub)
    for data in mtr.iter_buffers():
        data = data["data"]
        for level in xrange(num_levels):
            if level==0 and dump_pcs:
                cbs[level].project_data(data, output_prefix)
            else:
                cbs[level].project_data(data)
    dump_track("%s.ccs" % output_prefix, cm.ccs)
    dump_track("%s.cosamp" % output_prefix, cm.dot_data_cos/cm.sqnorms_cos)

    # Print some nice screen output with the most relevant results
    print "Overlap between the covariance of the first and the second half of the trajectory:"
    print "  %.2f %%" % (overlap*100)
    print
    white = (" "*len(unit_name))
    for level in xrange(num_levels):
        sigmas, sigmas_err, ccs, ccs_err, overlap_multi = cbs[level].get_averages()
        print "Level %i: averages over blocks with size total/%i=%i" % (
            level, 2**level, mtr.shortest/(2**level)
        )
        if level > 0:
            print "RMSD/RMSA of the covariance matrices of each block: %.2f %%" % (overlap_multi*100)
            print
        if level == 0:
            print "            Sigma [%s]    Cosine content  " % unit_name
            print "           ------------%s  ---------------- " % white
            for i in xrange(len(cm.sigmas)):
                print " %7i    %9.3e%s    %8.2f %%" % (
                    i, sigmas[i]/unit, white, ccs[i]*100
                )
        else:
            print "               Sigma [%s]                   Cosine content  " % unit_name
            print "          ----------------------%s      ---------------------- " % white
            for i in xrange(len(cm.sigmas)):
                print " %7i   %9.3e +- %9.3e%s    %8.2f %% +- %6.2f %%" % (
                    i, sigmas[i]/unit, sigmas_err[i]/unit, white,
                    ccs[i]*100, ccs_err[i]*100
                )
        print
        print
        if level > 0:
            dump_track("%s.ccs.%07i" % (output_prefix, level), ccs)
            dump_track("%s.ccs_err.%07i" % (output_prefix, level), ccs_err)
            dump_track("%s.sigmas.%07i" % (output_prefix, level), sigmas)
            dump_track("%s.sigmas_err.%07i" % (output_prefix, level), sigmas_err)

    return cm.mean
Пример #2
0
 def dump_to_tracks(self, prefix):
     dump_track("%s.x" % prefix, self.data[0])
     dump_track("%s.y" % prefix, self.data[1])
     dump_track("%s.z" % prefix, self.data[2])
Пример #3
0
 def test_duration(self):
     dump_track("test", numpy.arange(50))
     self.assertEqual(parse_x_duration("test"), 49)
Пример #4
0
 def test_length(self):
     dump_track("test", numpy.arange(50))
     self.assertEqual(parse_x_length("test"), 50)
Пример #5
0
 def test_step(self):
     dump_track("test", numpy.arange(50))
     self.assertEqual(parse_x_step("test"), 1)