29 #ifndef CDPL_CHEM_REACTIONSUBSTRUCTURESEARCH_HPP
30 #define CDPL_CHEM_REACTIONSUBSTRUCTURESEARCH_HPP
38 #include <boost/iterator/indirect_iterator.hpp>
72 typedef std::vector<AtomBondMapping*> ABMappingList;
78 typedef boost::indirect_iterator<ABMappingList::iterator, AtomBondMapping>
MappingIterator;
83 typedef boost::indirect_iterator<ABMappingList::const_iterator, const AtomBondMapping>
ConstMappingIterator;
274 typedef std::pair<std::size_t, std::size_t> IndexOffsetPair;
278 void initQueryData();
279 void initTargetData();
281 bool findEquivAtoms();
282 bool findEquivBonds();
286 std::size_t nextQueryAtom()
const;
287 bool nextTargetAtom(std::size_t,
unsigned int, std::size_t&, std::size_t&)
const;
289 bool atomMappingAllowed(std::size_t, std::size_t)
const;
291 bool mapBonds(
const Atom*,
const Atom*,
const IndexOffsetPair&);
292 bool mapAtoms(std::size_t);
293 bool mapAtoms(std::size_t, std::size_t);
297 bool hasPostMappingMatchExprs()
const;
300 bool foundMappingUnique();
302 void freeAtomBondMappings();
303 void freeAtomBondMapping();
311 void initAtomMask(std::size_t);
312 void initBondMask(std::size_t);
314 void setAtomBit(std::size_t);
315 void resetAtomBit(std::size_t);
317 bool testAtomBit(std::size_t)
const;
319 void setBondBit(std::size_t);
320 void resetBondMask();
322 bool operator<(
const ABMappingMask&)
const;
323 bool operator>(
const ABMappingMask&)
const;
332 typedef std::vector<Util::BitSet> BitMatrix;
333 typedef std::vector<const Atom*> AtomMappingTable;
334 typedef std::vector<std::size_t> BondMappingTable;
335 typedef std::deque<std::size_t> AtomQueue;
336 typedef std::set<ABMappingMask> UniqueMappingList;
337 typedef std::vector<const Atom*> AtomList;
338 typedef std::vector<const Bond*> BondList;
339 typedef std::vector<std::size_t> IndexList;
340 typedef std::vector<MatchExpression<Atom, MolecularGraph>::SharedPointer> AtomMatchExprTable;
341 typedef std::vector<MatchExpression<Bond, MolecularGraph>::SharedPointer> BondMatchExprTable;
342 typedef std::vector<IndexOffsetPair> IndexOffsetTable;
349 AtomList targetAtoms;
350 BondList targetBonds;
351 IndexOffsetTable queryABIndexOffsets;
352 IndexOffsetTable targetABIndexOffsets;
353 BitMatrix atomEquivMatrix;
354 BitMatrix bondEquivMatrix;
355 AtomQueue termQueryAtoms;
356 AtomMappingTable queryAtomMapping;
357 BondMappingTable queryBondMapping;
359 ABMappingMask targetMappingMask;
360 ABMappingList foundMappings;
361 UniqueMappingList uniqueMappings;
362 AtomMatchExprTable atomMatchExprTable;
363 BondMatchExprTable bondMatchExprTable;
364 ReactionMatchExprPtr rxnMatchExpression;
365 IndexList postMappingMatchAtoms;
366 IndexList postMappingMatchBonds;
367 MappingCache mappingCache;
369 bool initQueryMappingData;
372 unsigned int enabledRxnRoles;
373 std::size_t numQueryAtoms;
374 std::size_t numQueryBonds;
375 std::size_t numTargetAtoms;
376 std::size_t numTargetBonds;
377 std::size_t maxNumMappings;
Definition of class CDPL::Chem::AtomBondMapping.
Declaration of type CDPL::Util::BitSet.
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 class CDPL::Chem::MatchExpression.
Definition of class CDPL::Util::ObjectStack.
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:57
Generic boolean expression interface for the implementation of query/target object equivalence tests ...
Definition: MatchExpression.hpp:75
Reaction-level analogue of Chem::SubstructureSearch that locates atom/bond mappings of a query reacti...
Definition: ReactionSubstructureSearch.hpp:70
MappingIterator getMappingsBegin()
Returns a mutable iterator pointing to the beginning of the stored atom/bond mapping objects.
ReactionSubstructureSearch()
Constructs and initializes a ReactionSubstructureSearch instance.
ConstMappingIterator end() const
Returns a constant iterator pointing to the end of the stored atom/bond mapping objects.
std::size_t getNumMappings() const
Returns the number of atom/bond mappings that were recorded in the last call to findMappings().
bool mappingExists(const Reaction &target)
Tells whether the query reaction pattern matches the specified target reaction.
std::size_t getMaxNumMappings() const
Returns the specified limit on the number of stored atom/bond mappings.
void setQuery(const Reaction &query)
Allows to specify a new query reaction pattern.
bool findMappings(const Reaction &target)
Searches for all possible atom/bond between the query reaction pattern and the specified target react...
const AtomBondMapping & getMapping(std::size_t idx) const
Returns a const reference to the stored atom/bond mapping object at index idx.
void setMaxNumMappings(std::size_t max_num_mappings)
Allows to specify a limit on the number of stored atom/bond mappings.
MappingIterator getMappingsEnd()
Returns a mutable iterator pointing to the end of the stored atom/bond mapping objects.
void setEnabledReactionRoles(unsigned int roles)
Allows the reaction role specific exclusion of query and target components from the search for matchi...
boost::indirect_iterator< ABMappingList::const_iterator, const AtomBondMapping > ConstMappingIterator
A constant random access iterator used to iterate over the stored atom/bond mapping objects.
Definition: ReactionSubstructureSearch.hpp:83
ConstMappingIterator begin() const
Returns a constant iterator pointing to the beginning of the stored atom/bond mapping objects.
ReactionSubstructureSearch & operator=(const ReactionSubstructureSearch &)=delete
void uniqueMappingsOnly(bool unique)
Allows to specify whether or not to store only unique atom/bond mappings.
bool uniqueMappingsOnly() const
Tells whether duplicate atom/bond mappings are discarded.
AtomBondMapping & getMapping(std::size_t idx)
Returns a non-const reference to the stored atom/bond mapping object at index idx.
~ReactionSubstructureSearch()
Destructor.
ReactionSubstructureSearch(const Reaction &query)
Constructs and initializes a ReactionSubstructureSearch instance for the specified query reaction pat...
boost::indirect_iterator< ABMappingList::iterator, AtomBondMapping > MappingIterator
A mutable random access iterator used to iterate over the stored atom/bond mapping objects.
Definition: ReactionSubstructureSearch.hpp:78
MappingIterator begin()
Returns a mutable iterator pointing to the beginning of the stored atom/bond mapping objects.
unsigned int getEnabledReactionRoles() const
Tells which reaction component roles are considered in the search for matching reaction substructures...
ReactionSubstructureSearch(const ReactionSubstructureSearch &)=delete
MappingIterator end()
Returns a mutable iterator pointing to the end of the stored atom/bond mapping objects.
ConstMappingIterator getMappingsBegin() const
Returns a constant iterator pointing to the beginning of the stored atom/bond mapping objects.
ConstMappingIterator getMappingsEnd() const
Returns a constant iterator pointing to the end of the stored atom/bond mapping objects.
Abstract base class for chemical reactions composed of role-tagged Chem::Molecule components.
Definition: Reaction.hpp:59
bool operator<(const Array< ValueType > &array1, const Array< ValueType > &array2)
Less than comparison operator.
boost::dynamic_bitset BitSet
Dynamic bitset class.
Definition: BitSet.hpp:46
bool operator>(const Array< ValueType > &array1, const Array< ValueType > &array2)
Greater than comparison operator.
The namespace of the Chemical Data Processing Library.