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 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
|
//
// 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 Validate.h
\brief Defines the ValidationErrorInfo class and four different
validation methods: RDKitValidation, MolVSValidation, AllowedAtomsValidation,
DisallowedAtomsValidation.
*/
#include <RDGeneral/export.h>
#ifndef __RD_VALIDATE_H__
#define __RD_VALIDATE_H__
#include <GraphMol/RDKitBase.h>
#include <GraphMol/ROMol.h>
#include <GraphMol/Atom.h>
#include <iostream>
#include <exception>
#include <string>
#include <vector>
namespace RDKit {
class RWMol;
class ROMol;
namespace MolStandardize {
//! The ValidationErrorInfo class is used to store the information returned by a
// ValidationMethod validate.
class RDKIT_MOLSTANDARDIZE_EXPORT ValidationErrorInfo : public std::exception {
public:
ValidationErrorInfo(const std::string &msg) : d_msg(msg) {
BOOST_LOG(rdInfoLog) << d_msg << std::endl;
};
const char *message() const { return d_msg.c_str(); };
~ValidationErrorInfo() throw(){};
private:
std::string d_msg;
}; // class ValidationErrorInfo
//! The ValidationMethod class is the abstract base class upon which all the
// four different ValidationMethods inherit from.
class RDKIT_MOLSTANDARDIZE_EXPORT ValidationMethod {
public:
virtual std::vector<ValidationErrorInfo> validate(
const ROMol &mol, bool reportAllFailures) const = 0;
};
//! The RDKitValidation class throws an error when there are no atoms in the
// molecule or when there is incorrect atom valency.
/*!
<b>Notes:</b>
- RDKit automatically throws up atom valency issues but this class was made
for completeness of the project.
*/
class RDKIT_MOLSTANDARDIZE_EXPORT RDKitValidation : public ValidationMethod {
public:
std::vector<ValidationErrorInfo> validate(
const ROMol &mol, bool reportAllFailures) const override;
};
//////////////////////////////
// MolVS Validations
//
//! The MolVSValidations class includes most of the same validations as
// molvs.validations, namely NoAtomValidation, FragmentValidation,
// NeutralValidation, IsotopeValidation. MolVS also has IsNoneValidation and
// DichloroethaneValidation but these were not included here (yet).
class RDKIT_MOLSTANDARDIZE_EXPORT MolVSValidations {
public:
virtual void run(const ROMol &mol, bool reportAllFailures,
std::vector<ValidationErrorInfo> &errors) const = 0;
virtual boost::shared_ptr<MolVSValidations> copy() const = 0;
};
//! The NoAtomValidation class throws an error if no atoms are present in the
// molecule.
class RDKIT_MOLSTANDARDIZE_EXPORT NoAtomValidation : public MolVSValidations {
public:
void run(const ROMol &mol, bool reportAllFailures,
std::vector<ValidationErrorInfo> &errors) const override;
//! makes a copy of NoAtomValidation object and returns a MolVSValidations
//! pointer to it
virtual boost::shared_ptr<MolVSValidations> copy() const override {
return boost::make_shared<NoAtomValidation>(*this);
};
};
//! The FragmentValidation class logs if certain fragments are present.
class RDKIT_MOLSTANDARDIZE_EXPORT FragmentValidation : public MolVSValidations {
public:
void run(const ROMol &mol, bool reportAllFailures,
std::vector<ValidationErrorInfo> &errors) const override;
//! makes a copy of FragmentValidation object and returns a MolVSValidations
//! pointer to it
virtual boost::shared_ptr<MolVSValidations> copy() const override {
return boost::make_shared<FragmentValidation>(*this);
};
};
//! The NeutralValidation class logs if not an overall neutral system.
class RDKIT_MOLSTANDARDIZE_EXPORT NeutralValidation : public MolVSValidations {
public:
void run(const ROMol &mol, bool reportAllFailures,
std::vector<ValidationErrorInfo> &errors) const override;
//! makes a copy of NeutralValidation object and returns a MolVSValidations
//! pointer to it
virtual boost::shared_ptr<MolVSValidations> copy() const override {
return boost::make_shared<NeutralValidation>(*this);
};
};
//! The IsotopeValidation class logs if molecule contains isotopes.
class RDKIT_MOLSTANDARDIZE_EXPORT IsotopeValidation : public MolVSValidations {
public:
void run(const ROMol &mol, bool reportAllFailures,
std::vector<ValidationErrorInfo> &errors) const override;
//! makes a copy of IsotopeValidation object and returns a MolVSValidations
//! pointer to it
virtual boost::shared_ptr<MolVSValidations> copy() const override {
return boost::make_shared<IsotopeValidation>(*this);
};
};
////////////////////////////////
//! The MolVSValidation class can be used to perform all MolVSValidions.
class RDKIT_MOLSTANDARDIZE_EXPORT MolVSValidation : public ValidationMethod {
public:
// constructor
MolVSValidation();
//! overloaded constructor to take in a user-defined list of MolVSValidations
MolVSValidation(
const std::vector<boost::shared_ptr<MolVSValidations>> validations);
MolVSValidation(const MolVSValidation &other);
~MolVSValidation();
std::vector<ValidationErrorInfo> validate(
const ROMol &mol, bool reportAllFailures) const override;
private:
std::vector<boost::shared_ptr<MolVSValidations>> d_validations;
};
//! The AllowedAtomsValidation class lets the user input a list of atoms,
//! anything not on
// the list throws an error.
class RDKIT_MOLSTANDARDIZE_EXPORT AllowedAtomsValidation
: public ValidationMethod {
public:
AllowedAtomsValidation(const std::vector<std::shared_ptr<Atom>> &atoms)
: d_allowedList(atoms){};
std::vector<ValidationErrorInfo> validate(
const ROMol &mol, bool reportAllFailures) const override;
private:
std::vector<std::shared_ptr<Atom>> d_allowedList;
};
//! The DisallowedAtomsValidation class lets the user input a list of atoms and
//! as long
// as there are no atoms from the list it is deemed acceptable.
class RDKIT_MOLSTANDARDIZE_EXPORT DisallowedAtomsValidation
: public ValidationMethod {
public:
DisallowedAtomsValidation(const std::vector<std::shared_ptr<Atom>> &atoms)
: d_disallowedList(atoms){};
std::vector<ValidationErrorInfo> validate(
const ROMol &mol, bool reportAllFailures) const override;
private:
std::vector<std::shared_ptr<Atom>> d_disallowedList;
};
//! A convenience function for quickly validating a single SMILES string.
RDKIT_MOLSTANDARDIZE_EXPORT std::vector<ValidationErrorInfo> validateSmiles(
const std::string &smiles);
} // namespace MolStandardize
} // namespace RDKit
#endif
|