Structure Database Module#
Implements StructureDB: a minimalist SQLite
database for storing SmactStructure-compatible
POSCAR files.
Tools for database interfacing for high throughput IO.
- class smact.structure_prediction.database.StructureDB(db: str)[source]#
Bases:
objectSQLite Structure Database interface.
Acts as a context manager for database interfacing and wraps several useful SQLite commands within methods.
Attributes:#
db: The database name. conn: The database connection. Only open when
used as a context manager.
- cur: The database connection cursor. Only usable
when class implemented as context manager.
Examples:#
Connecting to a database in memory:
>>> DB = StructureDB(":memory:") >>> with DB as c: ... _ = c.execute("CREATE TABLE test (id, val)") ... c.execute("SELECT * FROM test").fetchall() [] >>> DB.cur.execute("SELECT * FROM test").fetchall() Traceback (most recent call last): ... sqlite3.ProgrammingError: Cannot operate on a closed database.
- add_mp_icsd(table: str, mp_data: list[dict[str, pmg_Structure | str]] | None = None, mp_api_key: str | None = None) int[source]#
Add a table populated with Materials Project-hosted ICSD structures.
Note:#
This is very computationally expensive for large datasets and will not likely run on a laptop. If possible, download a pre-constructed database.
Args:#
table (str): The name of the table to add. mp_data: The Materials Project data to parse. If this is None, data
will be downloaded. Downloading data needs mp_api_key to be set.
- mp_api_key (str): A Materials Project API key. Only needed if mp_data
is None.
Returns:#
The number of structs added.
- add_struct(struct: SmactStructure, table: str) None[source]#
Add a SmactStructure to a table.
Args:#
struct: The
SmactStructureto add. table: The name of the table to add the structure to.
- add_structs(structs: Sequence[SmactStructure | None], table: str, commit_after_each: bool = False) int[source]#
Add several SmactStructures to a table.
Args:#
structs: Iterable of
SmactStructures to add to table. table: The name of the table to add the structs to. commit_after_each (bool, optional): Whether to commit the additionafter each structure is added. This is useful when adding a large number of structures over a long timeframe, as it ensures some structures are added, even if the program terminates before completion. Defaults to False.
Returns:#
The number of structures added.
- add_table(table: str) None[source]#
Add a table to the database.
Args:#
table: The name of the table to add
- get_structs(composition: str, table: str) list[SmactStructure][source]#
Get SmactStructures for a given composition.
Args:#
- composition: The composition to search for.
See
SmactStructure.composition().
table: The name of the table in which to search.
Returns:#
A list of
SmactStructures.
- get_with_species(species: list[tuple[str, int]], table: str) list[SmactStructure][source]#
Get SmactStructures containing given species.
Args:#
species: A list of species as tuples, in (element, charge) format. table: The name of the table from which to get the species.
Returns:#
A list of
SmactStructures in the table that contain the species.
- smact.structure_prediction.database.parse_mprest(data: dict[str, pmg_Structure | str], determine_oxi: str = 'BV') SmactStructure | None[source]#
Parse MPRester query data to generate structures.
Args:#
- data: A dictionary containing the keys ‘structure’ and
‘material_id’, with the associated values.
- determine_oxi (str): The method to determine the assignments oxidation states in the structure.
Options are ‘BV’, ‘comp_ICSD’,’both’ for determining the oxidation states by bond valence, ICSD statistics or trial both sequentially, respectively.
Returns:#
An oxidation-state-decorated
SmactStructure.