@@ -476,7 +476,10 @@ int ParticleShapeStatistics::read_point_files(const std::string& s) {
476476}
477477
478478// ---------------------------------------------------------------------------
479- ParticleShapeStatistics::ParticleShapeStatistics (std::shared_ptr<Project> project) {
479+ ParticleShapeStatistics::ParticleShapeStatistics (std::shared_ptr<Project> project) { load_from_project (project); }
480+
481+ // ---------------------------------------------------------------------------
482+ void ParticleShapeStatistics::load_from_project (std::shared_ptr<Project> project) {
480483 std::vector<Eigen::VectorXd> points;
481484 std::vector<int > groups;
482485 for (auto & s : project->get_subjects ()) {
@@ -497,7 +500,7 @@ ParticleShapeStatistics::ParticleShapeStatistics(std::shared_ptr<Project> projec
497500
498501// ---------------------------------------------------------------------------
499502int ParticleShapeStatistics::do_pca (std::vector<std::vector<Point>> global_pts, int domainsPerShape) {
500- this -> domains_per_shape_ = domainsPerShape;
503+ domains_per_shape_ = domainsPerShape;
501504
502505 // Assumes all the same size.
503506 num_samples_ = global_pts.size () / domains_per_shape_;
@@ -508,11 +511,6 @@ int ParticleShapeStatistics::do_pca(std::vector<std::vector<Point>> global_pts,
508511 mean_.resize (num_dimensions_);
509512 mean_.fill (0 );
510513
511- std::cout << " VDimension = " << values_per_particle_ << " -------------\n " ;
512- std::cout << " m_numSamples = " << num_samples_ << " -------------\n " ;
513- std::cout << " m_domainsPerShape = " << domains_per_shape_ << " -------------\n " ;
514- std::cout << " global_pts.size() = " << global_pts.size () << " -------------\n " ;
515-
516514 // Compile the "meta shapes"
517515 for (unsigned int i = 0 ; i < num_samples_; i++) {
518516 for (unsigned int k = 0 ; k < domains_per_shape_; k++) {
@@ -571,6 +569,13 @@ int ParticleShapeStatistics::do_pca(ParticleSystemEvaluation ParticleSystemEvalu
571569 return do_pca (particlePoints, domainsPerShape);
572570}
573571
572+ // ---------------------------------------------------------------------------
573+ int ParticleShapeStatistics::do_pca (std::shared_ptr<Project> project) {
574+ load_from_project (project);
575+ compute_modes ();
576+ return 0 ;
577+ }
578+
574579// ---------------------------------------------------------------------------
575580int ParticleShapeStatistics::compute_modes () {
576581 SW_DEBUG (" computing PCA modes" );
@@ -638,6 +643,13 @@ int ParticleShapeStatistics::principal_component_projections() {
638643 return 0 ;
639644}
640645
646+ // ---------------------------------------------------------------------------
647+ Eigen::VectorXd ParticleShapeStatistics::project_new_sample (const Eigen::VectorXd& new_sample) {
648+ // Subtract mean and project onto principal components
649+ Eigen::VectorXd centered_sample = new_sample - mean_;
650+ return eigenvectors_.transpose () * centered_sample;
651+ }
652+
641653// ---------------------------------------------------------------------------
642654int ParticleShapeStatistics::write_csv_file (const std::string& s) {
643655 // Write csv file
0 commit comments