Main Page | Modules | Namespace List | Class Hierarchy | Class List | Namespace Members | Class Members

AddHydrogenProcessor Class Reference
[Miscellaneous]

Saturate atoms with hydrogen atoms. More...

#include <addHydrogenProcessor.h>

Inheritance diagram for AddHydrogenProcessor:

UnaryProcessor< Composite > UnaryFunctor< Composite, Processor::Result > List of all members.

Public Member Functions

 AddHydrogenProcessor (const AddHydrogenProcessor &hbp)
virtual bool start ()
 start method
virtual Processor::Result operator() (Composite &composite)
 operator ()
Size getConnectivity (Atom &atom)
void setRings (const vector< vector< Atom * > > &rings)
Size getNumberOfAddedHydrogens ()

Protected Member Functions

Size countBondOrders (Atom &atom)
void addHydrogen_ (Atom &atom, Vector3 position)
bool isRingAtom_ (Atom &atom)
vector< Atom * > getPartners_ (Atom &atom)
Vector3 getNormal_ (const Vector3 &v)
bool normalize_ (Vector3 &v)
bool hasMultipleBond_ (Atom &atom)
float getBondLength_ (Position element)

Protected Attributes

HashSet< Atom * > ring_atoms_
Position atom_nr_
Atomlast_atom_
Size nr_hydrogens_

Detailed Description

Saturate atoms with hydrogen atoms.

Only works with main group elements. The formal charge of the atoms are taken into account. The placement of the hydrogen atoms only depends on the direct neighbour atoms. No additional optimization of the atom placement is done. The optimal bond lengths are calculized by a modified Schomaker-Stevenson rule (adapted from the MMFF94 force field).
Usage:

      RingPerceptionProcessor rpp;
      vector<vector<Atom*> > rings;
      rpp.calculateSSSR(rings, system);
      rings = rpp.getAllSmallRings();
      AddHydrogenProcessor ap;
      ap.setRings(rings);
      system.apply(ap);