OccEvent#

class libcasm.occ_events.OccEvent(
self: OccEvent,
trajectories: collections.abc.Sequence[collections.abc.Sequence[OccPosition]] = [],
)#

Bases: pybind11_object

OccEvent represents an occupation event, for example the change in occupation due to a diffusive hop or molecular re-orientation. The occupation change is represented by occupant trajectories.

Example, 1NN A-Va exchange in an FCC prim:

import libcasm.xtal as xtal
from libcasm.xtal.prims import FCC as FCC_prim
from libcasm.occ_events import OccPosition, OccEvent

prim = FCC_prim(r=1.0, occ_dof=["A", "B", "Va"])

site1 = xtal.IntegralSiteCoordinate(sublattice=0, unitcell=[0, 0, 0])
site2 = xtal.IntegralSiteCoordinate(sublattice=0, unitcell=[1, 0, 0])

A_occ_index = 0
Va_occ_index = 2

A_initial_pos = OccPosition.molecule(site1, A_occ_index)
A_final_pos = OccPosition.molecule(site2, A_occ_index)
Va_initial_pos = OccPosition.molecule(site2, Va_occ_index)
Va_final_pos = OccPosition.molecule(site1, Va_occ_index)

occ_event = OccEvent([
    [A_initial_pos, A_final_pos],
    [Va_initial_pos, Va_final_pos]
])

Special Methods

The multiplication operator X = lhs * rhs can be used to apply libcasm.xtal.OccEventRep to OccEvent:

  • X=OccEvent, lhs=OccEventRep, rhs=OccEvent: Copy and transform the trajectories, returning the OccEvent of transformed trajectories. This transforms the sites involved, and also the occupation indices (for anisotropic occupants, or for sublattices with different allowed occupation lists) and atom positions (for molecular occupants).

Translate an OccEvent using operators +, -, +=, -=:

import numpy as np
from libcasm.occ_events import OccEvent

# event: OccEvent
translation = np.array([0, 0, 1])

# translate via `+=`:
event += translation

# translate via `-=`:
event -= translation

# copy & translate via `+`:
translated_event = event + translation

# copy & translate via `-`:
translated_event = event - translation

Additional methods:

  • Sort OccEvent by lexicographical order of trajectories using <, <=, >, >=, and compare using == and !=

  • for site in cluster: Iterate over sites (IntegralSiteCoordinate) in the cluster.

  • if site in cluster: Check if a cluster contains a site.

  • len(cluster): Get the number of sites in a cluster.

  • site = cluster[i]: Get the i-th site in a cluster (indices start at 0).

  • OccEvent may be copied with OccEvent.copy, copy.copy, or copy.deepcopy.

Constructor

Parameters:

trajectories (List[List[OccPosition]]=[]) – The occupant trajectories. Usage: trajectories[i_occupant][0] is the initial position of the i-th occupant, and trajectories[i_occupant][1] is the final position of the i-th occupant. Most methods currently support trajectories of length 2 only (an initial position and a final position).

Methods

cluster(…)

The cluster of sites involved in the OccEvent.

copy(…)

Returns a copy of the OccEvent.

copy_reverse(…)

Return a copy of the event with reversed trajectories

copy_sort(…)

Return a copy of the event with sorted trajectories

final_occupation(…)

Occupant indices on each site in the cluster, in the final positions.

from_dict(…)

Construct an OccEvent from a Python dict

initial_occupation(…)

Occupant indices on each site in the cluster, in the initial positions.

reverse(…)

Reverse event trajectories

size(…)

The number of trajectories.

sort(…)

Sort event trajectories

standardize(…)

Put event into standardized form with regard to permutation/reversal.

to_dict(…)

Represent the OccEvent as a Python dict

trajectories(…)

Return the event trajectories