首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pymatgen:如何将查询结果转换为结构

Pymatgen:如何将查询结果转换为结构
EN

Stack Overflow用户
提问于 2019-10-09 21:11:06
回答 1查看 344关注 0票数 0

我们有现有的代码来获取许多材料(>60,000)的一些材料属性。

代码语言:javascript
复制
from pymatgen import MPRester
mpr = MPRester(api_key="")
criteria={"nelements":{'$lt':4}}
properties=["pretty_formula","cif","material_id", "formation_energy_per_atom", "band_gap"]

c = mpr.query(criteria=criteria,properties=properties)

但对于这个项目,我们需要特定形式的信息,即结构信息。我可以通过分别为每个材质ID调用它们来轻松地获得这些结构:

代码语言:javascript
复制
structures = []
for mid in mid_list:
    structures.append(mpr.get_structure_by_material_id(mid))

它在matproj.py中调用此函数:

代码语言:javascript
复制
    def get_structure_by_material_id(self, material_id, final=True,
                                     conventional_unit_cell=False):
        """
        Get a Structure corresponding to a material_id.

        Args:
            material_id (str): Materials Project material_id (a string,
                e.g., mp-1234).
            final (bool): Whether to get the final structure, or the initial
                (pre-relaxation) structure. Defaults to True.
            conventional_unit_cell (bool): Whether to get the standard
                conventional unit cell

        Returns:
            Structure object.
        """

问题是,这需要很长时间(>4小时),有时会在调用API的过程中卡住。

有没有办法避免调用API 6万次,而是转换初始查询结果?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-15 16:34:56

您不需要查询每个单独的mpid。您的第一个代码块已经查询了所有物料的"cif"信息!

您所需要做的就是使用PyMatGen将cif字符串转换为结构:

代码语言:javascript
复制
from pymatgen.io.cif import CifParser
structures = []
for material in c:
    structures.append(CifParser.from_string(material["cif"]).get_structures()[0])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58304957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档