tklib.tkcrystal.tkcif2pymatgen のソースコード

"""tkCIF.pyで読み込んだtkCrystalオブジェクトからpymatgenのStructureオブジェクトを生成するためのユーティリティモジュールです。

tkCrystalオブジェクトのデータ構造をpymatgenが扱うことができるStructureオブジェクトへと変換する機能を提供します。
これにより、tkCIF.pyで読み込んだ結晶構造データをpymatgenエコシステムで利用できるようになります。

:doc:`tkcif2pymatgen_usage`
"""
from pymatgen.core import Lattice, Structure, Species

[ドキュメント] def tkcrystal_to_pmg_structure(cry): """tkCrystalオブジェクトをpymatgenのStructureオブジェクトに変換します。 tkCIF.pyで読み込んだtkCrystalオブジェクトから、結晶の格子パラメータ、原子の種類、 およびその分率座標を抽出し、pymatgenのStructureオブジェクトとして再構築します。 部分占有率が設定されている原子サイトに対しても適切に対応し、 pymatgenのSpeciesオブジェクト形式で表現します(占有率が1.0に近い場合は元素名、 それ以外の場合は辞書形式 `{Element: occupancy}`)。 :param cry: tkCIF.pyで読み込まれたtkCrystalオブジェクト。 LatticeParameters()メソッドとAtomSiteList()メソッドを持ち、 それぞれ格子情報と原子サイト情報を提供する必要があります。 :returns: tkCrystalオブジェクトから生成されたpymatgen.core.Structureオブジェクト。 :rtype: pymatgen.core.Structure """ a, b, c, alpha, beta, gamma = cry.LatticeParameters() lattice = Lattice.from_parameters(a, b, c, alpha, beta, gamma) species = [] frac_coords = [] atom_sites = cry.AtomSiteList() for site in atom_sites: elem = site.AtomNameOnly() # 元素記号 (例: "Al") occ = site.Occupancy() # 部分占有率 pos = site.Position() # 分率座標 (x,y,z) # 部分占有を pymatgen の Species に反映 # occ=1.0 → Element("Al"), occ<1.0 → {Element("Al"): occ} if occ is None or occ >= 0.9999: sp = elem else: sp = {elem: occ} species.append(sp) frac_coords.append(pos) struct = Structure(lattice, species, frac_coords, coords_are_cartesian=False) return struct