1 // 2 // Copyright (C) 2007-2011 Greg Landrum 3 // 4 // @@ All Rights Reserved @@ 5 // This file is part of the RDKit. 6 // The contents are covered by the terms of the BSD license 7 // which is included in the file license.txt, found at the root 8 // of the RDKit source tree. 9 // 10 11 /*! \file Lipinski.h 12 13 \brief Contains Lipinski and Lipinski-like descriptors. Use MolDescriptors.h 14 in client code. 15 16 */ 17 #include <RDGeneral/export.h> 18 #ifndef __RD_LIPINSKI_H__ 19 #define __RD_LIPINSKI_H__ 20 #include "RegisterDescriptor.h" 21 22 namespace RDKit { 23 class ROMol; 24 namespace Descriptors { 25 26 const std::string lipinskiHBAVersion = "1.0.0"; 27 //! calculates the standard Lipinski HBA definition (number of Ns and Os) 28 RDKIT_DESCRIPTORS_EXPORT unsigned int calcLipinskiHBA(const ROMol &mol); 29 30 const std::string lipinskiHBDVersion = "2.0.0"; 31 //! calculates the standard Lipinski HBA definition (number of N-H and O-H 32 // bonds) 33 RDKIT_DESCRIPTORS_EXPORT unsigned int calcLipinskiHBD(const ROMol &mol); 34 35 enum NumRotatableBondsOptions { 36 Default = -1, 37 NonStrict = 0, 38 Strict = 1, 39 StrictLinkages = 2, 40 }; 41 42 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumRotatableBondsVersion; 43 //! calculates the number of rotatable bonds 44 /*! 45 \param mol the molecule of interest 46 \param strict if Strict, a stricter definition of rotable bonds is used 47 this excludes amides, esters, etc. 48 if StrictLinkages, a much stricter definition that 49 handles rotatable bonds between rings as well. 50 if Default - uses the default choice (normally Strict) 51 */ 52 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumRotatableBonds( 53 const ROMol &mol, NumRotatableBondsOptions useStrictDefinition = Default); 54 55 //! calculates the number of rotatable bonds ( backwards compatibility function, 56 //! deprecated, please use calcNumRotatableBonds(const ROMol&, int) 57 /*! 58 \param mol the molecule of interest 59 \param strict if Strict == true, uses NumRotatableBondsOptions::Strict 60 */ 61 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumRotatableBonds(const ROMol &mol, 62 bool strict); 63 64 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumHBDVersion; 65 //! calculates the number of H-bond donors 66 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumHBD(const ROMol &mol); 67 68 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumHBAVersion; 69 //! calculates the number of H-bond acceptors 70 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumHBA(const ROMol &mol); 71 72 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumHeteroatomsVersion; 73 //! calculates the number of heteroatoms 74 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumHeteroatoms(const ROMol &mol); 75 76 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumAmideBondsVersion; 77 //! calculates the number of amide bonds 78 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAmideBonds(const ROMol &mol); 79 80 RDKIT_DESCRIPTORS_EXPORT extern const std::string FractionCSP3Version; 81 //! calculates the fraction of carbons that are SP3 hybridized 82 RDKIT_DESCRIPTORS_EXPORT double calcFractionCSP3(const ROMol &mol); 83 84 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumRingsVersion; 85 //! calculates the number of SSSR rings 86 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumRings(const ROMol &mol); 87 88 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumAromaticRingsVersion; 89 //! calculates the number of aromatic SSSR rings 90 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAromaticRings(const ROMol &mol); 91 92 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumAliphaticRingsVersion; 93 //! calculates the number of aliphatic (at least one non-aromatic bond) SSSR 94 // rings 95 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAliphaticRings(const ROMol &mol); 96 97 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumSaturatedRingsVersion; 98 //! calculates the number of saturated SSSR rings 99 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumSaturatedRings(const ROMol &mol); 100 101 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumHeterocyclesVersion; 102 //! calculates the number of SSSR heterocycles 103 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumHeterocycles(const ROMol &mol); 104 105 RDKIT_DESCRIPTORS_EXPORT extern const std::string 106 NumAromaticHeterocyclesVersion; 107 //! calculates the number of aromatic SSSR heterocycles 108 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAromaticHeterocycles( 109 const ROMol &mol); 110 111 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumAromaticCarbocyclesVersion; 112 //! calculates the number of aromatic SSSR carbocycles 113 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAromaticCarbocycles( 114 const ROMol &mol); 115 116 RDKIT_DESCRIPTORS_EXPORT extern const std::string 117 NumSaturatedHeterocyclesVersion; 118 //! calculates the number of saturated SSSR heterocycles 119 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumSaturatedHeterocycles( 120 const ROMol &mol); 121 122 RDKIT_DESCRIPTORS_EXPORT extern const std::string 123 NumSaturatedCarbocyclesVersion; 124 //! calculates the number of saturated SSSR carbocycles 125 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumSaturatedCarbocycles( 126 const ROMol &mol); 127 128 RDKIT_DESCRIPTORS_EXPORT extern const std::string 129 NumAliphaticHeterocyclesVersion; 130 //! calculates the number of aliphatic (at least one non-aromatic bond) SSSR 131 // heterocycles 132 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAliphaticHeterocycles( 133 const ROMol &mol); 134 135 RDKIT_DESCRIPTORS_EXPORT extern const std::string 136 NumAliphaticCarbocyclesVersion; 137 //! calculates the number of aliphatic (at least one non-aromatic bond) SSSR 138 // carbocycles 139 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumAliphaticCarbocycles( 140 const ROMol &mol); 141 142 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumSpiroAtomsVersion; 143 //! calculates the number of spiro atoms (atoms shared between rings that share 144 // exactly one atom) 145 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumSpiroAtoms( 146 const ROMol &mol, std::vector<unsigned int> *atoms = nullptr); 147 148 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumBridgeheadAtomsVersion; 149 //! calculates the number of bridgehead atoms (atoms shared between rings that 150 // share at least two bonds) 151 RDKIT_DESCRIPTORS_EXPORT unsigned int calcNumBridgeheadAtoms( 152 const ROMol &mol, std::vector<unsigned int> *atoms = nullptr); 153 154 RDKIT_DESCRIPTORS_EXPORT extern const std::string NumAtomStereoCentersVersion; 155 //! calculates the total number of atom stereo centers 156 RDKIT_DESCRIPTORS_EXPORT unsigned numAtomStereoCenters(const ROMol &mol); 157 158 //! calculates the number of unspecified stereo atom stereo centers 159 RDKIT_DESCRIPTORS_EXPORT extern const std::string 160 NumUnspecifiedAtomStereoCentersVersion; 161 RDKIT_DESCRIPTORS_EXPORT unsigned numUnspecifiedAtomStereoCenters( 162 const ROMol &mol); 163 164 //! Helper function to register the descriptors with the descriptor service 165 RDKIT_DESCRIPTORS_EXPORT void registerDescriptors(); 166 } // end of namespace Descriptors 167 } // end of namespace RDKit 168 169 #endif 170