Chemical Data Processing Library C++ API - Version 1.4.0
AutomorphismGroupSearch.hpp
Go to the documentation of this file.
1 /*
2  * AutomorphismGroupSearch.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_CHEM_AUTOMORPHISMGROUPSEARCH_HPP
30 #define CDPL_CHEM_AUTOMORPHISMGROUPSEARCH_HPP
31 
32 #include <memory>
33 #include <functional>
34 
35 #include "CDPL/Chem/APIPrefix.hpp"
40 
41 
42 namespace CDPL
43 {
44 
45  namespace Chem
46  {
47 
66  {
67  public:
71  static constexpr unsigned int DEF_ATOM_PROPERTY_FLAGS =
76 
80  static constexpr unsigned int DEF_BOND_PROPERTY_FLAGS =
83 
87  typedef std::shared_ptr<AutomorphismGroupSearch> SharedPointer;
88 
93 
98 
104  typedef std::function<bool(const MolecularGraph&, const AtomBondMapping&)> MappingCallbackFunction;
105 
113  AutomorphismGroupSearch(unsigned int atom_flags = DEF_ATOM_PROPERTY_FLAGS,
114  unsigned int bond_flags = DEF_BOND_PROPERTY_FLAGS);
115 
117 
119 
124  void setAtomPropertyFlags(unsigned int flags);
125 
130  unsigned int getAtomPropertyFlags() const;
131 
136  void setBondPropertyFlags(unsigned int flags);
137 
142  unsigned int getBondPropertyFlags() const;
143 
148  void includeIdentityMapping(bool include);
149 
155 
168  bool findMappings(const MolecularGraph& molgraph);
169 
176  void stopSearch();
177 
182  std::size_t getNumMappings() const;
183 
190  AtomBondMapping& getMapping(std::size_t idx);
191 
198  const AtomBondMapping& getMapping(std::size_t idx) const;
199 
205 
211 
217 
223 
229 
235 
241 
247 
258  void setMaxNumMappings(std::size_t max_num_mappings);
259 
265  std::size_t getMaxNumMappings() const;
266 
279  void addAtomMappingConstraint(std::size_t atom1_idx, std::size_t atom2_idx);
280 
286 
299  void addBondMappingConstraint(std::size_t bond1_idx, std::size_t bond2_idx);
300 
306 
315 
321 
322  private:
324  getAtomMatchExpression(const Atom& atom) const;
325 
327  getBondMatchExpression(const Bond& bond) const;
328 
330  getMolGraphMatchExpression(const MolecularGraph& molgraph) const;
331 
332  class AtomMatchExpression : public MatchExpression<Atom, MolecularGraph>
333  {
334 
335  public:
336  AtomMatchExpression(AutomorphismGroupSearch* parent):
337  parent(parent) {}
338 
339  bool requiresAtomBondMapping() const;
340 
341  bool operator()(const Atom& query_atom, const MolecularGraph& query_molgraph,
342  const Atom& target_atom, const MolecularGraph& target_molgraph,
343  const Base::Any& aux_data) const;
344 
345  bool operator()(const Atom& query_atom, const MolecularGraph& query_molgraph,
346  const Atom& target_atom, const MolecularGraph& target_molgraph,
347  const AtomBondMapping& mapping, const Base::Any& aux_data) const;
348 
349  private:
350  AutomorphismGroupSearch* parent;
351  mutable unsigned int type;
352  mutable unsigned int hybState;
353  mutable std::size_t isotope;
354  mutable std::size_t hCount;
355  mutable long charge;
356  mutable bool aromatic;
357  mutable std::size_t expBondCount;
358  };
359 
360  class BondMatchExpression : public MatchExpression<Bond, MolecularGraph>
361  {
362 
363  public:
364  BondMatchExpression(AutomorphismGroupSearch* parent):
365  parent(parent) {}
366 
367  bool requiresAtomBondMapping() const;
368 
369  bool operator()(const Bond& query_bond, const MolecularGraph& query_molgraph,
370  const Bond& target_bond, const MolecularGraph& target_molgraph,
371  const Base::Any& aux_data) const;
372 
373  bool operator()(const Bond& query_bond, const MolecularGraph& query_molgraph,
374  const Bond& target_bond, const MolecularGraph& target_molgraph,
375  const AtomBondMapping& mapping, const Base::Any& aux_data) const;
376 
377  private:
378  AutomorphismGroupSearch* parent;
379  mutable std::size_t order;
380  mutable bool inRing;
381  mutable bool aromatic;
382  };
383 
384  class MolGraphMatchExpression : public MatchExpression<MolecularGraph>
385  {
386 
387  public:
388  MolGraphMatchExpression(const AutomorphismGroupSearch* parent):
389  parent(parent) {}
390 
391  bool requiresAtomBondMapping() const;
392 
393  bool operator()(const MolecularGraph& query_molgraph,
394  const MolecularGraph& target_molgraph,
395  const Base::Any& aux_data) const;
396 
397  bool operator()(const MolecularGraph& query_molgraph,
398  const MolecularGraph& target_molgraph,
399  const AtomBondMapping& mapping, const Base::Any& aux_data) const;
400 
401  private:
402  const AutomorphismGroupSearch* parent;
403  };
404 
407  typedef MatchExpression<MolecularGraph>::SharedPointer MolGraphMatchExprPtr;
408 
409  SubstructureSearch substructSearch;
410  bool incIdentityMapping;
411  unsigned int atomPropFlags;
412  unsigned int bondPropFlags;
413  AtomMatchExprPtr atomMatchExpr;
414  BondMatchExprPtr bondMatchExpr;
415  MolGraphMatchExprPtr molGraphMatchExpr;
416  MappingCallbackFunction mappingCallbackFunc;
417  const Atom* lastQueryAtom;
418  const Bond* lastQueryBond;
419  };
420  } // namespace Chem
421 } // namespace CDPL
422 
423 #endif // CDPL_CHEM_AUTOMORPHISMGROUPSEARCH_HPP
Definition of constants in namespace CDPL::Chem::BondPropertyFlag.
Definition of the preprocessor macro CDPL_CHEM_API.
#define CDPL_CHEM_API
Tells the compiler/linker which classes, functions and variables are part of the library API.
Definition of constants in namespace CDPL::Chem::AtomPropertyFlag.
Definition of class CDPL::Chem::MatchExpression.
Definition of class CDPL::Chem::SubstructureSearch.
Safe, type checked container for arbitrary data of variable type.
Definition: Any.hpp:60
Data structure for the common storage of related atom to atom and bond to bond mappings.
Definition: AtomBondMapping.hpp:55
Abstract base class representing a chemical atom and its bonded neighborhood.
Definition: Atom.hpp:58
Enumerates the atom and bond self-mappings (automorphism group) of a molecular graph.
Definition: AutomorphismGroupSearch.hpp:66
AutomorphismGroupSearch(const AutomorphismGroupSearch &)=delete
AutomorphismGroupSearch(unsigned int atom_flags=DEF_ATOM_PROPERTY_FLAGS, unsigned int bond_flags=DEF_BOND_PROPERTY_FLAGS)
Constructs and initializes the AutomorphismGroupSearch instance for the specified atom and bond prope...
MappingIterator getMappingsEnd()
Returns a mutable iterator pointing to the end of the stored Chem::AtomBondMapping objects.
bool identityMappingIncluded() const
Tells whether the identity mapping is included in the search results.
AutomorphismGroupSearch & operator=(const AutomorphismGroupSearch &)=delete
SubstructureSearch::ConstMappingIterator ConstMappingIterator
A constant random access iterator used to iterate over the stored const Chem::AtomBondMapping objects...
Definition: AutomorphismGroupSearch.hpp:97
void clearAtomMappingConstraints()
Clears all previously defined atom mapping constraints.
bool findMappings(const MolecularGraph &molgraph)
Searches for the possible atom/bond mappings in the automorphism group of the molecular graph molgrap...
MappingIterator end()
Returns a mutable iterator pointing to the end of the stored Chem::AtomBondMapping objects.
void addAtomMappingConstraint(std::size_t atom1_idx, std::size_t atom2_idx)
Adds a constraint on the allowed atom mappings.
void includeIdentityMapping(bool include)
Specifies whether the identity mapping shall be included in the search results.
void setMaxNumMappings(std::size_t max_num_mappings)
Allows to specify a limit on the number of stored atom/bond mappings.
ConstMappingIterator getMappingsBegin() const
Returns a constant iterator pointing to the beginning of the stored const Chem::AtomBondMapping objec...
const AtomBondMapping & getMapping(std::size_t idx) const
Returns a const reference to the stored atom/bond mapping object at index idx.
void stopSearch()
Aborts a currently running findMappings() call.
ConstMappingIterator getMappingsEnd() const
Returns a constant iterator pointing to the end of the stored const Chem::AtomBondMapping objects.
std::shared_ptr< AutomorphismGroupSearch > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated AutomorphismGroupSearch instances...
Definition: AutomorphismGroupSearch.hpp:87
void setBondPropertyFlags(unsigned int flags)
Specifies the bond properties considered for bond matching during automorphism search.
unsigned int getAtomPropertyFlags() const
Returns the atomic properties currently considered for atom matching.
const MappingCallbackFunction & getFoundMappingCallback() const
Returns the currently installed callback function invoked for every found atom/bond mapping.
ConstMappingIterator end() const
Returns a constant iterator pointing to the end of the stored const Chem::AtomBondMapping objects.
void addBondMappingConstraint(std::size_t bond1_idx, std::size_t bond2_idx)
Adds a constraint on the allowed bond mappings.
std::size_t getMaxNumMappings() const
Returns the specified limit on the number of stored atom/bond mappings.
ConstMappingIterator begin() const
Returns a constant iterator pointing to the beginning of the stored const Chem::AtomBondMapping objec...
void setFoundMappingCallback(const MappingCallbackFunction &func)
Sets a callback function that is invoked for every atom/bond mapping found during findMappings().
std::function< bool(const MolecularGraph &, const AtomBondMapping &)> MappingCallbackFunction
Type of the callback function invoked for every found mapping.
Definition: AutomorphismGroupSearch.hpp:104
std::size_t getNumMappings() const
Returns the number of atom/bond mappings that were recorded in the last call to findMappings().
MappingIterator begin()
Returns a mutable iterator pointing to the beginning of the stored Chem::AtomBondMapping objects.
unsigned int getBondPropertyFlags() const
Returns the bond properties currently considered for bond matching.
SubstructureSearch::MappingIterator MappingIterator
A mutable random access iterator used to iterate over the stored Chem::AtomBondMapping objects.
Definition: AutomorphismGroupSearch.hpp:92
void setAtomPropertyFlags(unsigned int flags)
Specifies the atomic properties considered for atom matching during automorphism search.
AtomBondMapping & getMapping(std::size_t idx)
Returns a non-const reference to the stored atom/bond mapping object at index idx.
void clearBondMappingConstraints()
Clears all previously defined bond mapping constraints.
MappingIterator getMappingsBegin()
Returns a mutable iterator pointing to the beginning of the stored Chem::AtomBondMapping objects.
Abstract base class representing a chemical bond between two atoms (represented by Chem::Atom instanc...
Definition: Bond.hpp:54
Generic boolean expression interface for the implementation of query/target object equivalence tests ...
Definition: MatchExpression.hpp:75
std::shared_ptr< MatchExpression > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated MatchExpression instances.
Definition: MatchExpression.hpp:81
Abstract base class for data structures that represent chemical structures as molecular graphs.
Definition: MolecularGraph.hpp:60
boost::indirect_iterator< ABMappingList::const_iterator, const AtomBondMapping > ConstMappingIterator
A constant random access iterator used to iterate over the stored const Chem::AtomBondMapping objects...
Definition: SubstructureSearch.hpp:100
boost::indirect_iterator< ABMappingList::iterator, AtomBondMapping > MappingIterator
A mutable random access iterator used to iterate over the stored Chem::AtomBondMapping objects.
Definition: SubstructureSearch.hpp:95
constexpr unsigned int FORMAL_CHARGE
Specifies the formal charge of an atom.
Definition: Chem/AtomPropertyFlag.hpp:73
constexpr unsigned int H_COUNT
Specifies the hydrogen count of an atom.
Definition: Chem/AtomPropertyFlag.hpp:78
constexpr unsigned int AROMATICITY
Specifies the membership of an atom in aromatic rings.
Definition: Chem/AtomPropertyFlag.hpp:93
constexpr unsigned int ISOTOPE
Specifies the isotopic mass of an atom.
Definition: Chem/AtomPropertyFlag.hpp:68
constexpr unsigned int CONFIGURATION
Specifies the configuration of a stereogenic atom.
Definition: Chem/AtomPropertyFlag.hpp:98
constexpr unsigned int HYBRIDIZATION_STATE
Specifies the hybridization state an atom.
Definition: Chem/AtomPropertyFlag.hpp:123
constexpr unsigned int TYPE
Specifies the generic type or element of an atom.
Definition: Chem/AtomPropertyFlag.hpp:63
constexpr unsigned int EXPLICIT_BOND_COUNT
Specifies the explicit bond count of an atom.
Definition: Chem/AtomPropertyFlag.hpp:118
constexpr unsigned int AROMATICITY
Specifies the membership of a bond in aromatic rings.
Definition: BondPropertyFlag.hpp:73
constexpr unsigned int ORDER
Specifies the order of a bond.
Definition: BondPropertyFlag.hpp:63
constexpr unsigned int CONFIGURATION
Specifies the steric configuration of a double bond.
Definition: BondPropertyFlag.hpp:78
constexpr unsigned int TOPOLOGY
Specifies the ring/chain topology of a bond.
Definition: BondPropertyFlag.hpp:68
constexpr unsigned int Any
Specifies any atom.
Definition: SybylAtomType.hpp:198
The namespace of the Chemical Data Processing Library.