MELDOpenMMPlugin
RdcForce.h
1 /*
2  Copyright 2015 by Justin MacCallum, Alberto Perez, Ken Dill
3  All rights reserved
4 */
5 
6 #ifndef OPENMM_RDC_FORCE_H_
7 #define OPENMM_RDC_FORCE_H_
8 
9 #include "openmm/Force.h"
10 #include "openmm/Vec3.h"
11 #include "internal/windowsExportMeld.h"
12 #include <map>
13 #include <vector>
14 
15 namespace MeldPlugin {
16 
21 class OPENMM_EXPORT_MELD RdcForce : public OpenMM::Force {
22 
23 public:
27  RdcForce();
28 
39  void updateParametersInContext(OpenMM::Context& context);
40 
44  int getNumExperiments() const;
45 
50  int getNumRestraints(int experiment) const;
51 
55  int getNumTotalRestraints() const;
56 
63  int addExperiment(std::vector<int> rdcIndices);
64 
77  int addRdcRestraint(int particle1, int particle2, float kappa, float dObs, float tolerance,
78  float force_const, float weight);
79 
92  void updateRdcRestraint(int index, int particle1, int particle2, float kappa, float dObs,
93  float tolerance, float force_const, float weight);
94 
101  void getExperimentInfo(int index, std::vector<int>& restraints) const;
102 
116  void getRdcRestraintInfo(int index, int& particle1, int& partcile2, float& kappa,
117  float& dObs, float& tolerance, float& force_const, float& weight,
118  int& globalIndex) const;
119 
120 protected:
121  OpenMM::ForceImpl* createImpl() const;
122 
123 private:
124  class RdcRestraintInfo;
125  class ExperimentInfo;
126  int numRestraints;
127  std::vector<RdcRestraintInfo> rdcRestraints;
128  std::vector<ExperimentInfo> experiments;
129 
130  class RdcRestraintInfo {
131  public:
132  int atom1, atom2;
133  float kappa, dObs, tolerance, force_const, weight;
134  int globalIndex;
135 
136  RdcRestraintInfo() {
137  atom1 = atom2 = -1;
138  kappa = 0;
139  dObs = 0;
140  tolerance = 0.;
141  force_const = 0.;
142  weight = 0.;
143  globalIndex = -1;
144  }
145 
146  RdcRestraintInfo(int atom1, int atom2, float kappa, float dObs, float tolerance,
147  float force_const, float weight, int globalIndex) :
148  atom1(atom1), atom2(atom2), kappa(kappa), dObs(dObs), tolerance(tolerance),
149  force_const(force_const), weight(weight), globalIndex(globalIndex) {
150  }
151  };
152 
153  class ExperimentInfo {
154  public:
155  std::vector<int> rdcIndices;
156 
157  ExperimentInfo() {
158  }
159 
160  ExperimentInfo(std::vector<int> rdcIndices) :
161  rdcIndices(rdcIndices) {
162  }
163  };
164 };
165 
166 } // namespace MeldPlugin
167 
168 #endif /*OPENMM_RDC_FORCE_H_*/
Definition: MeldForceImpl.h:17
This is the RDC Force.
Definition: RdcForce.h:21