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
|
//
// Copyright (C) 2008-2020 Greg Landrum
//
// @@ 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 Chirality.h
*/
#include <RDGeneral/export.h>
#ifndef RD_CHIRALITY_20AUG2008_H
#define RD_CHIRALITY_20AUG2008_H
#include <RDGeneral/types.h>
#include <GraphMol/Bond.h>
#include <boost/dynamic_bitset.hpp>
#include <limits>
namespace RDKit {
class Atom;
class Bond;
class ROMol;
namespace Chirality {
/// @cond
/*!
\param mol the molecule to be altered
\param ranks used to return the set of ranks.
Should be at least mol.getNumAtoms() long.
<b>Notes:</b>
- All atoms gain a property common_properties::_CIPRank with their overall
CIP ranking.
*/
RDKIT_GRAPHMOL_EXPORT void assignAtomCIPRanks(const ROMol &mol,
UINT_VECT &ranks);
RDKIT_GRAPHMOL_EXPORT bool hasStereoBondDir(const Bond *bond);
/**
* Returns the first neighboring bond that can be found which has a stereo
* bond direction set. If no such bond can be found, it returns null. No
* checks are made to ensure there aren't any other conflicting directed bonds.
*/
RDKIT_GRAPHMOL_EXPORT const Bond *getNeighboringDirectedBond(const ROMol &mol,
const Atom *atom);
/**
* This just translates the labels, setting/translating StereoAtoms or the
* label is not the responsibility of this function. If the passed label is not
* E/Z, it will be returned unchanged.
*/
RDKIT_GRAPHMOL_EXPORT Bond::BondStereo translateEZLabelToCisTrans(
Bond::BondStereo label);
/// @endcond
enum class StereoType {
Unspecified,
Atom_Tetrahedral,
Bond_Double, // single double bond and odd-numbered cumulenes
Bond_Cumulene_Even, // even-numbered cumulenes
Bond_Atropisomer
};
enum class StereoDescriptor { None, Tet_CW, Tet_CCW, Bond_Cis, Bond_Trans };
enum class StereoSpecified {
Unspecified, // no information provided
Specified,
Unknown // deliberately marked as unknown
};
struct RDKIT_GRAPHMOL_EXPORT StereoInfo {
// REVIEW: absolute stereo data member?
#ifdef _MSC_VER
static const unsigned NOATOM =
std::numeric_limits<unsigned>::max(); // used to mark missing atoms
#else
static const unsigned NOATOM; // used to mark missing atoms
#endif
StereoType type = StereoType::Unspecified;
StereoSpecified specified = StereoSpecified::Unspecified;
unsigned centeredOn = NOATOM;
StereoDescriptor descriptor = StereoDescriptor::None;
std::vector<unsigned> controllingAtoms; // all atoms around the atom or bond.
// Order is important
bool operator==(const StereoInfo &other) const {
return type == other.type && specified == other.specified &&
centeredOn == other.centeredOn && descriptor == other.descriptor &&
controllingAtoms == other.controllingAtoms;
}
};
//! identifies potential stereoatoms and stereobonds in a molecule
/*!
Note that this function is still somewhat experimental and the API
and results may change in a future release.
\param mol the molecule to look for stereo in
\param cleanIt remove chirality/stereo specifications from atoms/bonds that
cannot be chiral/stereo
*/
RDKIT_GRAPHMOL_EXPORT std::vector<StereoInfo> findPotentialStereo(
ROMol &mol, bool cleanIt, bool flagPossible = true);
//! overload
RDKIT_GRAPHMOL_EXPORT std::vector<StereoInfo> findPotentialStereo(
const ROMol &mol);
/// @cond
namespace detail {
RDKIT_GRAPHMOL_EXPORT bool isAtomPotentialTetrahedralCenter(const Atom *atom);
RDKIT_GRAPHMOL_EXPORT bool isAtomPotentialStereoAtom(const Atom *atom);
RDKIT_GRAPHMOL_EXPORT bool isBondPotentialStereoBond(const Bond *bond);
RDKIT_GRAPHMOL_EXPORT StereoInfo getStereoInfo(const Bond *bond);
RDKIT_GRAPHMOL_EXPORT StereoInfo getStereoInfo(const Atom *atom);
} // namespace detail
/// @endcond
RDKIT_GRAPHMOL_EXPORT INT_VECT findStereoAtoms(const Bond *bond);
} // namespace Chirality
} // namespace RDKit
#endif
|