Source code for neutronbraggedge.material_handler.retrieve_metadata_table
"""
This class will retrieve the table from the URL and reformat it to be able to
quickly retrieve the metadata for a given material
"""
#import os
import pandas as pd
import configparser
from ..config import config_file as config_config_file
from ..config import local_table as config_local_table
[docs]class RetrieveMetadataTable(object):
""" Metadata table retriever
This class retrieves the metadata table that will allow us to get the lattice
parameter and the crystal structure for a given material.
By default the program will retrieve the local version, but the web version can be retrieved
by using the local_version=False flag. In this case, the table is retrieved from the following
web page: `Lattice constant
<https://en.wikipedia.org/wiki/Lattice_constant>`.
>>> from braggedge.material_hanlder.retrieve_metadata_table import RetrieveMetadataTable
>>> retrieve_local_meta = RetrieveMetadataTable()
>>> _table = retrieve_local_meta.get_table()
>>> retrieve_url_meta = RetrieveMetadataTable()
>>> _table = retrieve_url_meta.get_table(use_local_table = False)
"""
def __init__(self, use_local_table=True):
self.use_local_table = use_local_table
if not use_local_table:
self._retrieve_url()
def _retrieve_url(self):
"""retrieve the default url defined in the top config file"""
self._config_file = config_config_file
config_obj = configparser.ConfigParser()
config_obj.read(self._config_file)
self.url = config_obj['DEFAULT']['material_metadata_url']
[docs] def retrieve_table(self):
"""retrieve the table that contain the material/lattice parameters....
by default, the local version is retrieved first, but the web version can
be selected instead by using False on use_local_table flag
"""
if self.use_local_table:
self.retrieve_table_local()
else:
self.retrieve_table_from_url()
[docs] def retrieve_table_local(self):
"""retrieve the local table"""
self._local_table_file = config_local_table
local_table = pd.read_csv(self._local_table_file)
_table = local_table.set_index("Material")
self.table = _table
[docs] def retrieve_table_from_url(self):
"""retrieve the table using the url defined in the config.cfg file"""
table_list = pd.read_html(self.url)
self.raw_table = table_list[0]
self.format_table_from_url()
[docs] def format_table_from_url(self):
"""reformat the table from the url to easily extrade the metadata"""
_table = self.raw_table
_table.columns = _table.values[0][:]
_table = _table[1:]
_table = _table.set_index('Material')
self.table = _table
[docs] def get_table(self):
"""return the table (via url or locally) according to flag used
Args:
use_local_table (boolean): get the local table or via the url defined in the config file (default True)
Returns:
Pandas table of material/lattice parameters ...
"""
self.retrieve_table()
return self.table