Loading...
Searching...
No Matches
RGroupDecomp.h
Go to the documentation of this file.
//
// Copyright (c) 2017-2021, Novartis Institutes for BioMedical Research Inc.
// and other RDKit contributors
//
// @@ All Rights Reserved @@
// This file is part of the RDKit.
// The contents are covered by the terms of the BSD license
// which is included in the file license.txt, found at the root
// of the RDKit source tree.
//
#include <RDGeneral/export.h>
#ifndef RDKIT_RGROUPDECOMP_H
#define RDKIT_RGROUPDECOMP_H
#include "../RDKitBase.h"
#include "RGroupDecompParams.h"
#include <GraphMol/Substruct/SubstructMatch.h>
#include <chrono>
namespace RDKit {
struct RDKIT_RGROUPDECOMPOSITION_EXPORT RGroupDecompositionProcessResult {
const bool success;
const double score;
RGroupDecompositionProcessResult(const bool success, const double score)
: success(success), score(score) {}
};
struct RGroupMatch;
typedef std::map<std::string, ROMOL_SPTR> RGroupRow;
typedef std::vector<ROMOL_SPTR> RGroupColumn;
typedef std::vector<RGroupRow> RGroupRows;
typedef std::map<std::string, RGroupColumn> RGroupColumns;
class UsedLabelMap {
public:
UsedLabelMap(const std::map<int, int> &mapping) {
for (const auto &rl : mapping) {
d_map[rl.second] = std::make_pair(false, (rl.first > 0));
}
}
bool has(int label) const { return d_map.find(label) != d_map.end(); }
bool getIsUsed(int label) const { return d_map.at(label).first; }
void setIsUsed(int label) { d_map[label].first = true; }
bool isUserDefined(int label) const { return d_map.at(label).second; }
private:
std::map<int, std::pair<bool, bool>> d_map;
};
struct RGroupDecompData;
struct RCore;
class RDKIT_RGROUPDECOMPOSITION_EXPORT RGroupDecomposition {
private:
RGroupDecompData *data; // implementation details
RGroupDecomposition(const RGroupDecomposition &); // no copy construct
RGroupDecomposition &operator=(
const RGroupDecomposition &); // Prevent assignment
RWMOL_SPTR outputCoreMolecule(const RGroupMatch &match,
const UsedLabelMap &usedRGroupMap) const;
int getMatchingCoreInternal(RWMol &mol, const RCore *&rcore,
std::vector<MatchVectType> &matches);
static void labelAtomBondIndices(RWMol &mol);
void setTargetAtomBondIndices(ROMol &mol, bool includeBondsToRLabels) const;
public:
RGroupDecomposition(const ROMol &core,
const RGroupDecompositionParameters &params =
RGroupDecompositionParameters());
RGroupDecomposition(const std::vector<ROMOL_SPTR> &cores,
const RGroupDecompositionParameters &params =
RGroupDecompositionParameters());
~RGroupDecomposition();
//! Returns the index of the core matching the passed molecule
//! and optionally the matching atom indices
/*!
\param mol Molecule to check for matches
\param matches Optional pointer to std::vector<MatchVectType>
where core matches will be stored
\return the index of the matching core, or -1 if none matches
*/
int getMatchingCoreIdx(const ROMol &mol,
std::vector<MatchVectType> *matches = nullptr);
//! Returns the index of the added molecule in the RGroupDecomposition
//! or a negative error code
/*!
\param mol Molecule to add to the decomposition
\return index of the molecule or
-1 if none of the core matches
-2 if the matched molecule has no sidechains, i.e. is the
same as the scaffold
*/
int add(const ROMol &mol);
RGroupDecompositionProcessResult processAndScore();
bool process();
const RGroupDecompositionParameters &params() const;
//! return the current group labels
std::vector<std::string> getRGroupLabels() const;
//! return rgroups in row order group[row][attachment_point] = ROMol
RGroupRows getRGroupsAsRows() const;
//! return rgroups in column order group[attachment_point][row] = ROMol
RGroupColumns getRGroupsAsColumns() const;
};
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());
RDKIT_RGROUPDECOMPOSITION_EXPORT unsigned int RGroupDecompose(
const std::vector<ROMOL_SPTR> &cores, const std::vector<ROMOL_SPTR> &mols,
RGroupColumns &columns, std::vector<unsigned int> *unmatched = nullptr,
const RGroupDecompositionParameters &options =
RGroupDecompositionParameters());
inline bool checkForTimeout(const std::chrono::steady_clock::time_point &t0,
double timeout, bool throwOnTimeout = true) {
if (timeout <= 0) {
return false;
}
auto t1 = std::chrono::steady_clock::now();
std::chrono::duration<double> elapsed = t1 - t0;
if (elapsed.count() >= timeout) {
if (throwOnTimeout) {
throw std::runtime_error("operation timed out");
}
return true;
}
return false;
}
} // namespace RDKit
#endif
RGroupDecompParams.h
SubstructMatch.h
RDKit::RGroupDecomposition
Definition RGroupDecomp.h:55
RDKit::RGroupDecomposition::getRGroupsAsRows
RGroupRows getRGroupsAsRows() const
return rgroups in row order group[row][attachment_point] = ROMol
RDKit::RGroupDecomposition::RGroupDecomposition
RGroupDecomposition(const std::vector< ROMOL_SPTR > &cores, const RGroupDecompositionParameters &params=RGroupDecompositionParameters())
RDKit::RGroupDecomposition::params
const RGroupDecompositionParameters & params() const
RDKit::RGroupDecomposition::~RGroupDecomposition
~RGroupDecomposition()
RDKit::RGroupDecomposition::getRGroupsAsColumns
RGroupColumns getRGroupsAsColumns() const
return rgroups in column order group[attachment_point][row] = ROMol
RDKit::RGroupDecomposition::process
bool process()
RDKit::RGroupDecomposition::RGroupDecomposition
RGroupDecomposition(const ROMol &core, const RGroupDecompositionParameters &params=RGroupDecompositionParameters())
RDKit::RGroupDecomposition::add
int add(const ROMol &mol)
RDKit::RGroupDecomposition::processAndScore
RGroupDecompositionProcessResult processAndScore()
RDKit::RGroupDecomposition::getMatchingCoreIdx
int getMatchingCoreIdx(const ROMol &mol, std::vector< MatchVectType > *matches=nullptr)
RDKit::RGroupDecomposition::getRGroupLabels
std::vector< std::string > getRGroupLabels() const
return the current group labels
RDKit::ROMol
Definition ROMol.h:199
RDKit::RWMol
RWMol is a molecule class that is intended to be edited.
Definition RWMol.h:32
RDKit::UsedLabelMap
Definition RGroupDecomp.h:37
RDKit::UsedLabelMap::setIsUsed
void setIsUsed(int label)
Definition RGroupDecomp.h:46
RDKit::UsedLabelMap::getIsUsed
bool getIsUsed(int label) const
Definition RGroupDecomp.h:45
RDKit::UsedLabelMap::isUserDefined
bool isUserDefined(int label) const
Definition RGroupDecomp.h:47
RDKit::UsedLabelMap::UsedLabelMap
UsedLabelMap(const std::map< int, int > &mapping)
Definition RGroupDecomp.h:39
RDKit::UsedLabelMap::has
bool has(int label) const
Definition RGroupDecomp.h:44
export.h
RDKIT_RGROUPDECOMPOSITION_EXPORT
#define RDKIT_RGROUPDECOMPOSITION_EXPORT
Definition export.h:441
RDKit
Std stuff.
Definition Abbreviations.h:19
RDKit::rdvalue_is
bool rdvalue_is(const RDValue_cast_t)
Definition RDValue-doublemagic.h:372
RDKit::RGroupRow
std::map< std::string, ROMOL_SPTR > RGroupRow
Definition RGroupDecomp.h:31
RDKit::RGroupColumn
std::vector< ROMOL_SPTR > RGroupColumn
Definition RGroupDecomp.h:32
RDKit::RGroupColumns
std::map< std::string, RGroupColumn > RGroupColumns
Definition RGroupDecomp.h:35
RDKit::checkForTimeout
bool checkForTimeout(const std::chrono::steady_clock::time_point &t0, double timeout, bool throwOnTimeout=true)
Definition RGroupDecomp.h:125
RDKit::RGroupDecompose
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())
RDKit::RGroupRows
std::vector< RGroupRow > RGroupRows
Definition RGroupDecomp.h:34
RDKit::RWMOL_SPTR
boost::shared_ptr< RWMol > RWMOL_SPTR
Definition RWMol.h:222
RDKit::RCore
RCore is the core common to a series of molecules.
Definition RGroupCore.h:25
RDKit::RGroupDecompData
Definition RGroupDecompData.h:24
RDKit::RGroupDecompositionParameters
Definition RGroupDecompParams.h:64
RDKit::RGroupDecompositionProcessResult
Definition RGroupDecomp.h:22
RDKit::RGroupDecompositionProcessResult::RGroupDecompositionProcessResult
RGroupDecompositionProcessResult(const bool success, const double score)
Definition RGroupDecomp.h:25
RDKit::RGroupDecompositionProcessResult::success
const bool success
Definition RGroupDecomp.h:23
RDKit::RGroupDecompositionProcessResult::score
const double score
Definition RGroupDecomp.h:24
RDKit::RGroupMatch
RGroupMatch is the decomposition for a single molecule.
Definition RGroupMatch.h:19