Source code for pymatgen.db.alchemy.transmuters
#!/usr/bin/env python
"""
This module implements a version of pymatgen's Transmuter to generate
TransformedStructures from DB data sources. They enable the
high-throughput generation of new structures and input files.
"""
__author__ = "Shyue Ping Ong"
__copyright__ = "Copyright 2012, The Materials Project"
__version__ = "0.1"
__maintainer__ = "Shyue Ping Ong"
__email__ = "shyue@mit.edu"
__date__ = "Mar 4, 2012"
import datetime
from pymatgen.alchemy.materials import TransformedStructure
from pymatgen.alchemy.transmuters import StandardTransmuter
[docs]class QeTransmuter(StandardTransmuter):
"""
The QeTransmuter uses a QueryEngine to retrieve and generate new structures
from a database.
"""
def __init__(self, queryengine, criteria, transformations, extend_collection=0, ncores=None):
"""Constructor.
Args:
queryengine:
QueryEngine object for database access
criteria:
A criteria to search on, which is passed to queryengine's
get_entries method.
transformations:
New transformations to be applied to all structures
extend_collection:
Whether to use more than one output structure from one-to-many
transformations. extend_collection can be a number, which
determines the maximum branching for each transformation.
ncores:
Number of cores to use for applying transformations.
Uses multiprocessing.Pool
"""
entries = queryengine.get_entries(criteria, inc_structure=True)
source = f"{queryengine.host}:{queryengine.port}/{queryengine.database_name}/{queryengine.collection_name}"
def get_history(entry):
return [
{
"source": source,
"criteria": criteria,
"entry": entry.as_dict(),
"datetime": datetime.datetime.utcnow(),
}
]
transformed_structures = [
TransformedStructure(entry.structure, [], history=get_history(entry)) for entry in entries
]
StandardTransmuter.__init__(
self,
transformed_structures,
transformations=transformations,
extend_collection=extend_collection,
ncores=ncores,
)