IMP
2.0.1
The Integrative Modeling Platform
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
PCAAligner.h
Go to the documentation of this file.
1
/**
2
* \file PCAAligner.h \brief
3
*
4
* Copyright 2007-2013 IMP Inventors. All rights reserved.
5
*
6
*/
7
8
#ifndef IMPEM_PCA_ALIGNER_H
9
#define IMPEM_PCA_ALIGNER_H
10
11
#include <IMP/em/em_config.h>
12
#include <
IMP/em/converters.h
>
13
#include <
IMP/algebra/eigen_analysis.h
>
14
#include <
IMP/base/Object.h
>
15
16
IMPEM_BEGIN_NAMESPACE
17
18
/** class that supports fast alignment of a set of points to the density map
19
using principal components of the map and the points.
20
21
This time of alignment is good for low-resolution maps.
22
23
Note, that principal components are not well-defined for globular
24
objects, so the method may fail in case of symmetric structures
25
*/
26
class
IMPEMEXPORT
PCAAligner
:
public
IMP::base::Object
{
27
public
:
28
/** init the distance transform
29
\param map input density map
30
\param density_threshold a threshold that detemines
31
which voxels belong to the object
32
*/
33
PCAAligner
(
IMP::em::DensityMap
* map,
float
density_threshold) :
34
base::Object(
"EM_PCA_Aligner"
) {
35
IMP::algebra::Vector3Ds
density_points =
36
IMP::em::density2vectors
(map, density_threshold);
37
map_pc_ =
IMP::algebra::get_principal_components
(density_points);
38
}
39
40
/**
41
align the principal components of the points to the principal
42
components of the density map.
43
\param points The points for PCA alignment to the map
44
\return 24 transformations to the density map
45
*/
46
algebra::Transformation3Ds
align(
const
algebra::Vector3Ds
& points)
const
;
47
48
// methods required by Object
49
IMP::base::VersionInfo
get_version_info
()
const
{
50
return
IMP::base::VersionInfo
(get_module_name(), get_module_version());
51
}
52
53
~
PCAAligner
() {}
54
55
private
:
56
algebra::Rotation3D
get_rotation_matrix(
const
algebra::Vector3D
& x,
57
const
algebra::Vector3D
& y)
const
{
58
algebra::Vector3D
z =
get_vector_product
(x, y);
59
return
algebra::get_rotation_from_matrix
(x[0], x[1], x[2],
60
y[0], y[1], y[2],
61
z[0], z[1], z[2]);
62
}
63
64
private
:
65
IMP::algebra::PrincipalComponentAnalysis map_pc_;
66
};
67
68
IMPEM_END_NAMESPACE
69
70
#endif
/* IMPEM_PCA_ALIGNER_H */