RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
DistGeomUtils.h
Go to the documentation of this file.
1//
2// Copyright (C) 2004-2019 Greg Landrum and Rational Discovery LLC
3//
4// @@ All Rights Reserved @@
5// This file is part of the RDKit.
6// The contents are covered by the terms of the BSD license
7// which is included in the file license.txt, found at the root
8// of the RDKit source tree.
9//
10#include <RDGeneral/export.h>
11#ifndef _RD_DISTGEOMUTILS_H_
12#define _RD_DISTGEOMUTILS_H_
13
14#include "BoundsMatrix.h"
15#include <Numerics/SymmMatrix.h>
16#include <map>
17#include <Geometry/point.h>
18#include "ChiralSet.h"
19#include <RDGeneral/utils.h>
20#include <boost/dynamic_bitset.hpp>
21
22namespace ForceFields {
23class ForceField;
24namespace CrystalFF {
25struct CrystalFFDetails;
26}
27} // namespace ForceFields
28
29namespace DistGeom {
30
31//! Pick a distance matrix at random such that the
32//! distance satisfy the bounds in the BoundsMatrix
33/*!
34 \param mmat Bounds matrix
35 \param distmat Storage for randomly chosen distances
36 \param seed the random number seed to use
37
38 \return the largest element of the distance matrix
39 */
41 const BoundsMatrix &mmat, RDNumeric::SymmMatrix<double> &distmat,
42 int seed = -1);
43//! \overload
45 const BoundsMatrix &mmat, RDNumeric::SymmMatrix<double> &distmat,
47
48//! Compute an initial embedded in 3D based on a distance matrix
49/*!
50 This function follows the embed algorithm mentioned in
51 "Distance Geometry and Molecular Conformation" by G.M.Crippen and T.F.Havel
52 (pages 312-313)
53
54 \param distmat Distance matrix
55 \param positions A vector of pointers to Points to write out the resulting
56 coordinates
57 \param randNegEig If set to true and if any of the eigen values are negative,
58 we will
59 pick the corresponding components of the coordinates at
60 random
61 \param numZeroFail Fail embedding is more this many (or more) eigen values are
62 zero
63 \param seed the random number seed to use
64
65 \return true if the embedding was successful
66*/
68 const RDNumeric::SymmMatrix<double> &distmat,
69 RDGeom::PointPtrVect &positions, bool randNegEig = false,
70 unsigned int numZeroFail = 2, int seed = -1);
71//! \overload
73 const RDNumeric::SymmMatrix<double> &distmat,
75 bool randNegEig = false, unsigned int numZeroFail = 2);
76
77//! places atoms randomly in a box
78/*!
79 \param positions A vector of pointers to Points to write out the resulting
80 coordinates
81 \param boxSize the side-length of the cubic box
82 \param seed the random number seed to use
83
84 \return true if the coordinate generation was successful
85*/
87 RDGeom::PointPtrVect &positions, double boxSize, int seed = -1);
88//! \overload
90 RDGeom::PointPtrVect &positions, double boxSize,
92
93//! Setup the error function for violation of distance bounds as a forcefield
94/*!
95 This is based on function E3 on page 311 of "Distance Geometry in Molecular
96 Modeling" Jeffrey M.Blaney and J.Scott Dixon, Review in Computational
97 Chemistry,
98 Volume V
99
100 \param mmat Distance bounds matrix
101 \param positions A vector of pointers to Points to write out the
102 resulting coordinates
103 \param csets The vector of chiral points (type: ChiralSet)
104 \param weightChiral weight to be used to enforce chirality
105 \param weightFourthDim another chiral weight
106 \param extraWeights an optional set of weights for distance bounds
107 violations
108 \param basinSizeTol Optional: any distance bound with a basin (distance
109 between max and
110 min bounds) larger than this value will not be included
111 in the force
112 field used to cleanup the structure.
113
114 \return a pointer to a ForceField suitable for cleaning up the violations.
115 <b>NOTE:</b> the caller is responsible for deleting this force field.
116
117*/
119 const BoundsMatrix &mmat, RDGeom::PointPtrVect &positions,
120 const VECT_CHIRALSET &csets, double weightChiral = 1.0,
121 double weightFourthDim = 0.1,
122 std::map<std::pair<int, int>, double> *extraWeights = nullptr,
123 double basinSizeTol = 5.0, boost::dynamic_bitset<> *fixedPts = nullptr);
124
125//! Force field with experimental torsion angle preferences and 1-2/1-3 distance
126/// constraints
127/*!
128
129 \param mmat Distance bounds matrix
130 \param positions A vector of pointers to 3D Points to write out the
131 resulting coordinates
132 \param etkdgDetails Contains information about the ETKDG force field
133
134 <b>NOTE:</b> the caller is responsible for deleting this force field.
135
136*/
138 const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions,
139 const ForceFields::CrystalFF::CrystalFFDetails &etkdgDetails);
140//! Force field with experimental torsion angle preferences and 1-2/1-3 distance
141/// constraints, as well as atom pairwise Columbic interactions
142/*!
143
144 \param mmat Distance bounds matrix
145 \param positions A vector of pointers to 3D Points to write out the
146 resulting coordinates
147 \param etkdgDetails Contains information about the ETKDG force field
148 \param CPCI Contains which atom pair(s) have what strength of
149 attractive/repulsive electrostatic interaction(s)
150
151 <b>NOTE:</b> the caller is responsible for deleting this force field.
152
153*/
155 const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions,
157 const std::map<std::pair<unsigned int, unsigned int>, double> &CPCI);
158//! Force field with experimental torsion angle preferences and 1-2/1-3 distance
159/// constraints
160/*!
161
162 \param mmat Distance bounds matrix
163 \param positions A vector of pointers to 3D Points to write out the
164 resulting coordinates
165 \param etkdgDetails Contains information about the ETKDG force field
166
167 <b>NOTE:</b> the caller is responsible for deleting this force field.
168
169*/
171 const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions,
172 const ForceFields::CrystalFF::CrystalFFDetails &etkdgDetails);
173
174//! Force field with only improper terms
175/*!
176
177 \param mmat Distance bounds matrix
178 \param positions A vector of pointers to 3D Points to write out the
179 resulting coordinates \param improperAtoms A list of groups of 4 atom
180 indices for inversion terms \param atomNums A list of atomic numbers
181 for all atoms in the molecule
182
183 \return a pointer to a ForceField with improper terms
184 <b>NOTE:</b> the caller is responsible for deleting this force field.
185
186*/
189 const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions,
190 const std::vector<std::vector<int>> &improperAtoms,
191 const std::vector<int> &atomNums);
192
193} // namespace DistGeom
194
195#endif
Class to store the distance bound.
A class to store forcefields and handle minimization.
Definition ForceField.h:79
A symmetric matrix class.
Definition SymmMatrix.h:30
#define RDKIT_DISTGEOMETRY_EXPORT
Definition export.h:129
std::vector< ChiralSetPtr > VECT_CHIRALSET
Definition ChiralSet.h:55
RDKIT_DISTGEOMETRY_EXPORT ForceFields::ForceField * construct3DForceField(const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions, const ForceFields::CrystalFF::CrystalFFDetails &etkdgDetails)
RDKIT_DISTGEOMETRY_EXPORT ForceFields::ForceField * constructForceField(const BoundsMatrix &mmat, RDGeom::PointPtrVect &positions, const VECT_CHIRALSET &csets, double weightChiral=1.0, double weightFourthDim=0.1, std::map< std::pair< int, int >, double > *extraWeights=nullptr, double basinSizeTol=5.0, boost::dynamic_bitset<> *fixedPts=nullptr)
Setup the error function for violation of distance bounds as a forcefield.
RDKIT_DISTGEOMETRY_EXPORT ForceFields::ForceField * constructPlain3DForceField(const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions, const ForceFields::CrystalFF::CrystalFFDetails &etkdgDetails)
RDKIT_DISTGEOMETRY_EXPORT ForceFields::ForceField * construct3DImproperForceField(const BoundsMatrix &mmat, RDGeom::Point3DPtrVect &positions, const std::vector< std::vector< int > > &improperAtoms, const std::vector< int > &atomNums)
Force field with only improper terms.
RDKIT_DISTGEOMETRY_EXPORT bool computeRandomCoords(RDGeom::PointPtrVect &positions, double boxSize, int seed=-1)
places atoms randomly in a box
RDKIT_DISTGEOMETRY_EXPORT bool computeInitialCoords(const RDNumeric::SymmMatrix< double > &distmat, RDGeom::PointPtrVect &positions, bool randNegEig=false, unsigned int numZeroFail=2, int seed=-1)
Compute an initial embedded in 3D based on a distance matrix.
RDKIT_DISTGEOMETRY_EXPORT double pickRandomDistMat(const BoundsMatrix &mmat, RDNumeric::SymmMatrix< double > &distmat, int seed=-1)
std::vector< RDGeom::Point * > PointPtrVect
Definition point.h:531
std::vector< RDGeom::Point3D * > Point3DPtrVect
Definition point.h:535
boost::variate_generator< rng_type &, uniform_double > double_source_type
Definition utils.h:40