00001 #ifndef OPENMM_PERIODICTORSIONFORCE_H_
00002 #define OPENMM_PERIODICTORSIONFORCE_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035 #include "Force.h"
00036 #include "Vec3.h"
00037 #include <map>
00038 #include <vector>
00039 #include "internal/windowsExport.h"
00040
00041 namespace OpenMM {
00042
00049 class OPENMM_EXPORT PeriodicTorsionForce : public Force {
00050 public:
00054 PeriodicTorsionForce();
00058 int getNumTorsions() const {
00059 return periodicTorsions.size();
00060 }
00073 int addTorsion(int particle1, int particle2, int particle3, int particle4, int periodicity, double phase, double k);
00086 void getTorsionParameters(int index, int& particle1, int& particle2, int& particle3, int& particle4, int& periodicity, double& phase, double& k) const;
00099 void setTorsionParameters(int index, int particle1, int particle2, int particle3, int particle4, int periodicity, double phase, double k);
00100 protected:
00101 ForceImpl* createImpl();
00102 private:
00103 class PeriodicTorsionInfo;
00104 std::vector<PeriodicTorsionInfo> periodicTorsions;
00105 };
00106
00111 class PeriodicTorsionForce::PeriodicTorsionInfo {
00112 public:
00113 int particle1, particle2, particle3, particle4, periodicity;
00114 double phase, k;
00115 PeriodicTorsionInfo() {
00116 particle1 = particle2 = particle3 = particle4 = -1;
00117 periodicity = 1;
00118 phase = k = 0.0;
00119 }
00120 PeriodicTorsionInfo(int particle1, int particle2, int particle3, int particle4, int periodicity, double phase, double k) :
00121 particle1(particle1), particle2(particle2), particle3(particle3), particle4(particle4), periodicity(periodicity), phase(phase), k(k) {
00122 }
00123 };
00124
00125 }
00126
00127 #endif