addHydrogenProcessor.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: addHydrogenProcessor.h,v 1.1.4.1 2007/03/25 21:25:23 oliver Exp $
00005 //
00006 
00007 #ifndef BALL_STRUCTURE_ADDHYDROGENPROCESSOR_H
00008 #define BALL_STRUCTURE_ADDHYDROGENPROCESSOR_H
00009 
00010 #ifndef BALL_CONCEPT_PROCESSOR_H
00011 #include <BALL/CONCEPT/processor.h>
00012 #endif
00013 
00014 #ifndef BALL_MATHS_VECTOR3_H
00015 #include <BALL/MATHS/vector3.h> 
00016 #endif
00017 
00018 #ifndef BALL_KERNEL_ATOM_H
00019 #include <BALL/KERNEL/atom.h>
00020 #endif
00021 
00022 #include <vector>
00023 
00024 namespace BALL
00025 {
00026 
00049   class BALL_EXPORT AddHydrogenProcessor
00050     : public UnaryProcessor<Composite>
00051   {
00052  
00053     public:
00054 
00056     AddHydrogenProcessor();
00057     
00059     virtual ~AddHydrogenProcessor();
00060     
00062     AddHydrogenProcessor(const AddHydrogenProcessor& hbp);
00063 
00064     virtual bool start();
00065     
00067     virtual Processor::Result operator() (Composite &composite);
00068 
00070     Size getConnectivity(Atom& atom);
00071 
00073     void setRings(const vector<vector<Atom*> >& rings);
00074 
00076     Size getNumberOfAddedHydrogens() { return nr_hydrogens_;}
00077     
00078     protected:
00079 
00080     Size countBondOrders(Atom& atom);
00081     void addHydrogen_(Atom& atom, Vector3 position);
00082     inline bool isRingAtom_(Atom& atom);
00083     vector<Atom*> getPartners_(Atom& atom);
00084     Vector3 getNormal_(const Vector3& v);
00085     inline bool normalize_(Vector3& v);
00086     bool hasMultipleBond_(Atom& atom);
00087     // get the ideal bond length for the given element with hydrogen atoms
00088     float getBondLength_(Position element);
00089 
00090     HashSet<Atom*> ring_atoms_;
00091     Position atom_nr_;
00092     Atom*    last_atom_;
00093     Size     nr_hydrogens_;
00094   }; //class AddHydrogenProcessor
00095 
00096 } //namesspace BALL
00097 
00098 #endif // BALL_STRUCTURE_ADDHYDROGENPROCESSOR_H