10 #ifndef RDKIT_MOLENUMERATOR_H
11 #define RDKIT_MOLENUMERATOR_H
23 class ChemicalReaction;
24 namespace MolEnumerator {
44 const std::vector<size_t> &which)
const = 0;
48 virtual std::unique_ptr<MolEnumeratorOp>
copy()
const = 0;
67 : dp_mol(other.dp_mol), d_variationPoints(other.d_variationPoints) {}
72 dp_mol = other.dp_mol;
73 d_variationPoints = other.d_variationPoints;
81 const std::vector<size_t> &which)
const override;
87 std::unique_ptr<MolEnumeratorOp>
copy()
const override {
92 std::shared_ptr<ROMol> dp_mol{
nullptr};
93 std::vector<std::pair<unsigned int, std::vector<unsigned int>>>
95 std::vector<size_t> d_dummiesAtEachPoint{};
111 : dp_mol(other.dp_mol),
112 dp_frame(other.dp_frame),
113 d_countAtEachPoint(other.d_countAtEachPoint),
114 d_variations(other.d_variations),
115 d_pointRanges(other.d_pointRanges),
116 d_isotopeMap(other.d_isotopeMap),
117 d_atomMap(other.d_atomMap) {}
119 if (&other ==
this) {
122 dp_mol = other.dp_mol;
123 dp_frame = other.dp_frame;
124 d_countAtEachPoint = other.d_countAtEachPoint;
125 d_variations = other.d_variations;
126 d_pointRanges = other.d_pointRanges;
127 d_isotopeMap = other.d_isotopeMap;
128 d_atomMap = other.d_atomMap;
136 const std::vector<size_t> &which)
const override;
142 std::unique_ptr<MolEnumeratorOp>
copy()
const override {
143 return std::unique_ptr<MolEnumeratorOp>(
new LinkNodeOp(*
this));
147 std::shared_ptr<ROMol> dp_mol{
nullptr};
148 std::shared_ptr<RWMol> dp_frame{
nullptr};
149 std::vector<size_t> d_countAtEachPoint{};
150 std::vector<std::tuple<unsigned, unsigned, unsigned>> d_variations;
151 std::vector<std::pair<unsigned, unsigned>> d_pointRanges;
152 std::map<unsigned, unsigned> d_isotopeMap;
153 std::map<unsigned, Atom *> d_atomMap;
176 : d_defaultRepeatCount(other.d_defaultRepeatCount),
177 dp_mol(other.dp_mol),
178 dp_frame(other.dp_frame),
179 d_repeats(other.d_repeats),
180 d_countAtEachPoint(other.d_countAtEachPoint),
181 d_variations(other.d_variations),
182 d_pointRanges(other.d_pointRanges),
183 d_isotopeMap(other.d_isotopeMap),
184 d_atomMap(other.d_atomMap){};
186 if (&other ==
this) {
189 dp_mol = other.dp_mol;
190 dp_frame = other.dp_frame;
191 d_repeats = other.d_repeats;
192 d_countAtEachPoint = other.d_countAtEachPoint;
193 d_variations = other.d_variations;
194 d_pointRanges = other.d_pointRanges;
195 d_isotopeMap = other.d_isotopeMap;
196 d_atomMap = other.d_atomMap;
205 const std::vector<size_t> &which)
const override;
211 std::unique_ptr<MolEnumeratorOp>
copy()
const override {
212 return std::unique_ptr<MolEnumeratorOp>(
new RepeatUnitOp(*
this));
215 size_t d_defaultRepeatCount =
219 std::shared_ptr<ROMol> dp_mol{
nullptr};
220 std::shared_ptr<RWMol> dp_frame{
nullptr};
221 std::vector<std::shared_ptr<RWMol>> d_repeats;
222 std::vector<RWMol> dp_repeatUnits{};
223 std::vector<size_t> d_countAtEachPoint{};
224 std::vector<unsigned> d_sruOrder{};
225 std::vector<std::tuple<unsigned, unsigned, unsigned>> d_variations;
226 std::vector<std::pair<unsigned, unsigned>> d_pointRanges;
227 std::map<unsigned, unsigned> d_isotopeMap;
228 std::map<unsigned, Atom *> d_atomMap;
235 bool sanitize =
false;
236 size_t maxToEnumerate = 1000;
237 bool doRandom =
false;
264 size_t maxPerOperation = 0);
270 std::vector<MolEnumeratorParams> v = {params};
#define PRECONDITION(expr, mess)
Defines a class for managing bundles of molecules.
pulls in the core RDKit functionality
MolBundle contains a collection of related ROMols.
Molecule enumeration operation corresponding to LINKNODES.
LinkNodeOp(const LinkNodeOp &other)
LinkNodeOp & operator=(const LinkNodeOp &other)
void initFromMol(const ROMol &mol) override
\override
LinkNodeOp(const std::shared_ptr< ROMol > mol)
LinkNodeOp(const ROMol &mol)
std::unique_ptr< MolEnumeratorOp > copy() const override
\override
std::vector< size_t > getVariationCounts() const override
\override
std::unique_ptr< ROMol > operator()(const std::vector< size_t > &which) const override
\override
abstract base class for the a molecule enumeration operation
virtual std::unique_ptr< MolEnumeratorOp > copy() const =0
polymorphic copy
virtual std::unique_ptr< ROMol > operator()(const std::vector< size_t > &which) const =0
returns a the molecule corresponding to a particular variation
virtual std::vector< size_t > getVariationCounts() const =0
virtual void initFromMol(const ROMol &mol)=0
initializes this operation to work on a particular molecule
virtual ~MolEnumeratorOp()
Molecule enumeration operation corresponding to position variation bonds.
std::unique_ptr< MolEnumeratorOp > copy() const override
\override
std::vector< size_t > getVariationCounts() const override
\override
PositionVariationOp & operator=(const PositionVariationOp &other)
void initFromMol(const ROMol &mol) override
\override
PositionVariationOp(const PositionVariationOp &other)
PositionVariationOp(const std::shared_ptr< ROMol > mol)
std::unique_ptr< ROMol > operator()(const std::vector< size_t > &which) const override
\override
PositionVariationOp(const ROMol &mol)
Molecule enumeration operation corresponding to SRUs.
void initFromMol(const ROMol &mol) override
\override
size_t d_defaultRepeatCount
RepeatUnitOp(const RepeatUnitOp &other)
std::unique_ptr< ROMol > operator()(const std::vector< size_t > &which) const override
\override
RepeatUnitOp(const ROMol &mol)
std::unique_ptr< MolEnumeratorOp > copy() const override
\override
RepeatUnitOp(const std::shared_ptr< ROMol > mol)
std::vector< size_t > getVariationCounts() const override
\override
RepeatUnitOp & operator=(const RepeatUnitOp &other)
#define RDKIT_MOLENUMERATOR_EXPORT
const std::string idxPropName
void removeOrigIndices(ROMol &mol)
void preserveOrigIndices(ROMol &mol)
RDKIT_MOLENUMERATOR_EXPORT MolBundle enumerate(const ROMol &mol, const std::vector< MolEnumeratorParams > ¶msList)
Parameters used to control the molecule enumeration.
std::shared_ptr< MolEnumeratorOp > dp_operation