Lineage Tracking¶
ASSYST automatically tracks the history of structures as they are generated and modified through the workflow.
This is achieved using UUIDs (Universally Unique Identifiers) stored in the structure’s info dictionary.
Keys in Atoms.info¶
Every structure managed by ASSYST will contain the following keys in its info attribute:
uuid: A unique identifier for the current structure.seed: The UUID of the initial structure from which this structure was derived.lineage: A list of UUIDs of all parent structures, in the order they were generated.
Workflow Integration¶
Initial Generation¶
When a structure is first generated using pyxtal() (or through sample_space_groups()), it is assigned a new UUID.
At this stage, the seed is set to the same UUID, and the lineage is empty.
Perturbations¶
Whenever a PerturbationABC (like Rattle or Stretch) is applied to a structure, a new UUID is generated.
The previous UUID is appended to the lineage list. The seed remains unchanged.
Relaxations¶
Similarly, the Relax.relax() method generates a new UUID for the relaxed structure and updates the lineage.
Example¶
For a practical demonstration of how these fields are updated, please refer to the Lineage Notebook.