RDKit
Open-source cheminformatics and machine learning.
RDKit::Atom Class Reference

The class for representing atoms. More...

#include <Atom.h>

Inheritance diagram for RDKit::Atom:
RDKit::RDProps RDKit::QueryAtom

Public Types

enum  HybridizationType {
  UNSPECIFIED = 0, S, SP, SP2,
  SP3, SP3D, SP3D2, OTHER
}
 store hybridization More...
 
enum  ChiralType { CHI_UNSPECIFIED = 0, CHI_TETRAHEDRAL_CW, CHI_TETRAHEDRAL_CCW, CHI_OTHER }
 store type of chirality More...
 
typedef Queries::Query< int, Atom const *, true > QUERYATOM_QUERY
 

Public Member Functions

 Atom ()
 
 Atom (unsigned int num)
 construct an Atom with a particular atomic number More...
 
 Atom (const std::string &what)
 construct an Atom with a particular symbol (looked up in the More...
 
 Atom (const Atom &other)
 
Atomoperator= (const Atom &other)
 
virtual ~Atom ()
 
virtual Atomcopy () const
 makes a copy of this Atom and returns a pointer to it. More...
 
int getAtomicNum () const
 returns our atomic number More...
 
void setAtomicNum (int newNum)
 sets our atomic number More...
 
std::string getSymbol () const
 returns our symbol (determined by our atomic number) More...
 
bool hasOwningMol () const
 returns whether or not this instance belongs to a molecule More...
 
ROMolgetOwningMol () const
 returns a reference to the ROMol that owns this instance More...
 
unsigned int getIdx () const
 returns our index within the ROMol More...
 
void setIdx (unsigned int index)
 sets our index within the ROMol More...
 
template<class U >
void setIdx (const U index)
 overload More...
 
unsigned int getDegree () const
 
unsigned int getTotalDegree () const
 
unsigned int getTotalNumHs (bool includeNeighbors=false) const
 returns the total number of Hs (implicit and explicit) that this Atom is bound to More...
 
unsigned int getTotalValence () const
 returns the total valence (implicit and explicit) for an atom More...
 
unsigned int getNumImplicitHs () const
 returns the number of implicit Hs this Atom is bound to More...
 
int getExplicitValence () const
 returns the explicit valence (including Hs) of this atom More...
 
int getImplicitValence () const
 returns the implicit valence for this Atom More...
 
unsigned int getNumRadicalElectrons () const
 returns the number of radical electrons for this Atom More...
 
void setNumRadicalElectrons (unsigned int num)
 
int getFormalCharge () const
 returns the formal charge of this atom More...
 
void setFormalCharge (int what)
 set's the formal charge of this atom More...
 
void setNoImplicit (bool what)
 sets our noImplicit flag, indicating whether or not we are allowed to have implicit Hs More...
 
bool getNoImplicit () const
 returns the noImplicit flag More...
 
void setNumExplicitHs (unsigned int what)
 sets our number of explict Hs More...
 
unsigned int getNumExplicitHs () const
 returns our number of explict Hs More...
 
void setIsAromatic (bool what)
 sets our isAromatic flag, indicating whether or not we are aromatic More...
 
bool getIsAromatic () const
 returns our isAromatic flag More...
 
double getMass () const
 returns our mass More...
 
void setIsotope (unsigned int what)
 sets our isotope number More...
 
unsigned int getIsotope () const
 returns our isotope number More...
 
void setChiralTag (ChiralType what)
 sets our chiralTag More...
 
void invertChirality ()
 inverts our chiralTag More...
 
ChiralType getChiralTag () const
 returns our chiralTag More...
 
void setHybridization (HybridizationType what)
 sets our hybridization More...
 
HybridizationType getHybridization () const
 returns our hybridization More...
 
virtual bool hasQuery () const
 
virtual void setQuery (QUERYATOM_QUERY *what)
 NOT CALLABLE. More...
 
virtual QUERYATOM_QUERYgetQuery () const
 NOT CALLABLE. More...
 
virtual void expandQuery (QUERYATOM_QUERY *what, Queries::CompositeQueryType how=Queries::COMPOSITE_AND, bool maintainOrder=true)
 NOT CALLABLE. More...
 
virtual bool Match (Atom const *what) const
 returns whether or not we match the argument More...
 
int getPerturbationOrder (INT_LIST probe) const
 returns the perturbation order for a list of integers More...
 
void updatePropertyCache (bool strict=true)
 calculates any of our lazy properties More...
 
bool needsUpdatePropertyCache () const
 
int calcExplicitValence (bool strict=true)
 calculates and returns our explicit valence More...
 
int calcImplicitValence (bool strict=true)
 calculates and returns our implicit valence More...
 
AtomMonomerInfogetMonomerInfo ()
 
const AtomMonomerInfogetMonomerInfo () const
 
void setMonomerInfo (AtomMonomerInfo *info)
 takes ownership of the pointer More...
 
void setAtomMapNum (int mapno, bool strict=true)
 Set the atom map Number of the atom. More...
 
int getAtomMapNum () const
 
- Public Member Functions inherited from RDKit::RDProps
 RDProps ()
 
 RDProps (const RDProps &rhs)
 
RDPropsoperator= (const RDProps &rhs)
 
void clear ()
 
const DictgetDict () const
 gets the underlying Dictionary More...
 
DictgetDict ()
 
STR_VECT getPropList (bool includePrivate=true, bool includeComputed=true) const
 returns a list with the names of our properties More...
 
template<typename T >
void setProp (const std::string &key, T val, bool computed=false) const
 sets a property value More...
 
template<typename T >
void getProp (const std::string &key, T &res) const
 allows retrieval of a particular property value More...
 
template<typename T >
getProp (const std::string &key) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
template<typename T >
bool getPropIfPresent (const std::string &key, T &res) const
 
bool hasProp (const std::string &key) const
 This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts. More...
 
void clearProp (const std::string &key) const
 clears the value of a property More...
 
void clearComputedProps () const
 clears all of our computed properties More...
 
void updateProps (const RDProps &source, bool preserveExisting=false)
 update the properties from another More...
 

Protected Member Functions

void setOwningMol (ROMol *other)
 sets our owning molecule More...
 
void setOwningMol (ROMol &other)
 sets our owning molecule More...
 
void initAtom ()
 
void initFromOther (const Atom &other)
 

Protected Attributes

bool df_isAromatic
 
bool df_noImplicit
 
std::uint8_t d_numExplicitHs
 
std::int8_t d_formalCharge
 
std::uint8_t d_atomicNum
 
std::int8_t d_implicitValence
 
std::int8_t d_explicitValence
 
std::uint8_t d_numRadicalElectrons
 
std::uint8_t d_chiralTag
 
std::uint8_t d_hybrid
 
std::uint16_t d_isotope
 
atomindex_t d_index
 
ROMoldp_mol
 
AtomMonomerInfodp_monomerInfo
 
- Protected Attributes inherited from RDKit::RDProps
Dict d_props
 

Friends

class MolPickler
 the pickler needs access to our privates More...
 
class ROMol
 
class RWMol
 

Detailed Description

The class for representing atoms.

Notes:

  • many of the methods of Atom require that the Atom be associated with a molecule (an ROMol).
  • each Atom maintains a Dict of properties:
    • Each property is keyed by name and can store an arbitrary type.
    • Properties can be marked as calculated, in which case they will be cleared when the clearComputedProps() method is called.
    • Because they have no impact upon chemistry, all property operations are const, this allows extra flexibility for clients who need to store extra data on Atom objects.
  • Atom objects are lazy about computing their explicit and implicit valence values. These will not be computed until their values are requested.

Chirality:

The chirality of an Atom is determined by two things:

  • its chiralTag
  • the input order of its bonds (see note below for handling of implicit Hs)

For tetrahedral coordination, the chiralTag tells you what direction you have to rotate to get from bond 2 to bond 3 while looking down bond 1. This is pretty much identical to the SMILES representation of chirality.

NOTE: if an atom has an implicit H, the bond to that H is considered to be at the end of the list of other bonds.

Definition at line 69 of file Atom.h.

Member Typedef Documentation

◆ QUERYATOM_QUERY

typedef Queries::Query<int, Atom const *, true> RDKit::Atom::QUERYATOM_QUERY

Definition at line 76 of file Atom.h.

Member Enumeration Documentation

◆ ChiralType

store type of chirality

Enumerator
CHI_UNSPECIFIED 

chirality that hasn't been specified

CHI_TETRAHEDRAL_CW 

tetrahedral: clockwise rotation (SMILES @@)

CHI_TETRAHEDRAL_CCW 

tetrahedral: counter-clockwise rotation (SMILES

CHI_OTHER 

some unrecognized type of chirality

Definition at line 91 of file Atom.h.

◆ HybridizationType

store hybridization

Enumerator
UNSPECIFIED 

hybridization that hasn't been specified

SP 
SP2 
SP3 
SP3D 
SP3D2 
OTHER 

unrecognized hybridization

Definition at line 79 of file Atom.h.

Constructor & Destructor Documentation

◆ Atom() [1/4]

RDKit::Atom::Atom ( )

◆ Atom() [2/4]

RDKit::Atom::Atom ( unsigned int  num)
explicit

construct an Atom with a particular atomic number

◆ Atom() [3/4]

RDKit::Atom::Atom ( const std::string &  what)
explicit

construct an Atom with a particular symbol (looked up in the

◆ Atom() [4/4]

RDKit::Atom::Atom ( const Atom other)

◆ ~Atom()

virtual RDKit::Atom::~Atom ( )
virtual

Member Function Documentation

◆ calcExplicitValence()

int RDKit::Atom::calcExplicitValence ( bool  strict = true)

calculates and returns our explicit valence

Notes:

  • requires an owning molecule

◆ calcImplicitValence()

int RDKit::Atom::calcImplicitValence ( bool  strict = true)

calculates and returns our implicit valence

Notes:

  • requires an owning molecule

◆ copy()

virtual Atom* RDKit::Atom::copy ( ) const
virtual

makes a copy of this Atom and returns a pointer to it.

Note: the caller is responsible for deleteing the result

Reimplemented in RDKit::QueryAtom.

◆ expandQuery()

virtual void RDKit::Atom::expandQuery ( QUERYATOM_QUERY what,
Queries::CompositeQueryType  how = Queries::COMPOSITE_AND,
bool  maintainOrder = true 
)
virtual

NOT CALLABLE.

Reimplemented in RDKit::QueryAtom.

◆ getAtomicNum()

◆ getAtomMapNum()

int RDKit::Atom::getAtomMapNum ( ) const
inline

Gets the atom map Number of the atom, if no atom map exists, 0 is returned.

Definition at line 378 of file Atom.h.

References RDKit::common_properties::molAtomMapNumber.

◆ getChiralTag()

ChiralType RDKit::Atom::getChiralTag ( ) const
inline

returns our chiralTag

Definition at line 239 of file Atom.h.

Referenced by RDKit::queryAtomHasChiralTag(), and RDKit::queryAtomMissingChiralTag().

◆ getDegree()

unsigned int RDKit::Atom::getDegree ( ) const

returns the explicit degree of the Atom (number of bonded neighbors in the graph)

Notes:

  • requires an owning molecule

Referenced by RDDepict::getAtomDepictRank(), RDKit::queryAtomExplicitDegree(), and RDKit::queryAtomUnsaturated().

◆ getExplicitValence()

int RDKit::Atom::getExplicitValence ( ) const

returns the explicit valence (including Hs) of this atom

Referenced by RDKit::queryAtomExplicitValence(), RDKit::queryAtomTotalValence(), and RDKit::queryAtomUnsaturated().

◆ getFormalCharge()

int RDKit::Atom::getFormalCharge ( ) const
inline

returns the formal charge of this atom

Definition at line 206 of file Atom.h.

Referenced by RDKit::queryAtomFormalCharge(), and RDKit::queryAtomNegativeFormalCharge().

◆ getHybridization()

HybridizationType RDKit::Atom::getHybridization ( ) const
inline

returns our hybridization

Definition at line 246 of file Atom.h.

Referenced by RDKit::queryAtomHybridization().

◆ getIdx()

◆ getImplicitValence()

int RDKit::Atom::getImplicitValence ( ) const

returns the implicit valence for this Atom

Notes:

  • requires an owning molecule

Referenced by RDKit::queryAtomImplicitValence(), and RDKit::queryAtomTotalValence().

◆ getIsAromatic()

bool RDKit::Atom::getIsAromatic ( ) const
inline

◆ getIsotope()

unsigned int RDKit::Atom::getIsotope ( ) const
inline

returns our isotope number

Definition at line 232 of file Atom.h.

Referenced by RDKit::queryAtomIsotope().

◆ getMass()

double RDKit::Atom::getMass ( ) const

returns our mass

Referenced by RDKit::queryAtomMass().

◆ getMonomerInfo() [1/2]

AtomMonomerInfo* RDKit::Atom::getMonomerInfo ( )
inline

Definition at line 360 of file Atom.h.

◆ getMonomerInfo() [2/2]

const AtomMonomerInfo* RDKit::Atom::getMonomerInfo ( ) const
inline

Definition at line 361 of file Atom.h.

◆ getNoImplicit()

bool RDKit::Atom::getNoImplicit ( ) const
inline

returns the noImplicit flag

Definition at line 214 of file Atom.h.

◆ getNumExplicitHs()

unsigned int RDKit::Atom::getNumExplicitHs ( ) const
inline

returns our number of explict Hs

Definition at line 219 of file Atom.h.

Referenced by RDKit::queryAtomExplicitValence().

◆ getNumImplicitHs()

unsigned int RDKit::Atom::getNumImplicitHs ( ) const

returns the number of implicit Hs this Atom is bound to

Notes:

  • requires an owning molecule

◆ getNumRadicalElectrons()

unsigned int RDKit::Atom::getNumRadicalElectrons ( ) const
inline

returns the number of radical electrons for this Atom

Notes:

  • requires an owning molecule

Definition at line 200 of file Atom.h.

Referenced by RDKit::queryAtomNumRadicalElectrons().

◆ getOwningMol()

◆ getPerturbationOrder()

int RDKit::Atom::getPerturbationOrder ( INT_LIST  probe) const

returns the perturbation order for a list of integers

This value is associated with chirality.

Parameters
probea list of bond indices. This must be the same length as our number of incoming bonds (our degree).
Returns
the number of swaps required to convert the ordering of the probe list to match the order of our incoming bonds: e.g. if our incoming bond order is: [0,1,2,3]
  getPerturbationOrder([1,0,2,3]) = 1
  getPerturbationOrder([1,2,3,0]) = 3
  getPerturbationOrder([1,2,0,3]) = 2

See the class documentation for a more detailed description of our representation of chirality.

Notes:

  • requires an owning molecule

◆ getQuery()

virtual QUERYATOM_QUERY* RDKit::Atom::getQuery ( ) const
virtual

NOT CALLABLE.

Reimplemented in RDKit::QueryAtom.

Referenced by RDKit::describeQuery().

◆ getSymbol()

std::string RDKit::Atom::getSymbol ( ) const

returns our symbol (determined by our atomic number)

◆ getTotalDegree()

unsigned int RDKit::Atom::getTotalDegree ( ) const

returns the total degree of the Atom (number of bonded neighbors + number of Hs)

Notes:

  • requires an owning molecule

Referenced by RDKit::queryAtomNonHydrogenDegree(), and RDKit::queryAtomTotalDegree().

◆ getTotalNumHs()

unsigned int RDKit::Atom::getTotalNumHs ( bool  includeNeighbors = false) const

returns the total number of Hs (implicit and explicit) that this Atom is bound to

Notes:

  • requires an owning molecule

Referenced by RDKit::queryAtomHasImplicitH(), RDKit::queryAtomHCount(), RDKit::queryAtomImplicitHCount(), and RDKit::queryAtomNonHydrogenDegree().

◆ getTotalValence()

unsigned int RDKit::Atom::getTotalValence ( ) const

returns the total valence (implicit and explicit) for an atom

Notes:

  • requires an owning molecule

◆ hasOwningMol()

bool RDKit::Atom::hasOwningMol ( ) const
inline

returns whether or not this instance belongs to a molecule

Definition at line 124 of file Atom.h.

◆ hasQuery()

virtual bool RDKit::Atom::hasQuery ( ) const
inlinevirtual

Reimplemented in RDKit::QueryAtom.

Definition at line 263 of file Atom.h.

Referenced by RDKit::describeQuery().

◆ initAtom()

void RDKit::Atom::initAtom ( )
protected

◆ initFromOther()

void RDKit::Atom::initFromOther ( const Atom other)
protected

◆ invertChirality()

void RDKit::Atom::invertChirality ( )

inverts our chiralTag

◆ Match()

virtual bool RDKit::Atom::Match ( Atom const *  what) const
virtual

returns whether or not we match the argument

Notes: The general rule is that if a property on this atom has a non-default value, the property on the other atom must have the same value. The exception to this is H counts, which are ignored. These turns out to be impossible to handle generally, so rather than having odd and hard-to-explain exceptions, we ignore them entirely.

Here are the rules for atom-atom matching: | This | Other | Match | Reason | CCO | CCO | Yes | | CCO | CC[O-] | Yes | | CC[O-] | CCO | No | Charge | CC[O-] | CC[O-] | Yes | | CC[OH] | CC[O-] | Yes | | CC[OH] | CCOC | Yes | | CCO | CCOC | Yes | | CCC | CCC | Yes | | CCC | CC[14C] | Yes | | CC[14C] | CCC | No | Isotope | CC[14C] | CC[14C] | Yes | | C | OCO | Yes | | [CH] | OCO | Yes | | [CH2] | OCO | Yes | | [CH3] | OCO | No | Radical | C | O[CH2]O | Yes | | [CH2] | O[CH2]O | Yes |

Reimplemented in RDKit::QueryAtom.

◆ needsUpdatePropertyCache()

bool RDKit::Atom::needsUpdatePropertyCache ( ) const

◆ operator=()

Atom& RDKit::Atom::operator= ( const Atom other)

◆ setAtomicNum()

void RDKit::Atom::setAtomicNum ( int  newNum)
inline

sets our atomic number

Definition at line 118 of file Atom.h.

◆ setAtomMapNum()

void RDKit::Atom::setAtomMapNum ( int  mapno,
bool  strict = true 
)
inline

Set the atom map Number of the atom.

Definition at line 366 of file Atom.h.

References RDKit::common_properties::molAtomMapNumber, and PRECONDITION.

◆ setChiralTag()

void RDKit::Atom::setChiralTag ( ChiralType  what)
inline

sets our chiralTag

Definition at line 235 of file Atom.h.

◆ setFormalCharge()

void RDKit::Atom::setFormalCharge ( int  what)
inline

set's the formal charge of this atom

Definition at line 208 of file Atom.h.

◆ setHybridization()

void RDKit::Atom::setHybridization ( HybridizationType  what)
inline

sets our hybridization

Definition at line 244 of file Atom.h.

◆ setIdx() [1/2]

template<class U >
void RDKit::Atom::setIdx ( const U  index)
inline

overload

Definition at line 143 of file Atom.h.

◆ setIdx() [2/2]

void RDKit::Atom::setIdx ( unsigned int  index)
inline

sets our index within the ROMol

Notes:

  • this makes no sense if we do not have an owning molecule
  • the index should be < this->getOwningMol()->getNumAtoms()

Definition at line 140 of file Atom.h.

◆ setIsAromatic()

void RDKit::Atom::setIsAromatic ( bool  what)
inline

sets our isAromatic flag, indicating whether or not we are aromatic

Definition at line 222 of file Atom.h.

◆ setIsotope()

void RDKit::Atom::setIsotope ( unsigned int  what)

sets our isotope number

◆ setMonomerInfo()

void RDKit::Atom::setMonomerInfo ( AtomMonomerInfo info)
inline

takes ownership of the pointer

Definition at line 363 of file Atom.h.

◆ setNoImplicit()

void RDKit::Atom::setNoImplicit ( bool  what)
inline

sets our noImplicit flag, indicating whether or not we are allowed to have implicit Hs

Definition at line 212 of file Atom.h.

◆ setNumExplicitHs()

void RDKit::Atom::setNumExplicitHs ( unsigned int  what)
inline

sets our number of explict Hs

Definition at line 217 of file Atom.h.

◆ setNumRadicalElectrons()

void RDKit::Atom::setNumRadicalElectrons ( unsigned int  num)
inline

Definition at line 201 of file Atom.h.

◆ setOwningMol() [1/2]

void RDKit::Atom::setOwningMol ( ROMol other)
inlineprotected

sets our owning molecule

Definition at line 388 of file Atom.h.

References setOwningMol().

Referenced by setOwningMol().

◆ setOwningMol() [2/2]

void RDKit::Atom::setOwningMol ( ROMol other)
protected

sets our owning molecule

Referenced by RDKit::SLNParse::closeRingBond().

◆ setQuery()

virtual void RDKit::Atom::setQuery ( QUERYATOM_QUERY what)
virtual

NOT CALLABLE.

Reimplemented in RDKit::QueryAtom.

◆ updatePropertyCache()

void RDKit::Atom::updatePropertyCache ( bool  strict = true)

calculates any of our lazy properties

Notes:

  • requires an owning molecule
  • the current lazy properties are implicit and explicit valence

Friends And Related Function Documentation

◆ MolPickler

friend class MolPickler
friend

the pickler needs access to our privates

Definition at line 70 of file Atom.h.

◆ ROMol

friend class ROMol
friend

Definition at line 71 of file Atom.h.

◆ RWMol

friend class RWMol
friend

Definition at line 72 of file Atom.h.

Member Data Documentation

◆ d_atomicNum

std::uint8_t RDKit::Atom::d_atomicNum
protected

Definition at line 394 of file Atom.h.

◆ d_chiralTag

std::uint8_t RDKit::Atom::d_chiralTag
protected

Definition at line 400 of file Atom.h.

◆ d_explicitValence

std::int8_t RDKit::Atom::d_explicitValence
protected

Definition at line 398 of file Atom.h.

◆ d_formalCharge

std::int8_t RDKit::Atom::d_formalCharge
protected

Definition at line 393 of file Atom.h.

◆ d_hybrid

std::uint8_t RDKit::Atom::d_hybrid
protected

Definition at line 401 of file Atom.h.

◆ d_implicitValence

std::int8_t RDKit::Atom::d_implicitValence
protected

Definition at line 398 of file Atom.h.

◆ d_index

atomindex_t RDKit::Atom::d_index
protected

Definition at line 404 of file Atom.h.

◆ d_isotope

std::uint16_t RDKit::Atom::d_isotope
protected

Definition at line 403 of file Atom.h.

◆ d_numExplicitHs

std::uint8_t RDKit::Atom::d_numExplicitHs
protected

Definition at line 392 of file Atom.h.

◆ d_numRadicalElectrons

std::uint8_t RDKit::Atom::d_numRadicalElectrons
protected

Definition at line 399 of file Atom.h.

◆ df_isAromatic

bool RDKit::Atom::df_isAromatic
protected

Definition at line 388 of file Atom.h.

◆ df_noImplicit

bool RDKit::Atom::df_noImplicit
protected

Definition at line 391 of file Atom.h.

◆ dp_mol

ROMol* RDKit::Atom::dp_mol
protected

Definition at line 406 of file Atom.h.

◆ dp_monomerInfo

AtomMonomerInfo* RDKit::Atom::dp_monomerInfo
protected

Definition at line 407 of file Atom.h.


The documentation for this class was generated from the following file: