6 #ifndef OPENMM_MELD_FORCE_H_
7 #define OPENMM_MELD_FORCE_H_
9 #include "openmm/Force.h"
10 #include "openmm/Vec3.h"
11 #include "internal/windowsExportMeld.h"
21 class OPENMM_EXPORT_MELD
MeldForce :
public OpenMM::Force {
40 void updateParametersInContext(OpenMM::Context& context);
45 int getNumDistRestraints()
const;
50 int getNumHyperbolicDistRestraints()
const;
55 int getNumTorsionRestraints()
const;
60 int getNumDistProfileRestraints()
const;
65 int getNumDistProfileRestParams()
const;
70 int getNumTorsProfileRestraints()
const;
75 int getNumTorsProfileRestParams()
const;
80 int getNumTotalRestraints()
const;
85 int getNumGroups()
const;
90 int getNumCollections()
const;
106 void getDistanceRestraintParams(
int index,
int& atom1,
int& atom2,
float& r1,
float& r2,
float& r3,
107 float& r4,
float& forceConstant,
int& globalIndex)
const;
125 void getHyperbolicDistanceRestraintParams(
int index,
int& atom1,
int& atom2,
float& r1,
float& r2,
float& r3,
126 float& r4,
float& forceConstant,
float& asymptote,
int& globalIndex)
const;
141 void getTorsionRestraintParams(
int index,
int& atom1,
int& atom2,
int& atom3,
int&atom4,
142 float& phi,
float& deltaPhi,
float& forceConstant,
int& globalIndex)
const;
158 void getDistProfileRestraintParams(
int index,
int& atom1,
int& atom2,
float& rMin,
float & rMax,
159 int& nBins, std::vector<double>& a0, std::vector<double>& a1, std::vector<double>& a2,
160 std::vector<double>& a3,
float& scaleFactor,
int& globalIndex)
const;
179 void getTorsProfileRestraintParams(
int index,
int& atom1,
int& atom2,
int& atom3,
int& atom4,
180 int& atom5,
int& atom6,
int& atom7,
int& atom8,
int& nBins,
181 std::vector<double>& a0, std::vector<double>& a1, std::vector<double>& a2,
182 std::vector<double>& a3, std::vector<double>& a4, std::vector<double>& a5,
183 std::vector<double>& a6, std::vector<double>& a7, std::vector<double>& a8,
184 std::vector<double>& a9, std::vector<double>& a10, std::vector<double>& a11,
185 std::vector<double>& a12, std::vector<double>& a13, std::vector<double>& a14,
186 std::vector<double>& a15,
float& scaleFactor,
int& globalIndex)
const;
195 void getGroupParams(
int index, std::vector<int>& indices,
int& numActive)
const;
204 void getCollectionParams(
int index, std::vector<int>& indices,
int& numActive)
const;
231 int addDistanceRestraint(
int particle1,
int particle2,
float r1,
float r2,
float r3,
float r4,
232 float force_constant);
247 void modifyDistanceRestraint(
int index,
int particle1,
int particle2,
float r1,
float r2,
float r3,
248 float r4,
float force_constant);
280 int addHyperbolicDistanceRestraint(
int particle1,
int particle2,
float r1,
float r2,
float r3,
float r4,
281 float force_constant,
float asymptote);
297 void modifyHyperbolicDistanceRestraint(
int index,
int particle1,
int particle2,
float r1,
float r2,
float r3,
298 float r4,
float force_constant,
float asymptote);
321 int addTorsionRestraint(
int atom1,
int atom2,
int atom3,
int atom4,
float phi,
float deltaPhi,
float forceConstant);
336 void modifyTorsionRestraint(
int index,
int atom1,
int atom2,
int atom3,
int atom4,
float phi,
337 float deltaPhi,
float forceConstant);
359 int addDistProfileRestraint(
int atom1,
int atom2,
float rMin,
float rMax,
int nBins, std::vector<double> a0,
360 std::vector<double> a1, std::vector<double> a2, std::vector<double> a3,
float scaleFactor);
375 void modifyDistProfileRestraint(
int index,
int atom1,
int atom2,
float rMin,
float rMax,
int nBins,
376 std::vector<double> a0, std::vector<double> a1, std::vector<double> a2, std::vector<double> a3,
395 int addTorsProfileRestraint(
int atom1,
int atom2,
int atom3,
int atom4,
396 int atom5,
int atom6,
int atom7,
int atom8,
int nBins,
397 std::vector<double> a0, std::vector<double> a1, std::vector<double> a2,
398 std::vector<double> a3, std::vector<double> a4, std::vector<double> a5,
399 std::vector<double> a6, std::vector<double> a7, std::vector<double> a8,
400 std::vector<double> a9, std::vector<double> a10, std::vector<double> a11,
401 std::vector<double> a12, std::vector<double> a13, std::vector<double> a14,
402 std::vector<double> a15,
float scaleFactor);
420 void modifyTorsProfileRestraint(
int index,
int atom1,
int atom2,
int atom3,
int atom4,
421 int atom5,
int atom6,
int atom7,
int atom8,
int nBins,
422 std::vector<double> a0, std::vector<double> a1, std::vector<double> a2,
423 std::vector<double> a3, std::vector<double> a4, std::vector<double> a5,
424 std::vector<double> a6, std::vector<double> a7, std::vector<double> a8,
425 std::vector<double> a9, std::vector<double> a10, std::vector<double> a11,
426 std::vector<double> a12, std::vector<double> a13, std::vector<double> a14,
427 std::vector<double> a15,
float scaleFactor);
436 int addGroup(std::vector<int> restraint_indices,
int n_active);
445 int addCollection(std::vector<int> group_indices,
int n_active);
448 OpenMM::ForceImpl* createImpl()
const;
451 class TorsionRestraintInfo;
452 class DistanceRestraintInfo;
453 class HyperbolicDistanceRestraintInfo;
454 class DistProfileRestraintInfo;
455 class TorsProfileRestraintInfo;
457 class CollectionInfo;
459 std::vector<DistanceRestraintInfo> distanceRestraints;
460 std::vector<HyperbolicDistanceRestraintInfo> hyperbolicDistanceRestraints;
461 std::vector<TorsionRestraintInfo> torsions;
462 std::vector<DistProfileRestraintInfo> distProfileRestraints;
463 std::vector<TorsProfileRestraintInfo> torsProfileRestraints;
464 std::vector<GroupInfo> groups;
465 std::vector<CollectionInfo> collections;
467 class DistanceRestraintInfo {
469 int particle1, particle2;
470 float r1, r2, r3, r4, force_constant;
473 DistanceRestraintInfo() {
474 particle1 = particle2 = -1;
475 force_constant = 0.0;
476 r1 = r2 = r3 = r4 = 0.0;
480 DistanceRestraintInfo(
int particle1,
int particle2,
float r1,
float r2,
float r3,
float r4,
481 float force_constant,
int global_index) : particle1(particle1), particle2(particle2), r1(r1),
482 r2(r2), r3(r3), r4(r4), force_constant(force_constant),
483 global_index(global_index) {
487 class HyperbolicDistanceRestraintInfo {
489 int particle1, particle2;
490 float r1, r2, r3, r4, force_constant, asymptote;
493 HyperbolicDistanceRestraintInfo() {
494 particle1 = particle2 = -1;
495 force_constant = 0.0;
496 r1 = r2 = r3 = r4 = asymptote = 0.0;
500 HyperbolicDistanceRestraintInfo(
int particle1,
int particle2,
float r1,
float r2,
float r3,
float r4,
501 float force_constant,
float asymptote,
int global_index) : particle1(particle1), particle2(particle2), r1(r1),
502 r2(r2), r3(r3), r4(r4), force_constant(force_constant),
503 asymptote(asymptote), global_index(global_index) {
507 class TorsionRestraintInfo {
509 int atom1, atom2, atom3, atom4;
510 float phi, deltaPhi, forceConstant;
513 TorsionRestraintInfo() {
514 atom1 = atom2 = atom3 = atom4 = -1;
521 TorsionRestraintInfo(
int atom1,
int atom2,
int atom3,
int atom4,
float phi,
float deltaPhi,
522 float forceConstant,
int globalIndex) :
523 atom1(atom1), atom2(atom2), atom3(atom3), atom4(atom4), phi(phi), deltaPhi(deltaPhi),
524 forceConstant(forceConstant), globalIndex(globalIndex) {
528 class DistProfileRestraintInfo {
530 int atom1, atom2, nBins;
531 float rMin, rMax, scaleFactor;
532 std::vector<double> a0;
533 std::vector<double> a1;
534 std::vector<double> a2;
535 std::vector<double> a3;
538 DistProfileRestraintInfo() {
541 rMin = rMax = scaleFactor = -1.0;
545 DistProfileRestraintInfo(
int atom1,
int atom2,
float rMin,
float rMax,
int nBins,
546 std::vector<double> a0, std::vector<double> a1, std::vector<double> a2,
547 std::vector<double> a3,
float scaleFactor,
int globalIndex) :
548 atom1(atom1), atom2(atom2), nBins(nBins), rMin(rMin), rMax(rMax), scaleFactor(scaleFactor),
549 globalIndex(globalIndex), a0(a0), a1(a1), a2(a2), a3(a3) {
553 class TorsProfileRestraintInfo {
555 int atom1, atom2, atom3, atom4, atom5, atom6, atom7, atom8, nBins, globalIndex;
557 std::vector<double> a0, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;
559 TorsProfileRestraintInfo() {
560 atom1 = atom2 = atom3 = atom4 = atom5 = atom6 = atom7 = atom8 = nBins = globalIndex = -1;
564 TorsProfileRestraintInfo(
int atom1,
int atom2,
int atom3,
int atom4,
565 int atom5,
int atom6,
int atom7,
int atom8,
int nBins,
566 std::vector<double> a0, std::vector<double> a1, std::vector<double> a2,
567 std::vector<double> a3, std::vector<double> a4, std::vector<double> a5,
568 std::vector<double> a6, std::vector<double> a7, std::vector<double> a8,
569 std::vector<double> a9, std::vector<double> a10, std::vector<double> a11,
570 std::vector<double> a12, std::vector<double> a13, std::vector<double> a14,
571 std::vector<double> a15,
float scaleFactor,
int globalIndex) :
572 atom1(atom1), atom2(atom2), atom3(atom3), atom4(atom4),
573 atom5(atom5), atom6(atom6), atom7(atom7), atom8(atom8), nBins(nBins),
574 a0(a0), a1(a1), a2(a2), a3(a3), a4(a4), a5(a5), a6(a6), a7(a7),
575 a8(a8), a9(a9), a10(a10), a11(a11), a12(a12), a13(a13), a14(a14), a15(a15),
576 scaleFactor(scaleFactor), globalIndex(globalIndex) {
582 std::vector<int> restraint_indices;
585 GroupInfo(): n_active(0) {
588 GroupInfo(std::vector<int> restraint_indices,
int n_active):
589 restraint_indices(restraint_indices), n_active(n_active) {
593 class CollectionInfo {
595 std::vector<int> group_indices;
598 CollectionInfo(): n_active(0) {
601 CollectionInfo(std::vector<int> group_indices,
int n_active) :
602 group_indices(group_indices), n_active(n_active) {
Definition: MeldForceImpl.h:17
This is the MELD Force.
Definition: MeldForce.h:21