12#ifndef RDKIT_RGROUPDECOMP_H
13#define RDKIT_RGROUPDECOMP_H
15#include "../RDKitBase.h"
70 : success(success), score(score) {}
78 unsigned int scoreMethod =
Match;
80 unsigned int alignment =
MCS;
82 unsigned int chunkSize = 5;
84 bool onlyMatchAtRGroups =
false;
86 bool removeAllHydrogenRGroups =
true;
89 bool removeAllHydrogenRGroupsAndLabels =
true;
91 bool removeHydrogensPostMatch =
true;
93 bool allowNonTerminalRGroups =
false;
95 bool allowMultipleRGroupsOnUnlabelled =
false;
97 double timeout = -1.0;
111 int gaPopulationSize = -1;
113 int gaMaximumOperations = -1;
116 int gaNumberOperationsWithoutImprovement = -1;
118 int gaRandomSeed = -1;
120 int gaNumberRuns = 1;
122#ifdef RDK_BUILD_THREADSAFE_SSS
123 bool gaParallelRuns =
true;
125 bool gaParallelRuns =
false;
134 void checkNonTerminal(
const Atom &atom)
const;
146 for (
const auto &rl : mapping) {
147 d_map[rl.second] = std::make_pair(
false, (rl.first > 0));
150 bool has(
int label)
const {
return d_map.find(label) != d_map.end(); }
151 bool getIsUsed(
int label)
const {
return d_map.at(label).first; }
152 void setIsUsed(
int label) { d_map[label].first =
true; }
156 std::map<int, std::pair<bool, bool>> d_map;
159struct RGroupDecompData;
168 std::map<int, bool> getBlankRGroupMap()
const;
202 const std::vector<ROMOL_SPTR> &cores,
const std::vector<ROMOL_SPTR> &mols,
203 RGroupRows &rows, std::vector<unsigned int> *unmatched =
nullptr,
208 const std::vector<ROMOL_SPTR> &cores,
const std::vector<ROMOL_SPTR> &mols,
209 RGroupColumns &columns, std::vector<unsigned int> *unmatched =
nullptr,
214 double timeout,
bool throwOnTimeout =
true) {
218 auto t1 = std::chrono::steady_clock::now();
219 std::chrono::duration<double> elapsed = t1 - t0;
220 if (elapsed.count() >= timeout) {
221 if (throwOnTimeout) {
222 throw std::runtime_error(
"operation timed out");
RGroupRows getRGroupsAsRows() const
return rgroups in row order group[row][attachment_point] = ROMol
RGroupDecomposition(const std::vector< ROMOL_SPTR > &cores, const RGroupDecompositionParameters ¶ms=RGroupDecompositionParameters())
const RGroupDecompositionParameters & params() const
RGroupColumns getRGroupsAsColumns() const
return rgroups in column order group[attachment_point][row] = ROMol
RGroupDecomposition(const ROMol &core, const RGroupDecompositionParameters ¶ms=RGroupDecompositionParameters())
int add(const ROMol &mol)
RGroupDecompositionProcessResult processAndScore()
std::vector< std::string > getRGroupLabels() const
return the current group labels
RWMol is a molecule class that is intended to be edited.
void setIsUsed(int label)
bool getIsUsed(int label) const
bool isUserDefined(int label) const
UsedLabelMap(const std::map< int, int > &mapping)
bool has(int label) const
#define RDKIT_RGROUPDECOMPOSITION_EXPORT
std::map< std::string, ROMOL_SPTR > RGroupRow
std::vector< ROMOL_SPTR > RGroupColumn
std::map< std::string, RGroupColumn > RGroupColumns
bool checkForTimeout(const std::chrono::steady_clock::time_point &t0, double timeout, bool throwOnTimeout=true)
RDKIT_RGROUPDECOMPOSITION_EXPORT unsigned int RGroupDecompose(const std::vector< ROMOL_SPTR > &cores, const std::vector< ROMOL_SPTR > &mols, RGroupRows &rows, std::vector< unsigned int > *unmatched=nullptr, const RGroupDecompositionParameters &options=RGroupDecompositionParameters())
std::vector< RGroupRow > RGroupRows
boost::shared_ptr< RWMol > RWMOL_SPTR
void addDummyAtomsToUnlabelledCoreAtoms(RWMol &core)
unsigned int autoGetLabels(const RWMol &)
bool prepareCore(RWMol &, const RWMol *alignCore)
RGroupDecompositionParameters()
SubstructMatchParameters substructmatchParams
RGroupDecompositionProcessResult(const bool success, const double score)
RGroupMatch is the decomposition for a single molecule.