00001
00002
00003
00004
00005
00006
00007 #ifndef BALL_MOLMEC_CHARMM_CHARMMIMPROPERTORSION_H
00008 #define BALL_MOLMEC_CHARMM_CHARMMIMPROPERTORSION_H
00009
00010 #ifndef BALL_COMMON_H
00011 # include <BALL/common.h>
00012 #endif
00013
00014 #ifndef BALL_MOLMEC_PARAMETER_QUADRATICIMPROPERTORSION_H
00015 # include <BALL/MOLMEC/PARAMETER/quadraticImproperTorsion.h>
00016 #endif
00017
00018 #ifndef BALL_MOLMEC_PARAMETER_RESIDUETORSIONS_H
00019 # include <BALL/MOLMEC/PARAMETER/residueTorsions.h>
00020 #endif
00021
00022 #ifndef BALL_MOLMEC_COMMON_FORCEFIELDCOMPONENT_H
00023 # include <BALL/MOLMEC/COMMON/forceFieldComponent.h>
00024 #endif
00025
00026 #ifndef BALL_MOLMEC_COMMON_FORCEFIELD_H
00027 # include <BALL/MOLMEC/COMMON/forceField.h>
00028 #endif
00029
00030 namespace BALL
00031 {
00045 class BALL_EXPORT CharmmImproperTorsion
00046 : public ForceFieldComponent
00047 {
00048 public:
00049
00051 #define CHARMM_IMPROPER_TORSIONS_ENABLED "enable IT"
00052
00056
00057 BALL_CREATE(CharmmImproperTorsion)
00058
00059
00061 CharmmImproperTorsion();
00062
00065 CharmmImproperTorsion(ForceField& force_field);
00066
00069 CharmmImproperTorsion(const CharmmImproperTorsion& charmm_stretch);
00070
00073 virtual ~CharmmImproperTorsion();
00074
00076
00079
00082 virtual bool setup()
00083 throw(Exception::TooManyErrors);
00084
00086
00089
00092 virtual double updateEnergy();
00093
00096 virtual void updateForces();
00097
00099
00100 private:
00101
00102
00103
00104
00105
00106
00107
00108 vector<QuadraticImproperTorsion::Data> impropers_;
00109
00110 QuadraticImproperTorsion improper_parameters_;
00111
00112 ResidueTorsions improper_atoms_;
00113
00114
00115
00116 };
00117 }
00118
00119 #endif // BALL_MOLMEC_CHARMM_CHARMMIMPROPERTORSION_H