00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef BALL_MOLMEC_CHARMM_CHARMMTORSION_H
00010 #define BALL_MOLMEC_CHARMM_CHARMMTORSION_H
00011
00012 #ifndef BALL_COMMON_H
00013 # include <BALL/common.h>
00014 #endif
00015
00016 #ifndef BALL_MOLMEC_PARAMETER_COSINETORSION_H
00017 # include <BALL/MOLMEC/PARAMETER/cosineTorsion.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 {
00038 class BALL_EXPORT CharmmTorsion
00039 : public ForceFieldComponent
00040 {
00041 public:
00042
00044 #define CHARMM_TORSIONS_ENABLED "enable Torsions"
00045
00049
00050 struct SingleCharmmTorsion
00051 {
00052 Atom* atom1;
00053 Atom* atom2;
00054 Atom* atom3;
00055 Atom* atom4;
00056
00057 float V;
00058 unsigned char f;
00059 float phase;
00060
00061 SingleCharmmTorsion()
00062 : atom1(0),
00063 atom2(0),
00064 atom3(0),
00065 atom4(0),
00066 V(0),
00067 f(0),
00068 phase(0)
00069 {
00070 }
00071
00072 SingleCharmmTorsion(CosineTorsion::SingleData& t)
00073 {
00074 atom1 = t.atom1;
00075 atom2 = t.atom2;
00076 atom3 = t.atom3;
00077 atom4 = t.atom4;
00078
00079 V = t.values.V / t.values.n;
00080 f = (unsigned char)t.values.f;
00081
00082
00083 phase = (float)(BALL::Constants::PI / 180.0) * t.values.phase;
00084 }
00085 };
00086
00088
00091
00092 BALL_CREATE(CharmmTorsion)
00093
00094
00096 CharmmTorsion();
00097
00100 CharmmTorsion(ForceField& force_field);
00101
00104 CharmmTorsion(const CharmmTorsion& charmm_stretch);
00105
00108 virtual ~CharmmTorsion();
00109
00111
00114
00117 virtual bool setup()
00118 throw(Exception::TooManyErrors);
00119
00121
00124
00127 virtual double updateEnergy();
00128
00131 virtual void updateForces();
00132
00134
00135 private:
00136
00137
00138
00139
00140
00141
00142
00143 vector<SingleCharmmTorsion> torsion_;
00144
00145
00146
00147 CosineTorsion torsion_parameters_;
00148
00149
00150
00151 ResidueTorsions residue_torsions_;
00152
00153
00154
00155 bool use_residue_torsion_list_;
00156
00157
00158
00159 };
00160 }
00161
00162 #endif // BALL_MOLMEC_CHARMM_CHARMMTORSION_H