29 #ifndef CDPL_CHEM_RESONANCESTRUCTUREGENERATOR_HPP
30 #define CDPL_CHEM_RESONANCESTRUCTUREGENERATOR_HPP
34 #include <unordered_set>
37 #include <boost/iterator/indirect_iterator.hpp>
71 typedef std::vector<StructureDataPtr> StructureDataList;
108 std::size_t numCharges;
254 std::size_t atom1Index;
255 std::size_t atom2Index;
256 std::size_t bondIndex;
265 bool canShiftElectrons()
const;
267 std::size_t getNumBonds()
const;
269 std::size_t getBondIndex(std::size_t list_idx)
const;
271 std::size_t getAtomIndex(std::size_t list_idx)
const;
273 std::size_t getIndex()
const;
277 double getElectronegativity()
const;
279 bool isSP1Hybridized(
const StructureData& res_struct)
const;
281 bool checkValenceState(
const StructureData& res_struct,
long val_diff,
long charge_diff)
const;
283 bool octetRuleFulfilled(
const StructureData& res_struct)
const;
285 std::size_t countRepChargePairs(
const Util::LArray& charges)
const;
287 bool getVisitedFlag()
const;
289 void setVisitedFlag();
291 bool getInSmallRingFlag()
const;
293 void setInSmallRingFlag();
296 typedef std::vector<std::size_t> IndexArray;
302 std::size_t unprdElecCount;
303 std::size_t implHCount;
305 IndexArray bondIndices;
306 IndexArray atomIndices;
311 struct StructureDataPtrHashFunc
314 std::size_t operator()(
const StructureDataPtr& rs_ptr)
const;
317 struct StructureDataPtrCmpFunc
320 bool operator()(
const StructureDataPtr& rs_ptr1,
const StructureDataPtr& rs_ptr2)
const
322 return (rs_ptr1->getBondOrders() == rs_ptr2->getBondOrders() &&
323 rs_ptr1->getAtomCharges() == rs_ptr2->getAtomCharges());
327 typedef std::vector<AtomData> AtomDataArray;
328 typedef std::vector<const AtomData*> AtomDataPtrArray;
329 typedef std::vector<BondData> BondDataList;
330 typedef std::unordered_set<StructureDataPtr, StructureDataPtrHashFunc, StructureDataPtrCmpFunc> StructureDataSet;
332 void init(
const MolecularGraph& molgraph);
334 void createInputResStructData();
336 void extractResBonds();
337 void extractResBonds(AtomData& atom_data);
339 void genStartResStructs();
340 void genStartResStructs(std::size_t depth, std::size_t num_rep_chg_pairs);
342 std::size_t countRepChargePairs()
const;
344 void genOutputResStructs();
345 void genOutputResStructs(StructureData& res_struct, std::size_t depth, std::size_t con_idx,
346 std::size_t num_charges);
348 void postprocOutputResStructs();
350 void minimzeResStructProperty(std::size_t (ResonanceStructureGenerator::*prop_func)(
const StructureData&)
const);
352 std::size_t countOctetRuleViolations(
const StructureData& res_struct)
const;
353 std::size_t countSP1GeometryViolations(
const StructureData& res_struct)
const;
354 std::size_t count12ChargedCBonds(
const StructureData& res_struct)
const;
356 void modifyResStruct(StructureData& res_struct, std::size_t bond_idx, std::size_t atom1_idx, std::size_t atom2_idx,
357 long bond_order_diff,
long atom1_chg_diff,
long atom2_chg_diff)
const;
359 StructureDataPtr copyResStructPtr(
const StructureDataPtr& res_struct_ptr);
360 StructureDataPtr copyResStruct(
const StructureData& res_struct);
362 StructureDataCache resStructDataCache;
363 bool minOctRuleViolations;
364 bool minSP1GeomViolations;
365 bool minCBond12Charges;
366 std::size_t chargeCountWin;
368 std::size_t maxNumGenStructs;
369 const MolecularGraph* molGraph;
370 AtomDataArray atomData;
371 AtomDataPtrArray resAtoms;
372 BondDataList resBonds;
373 StructureData inputResStruct;
374 StructureDataList startResStructs;
375 StructureDataSet workingResStructs;
376 StructureDataList outputResStructs;
377 StructureDataList tmpOutputResStructs;
380 std::size_t minNumRepChargePairs;
381 std::size_t minNumCharges;
Definition of class CDPL::Util::Array.
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::Util::ObjectPool.
Abstract base class representing a chemical atom and its bonded neighborhood.
Definition: Atom.hpp:57
Abstract base class for representations of a chemical structure as a graph of bonded atoms.
Definition: MolecularGraph.hpp:57
Holds the per-atom formal charges and per-bond orders that define a single resonance structure.
Definition: ResonanceStructureGenerator.hpp:88
const Util::LArray & getAtomCharges() const
Returns the per-atom formal charges of this resonance structure.
const Util::STArray & getBondOrders() const
Returns the bond orders of this resonance structure.
Enumerates the resonance structures of a molecular graph by redistributing π-electrons across the res...
Definition: ResonanceStructureGenerator.hpp:63
std::shared_ptr< ResonanceStructureGenerator > SharedPointer
A reference-counted smart pointer [SHPTR] for dynamically allocated ResonanceStructureGenerator insta...
Definition: ResonanceStructureGenerator.hpp:77
ConstStructureDataIterator begin() const
Returns a constant iterator pointing to the first generated record (range-based for support).
ResonanceStructureGenerator(const ResonanceStructureGenerator &gen)
Constructs a copy of the ResonanceStructureGenerator instance gen.
void minimizeOctetRuleViolations(bool minimize)
Specifies whether resonance structures violating the octet rule shall be filtered out.
bool octetRuleViolationsMinimized() const
Tells whether octet-rule violations are minimized.
Util::BitSet & getOctetRuleCheckAtomTypes()
Returns the bit mask of atom types subjected to the octet-rule check during minimization.
void setChargeCountWindow(std::size_t win_size)
Sets the maximum allowed difference between the lowest and highest formal charge count of accepted re...
std::size_t getMaxNumGeneratedStructures() const
Returns the upper limit on the number of resonance structures generated per molecule.
ConstStructureDataIterator getStructureDataEnd() const
Returns a constant iterator pointing one past the last generated resonance-structure record.
ConstStructureDataIterator end() const
Returns a constant iterator pointing one past the last generated record (range-based for support).
ResonanceStructureGenerator & operator=(const ResonanceStructureGenerator &gen)
Replaces the state of this generator by a copy of the state of gen.
const StructureData & getStructureData(std::size_t idx) const
Returns the resonance-structure record at index idx.
ResonanceStructureGenerator()
Constructs the ResonanceStructureGenerator instance.
boost::indirect_iterator< StructureDataList::const_iterator, const StructureData > ConstStructureDataIterator
A constant iterator over the generated resonance-structure records.
Definition: ResonanceStructureGenerator.hpp:82
bool sp1GeometryViolationsMinimized() const
Tells whether sp-hybridization-geometry violations are minimized.
ConstStructureDataIterator getStructureDataBegin() const
Returns a constant iterator pointing to the first generated resonance-structure record.
const Util::BitSet & getOctetRuleCheckAtomTypes() const
Returns the bit mask of atom types subjected to the octet-rule check during minimization.
void generate(const MolecularGraph &molgraph)
Generates all unique resonance structures of the molecular graph molgraph.
bool carbonBond12ChargesMinimized() const
Tells whether 1,2-charge separations on adjacent carbon atoms are minimized.
std::size_t getChargeCountWindow() const
Returns the configured charge-count window size.
void minimizeCarbonBond12Charges(bool minimize)
Specifies whether resonance structures with 1,2-charge separations on adjacent carbon atoms shall be ...
virtual ~ResonanceStructureGenerator()
Virtual destructor.
Definition: ResonanceStructureGenerator.hpp:125
void setMaxNumGeneratedStructures(std::size_t max_num)
Sets the upper limit on the number of resonance structures generated per molecule.
void minimizeSP1GeometryViolations(bool minimize)
Specifies whether resonance structures with sp-hybridization-geometry violations shall be filtered ou...
std::size_t getNumStructures() const
Returns the number of generated resonance structures.
std::shared_ptr< ObjectType > SharedObjectPointer
A smart pointer to a borrowed object that returns the object to the pool on destruction.
Definition: ObjectPool.hpp:71
CDPL_CHEM_API unsigned int getType(const Atom &atom)
Returns the value of the Chem::AtomProperty::TYPE property of the atom atom.
Array< std::size_t > STArray
Array storing unsigned integers of type std::size_t.
Definition: Array.hpp:578
Array< long > LArray
Array storing integers of type long.
Definition: Array.hpp:583
boost::dynamic_bitset BitSet
Dynamic bitset class.
Definition: BitSet.hpp:46
The namespace of the Chemical Data Processing Library.