Chemical Data Processing Library C++ API - Version 1.1.0
DGConstraintGenerator.hpp
Go to the documentation of this file.
1 /*
2  * DGConstraintGenerator.hpp
3  *
4  * This file is part of the Chemical Data Processing Toolkit
5  *
6  * Copyright (C) 2003 Thomas Seidel <thomas.seidel@univie.ac.at>
7  *
8  * This library is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU Lesser General Public
10  * License as published by the Free Software Foundation; either
11  * version 2 of the License, or (at your option) any later version.
12  *
13  * This library is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16  * Lesser General Public License for more details.
17  *
18  * You should have received a copy of the GNU Lesser General Public License
19  * along with this library; see the file COPYING. If not, write to
20  * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
21  * Boston, MA 02111-1307, USA.
22  */
23 
29 #ifndef CDPL_CONFGEN_DGCONSTRAINTGENERATOR_HPP
30 #define CDPL_CONFGEN_DGCONSTRAINTGENERATOR_HPP
31 
32 #include <utility>
33 #include <cstddef>
34 #include <unordered_map>
35 #include <tuple>
36 
42 #include "CDPL/Util/BitSet.hpp"
43 
44 
45 namespace CDPL
46 {
47 
48  namespace ForceField
49  {
50 
51  class MMFF94InteractionData;
52  }
53 
54  namespace Chem
55  {
56 
57  class FragmentList;
58  class AtomContainer;
59  class MolecularGraph;
60  class Atom;
61  class Bond;
62  } // namespace Chem
63 
64  namespace ConfGen
65  {
66 
68  {
69 
70  public:
71  typedef std::pair<std::size_t, Chem::StereoDescriptor> StereoCenterData;
72 
73  private:
74  typedef std::vector<StereoCenterData> StereoCenterDataArray;
75 
76  public:
77  typedef StereoCenterDataArray::const_iterator ConstStereoCenterDataIterator;
78 
80 
82 
84 
85  void addAtomStereoCenter(const Chem::Atom& atom, const Chem::StereoDescriptor& descr);
86  void addBondStereoCenter(const Chem::Bond& bond, const Chem::StereoDescriptor& descr);
87 
88  void setup(const Chem::MolecularGraph& molgraph);
89  void setup(const Chem::MolecularGraph& molgraph, const ForceField::MMFF94InteractionData& ia_data);
90 
92 
93  std::size_t getNumAtomStereoCenters() const;
94  std::size_t getNumBondStereoCenters() const;
95 
96  const StereoCenterData& getAtomStereoCenterData(std::size_t idx) const;
97  const StereoCenterData& getBondStereoCenterData(std::size_t idx) const;
98 
101 
104 
105  /*
106  * \since 1.1
107  */
109  Util::DG3DCoordinatesGenerator& coords_gen);
114 
117 
120 
121  private:
122  void setup(const Chem::MolecularGraph& molgraph, const ForceField::MMFF94InteractionData* ia_data);
123 
124  void init(const Chem::MolecularGraph& molgraph);
125 
126  void assignBondLengths(const ForceField::MMFF94InteractionData* ia_data);
127  void assignBondAngles(const ForceField::MMFF94InteractionData* ia_data);
128 
129  void extractAtomStereoCenterData();
130  void extractBondStereoCenterData();
131 
132  void setBondLength(std::size_t atom1_idx, std::size_t atom2_idx, double length);
133  double getBondLength(std::size_t atom1_idx, std::size_t atom2_idx) const;
134 
135  void setBondAngle(std::size_t atom1_idx, std::size_t atom2_idx, std::size_t atom3_idx, double angle);
136  double getBondAngle(std::size_t atom1_idx, std::size_t atom2_idx, std::size_t atom3_idx) const;
137 
138  std::size_t getSmallestRingSize(const Chem::FragmentList& sssr, const Chem::Bond& bond1, const Chem::Bond& bond2) const;
139  std::size_t getSmallestRingSize(const Chem::FragmentList& sssr, std::size_t atom1_idx, std::size_t atom2_idx) const;
140 
141  void markAtomPairProcessed(std::size_t atom1_idx, std::size_t atom2_idx);
142  bool atomPairProcessed(std::size_t atom1_idx, std::size_t atom2_idx) const;
143 
144  double calc13AtomDistance(double bond1_len, double bond2_len, double angle) const;
145 
146  double calcCis14AtomDistance(double bond1_len, double bond2_len, double bond3_len,
147  double angle_12, double angle_23) const;
148  double calcTrans14AtomDistance(double bond1_len, double bond2_len, double bond3_len,
149  double angle_12, double angle_23) const;
150 
151  bool isPlanar(const Chem::Atom& atom) const;
152  bool isPlanar(const Chem::Bond& bond) const;
153 
154  typedef std::vector<std::size_t> AtomIndexList;
155 
156  std::size_t getNeighborAtoms(const Chem::Atom& atom, AtomIndexList& idx_list,
157  const Chem::Atom* x_atom = 0) const;
158 
159  typedef std::pair<std::size_t, std::size_t> BondLengthKey;
160  typedef std::tuple<std::size_t, std::size_t, std::size_t> BondAngleKey;
161 
162  struct CDPL_CONFGEN_API BondAngleKeyHash
163  {
164 
165  std::size_t operator()(const BondAngleKey& k) const;
166  };
167 
168  struct CDPL_CONFGEN_API BondLengthKeyHash
169  {
170 
171  std::size_t operator()(const BondLengthKey& k) const;
172  };
173 
174  typedef std::unordered_map<BondLengthKey, double, BondLengthKeyHash> BondLengthTable;
175  typedef std::unordered_map<BondAngleKey, double, BondAngleKeyHash> BondAngleTable;
176 
177  const Chem::MolecularGraph* molGraph;
178  Util::BitSet hAtomMask;
179  Util::BitSet procAtomPairMask;
180  Util::BitSet stereoAtomMask;
181  BondLengthTable bondLengthTable;
182  BondAngleTable bondAngleTable;
183  StereoCenterDataArray atomStereoData;
184  StereoCenterDataArray bondStereoData;
185  std::size_t numAtoms;
186  AtomIndexList atomIndexList1;
187  AtomIndexList atomIndexList2;
188  DGConstraintGeneratorSettings settings;
189  };
190  } // namespace ConfGen
191 } // namespace CDPL
192 
193 #endif // CDPL_CONFGEN_DGCONSTRAINTGENERATOR_HPP
CDPL::ForceField::MMFF94InteractionData
Definition: MMFF94InteractionData.hpp:51
VectorArray.hpp
Definition of the class CDPL::Math::VectorArray.
CDPL::ConfGen::DGConstraintGenerator::setup
void setup(const Chem::MolecularGraph &molgraph, const ForceField::MMFF94InteractionData &ia_data)
CDPL::Chem::Bond
Bond.
Definition: Bond.hpp:50
CDPL::ConfGen::DGConstraintGenerator::getBondStereoCenterData
const StereoCenterData & getBondStereoCenterData(std::size_t idx) const
CDPL::Util::DG3DCoordinatesGenerator
DGCoordinatesGenerator< 3, double > DG3DCoordinatesGenerator
Definition: DGCoordinatesGenerator.hpp:296
CDPL::ConfGen::DGConstraintGenerator::StereoCenterData
std::pair< std::size_t, Chem::StereoDescriptor > StereoCenterData
Definition: DGConstraintGenerator.hpp:71
CDPL::ConfGen::DGConstraintGenerator::getAtomStereoCenterDataBegin
ConstStereoCenterDataIterator getAtomStereoCenterDataBegin() const
CDPL::ConfGen::DGConstraintGenerator::getAtomStereoCenterData
const StereoCenterData & getAtomStereoCenterData(std::size_t idx) const
CDPL::ConfGen::DGConstraintGenerator::getSettings
DGConstraintGeneratorSettings & getSettings()
CDPL::Util::BitSet
boost::dynamic_bitset BitSet
A dynamic bitset class.
Definition: BitSet.hpp:46
CDPL::ConfGen::DGConstraintGenerator::getNumBondStereoCenters
std::size_t getNumBondStereoCenters() const
CDPL::ConfGen::DGConstraintGenerator::add14DistanceConstraints
void add14DistanceConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::Chem::Atom
Atom.
Definition: Atom.hpp:52
CDPL::ConfGen::DGConstraintGenerator::addBondConfigurationConstraints
void addBondConfigurationConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGenerator::ConstStereoCenterDataIterator
StereoCenterDataArray::const_iterator ConstStereoCenterDataIterator
Definition: DGConstraintGenerator.hpp:77
VectorArray< Vector3D >
CDPL::Chem::MolecularGraph
MolecularGraph.
Definition: MolecularGraph.hpp:52
BitSet.hpp
Definition of the type CDPL::Util::BitSet.
CDPL::ConfGen::DGConstraintGenerator::setup
void setup(const Chem::MolecularGraph &molgraph)
CDPL::Chem::AtomContainer
A common interface for data-structures that support a random access to stored Chem::Atom instances.
Definition: AtomContainer.hpp:55
CDPL::ConfGen::DGConstraintGenerator::getExcludedHydrogenMask
const Util::BitSet & getExcludedHydrogenMask() const
CDPL::ConfGen::DGConstraintGenerator::addDefaultDistanceConstraints
void addDefaultDistanceConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGenerator::getNumAtomStereoCenters
std::size_t getNumAtomStereoCenters() const
APIPrefix.hpp
Definition of the preprocessor macro CDPL_CONFGEN_API.
CDPL_CONFGEN_API
#define CDPL_CONFGEN_API
Tells the compiler/linker which classes, functions and variables are part of the library API.
CDPL::Chem::FragmentList
A data type for the storage of Chem::Fragment objects.
Definition: FragmentList.hpp:49
CDPL::ConfGen::DGConstraintGenerator::addAtomPlanarityConstraints
void addAtomPlanarityConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGenerator
Definition: DGConstraintGenerator.hpp:68
CDPL::ConfGen::DGConstraintGenerator::getSettings
const DGConstraintGeneratorSettings & getSettings() const
CDPL
The namespace of the Chemical Data Processing Library.
CDPL::ConfGen::DGConstraintGenerator::addBondStereoCenter
void addBondStereoCenter(const Chem::Bond &bond, const Chem::StereoDescriptor &descr)
CDPL::ConfGen::DGConstraintGenerator::getBondStereoCenterDataBegin
ConstStereoCenterDataIterator getBondStereoCenterDataBegin() const
CDPL::ConfGen::DGConstraintGenerator::addBondPlanarityConstraints
void addBondPlanarityConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGenerator::getBondStereoCenterDataEnd
ConstStereoCenterDataIterator getBondStereoCenterDataEnd() const
DGConstraintGeneratorSettings.hpp
Definition of the class CDPL::ConfGen::DGConstraintGeneratorSettings.
CDPL::Chem::StereoDescriptor
A data structure for the storage and retrieval of stereochemical information about atoms and bonds.
Definition: StereoDescriptor.hpp:102
StereoDescriptor.hpp
Definition of the type CDPL::Chem::StereoDescriptor.
DGCoordinatesGenerator.hpp
Implementation of a distance geometry based coordinates generator.
CDPL::ConfGen::DGConstraintGenerator::addAtomConfigurationConstraints
void addAtomConfigurationConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGenerator::addBondAngleConstraints
void addBondAngleConstraints(Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGenerator::addFixedSubstructureConstraints
void addFixedSubstructureConstraints(const Chem::AtomContainer &atoms, const Math::Vector3DArray &coords, Util::DG3DCoordinatesGenerator &coords_gen)
CDPL::ConfGen::DGConstraintGeneratorSettings
Definition: DGConstraintGeneratorSettings.hpp:42
CDPL::ConfGen::DGConstraintGenerator::DGConstraintGenerator
DGConstraintGenerator()
CDPL::ConfGen::DGConstraintGenerator::addAtomStereoCenter
void addAtomStereoCenter(const Chem::Atom &atom, const Chem::StereoDescriptor &descr)
CDPL::ConfGen::DGConstraintGenerator::getAtomStereoCenterDataEnd
ConstStereoCenterDataIterator getAtomStereoCenterDataEnd() const
CDPL::Math::length
VectorNorm2< E >::ResultType length(const VectorExpression< E > &e)
Definition: VectorExpression.hpp:553
CDPL::ConfGen::DGConstraintGenerator::addBondLengthConstraints
void addBondLengthConstraints(Util::DG3DCoordinatesGenerator &coords_gen)