Rosetta 3.5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
LigandConformer.hh
Go to the documentation of this file.
1 // -*- mode:c++;tab-width:2;indent-tabs-mode:t;show-trailing-whitespace:t;rm-trailing-spaces:t -*-
2 // vi: set ts=2 noet:
3 // :noTabs=false:tabSize=4:indentSize=4:
4 //
5 // (c) Copyright Rosetta Commons Member Institutions.
6 // (c) This file is part of the Rosetta software suite and is made available under license.
7 // (c) The Rosetta software is developed by the contributing members of the Rosetta Commons.
8 // (c) For more information, see http://www.rosettacommons.org. Questions about this can be
9 // (c) addressed to University of Washington UW TechTransfer, email: license@u.washington.edu.
10 
11 /// @file protocols/toolbox/match_enzdes_util/LigandConformer.hh
12 /// @brief Declaration of a class to hold a ligand conformation
13 /// @author Andrew Leaver-Fay (aleaverfay@gmail.com)
14 
15 #ifndef INCLUDED_protocols_toolbox_match_enzdes_util_LigandConformer_hh
16 #define INCLUDED_protocols_toolbox_match_enzdes_util_LigandConformer_hh
17 
18 // Unit headers
20 
21 // Project headers
22 #include <core/types.hh>
23 // AUTO-REMOVED #include <core/id/AtomID.hh>
26 // AUTO-REMOVED #include <core/scoring/etable/count_pair/CountPairFunction.fwd.hh>
27 
28 // ObjexxFCL headers
29 #include <ObjexxFCL/FArray2D.fwd.hh>
30 
31 // Numeric headers
32 #include <numeric/HomogeneousTransform.hh>
33 #include <numeric/geometry/hashing/SixDHasher.fwd.hh>
34 
35 // Utility headers
36 #include <utility/pointer/ReferenceCount.hh>
37 
38 // C++ headers
39 #include <list>
40 
41 #include <core/id/AtomID.fwd.hh>
42 //#include <protocols/match/Hit.fwd.hh>
43 #include <utility/fixedsizearray1.hh>
44 #include <utility/vector1.hh>
45 
46 
47 namespace protocols {
48 namespace toolbox {
49 namespace match_enzdes_util {
50 
52 public:
54  typedef core::Size Size;
55  typedef core::Real Real;
58  typedef numeric::HomogeneousTransform< Real > HTReal;
59 
60 public:
62 
64 
65  virtual ~LigandConformer();
66 
67  Real
68  atom1_atom2_distance() const;
69 
70  Real
71  atom2_atom3_distance() const;
72 
73  /// @brief Returns an angle in degrees between the three downstream atoms.
74  Real
76 
77  /// @brief returns the distance between orientation atom 1 and orientation atom 2
78  Real
79  oatom1_oatom2_distance() const;
80 
81  /// @brief returns the distance between orientation atom 2 and orientation atom 3
82  Real
83  oatom2_oatom3_distance() const;
84 
85  /// @brief Returns an angle in degrees between the three orientation atoms.
86  Real
88 
89 
90  void
92  Real6 const & orientation,
93  utility::vector1< core::id::AtomID > const & atom_indices,
94  utility::vector1< Vector > & atom_coords
95  ) const;
96 
97  /// @brief Specify the residue, with coordinates, that's being used as the downstream
98  /// partner. This class is meant to be used in conjuction with the ClassicMatchAglrotihm,
99  /// and therefore the initialization routines are specific for that algorithm. In this
100  /// initialization function, one must list atoms "D1, D2 and D3" in the convention of
101  /// describing the rigid-body orientation between three atoms of the upstream partner
102  /// (atoms U3, U2 & U1) and three atoms of the downstream partner (atoms D1, D2 & D3) in terms
103  /// of 2 angles, 1 distance, and 3 dihedrals. The user must also list the 3 atoms used to
104  /// define the orientation frame of the downstream ligand. It is essential to the
105  /// matching algorithm that the same three orientation atoms are used for all LigandConformers.
106  void
108  Size D1,
109  Size D2,
110  Size D3,
111  Size orientation_atom1,
112  Size orientation_atom2,
113  Size orientation_atom3,
114  core::conformation::Residue const & residue
115  );
116 
117  void ignore_h_collisions( bool setting );
118 
119  /// @brief The orientaton frame at orientation atom 3 given
120  /// the coordinate frame at D3 (this frame is called frame3)
121  Real6
123  HTReal const & frame3
124  ) const;
125 
126  /// @brief The orientation frame at orientation atom 3 given
127  /// orientation atom 3's xyz coordinates and the euler angles
128  /// describing the frame
129  HTReal
131  Real6 orientation
132  ) const;
133 
134  void
135  move_atoms_to_collcheck_begin( utility::vector1< Size > const & restype_atnos_to_move_early );
136 
137  inline
138  Size
140  return collision_check_id_2_restype_id_.size();
141  }
142 
143  inline
144  Size
145  restype_id_2_collision_check_id( Size restype_atomno ) const {
146  return restype_id_2_collision_check_id_[ restype_atomno ];
147  }
148 
149  inline
150  Size
151  collision_check_id_2_restype_id( Size coll_check_id ) const {
152  return collision_check_id_2_restype_id_[ coll_check_id ];
153  }
154 
155  inline
156  Vector
157  coordinate_in_D3_frame( Size restype_atomno, HTReal const & frame3 ) const {
158  return frame3 * points_in_D3_frame_[ restype_atomno ];
159  }
160 
161  inline
162  Vector
163  coordinate_in_global_frame( Size restype_atomno, HTReal const & orientation_frame ) const {
164  return orientation_frame * points_in_global_orintation_frame_[ restype_atomno ];
165  }
166 
167  ///@ brief helper function to get the coordinates in 2D FArray format
168  void
170  ObjexxFCL::FArray2D< numeric::Real > & coords,
171  HTReal const & orientation_frame,
172  utility::vector1< core::Size > const & restype_atomnos
173  ) const;
174 
176  get_lig_restype() const;
177 
178 private:
179 
180  void
182 
183 private:
184 
186 
187  /// The indices of the three atoms defining the orientation of the
188  /// ligand in the global coordinate frame
189  /// These indices are in the restype indexing of atoms.
190  utility::fixedsizearray1< Size, 3 > orientation_atoms_;
191  utility::fixedsizearray1< Vector, 3 > oats_in_D3_frame_;
193 
194  /// The coordinates of all the ligand atoms in the global orientation frame.
196 
197  /// The indices for the three atoms defining the location of the downstream partner
198  /// from the upstream partner. D1 D2 and D3. These indices are in the restype indexing of atoms.
199  utility::fixedsizearray1< Size, 3 > atoms_123_;
200  Real d12_; // distance from D1 to D2
201  Real d23_; // distance drom D2 to D3
202  Real ang123_; /// angle between D1, D2 and D3
203 
204  /// The coordinates of the other ligand atoms in the coordinate frame from atom D3.
209 
210 };
211 
212 }
213 }
214 }
215 
216 #endif