00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_MOLMEC_MMFF94_MMFF94OUTOFPLANEBEND_H
00008 #define BALL_MOLMEC_MMFF94_MMFF94OUTOFPLANEBEND_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 MMFF94OutOfPlaneBend
00028 : public ForceFieldComponent
00029 {
00030 public:
00031
00032 struct BALL_EXPORT OutOfPlaneBend
00033 {
00034 Atom *i, *j, *k, *l;
00035 double k_oop;
00036
00037 double energy;
00038 };
00039
00041 #define MMFF94_OUTOFPLANE_ENABLED "enable OutOfPlane"
00042
00043 BALL_CREATE(MMFF94OutOfPlaneBend)
00044
00045
00046 MMFF94OutOfPlaneBend();
00047
00049 MMFF94OutOfPlaneBend(ForceField& force_field);
00050
00052 MMFF94OutOfPlaneBend(const MMFF94OutOfPlaneBend& to_copy);
00053
00055 virtual ~MMFF94OutOfPlaneBend();
00056
00058 virtual bool setup()
00059 throw(Exception::TooManyErrors);
00060
00062 virtual double updateEnergy();
00063
00065 virtual void updateForces();
00066
00068 const vector<OutOfPlaneBend>& getOutOfPlaneBends() const { return bends_;}
00069
00070
00071 inline void AddDV3_(Vector3& f3, const TVector3<double> d3);
00072
00073 private:
00074 vector<OutOfPlaneBend> bends_;
00075 MMFF94PlaneParameters parameters_;
00076 };
00077
00078 }
00079
00080 #endif // BALL_MOLMEC_MMFF94_MMFF94OUTOFPLANEBEND_H