Source code for atsim.potentials.referencedata._reference_data

from ._data import reference_data, Element_Data


[docs]class Reference_Data_Exception(Exception): pass
[docs]class Unknown_Species_Exception(Reference_Data_Exception): pass
[docs]class Unknown_Property_Exception(Reference_Data_Exception): pass
[docs]class Reference_Data(object): """Class providing data about atomic species""" def __init__(self, extra_data = {}): """Create object for looking up reference data about atomic species. :param extra_data: Override defaults or provide additional data. This argument is a dictionary of dictionaries: `{SPECIES_A : SPECIES_DATA}` Where `SPECIES_DATA` maps property names to property values, e.g. `{ 'atomic_mass` : 1.234}`. """ self.extra_data = extra_data
[docs] def get(self, species, property_name): """Get a property value for a given species. :param species: Species label. :param property_name: Propety identifier. :returns: Property value for given combination of species and property name.""" species_dat = reference_data.get(species, None) if species_dat is None and not species in self.extra_data: raise Unknown_Species_Exception(species) elif species_dat is None and species in self.extra_data: species_dat = dict(self.extra_data[species]) else: species_dat = species_dat._asdict() species_dat.update(self.extra_data.get(species, {})) if not property_name in species_dat: raise Unknown_Property_Exception("Property '{}' not found for species '{}'".format(property_name, species)) return species_dat[property_name]