Skip to content

Libs/Particles/ParticleShapeStatistics.h

Namespaces

Name
shapeworks
User usage reporting (telemetry)

Classes

Name
class shapeworks::ParticleShapeStatistics

Source code

```cpp

pragma once

include

include

include

include "ParticleSystemEvaluation.h"

include "Shapeworks.h"

namespace shapeworks {

class Project;

class ParticleShapeStatistics { public: ParticleShapeStatistics(){}; explicit ParticleShapeStatistics(std::shared_ptr project); ~ParticleShapeStatistics(){};

int do_pca(std::vector> global_pts, int domainsPerShape = 1);

int do_pca(ParticleSystemEvaluation particleSystem, int domainsPerShape = 1);

int do_pca(std::shared_ptr project);

int import_points(std::vector points, std::vector group_ids);

void compute_multi_level_analysis_statistics(std::vector points, unsigned int dps);

int compute_shape_dev_modes_for_mca();

int compute_relative_pose_modes_for_mca();

void set_num_particles_per_domain(const std::vector& num_particles_array);

int read_point_files(const std::string& s);

int write_csv_file(const std::string& s);

int compute_modes();

int get_num_modes() const;

int principal_component_projections();

Eigen::VectorXd project_new_sample(const Eigen::VectorXd& new_sample);

int get_num_samples() const { return num_samples_; } int get_group1_num_samples() const { return num_samples_group1_; } int get_group2_num_samples() const { return num_samples_group2_; }

int get_num_dimensions() const { return num_dimensions_; } int get_domains_per_shape() { return domains_per_shape_; } std::vector NumberOfPointsArray() { return num_particles_array_; }

int GroupID(unsigned int i) const { return group_ids_[i]; } const std::vector& GroupID() const { return group_ids_; }

const Eigen::MatrixXd& get_eigen_vectors() const { return eigenvectors_; } const std::vector& get_eigen_values() const { return eigenvalues_; }

const Eigen::MatrixXd& get_eigenvectors_rel_pos() { return eigenvectors_rel_pose_; } const std::vector& get_eigenvalues_shape_dev() { return eigenvalues_shape_dev_; } const Eigen::MatrixXd& get_eigenvectors_shape_dev() { return eigenvectors_shape_dev_; } const std::vector& get_eigenvalues_rel_pose() { return eigenvalues_rel_pose_; } const Eigen::VectorXd& get_mean_shape_dev() { return mean_shape_dev_; } const Eigen::VectorXd& get_mean_rel_pos() { return mean_rel_pose_; }

const Eigen::VectorXd& get_mean() const { return mean_; } const Eigen::VectorXd& get_group1_mean() const { return mean1_; } const Eigen::VectorXd& get_group2_mean() const { return mean2_; }

const Eigen::VectorXd& get_group_difference() const { return groupdiff_; }

int compute_median_shape(const int ID);

double l1_norm(unsigned int a, unsigned int b);

Eigen::MatrixXd& get_pca_loadings() { return principals_; }

const std::vector& get_percent_variance_by_mode() const { return percent_variance_by_mode_; }

static int simple_linear_regression(const std::vector& y, const std::vector& x, double& a, double& b);

Eigen::VectorXd get_compactness(const std::function& progress_callback = nullptr) const; Eigen::VectorXd get_specificity(const std::function& progress_callback = nullptr, const std::function& check_abort = nullptr) const; Eigen::VectorXd get_generalization(const std::function& progress_callback = nullptr, const std::function& check_abort = nullptr) const;

Eigen::MatrixXd get_group1_matrix() const; Eigen::MatrixXd get_group2_matrix() const;

Eigen::MatrixXd& matrix() { return matrix_; };

void set_num_values_per_particle(int value_per_particle) { values_per_particle_ = value_per_particle; }

void set_particle_to_surface_mode(bool value) { particle_to_surface_mode_ = value; } bool get_particle_to_surface_mode() const { return particle_to_surface_mode_; } void set_meshes(const std::vector& meshes) { meshes_ = meshes; }

void load_from_project(std::shared_ptr project);

private: unsigned int num_samples_group1_; unsigned int num_samples_group2_; unsigned int num_samples_; unsigned int domains_per_shape_ = 0; unsigned int num_dimensions_; std::vector group_ids_;

Eigen::MatrixXd eigenvectors_; std::vector eigenvalues_; Eigen::VectorXd mean_; Eigen::VectorXd mean1_; Eigen::VectorXd mean2_; Eigen::MatrixXd points_minus_mean_; Eigen::MatrixXd shapes_;

std::vector percent_variance_by_mode_; Eigen::MatrixXd principals_;

Eigen::VectorXd groupdiff_;

// Variables for MLCA std::vector num_particles_array_; // Number of Particles for each object in the multi-object shape structure Eigen::MatrixXd eigenvectors_rel_pose_; // Eigenvectors defined for relative pose subspace Eigen::MatrixXd eigenvectors_shape_dev_; // Eigenvectors defined for morphological subspace std::vector eigenvalues_rel_pose_; // Eigenvalues defined in relative pose subspace std::vector eigenvalues_shape_dev_; // Eigenvectors defined in morphological subspace Eigen::MatrixXd points_minus_mean_rel_pose_; Eigen::MatrixXd points_minus_mean_shape_dev_; Eigen::VectorXd mean_shape_dev_; Eigen::VectorXd mean_rel_pose_; Eigen::MatrixXd super_matrix_; // Shape Matrix reshaped, used to compute MLCA statistics

Eigen::MatrixXd matrix_;

Eigen::MatrixXd group1_matrix_; Eigen::MatrixXd group2_matrix_;

std::vector points_;

int values_per_particle_ = 3; // e.g. 3 for x/y/z, 4 for x/y/z/scalar bool particle_to_surface_mode_ = false; std::vector meshes_; };

} // namespace shapeworks ```


Updated on 2026-03-31 at 16:02:11 +0000