この記事では材料分析ライブラリ「Pymatgen」を用いたcifファイルの読み込み方を解説します。
※この記事はPymatgenの使用法・実例をまとめたPymatgenの使い方の一部です。
cifファイルを構造として読み込む
読み込みはpymatgen.io.cif.CifParserを使います。以下使用例。
from pymatgen.io.cif import CifParser
parser = CifParser("./BaTiO3.cif")
structure = parser.get_structures()[0]
※./BaTiO3.cifがあると仮定した場合です。
parserはcifファイルから情報を抜き出すオブジェクトです。基本的にStructureクラスに変換して使うことが多いと思います。
上記の例でいうstructureです。
このオブジェクトに様々な操作を施し、構造を変え、新しいcifとして保存していきます。
小技:ファイル選択ダイアログを開いて直感的にファイルを選ぶ
Python標準ライブラリであるtkinterを使うことで、エクスプローラーを表示してファイルを選べます。
import os, tkinter, tkinter.filedialog, tkinter.messagebox
# ファイル選択ダイアログの表示
root = tkinter.Tk()
root.withdraw()
fTyp = [("","*")]
iDir = os.path.abspath(os.path.dirname(r"C:\Users\Cutma\Desktop"))
tkinter.messagebox.showinfo('cif file selection','select a cif file')
file = tkinter.filedialog.askopenfilename(filetypes = fTyp,initialdir = iDir)
parser = CifParser(file)
structure = parser.get_structures()[0]
選んだファイルのパスがfileに入るので、上記のCifparserでCifParser(file)とすれば選んだcifファイルが処理されます
空間群を取得する
空間群取得にはStructureクラスのget_space_group_info()を用います。
## 空間群を算出して取得
print(structure.get_space_group_info())

今回は試しに直方晶系のCaTiO3のcifを解析してみました。
きちんと空間群の情報が出ています。
置換する
pymatgenであるサイトを置換するのは簡単です。

こちらが最初の構造。4つのサイトがCaで占められています。
置換には以下のコードを用います。
#1番目のサイトをBaで置換する
structure.replace(1,"Ba")

すると、2番目のサイトがBaになりましたね。replaceメソッドで指定するサイト番号は0から始まるので、このようにずれが生じます。
cifファイルとして書き出す
置換したcifファイルを書き出してみましょう。
## structureファイルをcifに出力
structure.to(fmt="cif", filename="./strain_structure.cif")
filenameにパスを指定してあげれば、その名前で保存されます。
代わりに保存パスをエクスプローラーで指定したい場合は、以下のコードを実行してください。
file = tkinter.filedialog.asksaveasfile(filetypes=[('cif Files','.cif')],defaultextension=".cif")
structure.to(fmt="cif", filename=file)

無事に置き換わった構造が得られました。
他のpymatgeの使い方
その他のPymatgenの使用法についてはPymatgenの使い方をご覧ください。
この記事では材料分析ライブラリ「Pymatgen」を用いたcifファイルの読み込み方を解説します。
※この記事はPymatgenの使用法・実例をまとめたPymatgenの使い方の一部です。
目次
cifファイルを構造として読み込む
読み込みは
pymatgen.io.cif.CifParserを使います。以下使用例。※
./BaTiO3.cifがあると仮定した場合です。parserはcifファイルから情報を抜き出すオブジェクトです。基本的にStructureクラスに変換して使うことが多いと思います。上記の例でいう
structureです。このオブジェクトに様々な操作を施し、構造を変え、新しいcifとして保存していきます。
小技:ファイル選択ダイアログを開いて直感的にファイルを選ぶ
Python標準ライブラリである
tkinterを使うことで、エクスプローラーを表示してファイルを選べます。選んだファイルのパスが
fileに入るので、上記のCifparserでCifParser(file)とすれば選んだcifファイルが処理されます空間群を取得する
空間群取得には
Structureクラスのget_space_group_info()を用います。今回は試しに直方晶系のCaTiO3のcifを解析してみました。
きちんと空間群の情報が出ています。
置換する
pymatgenであるサイトを置換するのは簡単です。

こちらが最初の構造。4つのサイトがCaで占められています。
置換には以下のコードを用います。
すると、2番目のサイトがBaになりましたね。replaceメソッドで指定するサイト番号は0から始まるので、このようにずれが生じます。
cifファイルとして書き出す
置換したcifファイルを書き出してみましょう。
filenameにパスを指定してあげれば、その名前で保存されます。
代わりに保存パスをエクスプローラーで指定したい場合は、以下のコードを実行してください。
無事に置き換わった構造が得られました。
他のpymatgeの使い方
その他のPymatgenの使用法についてはPymatgenの使い方をご覧ください。