15#ifndef SYNTHONSPACESHAPESEARCHER_H
16#define SYNTHONSPACESHAPESEARCHER_H
31 size_t operator()(
const std::pair<const void *, const void *> &p)
const {
33 size_t hash1 = std::hash<const void *>{}(p.first);
35 size_t hash2 = std::hash<const void *>{}(p.second);
37 return hash1 ^ (hash2 + 0x517cc1b727220a95 + (hash1 << 6) + (hash1 >> 2));
48 std::tuple<double, unsigned int, std::shared_ptr<RDGeom::Transform3D>>;
50 std::unordered_map<std::pair<const void *, const void *>,
SynthonOverlay,
62 const std::vector<std::shared_ptr<ROMol>> &fragSet,
66 const std::vector<const std::string *> &synthNames)
override;
76 const std::vector<size_t> &synthNums)
const override;
78 const std::vector<size_t> &synthNums)
const override;
88 std::vector<const std::string *> &synthNames)
const override;
92 std::unique_ptr<SynthonShapeInput> dp_queryShape;
98 std::vector<std::unique_ptr<SynthonShapeInput>> d_fragShapesPool;
99 std::vector<std::pair<void *, SynthonShapeInput *>> d_fragShapes;
111 bool extraSearchSetup(
112 std::vector<std::vector<std::shared_ptr<ROMol>>> &fragSets,
115 void buildQueryShape(
const ROMol &mol,
116 std::vector<GaussianShape::CustomFeature> &allFeatures);
119 bool computeFragSynthonSims(
121 std::unordered_map<void *, unsigned int> &minFragSetSize);
123 void processToTrySet(
126 const TimePoint *endTime, std::vector<std::unique_ptr<ROMol>> &results,
127 std::atomic<std::int64_t> &numHitsFound,
128 std::uint64_t &numPossHitsWritten)
override;
std::chrono::time_point< Clock > TimePoint
SynthonSpaceSearcher()=delete
bool fragMatchedSynthon(const void *frag, const void *synthon, SynthonOverlay &sim) const
std::vector< std::unique_ptr< SynthonSpaceHitSet > > searchFragSet(const std::vector< std::shared_ptr< ROMol > > &fragSet, const SynthonSet &reaction) const override
bool quickVerify(const SynthonSpaceHitSet *hitset, const std::vector< size_t > &synthNums) const override
bool verifyHit(ROMol &hit, const std::string &rxnId, const std::vector< const std::string * > &synthNames) override
bool hasPrecomputedSims() const
SynthonSpaceShapeSearcher(const ROMol &query, const SynthonSpaceSearchParams ¶ms, SynthonSpace *space)
SynthonSpaceShapeSearcher()=delete
std::unique_ptr< ROMol > buildHit(const SynthonSpaceHitSet *hitset, const std::vector< size_t > &synthNums, std::vector< const std::string * > &synthNames) const override
double approxSimilarity(const SynthonSpaceHitSet *hitset, const std::vector< size_t > &synthNums) const override
std::unordered_map< std::pair< const void *, const void * >, SynthonOverlay, hash_address_pair > FragSynthonSims
std::tuple< double, unsigned int, std::shared_ptr< RDGeom::Transform3D > > SynthonOverlay
size_t operator()(const std::pair< const void *, const void * > &p) const