Structural Bioinformatics Library
Template C++ / Python API for developping structural bioinformatics applications.
T_Point_cloud_rigid_registration_3< FT > Class Template Reference

Model of Distances for defining distance between two point clouds. More...

#include <Point_cloud_rigid_registration_3.hpp>

Public Types

typedef Eigen::Matrix< FT, Eigen::Dynamic, Eigen::Dynamic > Matrix
 
typedef Eigen::Matrix< FT, Eigen::Dynamic, 1 > Vector
 
typedef CGAL::Cartesian< FTK
 
typedef K::Point_3 Point_3
 
typedef K::Vector_3 Vector_3
 

Public Member Functions

 T_Point_cloud_rigid_registration_3 (void)
 Initialize with no transformation;. More...
 
template<class PointContainer >
 T_Point_cloud_rigid_registration_3 (const PointContainer &x, const PointContainer &y)
 Initialize the transformation with from y to x (x is the reference) More...
 
template<class PointContainer >
 T_Point_cloud_rigid_registration_3 (const PointContainer &x, const PointContainer &y, std::vector< double > weights)
 Initialize the weighted transformation from y to x (x is the reference);. More...
 
template<class InputIterator1 , class InputIterator2 >
 T_Point_cloud_rigid_registration_3 (InputIterator1 begin_1, InputIterator1 end_1, InputIterator2 begin_2, InputIterator2 end_2)
 Initialize the transformation from the second set of points to the first set of points (the first set of points is the reference) More...
 
template<class InputIterator1 , class InputIterator2 >
 T_Point_cloud_rigid_registration_3 (InputIterator1 begin_1, InputIterator1 end_1, InputIterator2 begin_2, InputIterator2 end_2, std::vector< double > weights)
 Initialize the weighted transformation from the second set of points to the first set of points (the first set of points is the reference) More...
 
const Point_3get_reference_centroid (void) const
 Return the reference centroid if any. More...
 
template<class PointContainer , class OutputIterator >
OutputIterator transform (const PointContainer &points, OutputIterator out) const
 Make the rigid registration of the input points w.r.t the internal transformation, and output the transformed points. More...
 
template<class PointContainer , class OutputIterator >
OutputIterator transform (const PointContainer &points, const Point_3 &ref_centroid, OutputIterator out) const
 Make the rigid registration of the input points w.r.t the internal transformation and the given centroid, and output the transformed points. More...
 
template<class InputIterator , class OutputIterator >
OutputIterator transform (unsigned size, InputIterator begin, InputIterator end, OutputIterator out) const
 Same as before, but input and output are coordinates. More...
 
template<class InputIterator , class OutputIterator >
OutputIterator transform (InputIterator begin, InputIterator end, OutputIterator out) const
 Same as before, but points are represented by input iterators. More...
 
void set_weights (std::vector< double > weights)
 Initialize the weights (for weighted version) More...
 
void print_transform_matrix () const
 Print the matrix. More...
 
const Matrixget_rotation () const
 Access to the rotation matrix. More...
 
const Vector_3get_translation () const
 Acces to the translation vector. More...
 
template<class PointContainer1 , class PointContainer2 , class OutputIterator >
OutputIterator operator() (const PointContainer1 &x, const PointContainer2 &y, OutputIterator out)
 Make the rigid registration from y to x, and return it in the output iterator. More...
 
template<class InputIterator1 , class InputIterator2 , class OutputIterator >
OutputIterator operator() (unsigned size_1, InputIterator1 begin_1, InputIterator1 end_1, unsigned size_2, InputIterator2 begin_2, InputIterator2 end_2, OutputIterator out)
 Same as before, but input is coordinates. More...
 
template<class InputIterator1 , class InputIterator2 , class OutputIterator >
OutputIterator operator() (InputIterator1 begin_1, InputIterator1 end_1, InputIterator2 begin_2, InputIterator2 end_2, OutputIterator out)
 Same as before, but points are represented by input iterators. More...
 
template<class PointContainer >
T_Point_cloud_rigid_registration_3< FT >::Point_3 compute_centroid (const PointContainer &x) const
 
template<class PointContainer >
T_Point_cloud_rigid_registration_3< FT >::Point_3 compute_weighted_centroid (const PointContainer &x) const
 
template<class PointContainer >
T_Point_cloud_rigid_registration_3< FT >::Point_3 compute_centroid (const PointContainer &x, bool use_weights) const
 
template<class PointContainer >
T_Point_cloud_rigid_registration_3< FT >::Matrix compute_centered_matrix (const PointContainer &x, const Point_3 &centroid) const
 

Detailed Description

template<class FT = double>
class SBL::GT::T_Point_cloud_rigid_registration_3< FT >

Model of Distances for defining distance between two point clouds.

Computes the least-Root Mean Squared Distance between two conformations. We use the Kabsch algorithm for finding the optimal rotation matrix that minimizes the $RMSD$*. Models for templates:Data_kernel: a linear kernel from CGAL defining points used for $l-RMSD$; Point_container: a stl container of points from Data_kernel (e.g a list); Local_kernel: a kernel from CGAL for the output $l-RMSD$

FT: Works with primitive types only

Member Typedef Documentation

◆ K

typedef CGAL::Cartesian<FT> K

◆ Matrix

typedef Eigen::Matrix<FT, Eigen::Dynamic, Eigen::Dynamic> Matrix

◆ Point_3

typedef K::Point_3 Point_3

◆ Vector

typedef Eigen::Matrix<FT, Eigen::Dynamic, 1> Vector

◆ Vector_3

typedef K::Vector_3 Vector_3

Constructor & Destructor Documentation

◆ T_Point_cloud_rigid_registration_3() [1/5]

Initialize with no transformation;.

◆ T_Point_cloud_rigid_registration_3() [2/5]

T_Point_cloud_rigid_registration_3 ( const PointContainer &  x,
const PointContainer &  y 
)
inline

Initialize the transformation with from y to x (x is the reference)

◆ T_Point_cloud_rigid_registration_3() [3/5]

T_Point_cloud_rigid_registration_3 ( const PointContainer &  x,
const PointContainer &  y,
std::vector< double >  weights 
)
inline

Initialize the weighted transformation from y to x (x is the reference);.

◆ T_Point_cloud_rigid_registration_3() [4/5]

T_Point_cloud_rigid_registration_3 ( InputIterator1  begin_1,
InputIterator1  end_1,
InputIterator2  begin_2,
InputIterator2  end_2 
)
inline

Initialize the transformation from the second set of points to the first set of points (the first set of points is the reference)

◆ T_Point_cloud_rigid_registration_3() [5/5]

T_Point_cloud_rigid_registration_3 ( InputIterator1  begin_1,
InputIterator1  end_1,
InputIterator2  begin_2,
InputIterator2  end_2,
std::vector< double >  weights 
)
inline

Initialize the weighted transformation from the second set of points to the first set of points (the first set of points is the reference)

Member Function Documentation

◆ compute_centered_matrix()

T_Point_cloud_rigid_registration_3<FT>::Matrix compute_centered_matrix ( const PointContainer &  x,
const Point_3 centroid 
) const

◆ compute_centroid() [1/2]

T_Point_cloud_rigid_registration_3<FT>::Point_3 compute_centroid ( const PointContainer &  x) const

◆ compute_centroid() [2/2]

T_Point_cloud_rigid_registration_3<FT>::Point_3 compute_centroid ( const PointContainer &  x,
bool  use_weights 
) const

◆ compute_weighted_centroid()

T_Point_cloud_rigid_registration_3<FT>::Point_3 compute_weighted_centroid ( const PointContainer &  x) const

◆ get_reference_centroid()

const T_Point_cloud_rigid_registration_3< FT >::Point_3 & get_reference_centroid ( void  ) const
inline

Return the reference centroid if any.

◆ get_rotation()

const T_Point_cloud_rigid_registration_3< FT >::Matrix & get_rotation
inline

Access to the rotation matrix.

◆ get_translation()

const T_Point_cloud_rigid_registration_3< FT >::Vector_3 & get_translation
inline

Acces to the translation vector.

◆ operator()() [1/3]

OutputIterator operator() ( const PointContainer1 &  x,
const PointContainer2 &  y,
OutputIterator  out 
)
inline

Make the rigid registration from y to x, and return it in the output iterator.

◆ operator()() [2/3]

OutputIterator operator() ( InputIterator1  begin_1,
InputIterator1  end_1,
InputIterator2  begin_2,
InputIterator2  end_2,
OutputIterator  out 
)
inline

Same as before, but points are represented by input iterators.

◆ operator()() [3/3]

OutputIterator operator() ( unsigned  size_1,
InputIterator1  begin_1,
InputIterator1  end_1,
unsigned  size_2,
InputIterator2  begin_2,
InputIterator2  end_2,
OutputIterator  out 
)
inline

Same as before, but input is coordinates.

◆ print_transform_matrix()

void print_transform_matrix
inline

Print the matrix.

◆ set_weights()

void set_weights ( std::vector< double >  weights)
inline

Initialize the weights (for weighted version)

◆ transform() [1/4]

OutputIterator transform ( const PointContainer &  points,
const Point_3 ref_centroid,
OutputIterator  out 
) const
inline

Make the rigid registration of the input points w.r.t the internal transformation and the given centroid, and output the transformed points.

◆ transform() [2/4]

OutputIterator transform ( const PointContainer &  points,
OutputIterator  out 
) const
inline

Make the rigid registration of the input points w.r.t the internal transformation, and output the transformed points.

◆ transform() [3/4]

OutputIterator transform ( InputIterator  begin,
InputIterator  end,
OutputIterator  out 
) const
inline

Same as before, but points are represented by input iterators.

◆ transform() [4/4]

OutputIterator transform ( unsigned  size,
InputIterator  begin,
InputIterator  end,
OutputIterator  out 
) const
inline

Same as before, but input and output are coordinates.