sisl.Atoms
- class sisl.Atoms(atoms: AtomsLike = 'H', na: int | None = None)
Bases:
object
Efficient collection of
Atom
objectsA container object for
Atom
objects in a specific order. No twoAtom
objects will be duplicated and indices will be used to determine whichAtom
any indexable atom corresponds to. This is convenient when having geometries with millions of atoms because it will not duplicate theAtom
object, only a list index.- Parameters:
atoms – atoms to be contained in this list of atoms If a str, or a single
Atom
it will be the only atom in the resulting class repeated na times. If a list, it will create all unique atoms and retain these, each item in the list may a single argument passed to theAtom
or a dictionary that is passed toAtom
, see examples.na – total number of atoms, if
len(atoms)
is smaller than na it will be repeated to match na.
Examples
Creating an atoms object consisting of 5 atoms, all the same.
>>> atoms = Atoms("H", na=5)
Creating a set of 4 atoms, 2 Hydrogen, 2 Helium, in an alternate ordere
>>> Z = [1, 2, 1, 2] >>> atoms = Atoms(Z) >>> atoms = Atoms([1, 2], na=4) # equivalent
Creating individual atoms using dictionary entries, two Hydrogen atoms, one with a tag H_ghost.
>>> Atoms([dict(Z=1, tag="H_ghost"), 1])
Methods
add
(other)Append other to this list of atoms and return the appended version
append
(other)Append other to this list of atoms and return the appended version
copy
()Return a copy of this atom
equal
(other[, R])True if the contained atoms are the same in the two lists (also checks indices)
formula
([system])Return the chemical formula for the species in this object
group_atom_data
(data[, axis])Group data for each atom based on number of orbitals
hassame
(other[, R])True if the contained atoms are the same in the two lists
index
(atom)Return the indices of the atom object
insert
(index, other)Insert other atoms into the list of atoms at index
iter
([species])Loop on all atoms
maxR
([all])The maximum radius of the atoms
orbital
(io)Return an array of orbital of the contained objects
prepend
(other)reduce
([inplace])Returns a new
Atoms
object by removing non-used atomsremove
(atoms)Remove a set of atoms
reorder
([inplace])Reorders the atoms and species index so that they are ascending (starting with a species that exists)
repeat
(reps)Repeat this atom object
replace
(index, atom)Replace all atomic indices
index
with the atomatom
(in-place)replace_atom
(atom_from, atom_to)Replace all atoms equivalent to atom_from with atom_to (in-place)
reverse
([atoms])Returns a reversed geometry
scale
(scale)Scale the atomic radii and return an equivalent atom.
specie_index
(atom)Return the species index of the atom object
species_index
(atom)Return the species index of the atom object
sub
(atoms)Return a subset of the list
swap
(atoms1, atoms2)Swaps atoms by index
swap_atom
(a, b)Swap species index positions
tile
(reps)Tile this atom object
Attributes
Array of atomic numbers
List of unique atoms in this group of atoms
First orbital of the corresponding atom in the consecutive list of orbitals
Last orbital of the corresponding atom in the consecutive list of orbitals
Array of masses of the contained objects
Total number of orbitals in this list of atoms
Number of different species
Number of different species
Array of orbitals of the contained objects
Initial charge per atom
List of atomic species
List of atomic species
- add(other: Atom | Atoms) Atoms
Append other to this list of atoms and return the appended version
- Parameters:
other – new atoms to be added
- Returns:
Atoms
– merging of this objects atoms and the other objects atoms.
- append(other: Atom | Atoms) Atoms
Append other to this list of atoms and return the appended version
- Parameters:
other – new atoms to be added
- Returns:
Atoms
– merging of this objects atoms and the other objects atoms.
- equal(other, R=True)[source]
True if the contained atoms are the same in the two lists (also checks indices)
- Parameters:
See also
hassame
only check whether the two atoms are contained in both
- formula(system='Hill')[source]
Return the chemical formula for the species in this object
- Parameters:
system (
{"Hill"}
, optional) – which notation system to use Is not case-sensitive
- group_atom_data(data, axis=0)[source]
Group data for each atom based on number of orbitals
This is useful for grouping data that is orbitally resolved. This will return a list of length
len(self)
and with each item having the sub-slice of the data corresponding to the orbitals on the given atom.Examples
>>> atoms = Atoms([Atom(4, [0.1, 0.2]), Atom(6, [0.2, 0.3, 0.5])]) >>> orb_data = np.arange(10).reshape(2, 5) >>> atoms.group_data(orb_data, axis=1) [ [[0, 1], [2, 3]], [[4, 5, 6], [7, 8, 9]] ]
- Parameters:
data (
numpy.ndarray
) – data to be groupedaxis (
int
, optional) – along which axis one should split the data
- hassame(other, R=True)[source]
True if the contained atoms are the same in the two lists
Notes
This does not necessarily mean that the order, nor the number of atoms are the same.
- Parameters:
See also
equal
explicit check of the indices and the contained atoms
- insert(index: sisl.typing.SimpleIndex, other: Atom | Atoms) Atoms
Insert other atoms into the list of atoms at index
- iter(species=False)[source]
Loop on all atoms
This iterator may be used in two contexts:
species
isFalse
, this is the slowest method and will yield theAtom
per contained atom.species
isTrue
, which yields a tuple of (Atom, list) wherelist
contains all indices of atoms that has theAtom
species. This is much faster than the first option.
- Parameters:
species (
bool
, optional) – IfTrue
loops only on different species and yields a tuple of (Atom, list) Else yields the atom for the equivalent index.
- maxR(all: bool = False)[source]
The maximum radius of the atoms
- Parameters:
all (
bool
) – determine the returned maximum radii. If True is passed an array of all atoms maximum radii is returned (array). Else, if False the maximum of all atoms maximum radii is returned (scalar).
- reorder(inplace: bool = False)[source]
Reorders the atoms and species index so that they are ascending (starting with a species that exists)
- Parameters:
inplace – whether the re-order is done in-place
- replace(index, atom)[source]
Replace all atomic indices
index
with the atomatom
(in-place)This is the preferred way of replacing atoms in geometries.
- replace_atom(atom_from: Atom, atom_to: Atom)[source]
Replace all atoms equivalent to atom_from with atom_to (in-place)
I.e. this is the preferred way of adapting all atoms of a specific type with another one.
If the two atoms does not have the same number of orbitals a warning will be raised.
- Parameters:
- Raises:
KeyError – if atom_from does not exist in the list of atoms
UserWarning – if the atoms does not have the same number of orbitals.
- reverse(atoms=None)[source]
Returns a reversed geometry
Also enables reversing a subset of the atoms.
- scale(scale: float) Atoms
Scale the atomic radii and return an equivalent atom.
- Parameters:
scale – the scale factor for the atomic radii
- specie_index(atom)
Return the species index of the atom object
- property Z
Array of atomic numbers
- property atom
List of unique atoms in this group of atoms
- property firsto
First orbital of the corresponding atom in the consecutive list of orbitals
- property lasto
Last orbital of the corresponding atom in the consecutive list of orbitals
- property mass
Array of masses of the contained objects
- property nspecie
Number of different species
- property nspecies
Number of different species
- property orbitals
Array of orbitals of the contained objects
- property q0
Initial charge per atom
- property specie
List of atomic species
- property species
List of atomic species