Loading...
Searching...
No Matches
Inversions.h
Go to the documentation of this file.
//
// Copyright (C) 2024 Niels Maeder and other RDKit contributors
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#include <RDGeneral/export.h>
#ifndef RD_UFFINVERSIONS_H
#define RD_UFFINVERSIONS_H
#include <ForceField/Contrib.h>
#include <vector>
namespace ForceFields {
namespace UFF {
class AtomicParams;
struct RDKIT_FORCEFIELD_EXPORT InversionContribsParams {
unsigned int idx1{0}; //!< index of atom1 in the ForceField's positions
unsigned int idx2{0}; //!< index of atom2 in the ForceField's positions
unsigned int idx3{0}; //!< index of atom3 in the ForceField's positions
unsigned int idx4{0}; //!< index of atom4 in the ForceField's positions
int at2AtomicNum{0}; //!< atomic number for atom 2
bool isCBoundToO{false}; //!< boolean flag; true if atom 2 is sp2 carbon
//!< bound to sp2 oxygen
double C0{0.0}; //!< inversion coefficient 0
double C1{0.0}; //!< inversion coefficient 1
double C2{0.0}; //!< inversion coefficient 2
double forceConstant{1.0}; //!< force constant
InversionContribsParams(unsigned int idx1, unsigned int idx2,
unsigned int idx3, unsigned int idx4,
int at2AtomicNum, bool isCBoundToO, double C0,
double C1, double C2, double forceConstant = 1.0)
: idx1(idx1),
idx2(idx2),
idx3(idx3),
idx4(idx4),
at2AtomicNum(at2AtomicNum),
isCBoundToO(isCBoundToO),
C0(C0),
C1(C1),
C2(C2),
forceConstant(forceConstant) {};
};
//! A term to capture all Inversion Contributionss.
class RDKIT_FORCEFIELD_EXPORT InversionContribs : public ForceFieldContrib {
public:
InversionContribs() = default;
//! Constructor
/*!
\param owner pointer to the owning ForceField
*/
InversionContribs(ForceField *owner);
~InversionContribs() override = default;
//! Add contribution to this contrib.
/*!
\param idx1 index of atom1 in the ForceField's positions
\param idx2 index of atom2 in the ForceField's positions
\param idx3 index of atom3 in the ForceField's positions
\param idx4 index of atom4 in the ForceField's positions
\param at2AtomicNum atomic number for atom 2
\param isCBoundToO boolean flag; true if atom 2 is sp2 C bound to
sp2 O
\param oobForceScalingFactor scaling factor for force constant
*/
void addContrib(unsigned int idx1, unsigned int idx2, unsigned int idx3,
unsigned int idx4, int at2AtomicNum, bool isCBoundToO,
double oobForceScalingFactor = 1.0);
//! return the contribution of this contrib to the energy of a given state
/*!
\param pos positions of the atoms in the current state
*/
double getEnergy(double *pos) const override;
//! calculate the contribution of this contrib to the gradient at a given
/// state
/*!
\param pos positions of the atoms in the current state
\param grad gradients to be adapted
*/
void getGrad(double *pos, double *grad) const override;
//! Copy constructor
InversionContribs *copy() const override {
return new InversionContribs(*this);
}
//! Return true if there are no contributions in this contrib
bool empty() const { return d_contribs.empty(); }
//! Get number of contributions in this contrib
unsigned int size() const { return d_contribs.size(); }
private:
std::vector<InversionContribsParams> d_contribs;
};
} // namespace UFF
} // namespace ForceFields
#endif
Contrib.h
ForceFields::ForceFieldContrib::ForceField
friend class ForceField
Definition Contrib.h:20
ForceFields::ForceFieldContrib::ForceFieldContrib
ForceFieldContrib()
Definition Contrib.h:22
ForceFields::UFF::AtomicParams
class to store atomic parameters for the Universal Force Field
Definition UFF/Params.h:68
ForceFields::UFF::InversionContribs::getGrad
void getGrad(double *pos, double *grad) const override
ForceFields::UFF::InversionContribs::InversionContribs
InversionContribs()=default
ForceFields::UFF::InversionContribs::copy
InversionContribs * copy() const override
Copy constructor.
Definition Inversions.h:87
ForceFields::UFF::InversionContribs::~InversionContribs
~InversionContribs() override=default
ForceFields::UFF::InversionContribs::empty
bool empty() const
Return true if there are no contributions in this contrib.
Definition Inversions.h:92
ForceFields::UFF::InversionContribs::InversionContribs
InversionContribs(ForceField *owner)
Constructor.
ForceFields::UFF::InversionContribs::addContrib
void addContrib(unsigned int idx1, unsigned int idx2, unsigned int idx3, unsigned int idx4, int at2AtomicNum, bool isCBoundToO, double oobForceScalingFactor=1.0)
Add contribution to this contrib.
ForceFields::UFF::InversionContribs::getEnergy
double getEnergy(double *pos) const override
return the contribution of this contrib to the energy of a given state
ForceFields::UFF::InversionContribs::size
unsigned int size() const
Get number of contributions in this contrib.
Definition Inversions.h:95
export.h
RDKIT_FORCEFIELD_EXPORT
#define RDKIT_FORCEFIELD_EXPORT
Definition export.h:201
ForceFields::UFF
Definition UFF/AtomTyper.h:19
ForceFields
Definition TorsionAngleContribs.h:21
ForceFields::UFF::InversionContribsParams::idx3
unsigned int idx3
index of atom3 in the ForceField's positions
Definition Inversions.h:23
ForceFields::UFF::InversionContribsParams::C0
double C0
inversion coefficient 0
Definition Inversions.h:28
ForceFields::UFF::InversionContribsParams::idx1
unsigned int idx1
index of atom1 in the ForceField's positions
Definition Inversions.h:21
ForceFields::UFF::InversionContribsParams::C2
double C2
inversion coefficient 2
Definition Inversions.h:30
ForceFields::UFF::InversionContribsParams::at2AtomicNum
int at2AtomicNum
atomic number for atom 2
Definition Inversions.h:25
ForceFields::UFF::InversionContribsParams::InversionContribsParams
InversionContribsParams(unsigned int idx1, unsigned int idx2, unsigned int idx3, unsigned int idx4, int at2AtomicNum, bool isCBoundToO, double C0, double C1, double C2, double forceConstant=1.0)
Definition Inversions.h:32
ForceFields::UFF::InversionContribsParams::isCBoundToO
bool isCBoundToO
Definition Inversions.h:26
ForceFields::UFF::InversionContribsParams::C1
double C1
inversion coefficient 1
Definition Inversions.h:29
ForceFields::UFF::InversionContribsParams::forceConstant
double forceConstant
force constant
Definition Inversions.h:31
ForceFields::UFF::InversionContribsParams::idx4
unsigned int idx4
index of atom4 in the ForceField's positions
Definition Inversions.h:24
ForceFields::UFF::InversionContribsParams::idx2
unsigned int idx2
index of atom2 in the ForceField's positions
Definition Inversions.h:22