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;
103 std::size_t numCharges;
249 std::size_t atom1Index;
250 std::size_t atom2Index;
251 std::size_t bondIndex;
260 bool canShiftElectrons()
const;
262 std::size_t getNumBonds()
const;
264 std::size_t getBondIndex(std::size_t list_idx)
const;
266 std::size_t getAtomIndex(std::size_t list_idx)
const;
268 std::size_t getIndex()
const;
272 double getElectronegativity()
const;
274 bool isSP1Hybridized(
const StructureData& res_struct)
const;
276 bool checkValenceState(
const StructureData& res_struct,
long val_diff,
long charge_diff)
const;
278 bool octetRuleFulfilled(
const StructureData& res_struct)
const;
280 std::size_t countRepChargePairs(
const Util::LArray& charges)
const;
282 bool getVisitedFlag()
const;
284 void setVisitedFlag();
286 bool getInSmallRingFlag()
const;
288 void setInSmallRingFlag();
291 typedef std::vector<std::size_t> IndexArray;
297 std::size_t unprdElecCount;
298 std::size_t implHCount;
300 IndexArray bondIndices;
301 IndexArray atomIndices;
306 struct StructureDataPtrHashFunc
309 std::size_t operator()(
const StructureDataPtr& rs_ptr)
const;
312 struct StructureDataPtrCmpFunc
315 bool operator()(
const StructureDataPtr& rs_ptr1,
const StructureDataPtr& rs_ptr2)
const
317 return (rs_ptr1->getBondOrders() == rs_ptr2->getBondOrders() &&
318 rs_ptr1->getAtomCharges() == rs_ptr2->getAtomCharges());
322 typedef std::vector<AtomData> AtomDataArray;
323 typedef std::vector<const AtomData*> AtomDataPtrArray;
324 typedef std::vector<BondData> BondDataList;
325 typedef std::unordered_set<StructureDataPtr, StructureDataPtrHashFunc, StructureDataPtrCmpFunc> StructureDataSet;
327 void init(
const MolecularGraph& molgraph);
329 void createInputResStructData();
331 void extractResBonds();
332 void extractResBonds(AtomData& atom_data);
334 void genStartResStructs();
335 void genStartResStructs(std::size_t depth, std::size_t num_rep_chg_pairs);
337 std::size_t countRepChargePairs()
const;
339 void genOutputResStructs();
340 void genOutputResStructs(StructureData& res_struct, std::size_t depth, std::size_t con_idx,
341 std::size_t num_charges);
343 void postprocOutputResStructs();
345 void minimzeResStructProperty(std::size_t (ResonanceStructureGenerator::*prop_func)(
const StructureData&)
const);
347 std::size_t countOctetRuleViolations(
const StructureData& res_struct)
const;
348 std::size_t countSP1GeometryViolations(
const StructureData& res_struct)
const;
349 std::size_t count12ChargedCBonds(
const StructureData& res_struct)
const;
351 void modifyResStruct(StructureData& res_struct, std::size_t bond_idx, std::size_t atom1_idx, std::size_t atom2_idx,
352 long bond_order_diff,
long atom1_chg_diff,
long atom2_chg_diff)
const;
354 StructureDataPtr copyResStructPtr(
const StructureDataPtr& res_struct_ptr);
355 StructureDataPtr copyResStruct(
const StructureData& res_struct);
357 StructureDataCache resStructDataCache;
358 bool minOctRuleViolations;
359 bool minSP1GeomViolations;
360 bool minCBond12Charges;
361 std::size_t chargeCountWin;
363 std::size_t maxNumGenStructs;
364 const MolecularGraph* molGraph;
365 AtomDataArray atomData;
366 AtomDataPtrArray resAtoms;
367 BondDataList resBonds;
368 StructureData inputResStruct;
369 StructureDataList startResStructs;
370 StructureDataSet workingResStructs;
371 StructureDataList outputResStructs;
372 StructureDataList tmpOutputResStructs;
375 std::size_t minNumRepChargePairs;
376 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 bond-orders that define a single resonance structure.
Definition: ResonanceStructureGenerator.hpp:83
const Util::LArray & getAtomCharges() const
Returns the per-atom formal charges of this resonance structure.
const Util::STArray & getBondOrders() const
Returns the per-bond 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:75
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:77
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:120
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 Chem::AtomProperty::TYPE property of atom (see namespace Chem::AtomType).
Array< std::size_t > STArray
Array storing unsigned integers of type std::size_t.
Definition: Array.hpp:575
Array< long > LArray
Array storing integers of type long.
Definition: Array.hpp:580
boost::dynamic_bitset BitSet
Dynamic bitset class.
Definition: BitSet.hpp:46
The namespace of the Chemical Data Processing Library.