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