index | modules | gitlab | page source

# The Atom object

ASE defines a python class called `Atom` to setup and handle atoms in electronic structure and molecular simulations. From a python script, atoms can be created like this:

    >>> from ase import Atom
    >>> a1 = Atom('Si', (0, 0, 0))
    >>> a2 = Atom('H', (1.3, 0, 0), mass=2)
    >>> a3 = Atom(14, position=(0, 0, 0))  # same as a1

class `ase.atom.``Atom`(symbol='X', position=(0, 0, 0), tag=None, momentum=None, mass=None, magmom=None, charge=None, atoms=None, index=None)

  Class for representing a single atom.

  Parameters:

  symbol: str or int
    Can be a chemical symbol (str) or an atomic number (int).
  position: sequence of 3 floats
    Atomic position.
  tag: int
    Special purpose tag.
  momentum: sequence of 3 floats
    Momentum for atom.
  mass: float
    Atomic mass in atomic units.
  magmom: float or 3 floats
    Magnetic moment.
  charge: float
    Atomic charge.

The first argument to the constructor of an `Atom` object is the chemical symbol, and the second argument is the position in Å units (see `ase.units`). The position can be any numerical sequence of length three. The properties of an atom can also be set using keywords like it is done in the a2 and a3 examples above.

More examples:

    >>> a = Atom('O', charge=-2)
    >>> b = Atom(8, charge=-2)
    >>> c = Atom('H', (1, 2, 3), magmom=1)
    >>> print(a.charge, a.position)
    -2 [ 0.  0.  0.]
    >>> c.x = 0.0
    >>> c.position
    array([ 0.,  2.,  3.])
    >>> b.symbol
    'O'
    >>> c.tag = 42
    >>> c.number
    1
    >>> c.symbol = 'Li'
    >>> c.number
    3

If the atom object belongs to an Atoms object, then assigning values to the atom attributes will change the corresponding arrays of the atoms object:

    >>> from ase import Atoms
    >>> OH = Atoms('OH')
    >>> OH[0].charge = -1
    >>> OH.get_initial_charges()
    array([-1.,  0.])

Another example:

    >>> for atom in bulk:
    ...     if atom.symbol == 'Ni':
    ...         atom.magmom = 0.7  # set initial magnetic moment

The different properties of an atom can be obtained and changed via attributes (`position`, `number`, `tag`, `momentum`, `mass`, `magmom`, `charge`, `x`, `y`, `z`):

    >>> a1.position = [1, 0, 0]
    >>> a1.position
    [1, 0, 0]
    >>> a1.z = 2.5
    >>> a1.position
    [1, 0, 2.5]
    >>> a2.magmom = 1.0

That last line will set the initial magnetic moment that some calculators use (similar to the `set_initial_magnetic_moments()` method).

Note

The `position` and `momentum` attributes refer to mutable objects, so in some cases, you may want to use `a1.position.copy()` in order to avoid changing the position of `a1` by accident.

## Getting an Atom from an Atoms object

Indexing an `Atoms` object returns an `Atom` object still remembering that it belongs to the collective `Atoms`: Modifying it will also change the atoms object:

    >>> from ase.build import molecule
    >>> atoms = molecule('CH4')
    >>> atoms.get_positions()
    array([[ 0.      ,  0.      ,  0.      ],
           [ 0.629118,  0.629118,  0.629118],
           [-0.629118, -0.629118,  0.629118],
           [ 0.629118, -0.629118, -0.629118],
           [-0.629118,  0.629118, -0.629118]])
    >>> a = atoms[2]
    >>> a
    Atom('H', [-0.62911799999999996, -0.62911799999999996, 0.62911799999999996], index=2)
    >>> a.x = 0
    >>> atoms.get_positions()
    array([[ 0.      ,  0.      ,  0.      ],
           [ 0.629118,  0.629118,  0.629118],
           [ 0.      , -0.629118,  0.629118],
           [ 0.629118, -0.629118, -0.629118],
           [-0.629118,  0.629118, -0.629118]])

See also

`ase`:
  More information about how to use collections of atoms.
`ase.calculators`:
  Information about how to calculate forces and energies of atoms.

Documentation v: 3.19.0

Versions
  3.20.0b1 (development)
  3.19.0 (latest stable)