Source code for neutronbraggedge.material_handler.retrieve_material_metadata

"""
This class will automatically retrieve the lattice parameter and the crystal structure of a given
element
"""
from .retrieve_metadata_table import RetrieveMetadataTable


[docs]class RetrieveMaterialMetadata(object): """ Retrieve the metadata for a given material This class retrieves the lattice parameter and the crystal structure of a given material. >>> from braggedge.material_handler.retrieve_material_metadata import RetrieveMaterialMetadata >>> retrieve_metadata = RetrieveMaterialMetadata("Si") >>> print ("Structure is: %s" %retrieve_metadata.crystal_structure) Structure is: FCC >>> print ("Lattice parameter is %.2f Angstroms" %retrieve_metadata.lattice) Lattice parameter is 5.43 Angstroms """ lattice = None crystal_structure = None def __init__(self, material=None, use_local_table=True): """Constructor that will automatically retrieve the metadata Args: material: mandatory string (ex: "Si") use_local_table: optional boolean. By default, a local table is used, but user can turn off the flag to retrieve data from web site (`<https://en.wikipedia.org/wiki/Lattice_constant>`) Exception: NameError: if no material is given """ if material is None: raise NameError("Please provide a material") self._material = material self.use_local_table = use_local_table self._retrieve_table() if not (material.lower() == 'all'): self._retrieve_metadata() def _retrieve_table(self): """retrieve the table """ metadata_table = RetrieveMetadataTable() self.table = metadata_table.get_table() def full_list_material(self): _list_material = self.table.index.values return _list_material def _retrieve_metadata(self): """retrieve the metadata ('lattice constant','crystal structure')""" try: _metadata = self.table.loc[self._material] except KeyError: raise KeyError("Material unknown") self._retrieve_lattice(_metadata) self._retrieve_crystal_structure(_metadata) def _retrieve_lattice(self, _metadata): self.lattice = float(_metadata[0]) def _retrieve_crystal_structure(self, _metadata): _full_crystal_str = _metadata[1] if 'FCC' in _full_crystal_str: _crystal_str = 'FCC' elif 'BCC' in _full_crystal_str: _crystal_str = 'BCC' else: raise NameError("Crystal Structure not supported yet!") self.crystal_structure = _crystal_str