RDKit
Open-source cheminformatics and machine learning.
Loading...
Searching...
No Matches
Atom.h
Go to the documentation of this file.
1//
2// Copyright (C) 2001-2024 Greg Landrum and other RDKit contributors
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/*! \file Atom.h
11
12 \brief Defines the Atom class and associated typedefs
13
14*/
15#include <RDGeneral/export.h>
16#ifndef _RD_ATOM_H
17#define _RD_ATOM_H
18
19#include <limits>
20
21// ours
22#include <RDGeneral/Invariant.h>
23#include <Query/QueryObjects.h>
24#include <RDGeneral/types.h>
25#include <RDGeneral/RDProps.h>
26#include <GraphMol/details.h>
27
28namespace RDKit {
29class Atom;
30}
31//! allows Atom objects to be dumped to streams
32RDKIT_GRAPHMOL_EXPORT std::ostream &operator<<(std::ostream &target,
33 const RDKit::Atom &at);
34
35namespace RDKit {
36class ROMol;
37class RWMol;
38class AtomMonomerInfo;
39
40//! The class for representing atoms
41/*!
42
43 <b>Notes:</b>
44 - many of the methods of Atom require that the Atom be associated
45 with a molecule (an ROMol).
46 - each Atom maintains a Dict of \c properties:
47 - Each \c property is keyed by name and can store an
48 arbitrary type.
49 - \c Properties can be marked as \c calculated, in which case
50 they will be cleared when the \c clearComputedProps() method
51 is called.
52 - Because they have no impact upon chemistry, all \c property
53 operations are \c const, this allows extra flexibility for
54 clients who need to store extra data on Atom objects.
55 - Atom objects are lazy about computing their explicit and implicit valence
56 values. These will not be computed until their values are requested.
57
58 <b>Chirality:</b>
59
60 The chirality of an Atom is determined by two things:
61 - its \c chiralTag
62 - the input order of its bonds (see note below for handling of
63 implicit Hs)
64
65 For tetrahedral coordination, the \c chiralTag tells you what
66 direction you have to rotate to get from bond 2 to bond 3 while looking
67 down bond 1. This is pretty much identical to the SMILES representation of
68 chirality.
69
70 NOTE: if an atom has an implicit H, the bond to that H is considered to be
71 at the *end* of the list of other bonds.
72
73*/
75 friend class MolPickler; //!< the pickler needs access to our privates
76 friend class ROMol;
77 friend class RWMol;
78 friend std::ostream &(::operator<<)(std::ostream &target,
79 const ::RDKit::Atom &at);
80 friend int calculateImplicitValence(const Atom &, bool, bool);
81
82 public:
83 // used to mark missing atoms, e.g. in Chirality::StereoInfo
84 // and the _CIPNeighborOrder in CIP labeler
85 inline static constexpr unsigned int NOATOM =
86 std::numeric_limits<unsigned int>::max();
87
88 // FIX: grn...
90
91 //! store hybridization
92 typedef enum {
93 UNSPECIFIED = 0, //!< hybridization that hasn't been specified
101 OTHER //!< unrecognized hybridization
102 } HybridizationType;
103
104 //! store type of chirality
105 typedef enum {
106 CHI_UNSPECIFIED = 0, //!< chirality that hasn't been specified
107 CHI_TETRAHEDRAL_CW, //!< tetrahedral: clockwise rotation (SMILES \@\@)
108 CHI_TETRAHEDRAL_CCW, //!< tetrahedral: counter-clockwise rotation (SMILES
109 //\@)
110 CHI_OTHER, //!< some unrecognized type of chirality
111 CHI_TETRAHEDRAL, //!< tetrahedral, use permutation flag
112 CHI_ALLENE, //!< allene, use permutation flag
113 CHI_SQUAREPLANAR, //!< square planar, use permutation flag
114 CHI_TRIGONALBIPYRAMIDAL, //!< trigonal bipyramidal, use permutation flag
115 CHI_OCTAHEDRAL //!< octahedral, use permutation flag
116 } ChiralType;
117
118 enum class ValenceType : std::uint8_t {
121 };
122
124 //! construct an Atom with a particular atomic number
125 explicit Atom(unsigned int num);
126 //! construct an Atom with a particular symbol (looked up in the
127 /// PeriodicTable)
128 explicit Atom(const std::string &what);
129 Atom(const Atom &other);
130 Atom &operator=(const Atom &other);
131 // NOTE: the move methods are somewhat fraught for atoms associated with
132 // molecules since the molecule will still be pointing to the original object
133 Atom(Atom &&other) = default;
134 Atom &operator=(Atom &&other) = default;
135
136 virtual ~Atom();
137
138 //! makes a copy of this Atom and returns a pointer to it.
139 /*!
140 <b>Note:</b> the caller is responsible for <tt>delete</tt>ing the result
141 */
142 virtual Atom *copy() const;
143
144 //! returns our atomic number
145 int getAtomicNum() const { return d_atomicNum; }
146 //! sets our atomic number
147 void setAtomicNum(int newNum) { d_atomicNum = newNum; }
148
149 //! returns our symbol (determined by our atomic number)
150 std::string getSymbol() const;
151
152 //! returns whether or not this instance belongs to a molecule
153 bool hasOwningMol() const { return dp_mol != nullptr; }
154
155 //! returns a reference to the ROMol that owns this instance
157 PRECONDITION(dp_mol, "no owner");
158 return *dp_mol;
159 }
160
161 //! returns our index within the ROMol
162 unsigned int getIdx() const { return d_index; }
163 //! sets our index within the ROMol
164 /*!
165 <b>Notes:</b>
166 - this makes no sense if we do not have an owning molecule
167 - the index should be <tt>< this->getOwningMol()->getNumAtoms()</tt>
168 */
169 void setIdx(unsigned int index) { d_index = index; }
170 //! overload
171 template <class U>
172 void setIdx(const U index) {
174 }
175 //! returns the explicit degree of the Atom (number of bonded
176 //! neighbors in the graph)
177 unsigned int getDegree() const;
178
179 //! returns the total degree of the Atom (number of bonded
180 //! neighbors + number of Hs)
181 unsigned int getTotalDegree() const;
182
183 //! \brief returns the total number of Hs (implicit and explicit) that
184 //! this Atom is bound to
185 unsigned int getTotalNumHs(bool includeNeighbors = false) const;
186
187 //! \brief returns the total valence (implicit and explicit)
188 //! for an atom
189 unsigned int getTotalValence() const;
190
191 //! returns the number of implicit Hs this Atom is bound to
192 unsigned int getNumImplicitHs() const;
193
194 //! returns the valence (explicit or implicit) of this atom
195 unsigned int getValence(ValenceType which) const;
196
197 //! returns the explicit valence (including Hs) of this atom
198 [[deprecated("please use getValence(true)")]] int getExplicitValence() const;
199
200 //! returns the implicit valence for this Atom
201 [[deprecated("please use getValence(false)")]] int getImplicitValence() const;
202
203 //! returns whether the atom has a valency violation or not
205
206 //! returns the number of radical electrons for this Atom
207 unsigned int getNumRadicalElectrons() const { return d_numRadicalElectrons; }
208 void setNumRadicalElectrons(unsigned int num) { d_numRadicalElectrons = num; }
209
210 //! returns the formal charge of this atom
211 int getFormalCharge() const { return d_formalCharge; }
212 //! set's the formal charge of this atom
213 void setFormalCharge(int what) { d_formalCharge = what; }
214
215 //! \brief sets our \c noImplicit flag, indicating whether or not
216 //! we are allowed to have implicit Hs
217 void setNoImplicit(bool what) { df_noImplicit = what; }
218 //! returns the \c noImplicit flag
219 bool getNoImplicit() const { return df_noImplicit; }
220
221 //! sets our number of explicit Hs
222 void setNumExplicitHs(unsigned int what) { d_numExplicitHs = what; }
223 //! returns our number of explicit Hs
224 unsigned int getNumExplicitHs() const { return d_numExplicitHs; }
225
226 //! sets our \c isAromatic flag, indicating whether or not we are aromatic
227 void setIsAromatic(bool what) { df_isAromatic = what; }
228 //! returns our \c isAromatic flag
229 bool getIsAromatic() const { return df_isAromatic; }
230
231 //! returns our mass
232 double getMass() const;
233
234 //! sets our isotope number
235 void setIsotope(unsigned int what);
236 //! returns our isotope number
237 unsigned int getIsotope() const { return d_isotope; }
238
239 //! sets our \c chiralTag
240 void setChiralTag(ChiralType what) { d_chiralTag = what; }
241 //! inverts our \c chiralTag, returns whether or not a change was made
243 //! returns our \c chiralTag
245 return static_cast<ChiralType>(d_chiralTag);
246 }
247
248 //! sets our hybridization
250 //! returns our hybridization
252 return static_cast<HybridizationType>(d_hybrid);
253 }
254
255 // ------------------------------------
256 // Some words of explanation before getting down into
257 // the query stuff.
258 // These query functions are really only here so that they
259 // can have real functionality in subclasses (like QueryAtoms).
260 // Since pretty much it's gonna be a mistake to call any of these
261 // (ever), we're saddling them all with a precondition which
262 // is guaranteed to fail. I'd like to have them be pure virtual,
263 // but that doesn't work since we need to be able to instantiate
264 // Atoms.
265 // ------------------------------------
266
267 // This method can be used to distinguish query atoms from standard atoms:
268 virtual bool hasQuery() const { return false; }
269
270 virtual std::string getQueryType() const { return ""; }
271
272 //! NOT CALLABLE
273 virtual void setQuery(QUERYATOM_QUERY *what);
274
275 //! NOT CALLABLE
276 virtual QUERYATOM_QUERY *getQuery() const;
277 //! NOT CALLABLE
278 virtual void expandQuery(
279 QUERYATOM_QUERY *what,
281 bool maintainOrder = true);
282
283 //! returns whether or not we match the argument
284 /*!
285 <b>Notes:</b>
286 The general rule is that if a property on this atom has a non-default
287 value,
288 the property on the other atom must have the same value.
289 The exception to this is H counts, which are ignored. These turns out to
290 be
291 impossible to handle generally, so rather than having odd and
292 hard-to-explain
293 exceptions, we ignore them entirely.
294
295 Here are the rules for atom-atom matching:
296 | This | Other | Match | Reason
297 | CCO | CCO | Yes |
298 | CCO | CC[O-] | Yes |
299 | CC[O-] | CCO | No | Charge
300 | CC[O-] | CC[O-] | Yes |
301 | CC[OH] | CC[O-] | Yes |
302 | CC[OH] | CCOC | Yes |
303 | CCO | CCOC | Yes |
304 | CCC | CCC | Yes |
305 | CCC | CC[14C] | Yes |
306 | CC[14C] | CCC | No | Isotope
307 | CC[14C] | CC[14C] | Yes |
308 | C | OCO | Yes |
309 | [CH] | OCO | Yes |
310 | [CH2] | OCO | Yes |
311 | [CH3] | OCO | No | Radical
312 | C | O[CH2]O | Yes |
313 | [CH2] | O[CH2]O | Yes |
314 */
315 virtual bool Match(Atom const *what) const;
316
317 //! returns the perturbation order for a list of integers
318 /*!
319
320 This value is associated with chirality.
321
322 \param probe a list of bond indices. This must be the same
323 length as our number of incoming bonds (our degree).
324
325 \return the number of swaps required to convert the ordering
326 of the probe list to match the order of our incoming bonds:
327 e.g. if our incoming bond order is: <tt>[0,1,2,3]</tt>
328 \verbatim
329 getPerturbationOrder([1,0,2,3]) = 1
330 getPerturbationOrder([1,2,3,0]) = 3
331 getPerturbationOrder([1,2,0,3]) = 2
332 \endverbatim
333
334 See the class documentation for a more detailed description
335 of our representation of chirality.
336
337 <b>Notes:</b>
338 - requires an owning molecule
339
340 */
341 int getPerturbationOrder(const INT_LIST &probe) const;
342
343 //! calculates any of our lazy \c properties
344 /*!
345 <b>Notes:</b>
346 - requires an owning molecule
347 - the current lazy \c properties are implicit and explicit valence
348 */
349 void updatePropertyCache(bool strict = true);
350
353
354 //! calculates and returns our explicit valence
355 /*!
356 <b>Notes:</b>
357 - requires an owning molecule
358 */
359 int calcExplicitValence(bool strict = true);
360
361 //! calculates and returns our implicit valence
362 /*!
363 <b>Notes:</b>
364 - requires an owning molecule
365 */
366 int calcImplicitValence(bool strict = true);
367
370 //! takes ownership of the pointer
372
373 //! Set the atom map Number of the atom
374 void setAtomMapNum(int mapno, bool strict = true) {
376 !strict || (mapno >= 0 && mapno < 1000),
377 "atom map number out of range [0..1000], use strict=false to override");
378 if (mapno) {
382 }
383 }
384 //! Gets the atom map Number of the atom, if no atom map exists, 0 is
385 //! returned.
386 int getAtomMapNum() const {
387 int mapno = 0;
389 return mapno;
390 }
391
392 //! Flags that can be used by to store information on atoms.
393 //! These are not serialized and should be treated as temporary values.
394 //! No guarantees are made about preserving these flags across library
395 //! calls.
396 void setFlags(std::uint64_t flags) { d_flags = flags; }
397 std::uint64_t getFlags() const { return d_flags; }
398 std::uint64_t &getFlags() { return d_flags; }
399
400 protected:
401 //! sets our owning molecule
402 void setOwningMol(ROMol *other);
403 //! sets our owning molecule
404 void setOwningMol(ROMol &other) { setOwningMol(&other); }
405
408 std::uint8_t d_numExplicitHs;
409 std::int8_t d_formalCharge;
410 std::uint8_t d_atomicNum;
411 // NOTE that these cannot be signed, they are calculated using
412 // a lazy scheme and are initialized to -1 to indicate that the
413 // calculation has not yet been done.
416 std::uint8_t d_chiralTag;
417 std::uint8_t d_hybrid;
418
419 std::uint16_t d_isotope;
421 std::uint64_t d_flags = 0ul;
422
425 void initAtom();
426 void initFromOther(const Atom &other);
427};
428
429//! Set the atom's MDL integer RLabel
430/// Setting to 0 clears the rlabel. Rlabel must be in the range [0..99]
433
434//! Set the atom's MDL atom alias
435/// Setting to an empty string clears the alias
436RDKIT_GRAPHMOL_EXPORT void setAtomAlias(Atom *atom, const std::string &alias);
437RDKIT_GRAPHMOL_EXPORT std::string getAtomAlias(const Atom *atom);
438
439//! Set the atom's MDL atom value
440/// Setting to an empty string clears the value
441/// This is where recursive smarts get stored in MolBlock Queries
442RDKIT_GRAPHMOL_EXPORT void setAtomValue(Atom *atom, const std::string &value);
443RDKIT_GRAPHMOL_EXPORT std::string getAtomValue(const Atom *atom);
444
445//! Sets the supplemental label that will follow the atom when writing
446/// smiles strings.
448 const std::string &label);
450
451//! returns true if the atom is to the left of C
453//! returns true if the atom is aromatic or has an aromatic bond
455//! returns the number of pi electrons on the atom
456RDKIT_GRAPHMOL_EXPORT unsigned int numPiElectrons(const Atom &atom);
457}; // namespace RDKit
458
459//! allows Atom objects to be dumped to streams
460RDKIT_GRAPHMOL_EXPORT std::ostream &operator<<(std::ostream &target,
461 const RDKit::Atom &at);
462#endif
RDKIT_GRAPHMOL_EXPORT std::ostream & operator<<(std::ostream &target, const RDKit::Atom &at)
allows Atom objects to be dumped to streams
#define rdcast
Definition Invariant.h:191
#define PRECONDITION(expr, mess)
Definition Invariant.h:108
Pulls in all the query types.
Base class for all queries.
Definition Query.h:45
The abstract base class for atom-level monomer info.
Definition MonomerInfo.h:26
The class for representing atoms.
Definition Atom.h:74
virtual Atom * copy() const
makes a copy of this Atom and returns a pointer to it.
ChiralType getChiralTag() const
returns our chiralTag
Definition Atom.h:244
AtomMonomerInfo * getMonomerInfo()
Definition Atom.h:368
void setNumExplicitHs(unsigned int what)
sets our number of explicit Hs
Definition Atom.h:222
Atom & operator=(const Atom &other)
std::uint64_t getFlags() const
Definition Atom.h:397
void initAtom()
void setHybridization(HybridizationType what)
sets our hybridization
Definition Atom.h:249
ROMol & getOwningMol() const
returns a reference to the ROMol that owns this instance
Definition Atom.h:156
Queries::Query< int, Atom const *, true > QUERYATOM_QUERY
Definition Atom.h:89
bool needsUpdatePropertyCache() const
virtual void expandQuery(QUERYATOM_QUERY *what, Queries::CompositeQueryType how=Queries::COMPOSITE_AND, bool maintainOrder=true)
NOT CALLABLE.
bool invertChirality()
inverts our chiralTag, returns whether or not a change was made
atomindex_t d_index
Definition Atom.h:420
bool getNoImplicit() const
returns the noImplicit flag
Definition Atom.h:219
friend int calculateImplicitValence(const Atom &, bool, bool)
Atom(unsigned int num)
construct an Atom with a particular atomic number
bool hasValenceViolation() const
returns whether the atom has a valency violation or not
friend class RWMol
Definition Atom.h:77
unsigned int getIdx() const
returns our index within the ROMol
Definition Atom.h:162
void setFlags(std::uint64_t flags)
Definition Atom.h:396
unsigned int getValence(ValenceType which) const
returns the valence (explicit or implicit) of this atom
unsigned int getNumExplicitHs() const
returns our number of explicit Hs
Definition Atom.h:224
unsigned int getNumRadicalElectrons() const
returns the number of radical electrons for this Atom
Definition Atom.h:207
bool df_isAromatic
Definition Atom.h:406
void setNoImplicit(bool what)
sets our noImplicit flag, indicating whether or not we are allowed to have implicit Hs
Definition Atom.h:217
Atom(const Atom &other)
ROMol * dp_mol
Definition Atom.h:423
virtual void setQuery(QUERYATOM_QUERY *what)
NOT CALLABLE.
virtual std::string getQueryType() const
Definition Atom.h:270
std::int8_t d_implicitValence
Definition Atom.h:414
int getExplicitValence() const
returns the explicit valence (including Hs) of this atom
HybridizationType
store hybridization
Definition Atom.h:92
@ OTHER
unrecognized hybridization
Definition Atom.h:101
@ UNSPECIFIED
hybridization that hasn't been specified
Definition Atom.h:93
int getImplicitValence() const
returns the implicit valence for this Atom
void updatePropertyCache(bool strict=true)
calculates any of our lazy properties
Atom(Atom &&other)=default
void clearPropertyCache()
void setIdx(unsigned int index)
sets our index within the ROMol
Definition Atom.h:169
void setAtomicNum(int newNum)
sets our atomic number
Definition Atom.h:147
unsigned int getTotalNumHs(bool includeNeighbors=false) const
returns the total number of Hs (implicit and explicit) that this Atom is bound to
void initFromOther(const Atom &other)
int calcExplicitValence(bool strict=true)
calculates and returns our explicit valence
const AtomMonomerInfo * getMonomerInfo() const
Definition Atom.h:369
static constexpr unsigned int NOATOM
Definition Atom.h:85
void setIsotope(unsigned int what)
sets our isotope number
friend class MolPickler
the pickler needs access to our privates
Definition Atom.h:75
std::uint16_t d_isotope
Definition Atom.h:419
void setOwningMol(ROMol &other)
sets our owning molecule
Definition Atom.h:404
std::uint8_t d_atomicNum
Definition Atom.h:410
int getAtomicNum() const
returns our atomic number
Definition Atom.h:145
int calcImplicitValence(bool strict=true)
calculates and returns our implicit valence
ChiralType
store type of chirality
Definition Atom.h:105
@ CHI_OTHER
some unrecognized type of chirality
Definition Atom.h:110
@ CHI_TETRAHEDRAL
tetrahedral, use permutation flag
Definition Atom.h:111
@ CHI_ALLENE
allene, use permutation flag
Definition Atom.h:112
@ CHI_TETRAHEDRAL_CW
tetrahedral: clockwise rotation (SMILES @@)
Definition Atom.h:107
@ CHI_UNSPECIFIED
chirality that hasn't been specified
Definition Atom.h:106
@ CHI_OCTAHEDRAL
octahedral, use permutation flag
Definition Atom.h:115
@ CHI_TETRAHEDRAL_CCW
tetrahedral: counter-clockwise rotation (SMILES
Definition Atom.h:108
@ CHI_TRIGONALBIPYRAMIDAL
trigonal bipyramidal, use permutation flag
Definition Atom.h:114
@ CHI_SQUAREPLANAR
square planar, use permutation flag
Definition Atom.h:113
unsigned int getNumImplicitHs() const
returns the number of implicit Hs this Atom is bound to
bool df_noImplicit
Definition Atom.h:407
friend class ROMol
Definition Atom.h:76
int getPerturbationOrder(const INT_LIST &probe) const
returns the perturbation order for a list of integers
AtomMonomerInfo * dp_monomerInfo
Definition Atom.h:424
int getAtomMapNum() const
Definition Atom.h:386
void setAtomMapNum(int mapno, bool strict=true)
Set the atom map Number of the atom.
Definition Atom.h:374
virtual bool hasQuery() const
Definition Atom.h:268
void setFormalCharge(int what)
set's the formal charge of this atom
Definition Atom.h:213
std::int8_t d_formalCharge
Definition Atom.h:409
std::uint8_t d_hybrid
Definition Atom.h:417
std::string getSymbol() const
returns our symbol (determined by our atomic number)
virtual bool Match(Atom const *what) const
returns whether or not we match the argument
void setChiralTag(ChiralType what)
sets our chiralTag
Definition Atom.h:240
void setMonomerInfo(AtomMonomerInfo *info)
takes ownership of the pointer
HybridizationType getHybridization() const
returns our hybridization
Definition Atom.h:251
bool getIsAromatic() const
returns our isAromatic flag
Definition Atom.h:229
unsigned int getTotalValence() const
returns the total valence (implicit and explicit) for an atom
Atom(const std::string &what)
std::uint8_t d_numRadicalElectrons
Definition Atom.h:415
void setIsAromatic(bool what)
sets our isAromatic flag, indicating whether or not we are aromatic
Definition Atom.h:227
int getFormalCharge() const
returns the formal charge of this atom
Definition Atom.h:211
Atom & operator=(Atom &&other)=default
double getMass() const
returns our mass
unsigned int getIsotope() const
returns our isotope number
Definition Atom.h:237
unsigned int getTotalDegree() const
std::uint64_t & getFlags()
Definition Atom.h:398
std::int8_t d_explicitValence
Definition Atom.h:414
void setIdx(const U index)
overload
Definition Atom.h:172
std::uint64_t d_flags
Definition Atom.h:421
virtual QUERYATOM_QUERY * getQuery() const
NOT CALLABLE.
void setNumRadicalElectrons(unsigned int num)
Definition Atom.h:208
bool hasOwningMol() const
returns whether or not this instance belongs to a molecule
Definition Atom.h:153
void setOwningMol(ROMol *other)
sets our owning molecule
std::uint8_t d_chiralTag
Definition Atom.h:416
std::uint8_t d_numExplicitHs
Definition Atom.h:408
virtual ~Atom()
unsigned int getDegree() const
bool getPropIfPresent(const std::string &key, T &res) const
Definition RDProps.h:121
void clearProp(const std::string &key) const
clears the value of a property
Definition RDProps.h:136
bool hasProp(const std::string &key) const
This is an overloaded member function, provided for convenience. It differs from the above function o...
Definition RDProps.h:126
void setProp(const std::string &key, T val, bool computed=false) const
sets a property value
Definition RDProps.h:77
#define RDKIT_GRAPHMOL_EXPORT
Definition export.h:249
@ COMPOSITE_AND
RDKIT_RDGENERAL_EXPORT const std::string molAtomMapNumber
Std stuff.
std::list< int > INT_LIST
Definition types.h:309
RDKIT_GRAPHMOL_EXPORT std::string getAtomValue(const Atom *atom)
RDKIT_GRAPHMOL_EXPORT std::string getAtomAlias(const Atom *atom)
RDKIT_GRAPHMOL_EXPORT void setAtomRLabel(Atom *atm, int rlabel)
RDKIT_GRAPHMOL_EXPORT bool isAromaticAtom(const Atom &atom)
returns true if the atom is aromatic or has an aromatic bond
RDKIT_GRAPHMOL_EXPORT std::string getSupplementalSmilesLabel(const Atom *atom)
RDKIT_GRAPHMOL_EXPORT void setAtomAlias(Atom *atom, const std::string &alias)
RDKIT_GRAPHMOL_EXPORT int getAtomRLabel(const Atom *atm)
RDKIT_GRAPHMOL_EXPORT void setAtomValue(Atom *atom, const std::string &value)
RDKIT_GRAPHMOL_EXPORT unsigned int numPiElectrons(const Atom &atom)
returns the number of pi electrons on the atom
RDKIT_GRAPHMOL_EXPORT bool isEarlyAtom(int atomicNum)
returns true if the atom is to the left of C
std::uint32_t atomindex_t
Definition details.h:14
RDKIT_GRAPHMOL_EXPORT void setSupplementalSmilesLabel(Atom *atom, const std::string &label)