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