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 boost::shared_ptr< AtomATOM_SPTR
 
typedef boost::shared_ptr< const AtomC_ATOM_SPTR
 
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)
 
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...
 
ROMolgetOwningMol () const
 returns a reference to the ROMol that owns this Atom 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...
 
virtual bool Match (const ATOM_SPTR &what) const
 
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
 
template<typename T >
bool getPropIfPresent (const std::string &key, T &res) const
 
bool hasProp (const std::string &key) const
 
void clearProp (const std::string &key) const
 clears the value of a property More...
 
void clearComputedProps () const
 clears all of our computed properties More...
 

Protected Member Functions

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

Protected Attributes

bool df_isAromatic
 
bool df_noImplicit
 
boost::uint8_t d_numExplicitHs
 
boost::int8_t d_formalCharge
 
boost::uint8_t d_atomicNum
 
boost::int8_t d_implicitValence
 
boost::int8_t d_explicitValence
 
boost::uint8_t d_numRadicalElectrons
 
boost::uint8_t d_chiralTag
 
boost::uint8_t d_hybrid
 
atomindex_t d_index
 
boost::uint16_t d_isotope
 
ROMoldp_mol
 
AtomMonomerInfodp_monomerInfo
 
- Protected Attributes inherited from RDKit::RDProps
Dict dp_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 68 of file Atom.h.

Member Typedef Documentation

typedef boost::shared_ptr<Atom> RDKit::Atom::ATOM_SPTR

Definition at line 74 of file Atom.h.

typedef boost::shared_ptr<const Atom> RDKit::Atom::C_ATOM_SPTR

Definition at line 75 of file Atom.h.

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

Definition at line 77 of file Atom.h.

Member Enumeration Documentation

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 92 of file Atom.h.

store hybridization

Enumerator
UNSPECIFIED 

hybridization that hasn't been specified

SP 
SP2 
SP3 
SP3D 
SP3D2 
OTHER 

unrecognized hybridization

Definition at line 80 of file Atom.h.

Constructor & Destructor Documentation

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

construct an Atom with a particular atomic number

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

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

RDKit::Atom::Atom ( const Atom other)
virtual RDKit::Atom::~Atom ( )
virtual

Member Function Documentation

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

calculates and returns our explicit valence

Notes:

  • requires an owning molecule

Referenced by Match().

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

calculates and returns our implicit valence

Notes:

  • requires an owning molecule

Referenced by Match().

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.

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

NOT CALLABLE.

Reimplemented in RDKit::QueryAtom.

Referenced by hasQuery().

int RDKit::Atom::getAtomicNum ( ) const
inline
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 379 of file Atom.h.

References RDKit::RDProps::getPropIfPresent(), RDKit::common_properties::molAtomMapNumber, and setOwningMol().

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

returns our chiralTag

Definition at line 236 of file Atom.h.

References d_chiralTag.

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

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::Drawing::detail::getAtomSymbolAndOrientation(), RDKit::queryAtomExplicitDegree(), RDKit::queryAtomUnsaturated(), and setIdx().

int RDKit::Atom::getExplicitValence ( ) const

returns the explicit valence (including Hs) of this atom

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

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

returns the formal charge of this atom

Definition at line 203 of file Atom.h.

References d_formalCharge.

Referenced by RDKit::Drawing::detail::getAtomSymbolAndOrientation(), and RDKit::queryAtomFormalCharge().

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

returns our hybridization

Definition at line 243 of file Atom.h.

References d_hybrid.

Referenced by RDKit::queryAtomHybridization().

int RDKit::Atom::getImplicitValence ( ) const

returns the implicit valence for this Atom

Notes:

  • requires an owning molecule

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

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

returns our isAromatic flag

Definition at line 221 of file Atom.h.

References df_isAromatic, getMass(), and setIsotope().

Referenced by RDKit::queryAtomAliphatic(), and RDKit::queryAtomAromatic().

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

returns our isotope number

Definition at line 229 of file Atom.h.

References d_isotope.

Referenced by RDKit::Drawing::detail::getAtomSymbolAndOrientation(), and RDKit::queryAtomIsotope().

double RDKit::Atom::getMass ( ) const

returns our mass

Referenced by getIsAromatic(), and RDKit::queryAtomMass().

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

Definition at line 361 of file Atom.h.

References dp_monomerInfo.

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

Definition at line 362 of file Atom.h.

References dp_monomerInfo.

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

returns the noImplicit flag

Definition at line 211 of file Atom.h.

References df_noImplicit.

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

returns our number of explict Hs

Definition at line 216 of file Atom.h.

References d_numExplicitHs.

Referenced by RDKit::queryAtomExplicitValence().

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

returns the number of implicit Hs this Atom is bound to

Notes:

  • requires an owning molecule

Referenced by setIdx().

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

returns the number of radical electrons for this Atom

Notes:

  • requires an owning molecule

Definition at line 197 of file Atom.h.

References d_numRadicalElectrons.

Referenced by RDKit::Drawing::detail::getAtomSymbolAndOrientation(), and RDKit::queryAtomNumRadicalElectrons().

ROMol& RDKit::Atom::getOwningMol ( ) const
inline
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

Referenced by Match().

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

NOT CALLABLE.

Reimplemented in RDKit::QueryAtom.

Referenced by hasQuery().

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

returns our symbol (determined by our atomic number)

Referenced by RDKit::Drawing::detail::getAtomSymbolAndOrientation(), and setAtomicNum().

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::queryAtomHeavyAtomDegree(), RDKit::queryAtomTotalDegree(), and setIdx().

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::Drawing::detail::getAtomSymbolAndOrientation(), RDKit::queryAtomHasImplicitH(), RDKit::queryAtomHCount(), RDKit::queryAtomHeavyAtomDegree(), RDKit::queryAtomImplicitHCount(), and setIdx().

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

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

Notes:

  • requires an owning molecule

Referenced by setIdx().

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

Reimplemented in RDKit::QueryAtom.

Definition at line 260 of file Atom.h.

References Queries::COMPOSITE_AND, expandQuery(), getQuery(), Match(), and setQuery().

void RDKit::Atom::initAtom ( )
protected
void RDKit::Atom::invertChirality ( )

inverts our chiralTag

Referenced by setChiralTag().

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.

Referenced by hasQuery(), and Match().

virtual bool RDKit::Atom::Match ( const ATOM_SPTR what) const
inlinevirtual

This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Reimplemented in RDKit::QueryAtom.

Definition at line 307 of file Atom.h.

References calcExplicitValence(), calcImplicitValence(), getPerturbationOrder(), Match(), needsUpdatePropertyCache(), and updatePropertyCache().

bool RDKit::Atom::needsUpdatePropertyCache ( ) const

Referenced by Match().

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

sets our atomic number

Definition at line 118 of file Atom.h.

References d_atomicNum, and getSymbol().

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

sets our chiralTag

Definition at line 232 of file Atom.h.

References d_chiralTag, and invertChirality().

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

set's the formal charge of this atom

Definition at line 205 of file Atom.h.

References d_formalCharge.

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

sets our hybridization

Definition at line 241 of file Atom.h.

References d_hybrid.

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 137 of file Atom.h.

References d_index.

Referenced by setIdx().

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

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

Definition at line 219 of file Atom.h.

References df_isAromatic.

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

sets our isotope number

Referenced by getIsAromatic().

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

takes ownership of the pointer

Definition at line 364 of file Atom.h.

References dp_monomerInfo.

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 209 of file Atom.h.

References df_noImplicit.

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

sets our number of explict Hs

Definition at line 214 of file Atom.h.

References d_numExplicitHs.

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

Definition at line 198 of file Atom.h.

References d_numRadicalElectrons.

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

sets our owning molecule

Referenced by RDKit::SLNParse::closeRingBond(), and getAtomMapNum().

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

sets our owning molecule

Definition at line 389 of file Atom.h.

References df_isAromatic, and setOwningMol().

Referenced by setOwningMol().

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

NOT CALLABLE.

Reimplemented in RDKit::QueryAtom.

Referenced by hasQuery().

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

Referenced by Match().

Friends And Related Function Documentation

friend class MolPickler
friend

the pickler needs access to our privates

Definition at line 69 of file Atom.h.

friend class ROMol
friend

Definition at line 70 of file Atom.h.

friend class RWMol
friend

Definition at line 71 of file Atom.h.

Member Data Documentation

boost::uint8_t RDKit::Atom::d_atomicNum
protected

Definition at line 395 of file Atom.h.

Referenced by getAtomicNum(), and setAtomicNum().

boost::uint8_t RDKit::Atom::d_chiralTag
protected

Definition at line 401 of file Atom.h.

Referenced by getChiralTag(), and setChiralTag().

boost::int8_t RDKit::Atom::d_explicitValence
protected

Definition at line 399 of file Atom.h.

boost::int8_t RDKit::Atom::d_formalCharge
protected

Definition at line 394 of file Atom.h.

Referenced by getFormalCharge(), and setFormalCharge().

boost::uint8_t RDKit::Atom::d_hybrid
protected

Definition at line 402 of file Atom.h.

Referenced by getHybridization(), and setHybridization().

boost::int8_t RDKit::Atom::d_implicitValence
protected

Definition at line 399 of file Atom.h.

atomindex_t RDKit::Atom::d_index
protected

Definition at line 404 of file Atom.h.

Referenced by getIdx(), and setIdx().

boost::uint16_t RDKit::Atom::d_isotope
protected

Definition at line 405 of file Atom.h.

Referenced by getIsotope().

boost::uint8_t RDKit::Atom::d_numExplicitHs
protected

Definition at line 393 of file Atom.h.

Referenced by getNumExplicitHs(), and setNumExplicitHs().

boost::uint8_t RDKit::Atom::d_numRadicalElectrons
protected

Definition at line 400 of file Atom.h.

Referenced by getNumRadicalElectrons(), and setNumRadicalElectrons().

bool RDKit::Atom::df_isAromatic
protected

Definition at line 389 of file Atom.h.

Referenced by getIsAromatic(), setIsAromatic(), and setOwningMol().

bool RDKit::Atom::df_noImplicit
protected

Definition at line 392 of file Atom.h.

Referenced by getNoImplicit(), and setNoImplicit().

ROMol* RDKit::Atom::dp_mol
protected

Definition at line 407 of file Atom.h.

Referenced by getOwningMol().

AtomMonomerInfo* RDKit::Atom::dp_monomerInfo
protected

Definition at line 408 of file Atom.h.

Referenced by getMonomerInfo(), and setMonomerInfo().


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