AvogadroLibs 2.1.0-20261111
Loading...
Searching...
No Matches
Molecule Class Reference

The Molecule class represents a chemical molecule.

#include <avogadro/core/molecule.h>

Inheritance diagram for Molecule:
Molecule

Classes

struct  VibrationData

Public Types

using AtomType = Atom
using BondType = Bond
using CustomElementMap = std::map<unsigned char, std::string>
using ElementMask = std::bitset<element_count>

Public Member Functions

 Molecule ()
 Molecule (const Molecule &other)
 Molecule (Molecule &&other) noexcept
Molecule & operator= (const Molecule &other)
Molecule & operator= (Molecule &&other) noexcept
virtual ~Molecule ()
void readProperties (const Molecule &other)
void setData (const std::string &name, const Variant &value)
Variant data (const std::string &name) const
bool hasData (const std::string &name) const
void setDataMap (const VariantMap &map)
const VariantMap & dataMap () const
VariantMap & dataMap ()
MatrixX spectra (const std::string &name) const
void setSpectra (const std::string &name, const MatrixX &value)
std::set< std::string > spectraTypes () const
void setPartialCharges (const std::string &type, const MatrixX &value)
void removePartialCharges (const std::string &type)
MatrixX partialCharges (const std::string &type) const
std::set< std::string > partialChargeTypes () const
PropertyMap & atomProperties ()
const PropertyMap & atomProperties () const
PropertyMap & bondProperties ()
const PropertyMap & bondProperties () const
PropertyMap & residueProperties ()
const PropertyMap & residueProperties () const
PropertyMap & conformerProperties ()
const PropertyMap & conformerProperties () const
Array< AtomHybridization > & hybridizations ()
const Array< AtomHybridization > & hybridizations () const
AtomHybridization hybridization (Index atomId) const
bool setHybridizations (const Core::Array< AtomHybridization > &hybs)
bool setHybridization (Index atomId, AtomHybridization hybridization)
Array< signed char > & formalCharges ()
const Array< signed char > & formalCharges () const
signed char formalCharge (Index atomId) const
bool setFormalCharges (const Core::Array< signed char > &charges)
bool setFormalCharge (Index atomId, signed char charge)
signed char totalCharge () const
char totalSpinMultiplicity () const
Array< unsigned short > & isotopes ()
const Array< unsigned short > & isotopes () const
unsigned short isotope (Index atomId) const
bool setIsotopes (const Core::Array< unsigned short > &isotopes)
bool setIsotope (Index atomId, unsigned short isotope)
Array< Vector3ub > & colors ()
const Array< Vector3ub > & colors () const
Vector3ub color (Index atomId) const
bool setColors (const Core::Array< Vector3ub > &colors)
bool setColor (Index atomId, Vector3ub color)
bool setLayer (Index atomId, size_t layer)
size_t layer (Index atomId) const
const Array< Vector2 > & atomPositions2d () const
Array< Vector2 > & atomPositions2d ()
Vector2 atomPosition2d (Index atomId) const
bool setAtomPositions2d (const Core::Array< Vector2 > &pos)
bool setAtomPosition2d (Index atomId, const Vector2 &pos)
const Array< Vector3 > & atomPositions3d () const
Array< Vector3 > & atomPositions3d ()
Vector3 atomPosition3d (Index atomId) const
bool setAtomPositions3d (const Core::Array< Vector3 > &pos)
bool setAtomPosition3d (Index atomId, const Vector3 &pos)
std::string atomLabel (Index atomId) const
bool setAtomLabel (Index atomId, const std::string &label)
const Core::Array< std::string > atomLabels () const
bool setAtomLabels (const Core::Array< std::string > &label)
void setAtomSelected (Index atomId, bool selected)
bool atomSelected (Index atomId) const
bool isSelectionEmpty () const
const ElementMask elements () const
virtual AtomType addAtom (unsigned char atomicNumber)
AtomType addAtom (unsigned char atomicNumber, Vector3 position3d)
virtual bool removeAtom (Index index)
 Remove the specified atom from the molecule.
virtual bool removeAtom (const AtomType &atom)
 Remove the specified atom from the molecule.
virtual void clearAtoms ()
AtomType atom (Index index) const
virtual bool removeBond (Index index)
 Remove the specified bond.
virtual bool removeBond (const BondType &bond)
 Remove the specified bond.
virtual void clearBonds ()
BondType bond (Index index) const
BondType bond (const AtomType &a, const AtomType &b) const
BondType bond (Index atomId1, Index atomId2) const
std::string bondLabel (Index bondIndex) const
bool setBondLabel (Index bondIndex, const std::string &label)
const Core::Array< std::string > bondLabels () const
bool setBondLabels (const Core::Array< std::string > &label)
Mesh * addMesh ()
 Add a mesh to the molecule.
Mesh * mesh (Index index)
const Mesh * mesh (Index index) const
Index meshCount () const
void clearMeshes ()
Cube * addCube ()
 Add a cube to the molecule.
Cube * cube (Index index)
const Cube * cube (Index index) const
Index cubeCount () const
void clearCubes ()
bool setActiveCubeIndex (Index index)
 Set the active cube index for volume rendering.
Index activeCubeIndex () const
 Get the index of the active cube.
Cube * activeCube ()
 Get the active cube for volume rendering.
const Cube * activeCube () const
std::vector< Cube * > cubes ()
 Get the cubes vector set (if present) for the molecule.
const std::vector< Cube * > cubes () const
std::string formula (const std::string &delimiter="", int showCountsOver=1) const
double mass () const
double monoisotopicMass () const
Vector3 centerOfGeometry () const
Vector3 centerOfMass () const
double radius () const
std::pair< Vector3, Vector3 > bestFitPlane () const
void setBasisSet (BasisSet *basis)
BasisSet * basisSet ()
const BasisSet * basisSet () const
bool hasVibrations (size_t conformerIndex) const
bool hasVibrations () const
size_t vibrationConformerCount () const
Array< size_t > vibrationConformers () const
void clearVibrations ()
const VibrationData * vibrationData (size_t conformerIndex) const
void setVibrationData (const VibrationData &data, size_t conformerIndex)
void perceiveBondsSimple (const double tolerance=0.45, const double minDistance=0.32)
void perceiveBondsFromResidueData ()
BondOrderResult perceiveBondOrders (const BondOrderOptions &options)
void perceiveBondOrders ()
void perceiveSubstitutedCations ()
size_t coordinate3dCount () const
bool setCoordinate3d (int coord)
int coordinate3d () const
Array< Vector3 > coordinate3d (size_t index) const
const Array< Vector3 > & coordinate3dRef (size_t index) const
bool setCoordinate3d (const Array< Vector3 > &coords, size_t index)
void clearCoordinate3d ()
void estimateVelocities ()
void estimateVelocities (double timeStep)
Array< Vector3 > velocities (int index) const
bool setVelocities (const Array< Vector3 > &velocities, int index)
void updateVelocityProperties ()
void clearVelocities ()
bool setTimeStep (double timestep, int index)
double timeStep (int index, bool &status) const
const Array< Vector3 > & forceVectors () const
Array< Vector3 > & forceVectors ()
Vector3 forceVector (Index atomId) const
bool setForceVectors (const Core::Array< Vector3 > &forces)
bool setForceVector (Index atomId, const Vector3 &force)
Residue & addResidue (std::string &name, Index &number, char &id)
void addResidue (Residue &residue)
Residue & residue (Index index)
const Residue & residue (Index index) const
Array< Residue > & residues ()
const Array< Residue > & residues () const
Index residueCount () const
std::string residueLabel (Index residueIndex) const
bool setResidueLabel (Index residueIndex, const std::string &label)
const Core::Array< std::string > residueLabels () const
bool setResidueLabels (const Core::Array< std::string > &label)
Index atomCount () const
Index atomCount (unsigned char atomicNumber) const
 Get the number of atoms in the molecule that match atomicNumber.
Index bondCount () const
std::pair< Index, Index > bondPair (Index bondId) const
bool setBondPairs (const Array< std::pair< Index, Index > > &pairs)
const Array< std::pair< Index, Index > > & bondPairs () const
const Array< unsigned char > & bondOrders () const
const Graph & graph () const
const Array< unsigned char > & atomicNumbers () const
unsigned char atomicNumber (Index atomId) const
bool setBondOrders (const Array< unsigned char > &orders)
bool setBondOrder (Index bondId, unsigned char order)
bool hasCustomElements () const
bool setBondPair (Index bondId, const std::pair< Index, Index > &pair)
unsigned char bondOrder (Index bondId) const
bool setAtomicNumbers (const Core::Array< unsigned char > &nums)
bool setAtomicNumber (Index atomId, unsigned char atomicNumber)
std::map< unsigned char, size_t > composition () const
std::map< std::string, size_t > formulaComposition () const
Array< std::pair< Index, Index > > getAtomBonds (Index index) const
Array< unsigned char > getAtomOrders (Index index) const
bool removeBonds (Index atom)
void addBonds (const Array< std::pair< Index, Index > > &bonds, const Array< unsigned char > &orders)
void swapBond (Index a, Index b)
void swapAtom (Index a, Index b)
void clearCalculatedResults ()
std::list< Index > getAtomsAtLayer (size_t layer)
Layer & layer ()
const Layer & layer () const
void copyDisplayStateFrom (const Molecule &other)
std::shared_ptr< MoleculeInfo > layerInfo () const
void boundingBox (Vector3 &boxMin, Vector3 &boxMax, const double radius=1.0) const
const CustomElementMap & customElementMap () const
void setCustomElementMap (const CustomElementMap &map)
virtual BondType addBond (Index atom1, Index atom2, unsigned char order=1)
virtual BondType addBond (const AtomType &atom1, const AtomType &atom2, unsigned char order=1)
virtual bool removeBond (Index atom1, Index atom2)
 Remove the specified bond.
virtual bool removeBond (const AtomType &atom1, const AtomType &atom2)
 Remove the specified bond.
Array< BondType > bonds (const AtomType &a)
 Get all bonds to a.
Array< BondType > bonds (Index a)
 Get all bonds to a.
Array< const BondType * > bonds (Index a) const
 Get all bonds to a.
void setUnitCell (UnitCell *uc)
UnitCell * unitCell ()
const UnitCell * unitCell () const
void setHallNumber (unsigned short hallNumber)
unsigned short hallNumber () const
Array< double > vibrationFrequencies () const
void setVibrationFrequencies (const Array< double > &freq)
Array< double > vibrationIRIntensities () const
void setVibrationIRIntensities (const Array< double > &intensities)
Array< double > vibrationRamanIntensities () const
void setVibrationRamanIntensities (const Array< double > &intensities)
Array< Vector3 > vibrationLx (int mode) const
void setVibrationLx (const Array< Array< Vector3 > > &lx)
Array< double > vibrationFrequencies (size_t conformerIndex) const
void setVibrationFrequencies (const Array< double > &freq, size_t conformerIndex)
Array< double > vibrationIRIntensities (size_t conformerIndex) const
void setVibrationIRIntensities (const Array< double > &intensities, size_t conformerIndex)
Array< double > vibrationRamanIntensities (size_t conformerIndex) const
void setVibrationRamanIntensities (const Array< double > &intensities, size_t conformerIndex)
Array< Vector3 > vibrationLx (int mode, size_t conformerIndex) const
void setVibrationLx (const Array< Array< Vector3 > > &lx, size_t conformerIndex)
Constraints

Methods for distance, angle, torsion, etc. constraints

void addConstraint (Real Value, Index a, Index b, Index c=MaxIndex, Index d=MaxIndex)
void addConstraint (Constraint &c)
void removeConstraint (Index a, Index b, Index c=MaxIndex, Index d=MaxIndex)
void clearConstraints ()
void setConstraints (const std::vector< Core::Constraint > &constraints)
std::vector< Core::Constraint > & constraints ()
const std::vector< Core::Constraint > & constraints () const
void setFrozenAtom (Index atomId, bool frozen)
bool frozenAtom (Index atomId) const
bool frozenAtomAxis (Index atomId, int axis) const
void setFrozenAtomAxis (Index atomId, int axis, bool frozen)
Eigen::VectorXd frozenAtomMask () const
Scan coordinates

Distances, angles and torsions worth following across the coordinate sets, such as the coordinate a relaxed scan stepped through. Unlike constraints these are only ever measured, never enforced, so an optimizer ignores them. They live in the property map, which already travels through CJSON, rather than in a member of their own.

std::vector< Constraint > scanCoordinates () const
void setScanCoordinates (const std::vector< Constraint > &coordinates)
void addScanCoordinate (const Constraint &coordinate)

Static Public Member Functions

static std::pair< Vector3, Vector3 > bestFitPlane (const Array< Vector3 > &pos)
static std::pair< Index, Index > makeBondPair (const Index &a, const Index &b)

Protected Attributes

VariantMap m_data
std::map< std::string, MatrixX > m_partialCharges
 Sets of atomic partial charges.
std::map< std::string, MatrixX > m_spectra
 Sets of spectra.
PropertyMap m_atomProperties
 Custom per-atom properties.
PropertyMap m_bondProperties
 Custom per-bond properties.
PropertyMap m_residueProperties
 Custom per-residue properties.
PropertyMap m_conformerProperties
 Custom per-conformer properties.
CustomElementMap m_customElementMap
ElementMask m_elements
Array< Vector2 > m_positions2d
Array< Vector3 > m_positions3d
Array< std::string > m_atomLabels
Array< std::string > m_bondLabels
Array< std::string > m_residueLabels
Array< Array< Vector3 > > m_coordinates3d
 Store conformers/trajectories.
int m_coordinate3dIndex = 0
 Active coordinate set index.
Array< Array< Vector3 > > m_velocities
 Store velocities.
Array< double > m_timesteps
Array< AtomHybridization > m_hybridizations
Array< signed char > m_formalCharges
Array< unsigned short > m_isotopes
 Store isotopes of the atoms.
Array< Vector3 > m_forceVectors
Array< Vector3ub > m_colors
std::map< size_t, VibrationData > m_vibrations
std::vector< bool > m_selectedAtoms
std::vector< Mesh * > m_meshes
std::vector< Cube * > m_cubes
Index m_activeCubeIndex = 0
BasisSet * m_basisSet
UnitCell * m_unitCell
Array< Residue > m_residues
unsigned short m_hallNumber = 0
std::vector< Core::Constraint > m_constraints
Eigen::VectorXd m_frozenAtomMask

Member Typedef Documentation

◆ AtomType

using AtomType = Atom

Typedef for Atom class.

◆ BondType

using BondType = Bond

Typedef for Bond class.

◆ CustomElementMap

using CustomElementMap = std::map<unsigned char, std::string>

Type for custom element map.

◆ ElementMask

using ElementMask = std::bitset<element_count>

Type for element masks (e.g., does this molecule contain certain elements)

Constructor & Destructor Documentation

◆ Molecule() [1/3]

Molecule ( )

Creates a new, empty molecule.

◆ Molecule() [2/3]

Molecule ( const Molecule & other)

Copy constructor

◆ Molecule() [3/3]

Molecule ( Molecule && other)
noexcept

Move constructor.

Takes every member from other and leaves it equivalent to a default-constructed Molecule. The layer state is a shared_ptr whose handle is transferred, not rebuilt. noexcept, but not allocation-free: leaving the source empty allocates small empty containers, and the graph's edge list may be copied. An allocation failure here terminates the program.

◆ ~Molecule()

virtual ~Molecule ( )
virtual

Destroys the molecule object.

Reimplemented in Molecule.

Member Function Documentation

◆ operator=() [1/2]

Molecule & operator= ( const Molecule & other)

Assignment operator

◆ operator=() [2/2]

Molecule & operator= ( Molecule && other)
noexcept

Move assignment operator. noexcept but may allocate, as the move constructor does; an allocation failure terminates the program.

◆ readProperties()

void readProperties ( const Molecule & other)

Adds the properties from the supplied molecule to this molecule. Does not otherwise modify atoms / bonds / residues, etc.

◆ setData()

void setData ( const std::string & name,
const Variant & value )

Sets the data value with name to value.

◆ data()

Variant data ( const std::string & name) const
Returns
the data value for name.

◆ hasData()

bool hasData ( const std::string & name) const
Returns
true if the molecule has data with the given key, false otherwise.

◆ setDataMap()

void setDataMap ( const VariantMap & map)

Set the molecule's variant data to the entries in map.

◆ dataMap() [1/2]

const VariantMap & dataMap ( ) const
Returns
the molecule's variant data.

◆ dataMap() [2/2]

VariantMap & dataMap ( )

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

◆ spectra()

MatrixX spectra ( const std::string & name) const
Returns
a specific spectra entry

◆ setSpectra()

void setSpectra ( const std::string & name,
const MatrixX & value )

Sets the spectra value with name to value.

◆ spectraTypes()

std::set< std::string > spectraTypes ( ) const
Returns
the list of available spectra

◆ setPartialCharges()

void setPartialCharges ( const std::string & type,
const MatrixX & value )

Sets atomic partial charges with type to value.

◆ removePartialCharges()

void removePartialCharges ( const std::string & type)

Discards the stored partial charges of type type, if any. Other charge types are left alone.

◆ partialCharges()

MatrixX partialCharges ( const std::string & type) const
Returns
the atomic partial charges of type type

◆ partialChargeTypes()

std::set< std::string > partialChargeTypes ( ) const
Returns
the types of partial charges available stored with this molecule.

◆ atomProperties() [1/2]

PropertyMap & atomProperties ( )
Returns
the per-atom custom property map.

◆ atomProperties() [2/2]

const PropertyMap & atomProperties ( ) const

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

◆ bondProperties() [1/2]

PropertyMap & bondProperties ( )
Returns
the per-bond custom property map.

◆ bondProperties() [2/2]

const PropertyMap & bondProperties ( ) const

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

◆ residueProperties() [1/2]

PropertyMap & residueProperties ( )
Returns
the per-residue custom property map.

◆ residueProperties() [2/2]

const PropertyMap & residueProperties ( ) const

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

◆ conformerProperties() [1/2]

PropertyMap & conformerProperties ( )
Returns
the per-conformer custom property map.

◆ conformerProperties() [2/2]

const PropertyMap & conformerProperties ( ) const

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

◆ hybridizations() [1/2]

Array< AtomHybridization > & hybridizations ( )
Returns
a vector of hybridizations for the atoms in the molecule.

◆ hybridizations() [2/2]

const Array< AtomHybridization > & hybridizations ( ) const

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

◆ hybridization()

AtomHybridization hybridization ( Index atomId) const

Get the hybridization for the requested atom.

Parameters
atomIdThe index of the atom.
Returns
The hybridization of the atom indexed at atomId, or 0 if atomId is invalid.

◆ setHybridizations()

bool setHybridizations ( const Core::Array< AtomHybridization > & hybs)

Replace the current array of hybridizations.

Parameters
hybsThe new hybridization array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setHybridization()

bool setHybridization ( Index atomId,
AtomHybridization hybridization )

Set the hybridization of a single atom.

Parameters
atomIdThe index of the atom to modify.
hybridizationThe new hybridization.
Returns
True on success, false otherwise.

◆ formalCharges() [1/2]

Array< signed char > & formalCharges ( )
Returns
a vector of formal charges for the atoms in the molecule.

◆ formalCharges() [2/2]

const Array< signed char > & formalCharges ( ) const

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

◆ formalCharge()

signed char formalCharge ( Index atomId) const

Get the formal charge for the requested atom.

Parameters
atomIdThe index of the atom.
Returns
The formal charge of the atom indexed at atomId, or 0 if atomId is invalid.

◆ setFormalCharges()

bool setFormalCharges ( const Core::Array< signed char > & charges)

Replace the current array of formal charges.

Parameters
chargesThe new formal charge array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setFormalCharge()

bool setFormalCharge ( Index atomId,
signed char charge )

Set the formal charge of a single atom.

Parameters
atomIdThe index of the atom to modify.
chargeThe new formal charge.
Returns
True on success, false otherwise.

◆ totalCharge()

signed char totalCharge ( ) const

Get the total charge on the molecule. The method will first check to see if a total charge has been set. If not, it will calculate the total charge from the formal charges (if set). If neither has been set, it will assume the total charge is zero.

Returns
The total charge of the molecule.

◆ totalSpinMultiplicity()

char totalSpinMultiplicity ( ) const

Get the total spin multiplicity of the molecule. The method will first check to see if a total spin has been set. If not, it will either suggest a singlet if an even number of electrons are present, or a doublet if an odd number of electrons are present.

Returns
The total spin multiplicity of the molecule.

◆ isotopes() [1/2]

Array< unsigned short > & isotopes ( )
Returns
an array of the isotopes for the atoms in the molecule.

◆ isotopes() [2/2]

const Array< unsigned short > & isotopes ( ) const

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

◆ isotope()

unsigned short isotope ( Index atomId) const

Get the isotope for the requested atom.

Parameters
atomIdThe index of the atom.
Returns
The isotope of the atom indexed at atomId, or 0 if atomId is invalid.

◆ setIsotopes()

bool setIsotopes ( const Core::Array< unsigned short > & isotopes)

Replace the current array of isotopes.

Parameters
chargesThe new isotope array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setIsotope()

bool setIsotope ( Index atomId,
unsigned short isotope )

Set the isotope of a single atom.

Parameters
atomIdThe index of the atom to modify.
isotopeThe new isotope (or zero for most common)
Returns
True on success, false otherwise.

◆ colors() [1/2]

Array< Vector3ub > & colors ( )
Returns
a vector of colors for the atoms in the moleucle.

◆ colors() [2/2]

const Array< Vector3ub > & colors ( ) const

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

◆ color()

Vector3ub color ( Index atomId) const

Get the color for the requested atom.

Parameters
atomIdThe index of the atom.
Returns
The color of the atom indexed at atomId, or (0,0,0) if atomId is invalid. If no color is set for the given atomId, the default color for the atomic number of the atomId is returned.

◆ setColors()

bool setColors ( const Core::Array< Vector3ub > & colors)

Replace the current array of colors.

Parameters
colorsThe new color array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setColor()

bool setColor ( Index atomId,
Vector3ub color )

Set the color of a single atom.

Parameters
atomIdThe index of the atom to modify.
colorThe new color.
Returns
True on success, false otherwise.

◆ atomPositions2d() [1/2]

const Array< Vector2 > & atomPositions2d ( ) const
Returns
a vector of 2d atom positions for the atoms in the molecule.

◆ atomPositions2d() [2/2]

Array< Vector2 > & atomPositions2d ( )

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

◆ atomPosition2d()

Vector2 atomPosition2d ( Index atomId) const

Get the 2D position of a single atom.

Parameters
atomIdThe index of the atom.
Returns
The position of the atom, or Vector3::Zero() if no position information has been set.

◆ setAtomPositions2d()

bool setAtomPositions2d ( const Core::Array< Vector2 > & pos)

Replace the current array of 2D atomic coordinates.

Parameters
posThe new coordinate array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setAtomPosition2d()

bool setAtomPosition2d ( Index atomId,
const Vector2 & pos )

Set the 2D position of a single atom.

Parameters
atomIdThe index of the atom to modify.
posThe new position of the atom.
Returns
True on success, false otherwise.

◆ atomPositions3d() [1/2]

const Array< Vector3 > & atomPositions3d ( ) const
Returns
a vector of 3d atom positions for the atoms in the molecule.

◆ atomPositions3d() [2/2]

Array< Vector3 > & atomPositions3d ( )

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

◆ atomPosition3d()

Vector3 atomPosition3d ( Index atomId) const

Get the 3D position of a single atom.

Parameters
atomIdThe index of the atom.
Returns
The position of the atom, or Vector3::Zero() if no position information has been set.

◆ setAtomPositions3d()

bool setAtomPositions3d ( const Core::Array< Vector3 > & pos)

Replace the current array of 3D atomic coordinates.

Parameters
posThe new coordinate array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setAtomPosition3d()

bool setAtomPosition3d ( Index atomId,
const Vector3 & pos )

Set the 3D position of a single atom.

Parameters
atomIdThe index of the atom to modify.
posThe new position of the atom.
Returns
True on success, false otherwise.

◆ atomLabel()

std::string atomLabel ( Index atomId) const
Returns
Any custom label for the requested atom.
Parameters
atomIdThe index of the atom.

◆ setAtomLabel()

bool setAtomLabel ( Index atomId,
const std::string & label )

Set the custom label of a single atom.

Parameters
atomIdThe index of the atom to modify.
labelThe new label of the atom.
Returns
True on success, false otherwise.

◆ setAtomLabels()

bool setAtomLabels ( const Core::Array< std::string > & label)

Set all the atom labels in the molecule.

Parameters
labelThe new label array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setAtomSelected()

void setAtomSelected ( Index atomId,
bool selected )

Set whether the specified atom is selected or not.

◆ atomSelected()

bool atomSelected ( Index atomId) const

Query whether the supplied atom index has been selected.

◆ isSelectionEmpty()

bool isSelectionEmpty ( ) const
Returns
whether the selection is empty or not

◆ customElementMap()

const CustomElementMap & customElementMap ( ) const

A map of custom element atomic numbers to string identifiers. These ids can be used to override the generic custom element names returned by the Elements class, and should be somewhat meaningful to the user.

Note
Custom element atomic numbers lie between CustomElementMin and CustomElementMax.
See also
Avogadro::QtGui::CustomElementDialog
hasCustomElements

◆ setCustomElementMap()

void setCustomElementMap ( const CustomElementMap & map)

A map of custom element atomic numbers to string identifiers. These ids can be used to override the generic custom element names returned by the Elements class, and should be somewhat meaningful to the user.

Note
Custom element atomic numbers lie between CustomElementMin and CustomElementMax.
See also
Avogadro::QtGui::CustomElementDialog
hasCustomElements

◆ elements()

const Molecule::ElementMask elements ( ) const
Returns
the elements currently in this molecule

◆ addAtom()

virtual AtomType addAtom ( unsigned char atomicNumber)
virtual

Adds an atom to the molecule.

Reimplemented in Molecule.

◆ removeAtom() [1/2]

virtual bool removeAtom ( Index index)
virtual
Parameters
indexThe index of the atom to be removed.
Returns
True on success, false if the atom was not found.

Reimplemented in Molecule.

◆ removeAtom() [2/2]

virtual bool removeAtom ( const AtomType & atom)
virtual
Parameters
atomThe atom to be removed.
Returns
True on success, false if the atom was not found. This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Reimplemented in Molecule.

◆ clearAtoms()

virtual void clearAtoms ( )
virtual

Remove all atoms from the molecule.

◆ atom()

AtomType atom ( Index index) const
Returns
the atom at index in the molecule.

◆ addBond() [1/2]

virtual BondType addBond ( Index atom1,
Index atom2,
unsigned char order = 1 )
virtual

Create a new bond in the molecule.

Parameters
atom1The first atom in the bond.
atom2The second atom in the bond.
orderThe bond order.
Returns
The new bond object. Will be invalid if atom1 or atom2 does not exist.

Reimplemented in Molecule.

◆ addBond() [2/2]

virtual BondType addBond ( const AtomType & atom1,
const AtomType & atom2,
unsigned char order = 1 )
virtual

Create a new bond in the molecule.

Parameters
atom1The first atom in the bond.
atom2The second atom in the bond.
orderThe bond order.
Returns
The new bond object. Will be invalid if atom1 or atom2 does not exist.

Reimplemented in Molecule.

◆ removeBond() [1/4]

virtual bool removeBond ( Index index)
virtual
Parameters
indexThe index of the bond to be removed.
Returns
True on success, false if the bond was not found.

Reimplemented in Molecule.

◆ removeBond() [2/4]

virtual bool removeBond ( const BondType & bond)
virtual
Parameters
bondThe bond to be removed.
Returns
True on success, false if the bond was not found. This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Reimplemented in Molecule.

◆ removeBond() [3/4]

virtual bool removeBond ( Index atom1,
Index atom2 )
virtual
Parameters
atom1One atom in the bond.
atom2The other atom in the bond.
Returns
True on success, false if the bond was not found. This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Reimplemented in Molecule.

◆ removeBond() [4/4]

virtual bool removeBond ( const AtomType & atom1,
const AtomType & atom2 )
virtual
Parameters
atom1One atom in the bond.
atom2The other atom in the bond.
Returns
True on success, false if the bond was not found. This is an overloaded member function, provided for convenience. It differs from the above function only in what argument(s) it accepts.

Reimplemented in Molecule.

◆ clearBonds()

virtual void clearBonds ( )
virtual

Remove all bonds from the molecule.

◆ bond() [1/3]

BondType bond ( Index index) const
Returns
the bond at index in the molecule.

◆ bond() [2/3]

BondType bond ( const AtomType & a,
const AtomType & b ) const
Returns
the bond between atoms a and b.

◆ bond() [3/3]

BondType bond ( Index atomId1,
Index atomId2 ) const
Returns
the bond between atomId1 and atomId2.

◆ bondLabel()

std::string bondLabel ( Index bondIndex) const
Returns
Any custom label for the requested bond.
Parameters
bondIndexThe index of the bond.

◆ setBondLabel()

bool setBondLabel ( Index bondIndex,
const std::string & label )

Set the custom label of a single bond.

Parameters
bondIndexThe index of the bond to modify.
labelThe new label of the bond.
Returns
True on success, false otherwise.

◆ setBondLabels()

bool setBondLabels ( const Core::Array< std::string > & label)

Set all the bond labels in the molecule.

Parameters
labelThe new label array. Must be of length bondCount().
Returns
True on success, false otherwise.

◆ bonds() [1/3]

Array< BondType > bonds ( const AtomType & a)
Returns
A vector of bonds to the supplied atom a.

◆ bonds() [2/3]

Array< BondType > bonds ( Index a)
Returns
A vector of bonds to the supplied atom a.

◆ bonds() [3/3]

Array< const BondType * > bonds ( Index a) const
Returns
A vector of bonds to the supplied atom a.

◆ addMesh()

Mesh * addMesh ( )
Returns
The mesh object added to the molecule.

◆ addCube()

Cube * addCube ( )
Returns
The cube object added to the molecule.

◆ setActiveCubeIndex()

bool setActiveCubeIndex ( Index index)
Parameters
indexThe index of the cube to make active.
Returns
True if the index is valid and was set, false otherwise.

◆ activeCubeIndex()

Index activeCubeIndex ( ) const
Returns
The active cube index, or 0 if no cubes exist.

◆ activeCube()

Cube * activeCube ( )
Returns
A pointer to the active cube, or nullptr if no cubes exist.

◆ cubes()

std::vector< Cube * > cubes ( )
Returns
The cube vector for the molecule

◆ formula()

std::string formula ( const std::string & delimiter = "",
int showCountsOver = 1 ) const
Returns
the chemical formula of the molecule.
Parameters
delimiterDelimiter to insert between tokens, defaults to none.
showCountsOverShow atom counts above this (defaults to 1).

◆ mass()

double mass ( ) const
Returns
The mass of the molecule obtained by summing constituent atomic masses.

◆ monoisotopicMass()

double monoisotopicMass ( ) const
Returns
the monoisotopic mass of the molecule obtained by summing the isotopic masses of the atoms (including the most common isotope if not specified).

◆ centerOfGeometry()

Vector3 centerOfGeometry ( ) const
Returns
The center of geometry of the molecule obtained by summing the coordinates of the atoms.

◆ centerOfMass()

Vector3 centerOfMass ( ) const
Returns
The center of mass of the molecule obtained by summing the coordinates of the atoms weighted by mass.

◆ radius()

double radius ( ) const
Returns
The minimum radius of a sphere centered on centerOfGeometry containing all the centers of the atoms.

◆ bestFitPlane() [1/2]

std::pair< Vector3, Vector3 > bestFitPlane ( ) const
Returns
The (centroid, normal vector) pair of the best-fit plane of the atoms of the molecule.

◆ bestFitPlane() [2/2]

std::pair< Vector3, Vector3 > bestFitPlane ( const Array< Vector3 > & pos)
static
Returns
The normal vector of the best-fit plane of some specific atoms.

◆ setBasisSet()

void setBasisSet ( BasisSet * basis)

Set the basis set for the molecule. The molecule takes ownership of basis and deletes the basis set it replaces. Passing the current basis set is a no-op. Passing nullptr removes (and deletes) the current one.

◆ basisSet()

BasisSet * basisSet ( )
Returns
the basis set (if present) for the molecule.

◆ setUnitCell()

void setUnitCell ( UnitCell * uc)

The unit cell for this molecule. May be nullptr for non-periodic structures.

◆ unitCell() [1/2]

UnitCell * unitCell ( )

The unit cell for this molecule. May be nullptr for non-periodic structures.

◆ unitCell() [2/2]

const UnitCell * unitCell ( ) const

The unit cell for this molecule. May be nullptr for non-periodic structures.

◆ setHallNumber()

void setHallNumber ( unsigned short hallNumber)

The space group for this molecule. It is updated after every space group operation.

Setting a Hall number other than 0 removes the entry that file readers keep in the data map when they only know the international table number of the space group (SpaceGroups::internationalNumberKey()): it is superseded. Setting 0 leaves the data map alone.

◆ hallNumber()

unsigned short hallNumber ( ) const

The space group for this molecule. It is updated after every space group operation.

Setting a Hall number other than 0 removes the entry that file readers keep in the data map when they only know the international table number of the space group (SpaceGroups::internationalNumberKey()): it is superseded. Setting 0 leaves the data map alone.

◆ vibrationFrequencies() [1/2]

Array< double > vibrationFrequencies ( ) const

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ setVibrationFrequencies() [1/2]

void setVibrationFrequencies ( const Array< double > & freq)

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ vibrationIRIntensities() [1/2]

Array< double > vibrationIRIntensities ( ) const

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ setVibrationIRIntensities() [1/2]

void setVibrationIRIntensities ( const Array< double > & intensities)

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ vibrationRamanIntensities() [1/2]

Array< double > vibrationRamanIntensities ( ) const

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ setVibrationRamanIntensities() [1/2]

void setVibrationRamanIntensities ( const Array< double > & intensities)

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ vibrationLx() [1/2]

Array< Vector3 > vibrationLx ( int mode) const

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ setVibrationLx() [1/2]

void setVibrationLx ( const Array< Array< Vector3 > > & lx)

Vibrational data for the active conformer (see coordinate3d()). Molecules with no coordinate sets store their single set of vibrations under the default active index, so these behave exactly as before for the common one-geometry-one-Hessian case.

Each getter returns an empty Array when the active conformer has no vibrational data, or when mode is out of range.

◆ vibrationFrequencies() [2/2]

Array< double > vibrationFrequencies ( size_t conformerIndex) const

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ setVibrationFrequencies() [2/2]

void setVibrationFrequencies ( const Array< double > & freq,
size_t conformerIndex )

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ vibrationIRIntensities() [2/2]

Array< double > vibrationIRIntensities ( size_t conformerIndex) const

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ setVibrationIRIntensities() [2/2]

void setVibrationIRIntensities ( const Array< double > & intensities,
size_t conformerIndex )

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ vibrationRamanIntensities() [2/2]

Array< double > vibrationRamanIntensities ( size_t conformerIndex) const

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ setVibrationRamanIntensities() [2/2]

void setVibrationRamanIntensities ( const Array< double > & intensities,
size_t conformerIndex )

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ vibrationLx() [2/2]

Array< Vector3 > vibrationLx ( int mode,
size_t conformerIndex ) const

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ setVibrationLx() [2/2]

void setVibrationLx ( const Array< Array< Vector3 > > & lx,
size_t conformerIndex )

Vibrational data for a specific conformer, for files that carry a Hessian at more than one geometry.

◆ hasVibrations() [1/2]

bool hasVibrations ( size_t conformerIndex) const
Returns
True if conformerIndex has vibrational data.

◆ hasVibrations() [2/2]

bool hasVibrations ( ) const
Returns
True if the active conformer has vibrational data.

◆ vibrationConformerCount()

size_t vibrationConformerCount ( ) const
Returns
The number of conformers carrying vibrational data. This is not the number of conformers: most trajectories have a Hessian at only one geometry, if any.

◆ vibrationConformers()

Array< size_t > vibrationConformers ( ) const
Returns
The indices of the conformers carrying vibrational data, in increasing order.

◆ clearVibrations()

void clearVibrations ( )

Remove all vibrational data from every conformer.

◆ vibrationData()

const VibrationData * vibrationData ( size_t conformerIndex) const
Returns
The vibrational data for conformerIndex, or nullptr when that conformer has none. The per-field accessors above are thin wrappers over this; new code that wants several fields at once should prefer it.

◆ setVibrationData()

void setVibrationData ( const VibrationData & data,
size_t conformerIndex )

Store a whole set of vibrational data against conformerIndex, replacing anything already there. Parsers that assemble a complete Hessian should prefer this to the per-field setters: it is one lookup, and a new field added to VibrationData needs no new call.

◆ perceiveBondsSimple()

void perceiveBondsSimple ( const double tolerance = 0.45,
const double minDistance = 0.32 )

Perceives bonds in the molecule based on the 3D coordinates of the atoms. atoms are considered bonded if within the sum of radii plus a small tolerance.

Parameters
toleranceThe calculation tolerance.
minDistance= atoms closer than the square of this are ignored

◆ perceiveBondsFromResidueData()

void perceiveBondsFromResidueData ( )

Perceives bonds in the molecule based on preset residue data.

Use this if you have residue data available (e.g., reading PDB or MMTF files) Otherwise consider

See also
perceiveBondsSimple and
perceiveBondOrders

◆ perceiveBondOrders() [1/2]

BondOrderResult perceiveBondOrders ( const BondOrderOptions & options)

Perceives bond orders from the connectivity (and, optionally, the geometry) of the molecule. Bonds are assumed to be present already; only bonds currently of order 1 are ever raised.

Every non-metal atom has one target valence, from atomValence() for its element, formal charge and current bond order sum. The atom's unsaturation is that target minus the bond order sum it already has. The task is then to give each candidate bond (a single bond between two unsaturated atoms) an extra order of 0, 1 or 2 so that the extras at every atom add up to exactly its unsaturation. This is a degree-constrained subgraph problem; it is solved exactly by constraint propagation with bounded backtracking, separately for each connected group of candidate bonds. A group that can be solved is written back; a group that cannot is left exactly as it was, and its unsaturated atoms are reported.

Rules, all of them chemistry judgements for a reviewer to check:

  • No bond ends up above order 3, and a bond to hydrogen or a halogen stays single.
  • Bonds that already have an order above 1 are kept as they are, and count toward their atoms' valence.
  • Metal atoms (see Elements::isMetal()) are never given bond orders, and their bonds do not count toward their ligands' valence: a pyridine nitrogen bound to zinc is still a pyridine nitrogen.
  • If the molecule has 3D coordinates and options asks for it, bond lengths decide which of several valid assignments is tried first. For a bond of length d the order k nearest to d, among the AtomUtilities::idealBondLength() values for k = 1, 2, 3, is the one preferred, and bonds that look most strongly multiple are branched on first. This only steers the search: the first valid assignment found is taken, with no attempt to find the best one overall.

Limits: there is one fixed valence per atom, chosen by the sum of its existing bond orders. Atoms whose valence depends on the answer (hypervalent S and P, nitro groups, N-oxides), charged or radical atoms, and heavy-atom-only structures with missing hydrogens will be reported as failures instead of being assigned charges or implicit hydrogens.

Returns
which atoms, if any, could not be satisfied.

◆ perceiveBondOrders() [2/2]

void perceiveBondOrders ( )

Perceives bond orders with default options, ignoring the result.

See also
perceiveBondOrders(const BondOrderOptions&)

◆ perceiveSubstitutedCations()

void perceiveSubstitutedCations ( )

Perceives all-carbon-substituted onium ions of nitrogen, oxygen, phosphorus, sulfur, arsenic and selenium.

◆ coordinate3d()

int coordinate3d ( ) const
Returns
the index of the currently active coordinate set.

◆ coordinate3dRef()

const Array< Vector3 > & coordinate3dRef ( size_t index) const
Returns
the coordinate set at index without copying it, or an empty array if there is no such set.

coordinate3d() hands back a copy of every atom position in the set, which is what reading a whole trajectory one set at a time should not pay for.

◆ clearCoordinate3d()

void clearCoordinate3d ( )

Clear coordinate sets (except the default set)

◆ estimateVelocities() [1/2]

void estimateVelocities ( )

Estimate velocities from the coordinate sets and timesteps.

Does nothing unless there is one timestep per coordinate set. The timesteps are taken as they are stored, so a conventional dynamics trajectory – coordinates in Angstrom, timesteps in picoseconds – gives velocities in Angstrom per picosecond, which is what the derived properties below assume.

Alongside the per-atom velocities this fills three per-coordinate-set properties, next to "energies" and "forces" in the data map:

  • "velocities": the mean atomic speed, in Angstrom / picosecond
  • "velocityDeviations": the standard deviation of those speeds
  • "temperatures": the instantaneous temperature, in Kelvin

◆ estimateVelocities() [2/2]

void estimateVelocities ( double timeStep)

Estimate velocities taking the coordinate sets to be timeStep apart, rather than reading the stored timesteps.

Most trajectory files do not record when each frame was written, so the spacing has to come from the caller instead. The stored timesteps are left untouched; everything else behaves as the overload above.

Parameters
timeStepthe interval between consecutive coordinate sets, in picoseconds.

◆ velocities()

Array< Vector3 > velocities ( int index) const

Get the velocities for the specified index.

◆ setVelocities()

bool setVelocities ( const Array< Vector3 > & velocities,
int index )

Set the velocities for the specified index.

Call updateVelocityProperties() once the last set is in to bring the derived per-coordinate-set properties up to date with them.

◆ updateVelocityProperties()

void updateVelocityProperties ( )

Fill the per-coordinate-set properties derived from the velocities – "velocities", "velocityDeviations" and "temperatures", described under estimateVelocities() above.

estimateVelocities() does this for the velocities it works out itself. Anything that supplies velocities of its own, through setVelocities(), should call this afterwards.

◆ clearVelocities()

void clearVelocities ( )

Clear all velocity sets.

◆ setTimeStep()

bool setTimeStep ( double timestep,
int index )

Timestep property is used when molecular dynamics trajectories are read

◆ forceVectors() [1/2]

const Array< Vector3 > & forceVectors ( ) const
Returns
a vector of forces for the atoms in the molecule.

◆ forceVectors() [2/2]

Array< Vector3 > & forceVectors ( )

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

◆ forceVector()

Vector3 forceVector ( Index atomId) const

Get the force of a single atom.

Parameters
atomIdThe index of the atom.
Returns
The force vector of the atom, or Vector3::Zero() if no force information has been set.

◆ setForceVectors()

bool setForceVectors ( const Core::Array< Vector3 > & forces)

Replace the current array of force vectors.

Parameters
forcesThe new coordinate array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setForceVector()

bool setForceVector ( Index atomId,
const Vector3 & force )

Set the 3D position of a single atom.

Parameters
atomIdThe index of the atom to modify.
forceThe new position of the atom.
Returns
True on success, false otherwise.

◆ residueCount()

Index residueCount ( ) const
Returns
The number of residues in the molecule.

◆ residueLabel()

std::string residueLabel ( Index residueIndex) const
Returns
Any custom label for the requested residue.
Parameters
residueIndexThe index of the residue.

◆ setResidueLabel()

bool setResidueLabel ( Index residueIndex,
const std::string & label )

Set the custom label of a single residue.

Parameters
residueIndexThe index of the residue to modify.
labelThe new label of the residue.
Returns
True on success, false otherwise.

◆ setResidueLabels()

bool setResidueLabels ( const Core::Array< std::string > & label)

Set all the residue labels in the molecule.

Parameters
labelThe new label array. Must be of length residueCount().
Returns
True on success, false otherwise.

◆ atomCount() [1/2]

Index atomCount ( ) const
Returns
The number of atoms in the molecule.

◆ atomCount() [2/2]

Index atomCount ( unsigned char atomicNumber) const
Parameters
atomicNumberThe atomic number to match on.
Returns
The number of atoms with the supplied atomic number.

◆ bondCount()

Index bondCount ( ) const
Returns
the number of bonds in the molecule.

◆ bondPair()

std::pair< Index, Index > bondPair ( Index bondId) const

Get the set of bonded atoms corresponding to bondId.

Parameters
bondIdThe index of the requested bond.
Returns
The bonded atom pair, represented as a pair of atom indices.

◆ setBondPairs()

bool setBondPairs ( const Array< std::pair< Index, Index > > & pairs)

Replace the current array of bonded atoms.

Parameters
pairsThe array.
Returns
True on success, false on failure.
Note
The bonded atoms are represented as a pair of bond indices.
If needed, the elements in pairs will be modified to ensure that the first atom index is less than the second.

◆ bondPairs()

const Array< std::pair< Index, Index > > & bondPairs ( ) const
Returns
a vector of pairs of atom indices of the bonds in the molecule.

◆ bondOrders()

const Array< unsigned char > & bondOrders ( ) const
Returns
a vector of the bond orders for the bonds in the molecule.

◆ graph()

const Graph & graph ( ) const
Returns
the graph for the molecule.

◆ atomicNumbers()

const Array< unsigned char > & atomicNumbers ( ) const
Returns
a vector of atomic numbers for the atoms in the molecule.

◆ atomicNumber()

unsigned char atomicNumber ( Index atomId) const

Get the atomic number for the requested atom.

Parameters
atomIdThe index of the atom.
Returns
The atomic number of the atom indexed at atomId, or Avogadro::InvalidElement if atomId is invalid.

◆ setBondOrders()

bool setBondOrders ( const Array< unsigned char > & orders)

Replace the current array of bond orders.

Parameters
ordersThe new array.
Returns
True on success, false on failure.

◆ setBondOrder()

bool setBondOrder ( Index bondId,
unsigned char order )

Set the order of a bond in the molecule.

Parameters
bondIdThe bond's index.
orderThe new order of the bond.
Returns
True on success, false on failure.

◆ hasCustomElements()

bool hasCustomElements ( ) const
Returns
True if custom elements exist in the molecule.
Note
Custom element atomic numbers lie between CustomElementMin and CustomElementMax.

◆ setBondPair()

bool setBondPair ( Index bondId,
const std::pair< Index, Index > & pair )

Set the bonded atoms for a bond.

Parameters
bondIdThe bond to modify.
pairThe new bond pair.
Returns
True on success, false otherwise.
Note
If needed, pair will be modified to ensure that the first atom index is less than the second.

◆ bondOrder()

unsigned char bondOrder ( Index bondId) const

Get the order of a bond.

Parameters
bondIdThe id of the bond.
Returns
The bond order.

◆ setAtomicNumbers()

bool setAtomicNumbers ( const Core::Array< unsigned char > & nums)

Replace the current array of atomic numbers.

Parameters
numsThe new atomic number array. Must be of length atomCount().
Returns
True on success, false otherwise.

◆ setAtomicNumber()

bool setAtomicNumber ( Index atomId,
unsigned char atomicNumber )

Set the atomic number of a single atom.

Parameters
atomIdThe index of the atom to modify.
atomicNumberThe new atomic number.
Returns
True on success, false otherwise.

◆ addConstraint() [1/2]

void addConstraint ( Real Value,
Index a,
Index b,
Index c = MaxIndex,
Index d = MaxIndex )

Freeze or unfreeze an atom for optimization

◆ addConstraint() [2/2]

void addConstraint ( Constraint & c)

Freeze or unfreeze an atom for optimization

◆ removeConstraint()

void removeConstraint ( Index a,
Index b,
Index c = MaxIndex,
Index d = MaxIndex )

Freeze or unfreeze an atom for optimization

◆ clearConstraints()

void clearConstraints ( )

Freeze or unfreeze an atom for optimization

◆ setConstraints()

void setConstraints ( const std::vector< Core::Constraint > & constraints)

Freeze or unfreeze an atom for optimization

◆ constraints() [1/2]

std::vector< Core::Constraint > & constraints ( )

Freeze or unfreeze an atom for optimization

◆ constraints() [2/2]

const std::vector< Core::Constraint > & constraints ( ) const

Freeze or unfreeze an atom for optimization

◆ setFrozenAtom()

void setFrozenAtom ( Index atomId,
bool frozen )

Freeze or unfreeze an atom for optimization

◆ frozenAtom()

bool frozenAtom ( Index atomId) const
Returns
whether the specified atom is frozen

◆ frozenAtomAxis()

bool frozenAtomAxis ( Index atomId,
int axis ) const
Parameters
atomIdThe index of the atom to check
axisThe axis to check (0 = x, 1 = y, 2 = z)
Returns
whether the specified axis of the specified atom is frozen

◆ setFrozenAtomAxis()

void setFrozenAtomAxis ( Index atomId,
int axis,
bool frozen )

Freeze or unfreeze X, Y, or Z coordinate of an atom for optimization

Parameters
atomIdThe index of the atom to modify.
axisThe axis to freeze (0, 1, or 2 for X, Y, or Z)
frozenTrue to freeze, false to unfreeze

◆ frozenAtomMask()

Eigen::VectorXd frozenAtomMask ( ) const
Returns
the frozen status of atoms (i.e., 3*N array of 1.0 or 0.0) 0.0 means the atom is frozen, 1.0 means the atom is not frozen. (i.e., multiply this mask with gradients to freeze atoms)

◆ scanCoordinates()

std::vector< Constraint > scanCoordinates ( ) const
Returns
the scan coordinates, skipping any malformed entry

◆ setScanCoordinates()

void setScanCoordinates ( const std::vector< Constraint > & coordinates)

Replace the scan coordinates.

Parameters
coordinatesThe coordinates to store. Only the atom indices are kept: a scan coordinate has no target value or force constant.

◆ addScanCoordinate()

void addScanCoordinate ( const Constraint & coordinate)

Add one scan coordinate, ignoring it if an equivalent one is already stored.

Parameters
coordinateThe coordinate to add

◆ composition()

std::map< unsigned char, size_t > composition ( ) const
Returns
a map of components and count.

◆ formulaComposition()

std::map< std::string, size_t > formulaComposition ( ) const
Returns
a map of element symbols (including isotopes like D, T, 13C) to their count. Handles unit cell fractional contributions for atoms at corners (1/8), edges (1/4), and faces (1/2).

◆ getAtomBonds()

Array< std::pair< Index, Index > > getAtomBonds ( Index index) const
Returns
the atom pairs for all bonds to the atom indexed at index.

◆ getAtomOrders()

Array< unsigned char > getAtomOrders ( Index index) const
Returns
the bond orders for all bonds to the atom indexed at index.

◆ removeBonds()

bool removeBonds ( Index atom)

Remove bonds to atom

◆ clearCalculatedResults()

void clearCalculatedResults ( )

Drop everything that was calculated from the structure – partial charges, forces, velocities, normal modes and spectra. Call this from any edit that changes which atoms or bonds exist: those results describe the molecule as it was, and after such an edit it is not that molecule.

Reindexing them instead would keep the arrays the right length while the numbers went on describing something that no longer exists, which is the worse failure because nothing looks wrong.

◆ copyDisplayStateFrom()

void copyDisplayStateFrom ( const Molecule & other)

Copy which display types are on (and their settings) from other, e.g. to keep Ball and Stick showing when this molecule is replaced by one freshly read from a file or script that has no display state of its own.

Copies the per-plugin enable flags, settings and loaded set, cloning the settings as the copy constructor does. The per-layer vectors are then fitted to this molecule's layer count: extra layers are dropped, and missing ones take the first layer's value so that every layer shows what the user had switched on. Layer assignment, visibility and locks are not touched.

◆ layerInfo()

std::shared_ptr< MoleculeInfo > layerInfo ( ) const
Returns
this molecule's layer state, shared with anything that needs it to outlive a single operation. Never null.

◆ boundingBox()

void boundingBox ( Vector3 & boxMin,
Vector3 & boxMax,
const double radius = 1.0 ) const

Calculate and return bounding box of the whole molecule or selected atoms only.

Parameters
boxMin[out] the minimum corner (first end of the box diagonal)
boxMax[out] the maximum corner (second end of the box diagonal)
radius[in] radius of a single sphere

Member Data Documentation

◆ m_elements

ElementMask m_elements
protected

Which elements this molecule contains (e.g., for force fields)


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