00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef BALL_MOLMEC_CHARMM_CHARMMIMPROPERTORSION_H
00010 #define BALL_MOLMEC_CHARMM_CHARMMIMPROPERTORSION_H
00011
00012 #ifndef BALL_COMMON_H
00013 # include <BALL/common.h>
00014 #endif
00015
00016 #ifndef BALL_MOLMEC_PARAMETER_QUADRATICIMPROPERTORSION_H
00017 # include <BALL/MOLMEC/PARAMETER/quadraticImproperTorsion.h>
00018 #endif
00019
00020 #ifndef BALL_MOLMEC_PARAMETER_RESIDUETORSIONS_H
00021 # include <BALL/MOLMEC/PARAMETER/residueTorsions.h>
00022 #endif
00023
00024 #ifndef BALL_MOLMEC_COMMON_FORCEFIELDCOMPONENT_H
00025 # include <BALL/MOLMEC/COMMON/forceFieldComponent.h>
00026 #endif
00027
00028 #ifndef BALL_MOLMEC_COMMON_FORCEFIELD_H
00029 # include <BALL/MOLMEC/COMMON/forceField.h>
00030 #endif
00031
00032 namespace BALL
00033 {
00047 class BALL_EXPORT CharmmImproperTorsion
00048 : public ForceFieldComponent
00049 {
00050 public:
00051
00053 #define CHARMM_IMPROPER_TORSIONS_ENABLED "enable IT"
00054
00058
00059 BALL_CREATE(CharmmImproperTorsion)
00060
00061
00063 CharmmImproperTorsion();
00064
00067 CharmmImproperTorsion(ForceField& force_field);
00068
00071 CharmmImproperTorsion(const CharmmImproperTorsion& charmm_stretch);
00072
00075 virtual ~CharmmImproperTorsion();
00076
00078
00081
00084 virtual bool setup()
00085 throw(Exception::TooManyErrors);
00086
00088
00091
00094 virtual double updateEnergy();
00095
00098 virtual void updateForces();
00099
00101
00102 private:
00103
00104
00105
00106
00107
00108
00109
00110 vector<QuadraticImproperTorsion::Data> impropers_;
00111
00112 QuadraticImproperTorsion improper_parameters_;
00113
00114 ResidueTorsions improper_atoms_;
00115
00116
00117
00118 };
00119 }
00120
00121 #endif // BALL_MOLMEC_CHARMM_CHARMMIMPROPERTORSION_H