BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
residue.h
Go to the documentation of this file.
1 // -*- Mode: C++; tab-width: 2; -*-
2 // vi: set ts=2:
3 //
4 
5 #ifndef BALL_KERNEL_RESIDUE_H
6 #define BALL_KERNEL_RESIDUE_H
7 
8 #ifndef BALL_KERNEL_FRAGMENT_H
9 # include <BALL/KERNEL/fragment.h>
10 #endif
11 
12 #ifndef BALL_KERNEL_PDBATOMITERATOR_H
14 #endif
15 
16 #ifndef BALL_KERNEL_RESIDUEITERATOR_H
18 #endif
19 
20 
21 #define BALL_RESIDUE_DEFAULT_ID ""
22 #define BALL_RESIDUE_DEFAULT_INSERTION_CODE ' '
23 
24 namespace BALL
25 {
26  class Chain;
27  class Protein;
28  class SecondaryStructure;
29 
37  : public Fragment
38  {
39  public:
40 
42 
43 
46 
48  enum Property
49  {
51  PROPERTY__NON_STANDARD = Fragment::NUMBER_OF_PROPERTIES + 1,
68 
70  NUMBER_OF_PROPERTIES
71  };
72 
77  {
82  // Add the residue ID separated by a colon
84  // Add the residue ID and the residue extension
85  ADD_VARIANT_EXTENSIONS_AND_ID
86  };
87 
89 
90 
94 
96  Residue();
97 
99  Residue(const Residue& residue, bool deep = true);
100 
102  Residue
103  (const String& name,
104  const String& id = BALL_RESIDUE_DEFAULT_ID,
105  char insertion_code = BALL_RESIDUE_DEFAULT_INSERTION_CODE);
106 
108  virtual ~Residue();
109 
111  virtual void clear();
112 
114  virtual void destroy();
115 
117 
120 
124  void persistentWrite(PersistenceManager& pm, const char* name = 0) const;
125 
129  void persistentRead(PersistenceManager& pm);
130 
132 
135 
141  void set(const Residue& residue, bool deep = true);
142 
145  Residue& operator = (const Residue& residue);
146 
149  void get(Residue& residue, bool deep = true) const;
150 
153  void swap(Residue& residue);
154 
156 
161  bool operator == (const Residue& residue) const;
162 
166  bool operator != (const Residue& residue) const;
167 
168 
172 
185  String getFullName(FullNameType type = ADD_VARIANT_EXTENSIONS) const;
186 
190  bool hasTorsionPhi() const;
191 
195  Angle getTorsionPhi() const;
196 
200  bool hasTorsionPsi() const;
201 
205  Angle getTorsionPsi() const;
206 
211  Protein* getProtein();
212 
217  const Protein* getProtein() const;
218 
223  Chain* getChain();
224 
229  const Chain* getChain() const;
230 
235  SecondaryStructure* getSecondaryStructure();
236 
241  const SecondaryStructure* getSecondaryStructure() const;
242 
248  PDBAtom* getPDBAtom(Position position);
249 
255  const PDBAtom* getPDBAtom(Position position) const;
256 
260  void setID(const String& id);
261 
265  const String& getID() const;
266 
270  void setInsertionCode(char insertion_code);
271 
275  char getInsertionCode() const;
276 
280  Size countPDBAtoms() const;
281 
285  void prepend(PDBAtom& atom);
286 
290  void append(PDBAtom& atom);
291 
295  void insert(PDBAtom& atom);
296 
301  void insertBefore(PDBAtom& atom, Composite& before);
302 
307  void insertAfter(PDBAtom& atom, Composite& after);
308 
312  bool remove(PDBAtom& atom);
313 
317  void spliceBefore(Residue& residue);
318 
322  void spliceAfter(Residue& residue);
323 
327  void splice(Residue& residue);
328 
330 
333 
338  bool isAminoAcid() const;
339 
345  bool isTerminal() const;
346 
352  bool isNTerminal() const;
353 
359  bool isCTerminal() const;
360 
362 
365 
370  virtual bool isValid() const;
371 
378  virtual void dump(std::ostream& s = std::cout, Size depth = 0) const;
379 
381 
382  // --- EXTERNAL ITERATORS
383 
385 
386 
387  private:
388 
389  AtomContainer* getAtomContainer(Position position);
390 
391  const AtomContainer* getAtomContainer(Position position) const;
392 
393  Size countAtomContainers() const;
394 
395  void prepend(AtomContainer& atom_container);
396 
397  void append(AtomContainer& atom_container);
398 
399  void insert(AtomContainer& atom_container);
400 
401  void insertBefore(AtomContainer& atom_container, Composite& composite);
402 
403  void insertAfter(AtomContainer& atom_container, Composite& composite);
404 
405  void spliceBefore(AtomContainer& atom_container);
406 
407  void spliceAfter(AtomContainer& base_ragment);
408 
409  void splice(AtomContainer& AtomContainer);
410 
411  bool remove(AtomContainer& AtomContainer);
412 
413  bool isSuperAtomContainerOf(const AtomContainer& atom_container) const;
414 
416 
417  // --- ATTRIBUTES
418 
419  String id_;
420 
421  char insertion_code_;
422  };
423 
424  template <class ResidueContainerType>
425  const Residue* getNTerminal(const ResidueContainerType& residue_container)
426  {
427  ResidueConstIterator res_it(residue_container.beginResidue());
428  for (; res_it != residue_container.endResidue(); ++res_it)
429  {
430  if (res_it->isAminoAcid() == true)
431  {
432  return &(*res_it);
433  }
434  }
435 
436  return 0;
437  }
438 
439  template <class ResidueContainerType>
440  const Residue* getCTerminal(const ResidueContainerType& residue_container)
441  {
442  ResidueConstReverseIterator res_it(residue_container.rbeginResidue());
443  for (; res_it != residue_container.rendResidue(); ++res_it)
444  {
445  // Look for the last residue marked as amino acid
446  if (res_it->isAminoAcid() == true)
447  {
448  return &(*res_it);
449  }
450  }
451 
452  return 0;
453  }
454 
455 } // namespace BALL
456 
457 #endif // BALL_KERNEL_RESIDUE_H