RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
MMFF/AngleBend.h
Go to the documentation of this file.
1// Copyright (C) 2013-2025 Paolo Tosco and other RDKit contributors
2//
3// @@ All Rights Reserved @@
4// This file is part of the RDKit.
5// The contents are covered by the terms of the BSD license
6// which is included in the file license.txt, found at the root
7// of the RDKit source tree.
8//
9#include <RDGeneral/export.h>
10#ifndef __RD_MMFFANGLEBEND_H__
11#define __RD_MMFFANGLEBEND_H__
12
14#include <ForceField/Contrib.h>
15
16namespace ForceFields {
17namespace MMFF {
18class MMFFBond;
19class MMFFAngle;
20class MMFFProp;
21
22//! The angle-bend term for MMFF
24 public:
26 //! Constructor
28 /*! Adds an angle to the contrib
29 The angle is between atom1 - atom2 - atom3
30
31 \param idx1 index of atom1 in the ForceField's positions
32 \param idx2 index of atom2 in the ForceField's positions
33 \param idx3 index of atom3 in the ForceField's positions
34 \param angleType MMFF type of the angle (as an unsigned int)
35
36 */
37 void addTerm(unsigned int idx1, unsigned int idx2,
38 unsigned int idx3, const MMFFAngle *mmffAngleParams,
39 const MMFFProp *mmffPropParamsCentralAtom);
40
41 double getEnergy(double *pos) const override;
42 void getGrad(double *pos, double *grad) const override;
43 AngleBendContrib *copy() const override {
44 return new AngleBendContrib(*this);
45 }
46
47 private:
48 std::vector<bool> d_isLinear;
49 std::vector<int16_t> d_at1Idxs, d_at2Idxs, d_at3Idxs;
50 std::vector<double> d_ka, d_theta0;
51};
52namespace Utils {
53//! returns the MMFF rest value for an angle
54RDKIT_FORCEFIELD_EXPORT double calcAngleRestValue(
55 const MMFFAngle *mmffAngleParams);
56//! returns the MMFF force constant for an angle
57RDKIT_FORCEFIELD_EXPORT double calcAngleForceConstant(
58 const MMFFAngle *mmffAngleParams);
59//! calculates and returns the cosine of the angle between points p1, p2, p3
60RDKIT_FORCEFIELD_EXPORT double calcCosTheta(RDGeom::Point3D p1,
62 RDGeom::Point3D p3, double dist1,
63 double dist2);
64//! calculates and returns the angle bending MMFF energy
65RDKIT_FORCEFIELD_EXPORT double calcAngleBendEnergy(const double theta0,
66 const double ka,
67 bool isLinear,
68 const double cosTheta);
69RDKIT_FORCEFIELD_EXPORT void calcAngleBendGrad(RDGeom::Point3D *r, double *dist,
70 double **g, double &dE_dTheta,
71 double &cosTheta,
72 double &sinTheta);
73} // namespace Utils
74} // namespace MMFF
75} // namespace ForceFields
76#endif
abstract base class for contributions to ForceFields
Definition Contrib.h:18
A class to store forcefields and handle minimization.
Definition ForceField.h:79
The angle-bend term for MMFF.
AngleBendContrib * copy() const override
return a copy
void getGrad(double *pos, double *grad) const override
calculates our contribution to the gradients of a position
AngleBendContrib(ForceField *owner)
Constructor.
double getEnergy(double *pos) const override
returns our contribution to the energy of a position
void addTerm(unsigned int idx1, unsigned int idx2, unsigned int idx3, const MMFFAngle *mmffAngleParams, const MMFFProp *mmffPropParamsCentralAtom)
class to store MMFF parameters for angle bending
class to store MMFF parameters for bond stretching
Definition MMFF/Params.h:81
class to store MMFF Properties
Definition MMFF/Params.h:54
#define RDKIT_FORCEFIELD_EXPORT
Definition export.h:185