MMFF94Torsion.h

Go to the documentation of this file.
00001 // -*- Mode: C++; tab-width: 2; -*-
00002 // vi: set ts=2:
00003 //
00004 // $Id: MMFF94Torsion.h,v 1.1.8.1 2007/03/25 21:25:19 oliver Exp $
00005 //
00006 
00007 #ifndef BALL_MOLMEC_MMFF94_MMFF94TORSION_H
00008 #define BALL_MOLMEC_MMFF94_MMFF94TORSION_H
00009 
00010 #ifndef BALL_MOLMEC_COMMON_FORCEFIELDCOMPONENT_H
00011 # include <BALL/MOLMEC/COMMON/forceFieldComponent.h>
00012 #endif
00013 
00014 #ifndef BALL_MOLMEC_COMMON_FORCEFIELD_H
00015 # include <BALL/MOLMEC/COMMON/forceField.h>
00016 #endif
00017 
00018 #ifndef BALL_MOLMEC_MMFF94_MMFF94PARAMETERS_H
00019 # include <BALL/MOLMEC/MMFF94/MMFF94Parameters.h>
00020 #endif
00021 
00022 namespace BALL 
00023 {
00027   class BALL_EXPORT MMFF94Torsion 
00028     : public ForceFieldComponent
00029   {
00030     public:
00031 
00033     struct BALL_EXPORT Torsion
00034     {
00035       Torsion();
00036 
00037       Index type;
00038       Atom::StaticAtomAttributes* atom1;
00039       Atom::StaticAtomAttributes* atom2;
00040       Atom::StaticAtomAttributes* atom3;
00041       Atom::StaticAtomAttributes* atom4;
00042       double v1, v2, v3;
00043       // for debugging:
00044       double energy; 
00045       double angle;
00046       bool heuristic;
00047     };
00048 
00052 
00054     #define MMFF94_TORSIONS_ENABLED "enable Torsions"
00055 
00056 
00060 
00061     BALL_CREATE(MMFF94Torsion)
00062 
00063     
00065     MMFF94Torsion();
00066 
00069     MMFF94Torsion(ForceField& force_field);
00070 
00073     MMFF94Torsion(const MMFF94Torsion& MMFF94_stretch);
00074 
00077     virtual ~MMFF94Torsion();
00078 
00080 
00083 
00086     virtual bool setup()
00087       throw(Exception::TooManyErrors);
00088 
00090 
00093 
00096     virtual double updateEnergy();
00097 
00100     virtual void updateForces();
00101 
00103     Position getTorsionType(const vector<Atom*>& atoms) const;
00104     
00106     const vector<Torsion>& getTorsions() const { return torsions_;}
00107 
00109 
00110     protected:
00111 
00112     // Add a double precision TVector3 to a single precision Vector3
00113     inline void AddDV3_(Vector3& f3, const TVector3<double> d3);
00114 
00115     double getU_(Position e);
00116     double getV_(Position e);
00117     bool calculateHeuristic_(const Atom& aj, const Atom& ak, double& v1, double& v2, double& v3);
00118 
00119     vector<Torsion> torsions_;
00120     MMFF94TorsionParameters parameters_;
00121   };
00122 } // namespace BALL 
00123 
00124 #endif // BALL_MOLMEC_MMFF94_MMFF94TORSION_H