IMP  2.1.0
The Integrative Modeling Platform
CnSymmAxisDetector.h
Go to the documentation of this file.
1 /**
2  * \file cnmultifit/CnSymmAxisDetector.h
3  * \brief Detect cn symmetry in proteins and density maps.
4  *
5  * Copyright 2007-2013 IMP Inventors. All rights reserved.
6  *
7  */
8 
9 #ifndef IMPCNMULTIFIT_CN_SYMM_AXIS_DETECTOR_H
10 #define IMPCNMULTIFIT_CN_SYMM_AXIS_DETECTOR_H
11 
13 #include <IMP/algebra/Vector3D.h>
14 #include <IMP/em/DensityMap.h>
15 #include <IMP/core/XYZ.h>
16 #include <IMP/atom/Hierarchy.h>
17 #include <vector>
18 #include <IMP/cnmultifit/cnmultifit_config.h>
19 
20 IMPCNMULTIFIT_BEGIN_NAMESPACE
21 
22 //! Detect cn symmetry in proteins and density maps.
23 class IMPCNMULTIFITEXPORT CnSymmAxisDetector {
24 public:
25  CnSymmAxisDetector(int symm_deg, em::DensityMap *dmap,
26  float density_threshold, float top_p=0.8);
27 
28  CnSymmAxisDetector(int symm_deg, const atom::Hierarchies &mhs);
29 
30  algebra::PrincipalComponentAnalysis get_pca() const { return pca_;}
31  float calc_symm_score(int symm_axis_ind) const;
32  algebra::Vector3D get_symmetry_axis() const;
33  int get_symmetry_axis_index() const;
34  int get_non_symmetry_axis_length() const{
35  int symm_axis_ind=get_symmetry_axis_index();
36  int non_ind;
37  if(symm_axis_ind == 0 || symm_axis_ind == 2) {
38  non_ind=1;
39  } else {
40  non_ind=0;
41  }
42  return std::sqrt(pca_.get_principal_value(non_ind));
43  }
44  void show(std::ostream& out=std::cout) const {
45  out<<"symm degree:"<<symm_deg_<<std::endl;
46  out<<"symm axis:"<<get_symmetry_axis_index()<<std::endl;
47  pca_.show(out);
48  }
49 protected:
50  Float symm_avg(const algebra::Vector3D &start_p,
51  const algebra::Vector3D &symm_vec) const;
52  algebra::Vector3Ds vecs_;
54  algebra::PrincipalComponentAnalysis pca_;
55  int symm_deg_;
56  algebra::Transformation3D to_native_,from_native_;
57  Floats values_;
58 };
60 
61 IMPCNMULTIFIT_END_NAMESPACE
62 
63 #endif /* IMPCNMULTIFIT_CN_SYMM_AXIS_DETECTOR_H */
Detect cn symmetry in proteins and density maps.
Simple 3D transformation class.
#define IMP_VALUES(Name, PluralName)
Define the type for storing sets of values.
Simple xyz decorator.
Class for handling density maps.
Decorator for helping deal with a hierarchy of molecules.
Class for handling density maps.
Definition: DensityMap.h:98
void show(Hierarchy h, std::ostream &out=std::cout)
Print out a molecular hierarchy.
double Float
Basic floating-point value (could be float, double...)
Definition: base/types.h:20
Simple 3D vector class.
Principal component analysis of a set of points.