11#ifndef RDKIT_SYNTHONSET_H
12#define RDKIT_SYNTHONSET_H
18#include <boost/dynamic_bitset.hpp>
44 std::unique_ptr<ROMol>
d_mol{
nullptr};
58 const std::string &
getId()
const {
return d_id; }
59 const std::vector<std::vector<std::pair<std::string, Synthon *>>> &
67 size_t setNum,
size_t synthonNum)
const;
69 size_t setNum,
size_t synthonNum)
const;
71 size_t setNum,
size_t synthonNum)
const;
75 size_t synthonNum)
const;
77 size_t synthonNum)
const;
80 const boost::dynamic_bitset<> &
getConnectors()
const {
return d_connectors; }
83 return d_synthConnPatts;
87 const std::vector<std::unique_ptr<ExplicitBitVect>> &
getConnRegFPs()
const;
88 const std::unique_ptr<ExplicitBitVect> &
getAddFP()
const;
99 std::uint32_t version);
106 const std::string &synthonId);
133 unsigned int numBits);
139 const std::vector<boost::dynamic_bitset<>> &reqSynths)
const;
143 const std::vector<size_t> &synthNums)
const;
147 const std::function<
bool(
const Synthon *synthon1,
148 const Synthon *synthon2)> &cmp);
156 const std::vector<size_t> &synthonNums)
const;
168 std::vector<std::vector<std::pair<std::string, Synthon *>>> d_synthons;
178 std::vector<std::vector<size_t>> d_substructureSearchOrders;
179 std::vector<std::vector<size_t>> d_fingerprintSearchOrders;
180 std::vector<std::vector<size_t>> d_rascalSearchOrders;
184 boost::dynamic_bitset<> d_connectors;
188 std::vector<boost::dynamic_bitset<>> d_synthConnPatts;
196 std::vector<std::shared_ptr<ROMol>> d_connectorRegions;
197 std::vector<std::string> d_connRegSmis;
199 std::vector<std::unique_ptr<ExplicitBitVect>> d_connRegFPs;
206 std::unique_ptr<ExplicitBitVect> d_addFP;
207 std::unique_ptr<ExplicitBitVect> d_subtractFP;
210 std::vector<int> d_numConnectors;
214 std::unique_ptr<RWMol> copySynthon(
size_t synthonSetNum,
215 size_t synthonIdx)
const;
216 std::vector<std::vector<std::unique_ptr<RWMol>>> copySynthons()
const;
222 std::vector<std::unique_ptr<ROMol>> buildSampleMolecules(
223 const std::vector<std::vector<std::unique_ptr<RWMol>>> &synthonMols,
224 size_t longVecNum)
const;
228 unsigned int d_numRingFormers{0};
class that generates same fingerprint style for different output formats
std::vector< std::vector< size_t > > orderSynthonsForSearch(const std::function< bool(const Synthon *synthon1, const Synthon *synthon2)> &cmp)
const std::pair< std::string, Synthon * > getRascalOrderedSynthon(size_t setNum, size_t synthonNum) const
const std::unique_ptr< ExplicitBitVect > & getSubtractFP() const
void assignConnectorsUsed()
bool hasFingerprints() const
const std::vector< std::vector< std::pair< std::string, Synthon * > > > & getSynthons() const
const std::unique_ptr< ExplicitBitVect > & getAddFP() const
const std::vector< std::unique_ptr< ExplicitBitVect > > & getConnRegFPs() const
SynthonSet(SynthonSet &&rhs)=delete
void enumerateToStream(std::ostream &os) const
bool hasAddAndSubtractFPs() const
size_t getFingerprintOrderedSynthonNum(size_t setNum, size_t synthonNum) const
const std::pair< std::string, Synthon * > getSubstructureOrderedSynthon(size_t setNum, size_t synthonNum) const
void addSynthon(int synthonSetNum, Synthon *newSynthon, const std::string &synthonId)
std::unique_ptr< ROMol > buildProduct(const std::vector< size_t > &synthNums) const
void writeToDBStream(std::ostream &os) const
void buildAddAndSubtractFPs(const FingerprintGenerator< std::uint64_t > &fpGen, unsigned int numBits)
void readFromDBStream(std::istream &is, const SynthonSpace &space, std::uint32_t version)
void buildSynthonFingerprints(const FingerprintGenerator< std::uint64_t > &fpGen)
std::unique_ptr< SampleMolRec > makeSampleMolecule(Synthon *synthon) const
const std::vector< std::shared_ptr< ROMol > > & getConnectorRegions() const
size_t getRascalOrderedSynthonNum(size_t setNum, size_t synthonNum) const
std::unique_ptr< ROMol > buildMolecule(const std::vector< size_t > &synthonNums) const
SynthonSet(const std::string &id)
std::string buildProductName(const std::vector< size_t > &synthNums) const
const std::vector< int > & getNumConnectors() const
std::uint64_t getNumProducts() const
void initializeSearchOrders()
void makeSynthonSearchMols()
std::vector< std::vector< ROMol * > > getSynthons(const std::vector< boost::dynamic_bitset<> > &reqSynths) const
const std::pair< std::string, Synthon * > getFingerprintOrderedSynthon(size_t setNum, size_t synthonNum) const
void buildConnectorRegions()
unsigned int getNumRingFormers() const
const std::vector< boost::dynamic_bitset<> > & getSynthonConnectorPatterns() const
const std::vector< std::string > & getConnectorRegionSmiles() const
size_t getSubstructureOrderedSynthonNum(size_t setNum, size_t synthonNum) const
const boost::dynamic_bitset & getConnectors() const
SynthonSet(const SynthonSet &rhs)=delete
const std::string & getId() const
void removeEmptySynthonSets()
#define RDKIT_SYNTHONSPACESEARCH_EXPORT
std::vector< size_t > d_synthonNums
std::unique_ptr< ROMol > d_mol
const class SynthonSet * d_synthonSet