IMP  2.0.1
The Integrative Modeling Platform
symmetry_utils.h
Go to the documentation of this file.
1 /**
2  * \file symmetry_utils.h
3  * \brief Symmetry utilities.
4  *
5  * Copyright 2007-2013 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPCNMULTIFIT_SYMMETRY_UTILS_H
10 #define IMPCNMULTIFIT_SYMMETRY_UTILS_H
11 
12 #include <IMP/atom/Hierarchy.h>
13 #include "CnSymmAxisDetector.h"
15 #include <IMP/em/rigid_fitting.h>
16 #include <IMP/core/LeavesRefiner.h>
18 #include <IMP/cnmultifit/cnmultifit_config.h>
19 #include "AlignSymmetric.h"
20 
21 IMPCNMULTIFIT_BEGIN_NAMESPACE
22 
23 IMPCNMULTIFITEXPORT
24 algebra::Transformation3Ds generate_cn_transformations(
25  atom::Hierarchies mhs,int symm_deg);
26 
27 IMPCNMULTIFITEXPORT
28 algebra::Transformation3Ds generate_translations_along_symm_axis(
29  atom::Hierarchies mhs,int symm_deg);
30 
31 IMPCNMULTIFITEXPORT
32 em::FittingSolutions symmetry_local_fitting(atom::Hierarchies mhs,
33  int cn_symm_deg,
34  int dn_symm_deg,
35  em::DensityMap *dmap,
36  int num_of_trans_to_consider);
37 
38 IMPCNMULTIFITEXPORT
39 em::DensityMap* build_cn_dens_assembly(
40  em::DensityMap *subunit_dens,
41  const em::DensityHeader &asmb_dens_header,
42  algebra::Transformation3D monomer_t,
43  int symm_deg);
44 
45 IMPCNMULTIFITEXPORT
46 void transform_cn_assembly(atom::Hierarchies mhs,
47  algebra::Transformation3D monomer_t);
48 
49 
50 //! Fit a symmetric model to its density
51 IMPCNMULTIFITEXPORT
52 em::FittingSolutions fit_cn_assembly(
53  atom::Hierarchies mhs,
54  int dn_symm_deg,
55  em::DensityMap *dmap,float threshold,
56  const AlignSymmetric &aligner,
57  bool sample_translation=false,
58  bool fine_rotational_sampling=true); //todo - should be a parameter
59 
60 IMPCNMULTIFITEXPORT
61 em::FittingSolutions fit_cn_assembly(
62  em::DensityMap *asmb_map,
63  const MolCnSymmAxisDetector &symm_mol,
64  em::DensityMap *dmap,
65  const CnSymmAxisDetector &symm_map,
66  int symm_deg,
67  float threshold);
68 
69 IMPCNMULTIFITEXPORT
70 bool pca_matching(const algebra::PrincipalComponentAnalysis &pca1,
71  const algebra::PrincipalComponentAnalysis &pca2,
72  float resolution);
73 
74 //! scores an input vector as a symmetry axis
75 IMPCNMULTIFITEXPORT
76 float cn_symm_score(atom::Hierarchies mhs,
77  const algebra::Vector3D &center,
78  const algebra::Vector3D &direction,
79  int symm_deg);
80 
81 IMPCNMULTIFITEXPORT
83  const std::string &param_fn,
85  int dn=1);
86 
87 IMPCNMULTIFITEXPORT
88 //The axis is defined by points a and b
89 algebra::Transformation3D calc_transformation_around_axis(
90  algebra::Vector3D a, algebra::Vector3D b, float angle_rad);
91 
92 //! Find correspondence between the two rings and calculate rmsd
93 IMPCNMULTIFITEXPORT
94 float get_cn_rmsd(atom::Hierarchies mh1,
95  atom::Hierarchies mh2);
96 
97 IMPCNMULTIFIT_END_NAMESPACE
98 
99 #endif /* IMPCNMULTIFIT_SYMMETRY_UTILS_H */