1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118
|
//
// Copyright (C) 2018 Susan H. Leung
//
// @@ 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.
//
/*! \file Charge.h
\brief Defines the Reionizer class and Uncharger class.
*/
#include <RDGeneral/export.h>
#ifndef __RD_CHARGE_H__
#define __RD_CHARGE_H__
#include "MolStandardize.h"
#include <Catalogs/Catalog.h>
#include <GraphMol/MolStandardize/AcidBaseCatalog/AcidBaseCatalogEntry.h>
#include <GraphMol/MolStandardize/AcidBaseCatalog/AcidBaseCatalogParams.h>
namespace RDKit {
class RWMol;
class ROMol;
namespace MolStandardize {
RDKIT_MOLSTANDARDIZE_EXPORT extern const CleanupParameters
defaultCleanupParameters;
typedef RDCatalog::HierarchCatalog<AcidBaseCatalogEntry, AcidBaseCatalogParams,
int>
AcidBaseCatalog;
struct RDKIT_MOLSTANDARDIZE_EXPORT ChargeCorrection {
std::string Name;
std::string Smarts;
int Charge;
ChargeCorrection(std::string name, std::string smarts, int charge)
: Name(name), Smarts(smarts), Charge(charge) {}
};
// The default list of ChargeCorrections.
RDKIT_MOLSTANDARDIZE_EXPORT extern std::vector<ChargeCorrection>
CHARGE_CORRECTIONS;
//! The reionizer class to fix charges and reionize a molecule such that the
// strongest acids ionize first.
/*!
<b>Notes:</b>
-
*/
class RDKIT_MOLSTANDARDIZE_EXPORT Reionizer {
public:
Reionizer();
//! construct a Reionizer with a particular acidbaseFile
Reionizer(const std::string acidbaseFile);
//! construct a Reionizer with a particular acidbaseFile and charge
// corrections
Reionizer(const std::string acidbaseFile,
const std::vector<ChargeCorrection> ccs);
//! making Reionizer objects non-copyable
Reionizer(const Reionizer &other) = delete;
Reionizer &operator=(Reionizer const &) = delete;
~Reionizer();
//! Enforce charges on certain atoms, then perform competitive reionization.
ROMol *reionize(const ROMol &mol);
private:
AcidBaseCatalog *d_abcat;
std::vector<ChargeCorrection> d_ccs;
std::pair<unsigned int, std::vector<unsigned int>> *strongestProtonated(
const ROMol &mol,
const std::vector<std::pair<ROMOL_SPTR, ROMOL_SPTR>> &abpairs);
std::pair<unsigned int, std::vector<unsigned int>> *weakestIonized(
const ROMol &mol,
const std::vector<std::pair<ROMOL_SPTR, ROMOL_SPTR>> &abpairs);
}; // Reionizer class
//! The Uncharger class for neutralizing ionized acids and bases.
/*!
<b>Notes:</b>
- This class uncharges molecules by adding and/or removing hydrogens.
- For zwitterions, hydrogens are moved to eliminate charges where
possible.
- In cases where there is a positive charge that is not neutralizable,
an attempt is made to also preserve the corresponding
negative charge.
*/
class RDKIT_MOLSTANDARDIZE_EXPORT Uncharger {
public:
Uncharger();
Uncharger(const Uncharger &other);
~Uncharger();
ROMol *uncharge(const ROMol &mol);
private:
std::shared_ptr<ROMol> pos_h;
std::shared_ptr<ROMol> pos_quat;
std::shared_ptr<ROMol> neg;
std::shared_ptr<ROMol> neg_acid;
}; // Uncharger class
} // namespace MolStandardize
} // namespace RDKit
#endif
|