Pymatgen:Cifファイルの読み込み・書き出し方法

この記事では材料分析ライブラリ「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の使い方をご覧ください。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Exit mobile version