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