BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
residueRotamerSet.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 
5 #ifndef BALL_STRUCTURE_RESIDUEROTAMERSET_H
6 #define BALL_STRUCTURE_RESIDUEROTAMERSET_H
7 
8 #ifndef BALL_COMMON_H
9  #include <BALL/common.h>
10 #endif
11 
12 #ifndef BALL_MATHS_ANGLE_H
13  #include <BALL/MATHS/angle.h>
14 #endif
15 
16 #ifndef BALL_DATATYPE_STRING_H
17  #include <BALL/DATATYPE/string.h>
18 #endif
19 
20 #ifndef BALL_MATHS_VECTOR3_H
21  #include <BALL/MATHS/vector3.h>
22 #endif
23 
24 namespace BALL
25 {
27  class Residue;
28  template <typename Key> class HashSet;
29  template <typename Key> class StringHashMap;
30  class Atom;
31 
42  {
43  public:
44 
48 
49  Rotamer();
50 
52  Rotamer(const Rotamer& rotamer);
53 
55  Rotamer(float new_P, float new_chi1, float new_chi2 = 0.0,
56  float new_chi3 = 0.0, float new_chi4 = 0.0);
58 
59 
63 
64  float P;
65 
67  float chi1;
68 
70  float chi2;
71 
73  float chi3;
74 
76  float chi4;
78  };
79 
80 
92  {
93  public:
94 
98 
99  typedef std::vector<Rotamer>::const_iterator ConstIterator;
100  typedef std::vector<Rotamer>::const_iterator const_iterator;
102  typedef std::vector<Rotamer>::iterator Iterator;
103  typedef std::vector<Rotamer>::iterator iterator;
105 
106 
111 
112 
115 
118  ResidueRotamerSet(const ResidueRotamerSet& rotamer_set);
119 
122  ResidueRotamerSet(const Residue& residue, Size number_of_torsions);
123 
126  virtual ~ResidueRotamerSet();
128 
129 
133 
136  Iterator begin()
137  {
138  return rotamers_.begin();
139  }
140 
143  Iterator end()
144  {
145  return rotamers_.end();
146  }
147 
150  ConstIterator begin() const
151  {
152  return rotamers_.begin();
153  }
154 
157  ConstIterator end() const
158  {
159  return rotamers_.end();
160  }
162 
166 
167  const ResidueRotamerSet& operator = (const ResidueRotamerSet& residue_rotamer_set);
169 
173 
174  const String& getName() const;
175 
177  bool isValid() const;
178 
180  Size getNumberOfRotamers() const;
181 
185  Size getNumberOfTorsions() const;
186 
190  void setNumberOfTorsions(Size number_of_torsions) throw(Exception::IndexOverflow);
191 
193  const Rotamer& operator [] (Position index) const throw(Exception::IndexOverflow);
194 
196  bool hasTorsionPhi() const;
197 
199  Angle getTorsionPhi() const;
200 
202  void setTorsionPhi(const Angle& phi);
203 
205  bool hasTorsionPsi() const;
206 
208  Angle getTorsionPsi() const;
209 
211  void setTorsionPsi(const Angle& psi);
213 
217 
218  bool setTemplateResidue(const Residue& residue, Size number_of_torsions);
219 
223  bool setRotamer(Residue& residue, const Rotamer& rotamer);
224 
228  Rotamer getRotamer(const Residue& residue) const;
229 
235  const Rotamer& getRotamer(Position index) const;
236 
238  void setName(const String& name);
239 
241  void addRotamer(const Rotamer& rotamer);
242 
244  void deleteRotamer(Iterator loc);
245 
247  void deleteRotamers(Iterator begin, Iterator end);
248 
250  void sort();
252 
253 
254 
255  protected:
256 
257 
259  : std::binary_function<Rotamer, Rotamer, bool>
260  {
261  bool operator () (const Rotamer& r1, const Rotamer& r2)
262  {
263  return r1.P > r2.P;
264  }
265  };
266 
272  void addMovable_(std::vector<String>& movable, const Atom& a, const HashSet<String>& assigned_atoms);
273 
275  void setTorsionAngle_(Residue& residue, const std::vector<String>& movable, float torsion);
276 
278  bool valid_;
279 
282 
284  std::vector<Rotamer> rotamers_;
285 
287  std::vector<String> movable_atoms_chi1_;
288  std::vector<String> movable_atoms_chi2_;
289  std::vector<String> movable_atoms_chi3_;
290  std::vector<String> movable_atoms_chi4_;
291 
294 
297 
300 
303 
306 
309  };
310 
311 } // namespace BALL
312 
313 #endif // BALL_STRUCTURE_RESIDUEROTAMERSET_H