Source code for aiida_atomistic.data.structure.utils_orm

from aiida.engine import calcfunction

from aiida_atomistic.data.structure.structure import StructureData
from aiida.orm import StructureData as LegacyStructureData

@calcfunction
[docs] def from_legacy_to_atomistic(legacy_structure: LegacyStructureData) -> StructureData: """Convert a legacy AiiDA StructureData to the new atomistic StructureData. Args: legacy_structure (LegacyStructureData): The legacy StructureData to convert. Returns: StructureData: The converted atomistic StructureData. Example:: >>> from aiida import orm >>> from aiida_atomistic.data.structure.utils_orm import from_legacy_to_atomistic >>> legacy_structure = orm.StructureData(cell=[[3.0, 0.0, 0.0], [0.0, 3.0, 0.0], [0.0, 0.0, 3.0]], pbc=[True, True, True]) >>> legacy_structure.append_atom(symbols='H', position=[0.0, 0.0, 0.0], mass=1.008, name='H1') >>> legacy_structure.append_atom(symbols='O', position=[0.0, 0.0, 1.0], mass=15.999, name='O1') >>> # Convert to atomistic StructureData, without storing provenance (for testing purposes; default is True) >>> atomistic_structure = from_legacy_to_atomistic(legacy_structure, metadata={'store_provenance': False}) >>> print(atomistic_structure) """ if not isinstance(legacy_structure, LegacyStructureData): raise TypeError(f'Expected a LegacyStructureData, got {type(legacy_structure)}') legacy_dict = { 'pbc': legacy_structure.pbc, 'cell': legacy_structure.cell, 'sites': [ { 'symbol': legacy_structure.get_kind(site.kind_name).symbol, 'mass': legacy_structure.get_kind(site.kind_name).mass, 'position': site.position, 'kind_name': site.kind_name, 'weight': legacy_structure.get_kind(site.kind_name).weights, } for site in legacy_structure.sites ] } return StructureData(**legacy_dict)