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
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])
def test_duration(self): dump_track("test", numpy.arange(50)) self.assertEqual(parse_x_duration("test"), 49)
def test_length(self): dump_track("test", numpy.arange(50)) self.assertEqual(parse_x_length("test"), 50)
def test_step(self): dump_track("test", numpy.arange(50)) self.assertEqual(parse_x_step("test"), 1)