Combine and split

Combining two ChemicalSystems

ChemicalSystem.add_other(other: ChemicalSystem) None

Merges another ChemicalSystem into this one.

The number of atoms of self increases by the number of atoms of other. All atomic coordinates, properties and bonds between atoms will be kept. The total charge of other will be added to the total charge of self.

The regions of each atom do not change in the process. Regions with the same name in self and other are merged.

Systems with a lattice can only be merged with systems having a compatible lattice or no lattice at all. Lattices compatibility is checked with the lattice.is_close() method. If both systems have a lattice, and the lattice is compatible but not exactly the same, the lattice of the original system (self) is kept. If only one side has a lattice, that side determines the lattice of the result.

If both sides have a compatible lattice and bonds, merging them is only supported if either both or none of the two have the lattice displacements of the bonds set. If one side has lattice displacements, and the other does not, a ChemicalSystemError is raised.

ChemicalSystem.__iadd__(arg0: ChemicalSystem) ChemicalSystem

Merges another ChemicalSystem into this one.

Note that lhs += rhs is just the operator version of lhs.add_other(rhs). See ChemicalSystem.add_other for details about merging systems.

ChemicalSystem.__add__(arg0: ChemicalSystem) ChemicalSystem

Creates a new ChemicalSystem by merging two others.

Note that C = A + B is equivalent to C = copy(A); C.add_other(B). See ChemicalSystem.add_other for details about merging systems.

Splitting of ChemicalSystems into parts

ChemicalSystem.extract_atoms(atom_indices: ArrayLike) ChemicalSystem

Returns a new system build from a subset of atoms.

Bonds within the subset will be preserved, but bonds to atoms not extracted will disappear. The returned system will have the same lattice as the original and a total charge of zero. Atomic attributes and regions of the extracted atoms are preserved, but the returned system does not have any selected atoms.

ChemicalSystem.split(part_indices: ArrayLike) List[ChemicalSystem]

Splits the system into parts and returns a list of these parts as separate systems.

Accepts a num_atoms long sequence, assigning the atoms of the system to the parts. The length of the returned list of parts is max(part_indices)+1.

Example: for a 6 atom system and a part_indices of [0, 0, 0, 1, 1, 1] a list of two systems will be returned. The system will contain the first three atoms of the original, and the second system the other three atoms.

The returned systems will have the same lattice as the original and a total charge of zero. Atomic attributes and regions are preserved, but the returned systems do not have any selected atoms.