BALL  1.4.2
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
addHydrogenProcessor.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_ADDHYDROGENPROCESSOR_H
6 #define BALL_STRUCTURE_ADDHYDROGENPROCESSOR_H
7 
8 #ifndef BALL_CONCEPT_PROCESSOR_H
10 #endif
11 
12 #ifndef BALL_MATHS_VECTOR3_H
13 #include <BALL/MATHS/vector3.h>
14 #endif
15 
16 #ifndef BALL_KERNEL_ATOM_H
17 #include <BALL/KERNEL/atom.h>
18 #endif
19 
20 #include <vector>
21 
22 namespace BALL
23 {
24 
48  : public UnaryProcessor<Composite>
49  {
50 
51  public:
52 
55 
57  virtual ~AddHydrogenProcessor();
58 
61 
62  virtual bool start();
63 
65  virtual Processor::Result operator() (Composite &composite);
66 
68  Size getConnectivity(Atom& atom);
69 
71  void setRings(const vector<vector<Atom*> >& rings);
72 
74  Size getNumberOfAddedHydrogens() { return nr_hydrogens_;}
75 
76  protected:
77 
78  Size countBondOrders(Atom& atom);
79  void addHydrogen_(Atom& atom, Vector3 position);
80  inline bool isRingAtom_(Atom& atom);
81  vector<Atom*> getPartners_(Atom& atom);
82  Vector3 getNormal_(const Vector3& v);
83  inline bool normalize_(Vector3& v);
84  bool hasMultipleBond_(Atom& atom);
85  // get the ideal bond length for the given element with hydrogen atoms
86  float getBondLength_(Position element);
87 
92  }; //class AddHydrogenProcessor
93 
94 } //namesspace BALL
95 
96 #endif // BALL_STRUCTURE_ADDHYDROGENPROCESSOR_H