最終更新日:2026年10月16日
情報CrySPY v1.5.0以降では,同じ機能をコマンド > cryspy-extract-struc として使用できる.このページでは従来の単独スクリプトを説明する.
Link: CrySPY_utility/script/extract_struc.py
init_struc_data.pklやopt_struc_data.pklから構造ごとにcifファイルを出力するスクリプト.
ファイル出力せず,構造情報を画面にプリントすることも可能.
-iオプションでインデックス(構造ID)を(複数)指定できる.
-tオプションでエネルギーが低い順番に指定した構造数のcifファイルを出力可能.
-aオプションの場合は全ての構造をcifファイルに出力する.数が多い場合はディレクトリを作成してそこに移動してから実行したほうが良い.
-sオプションをつけると対称性(空間群)の情報を付けられる.ただし,セルや原子数が変わるので注意.
対称性の情をつける際,--toleranceオプションでtoleranceを変えられる(デフォルトは0.01).
-pオプションをつけるとファイル出力せずに,画面にプリントする.
gzipしたファイルもそのまま読み込み可能(e.g., opt_struc_data.pkl.gz).
更新履歴 2024 April 16: –tolerance option, gzip 2023 July 21: –print option 使い方 python3 extract_struc.py -h このスクリプトをPATHが通ったところにおけばpython3を省略できる
usage: extract_struc.py [ -h] [ -p] [ -a] [ -i [ INDEX ...]] [ -t TOP] [ -r] [ -s] [ --tolerance TOLERANCE] infile
positional arguments:
infile input file
options:
-h, --help show this help message and exit
-p, --print just print, e.g., extract_struc.py opt_struc_data.pkl -i 7 10 12 -ps
-a, --all_id all structures, e.g., extract_struc.py opt_struc_data.pkl -as
-i [ INDEX ...] , --index [ INDEX ...]
structure ID, e.g., extract_struc.py opt_struc_data.pkl -i 7 10 12 -s
-t TOP, --top TOP top k structures, e.g. ( k = 3) , extract_struc.py opt_struc_data.pkl -t 3 -s
-r, --rank add rank in file names, e.g., extract_struc.py opt_struc_data.pkl -t 3 -rs
-s, --symmetrized symmetrized structure, e.g., extract_struc.py opt_struc_data.pkl -i 7 10 12 -s
--tolerance TOLERANCE
tolerance for symmetrization ( default 0.01) , e.g., extract_struc.py opt_struc_data.pkl -i 0 1 -s --tolerance 0.01 例 プリント -pオプションは-s以外のオプションと組み合わせて使用することができる.
extract_struc.py -p opt_struc_data.pkl -i 0 1 ID 0
Full Formula ( Na8 Cl8)
Reduced Formula: NaCl
abc : 6.823618 6.823618 7.566454
angles: 90.000000 90.000000 96.650518
pbc : True True True
Sites ( 16)
# SP a b c
--- ---- -------- -------- --------
0 Na 0 0 1
1 Na 0 0 0.5
2 Na 0.704707 0.295293 0.75
3 Na 0.295293 0.704707 0.25
4 Na 0.5 0 1
5 Na 0.5 0 0.5
6 Na 0 0.5 0.5
7 Na 0 0.5 0
8 Cl 0.5 0.5 0
9 Cl 0.5 0.5 0.5
10 Cl 0.484753 0.515247 0.75
11 Cl 0.515247 0.484753 0.25
12 Cl 0.828247 0.171753 0.851096
13 Cl 0.171753 0.828247 0.351096
14 Cl 0.828247 0.171753 0.648904
15 Cl 0.171753 0.828247 0.148904
ID 1
Full Formula ( Na8 Cl8)
Reduced Formula: NaCl
abc : 8.145021 8.145021 4.324235
angles: 90.000000 90.000000 120.000000
pbc : True True True
Sites ( 16)
# SP a b c
--- ---- --------- --------- --------
0 Na 0.666667 0.333333 0.736206
1 Na 0.666667 0.333333 0.263794
2 Na 0.913147 0.086853 0.5
3 Na 0.913147 0.826295 0.5
4 Na 0.173705 0.086853 0.5
5 Na 0.77711 0.22289 0
6 Na 0.77711 0.55422 0
7 Na 0.44578 0.22289 0
8 Cl 0.027675 0.423376 0.5
9 Cl -0.423376 -0.395701 0.5
10 Cl 0.395701 -0.027675 0.5
11 Cl -0.423376 -0.027675 0.5
12 Cl 0.395701 0.423376 0.5
13 Cl 0.027675 -0.395701 0.5
14 Cl 0.333333 0.666667 0.5
15 Cl 0 0 0 構造ID extract_struc.py opt_struc_data.pkl -i 7 10 12 以下のファイルが出力される.
7.cif,10.cif,12.cif
対称性の情報ありの場合は-sオプションをつける.
extract_struc.py opt_struc_data.pkl -i 7 10 12 -s 2024 April 16 toleranceパラメーター(デフォルトは0.01)を指定する場合
extract_struc.py opt_struc_data.pkl -i 7 10 12 -s --tolerance 0.01 Top k 構造
情報rslt_data.pkl がインプット(init_struc_data.pklかopt_struc_data.pkl)と同じディレクトリに必要.
ここでは以下のようにファイルが存在して,
./data/pkl_data/opt_struc_data.pkl ./data/pkl_data/rslt_data.pkl cryspy_rslt_energy_ascの中身が下記のものを仮定すると
Spg_num Spg_sym Spg_num_opt Spg_sym_opt E_eV_atom Magmom Opt
9 110 I4_1cd 110 I4_1cd -1284.708037 NaN not_yet
16 4 P2_1 4 P2_1 -1284.693651 NaN done
97 92 P4_12_12 91 P4_122 -1284.692494 NaN done
8 57 Pbcm 57 Pbcm -1284.668504 NaN done
81 19 P2_12_12_1 19 P2_12_12_1 -1284.635684 NaN done
... トップk (ここではk=3) の構造は下記コマンドで出力できる.
extract_struc.py ./data/pkl_data/opt_struc_data.pkl -t 3 ここではrlst_data.pklは./data/pkl_data/の中に存在しなければならない.
9.cif, 16.cif, 97.cifというファイルが出力される.
-rオプションを使うと,ファイル名に順位を含めることができる.
extract_struc.py ./data/pkl_data/opt_struc_data.pkl -t 3 -r ファイル名は1_9.cif, 2_16.cif, 3_97.cifのようになる.
対称化されたcifの場合は下記のようにする.
extract_struc.py ./data/pkl_data/opt_struc_data.pkl -t 3 -rs 全構造 構造が多い場合はディレクトリを先に作った方が良い.
mkdir init_cifs
cd init_cifs
extract_struc.py /path/to/opt_struc_data.pkl -a 対称化する場合,
extract_struc.py /path/to/init_struc_data.pkl -as gzipファイル 2024 April 16 gzipされたファイル(拡張子が.gz)も読み込み可能:
extract_struc.py opt_struc_data.pkl.gz -i 0 1 -s print_pkl.py (legacy) 最終更新日:2026年10月16日
情報CrySPY v1.5.0以降では,pickleファイルの確認にコマンド > cryspy-print を使用できる.このページでは従来の単独スクリプトを説明する.表示内容はコマンド版と一部異なる.
data/pkl_data/にあるピクル化されたファイルをさっとチェックしたい時にprint_pkl.pyを使うと便利.
Usage python3 print_pkl.py xxxx.pkl PATHが通っているところにこのpythonスクリプトを置いているならpython3は省略可能.
Example print_pkl.py init_struc_data.pkl Number of structures: 10
dict_keys([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])print_pkl.py input_data.pkl [basic]
algo = RS
calc_code = ASE
tot_struc = 10
nstage = 1
njob = 5
jobcmd = zsh
jobfile = job_cryspy
[structure]
struc_mode = crystal
natot = 8
atype = ('Cu', 'Au')
nat = (4, 4)
mindist_factor = 1.0
vol_factor = 1.1
symprec = 0.01
spgnum = all
use_find_wy = False
[option]
stop_chkpt = 0
load_struc_flag = False
stop_next_struc = False
append_struc_ea = False
energy_step_flag = False
struc_step_flag = False
force_step_flag = False
stress_step_flag = False
[ASE]
kpt_flag = False
force_gamma = False
ase_python = ase_in.pyprint_pkl.py elite_struc.pkl Number of structures: 2
dict_keys([3, 6])print_pkl.py elite_fitness.pkl {3: -325.79973412221455, 6: -324.8381948581405}pos2pkl.py 2023年7月23日更新
あらかじめ用意した構造のテキストデータをinit_struc_data.pklに変換するスクリプト.
入力のデフォルトはinit_POSCARS形式.オプションでPOSCARやcifファイルなどのシングル構造データも変換可能.
出力はinit_struc_data.pkl.
すでに存在するinit_struc_data.pklに構造データを追加することもできる.
構造IDは考慮されず,新しく割り振られる.
原子数が異なる場合はエラーが出る.
init_struc_data.pklはCrySPYでシミュレーション開始時にロードすることが可能.
-fオプションで原子種の削除とソートが可能.このオプションを指定しないとpymatgenが勝手に電気陰性度の順番で並び替えるので注意!
使い方 usage: pos2pkl.py [ -h] [ -s [ SINGLE ...]] [ -f [ FILTER ...]] [ -p] [ infile ...]
positional arguments:
infile input file: init_POSCARS
options:
-h, --help show this help message and exit
-s [ SINGLE ...] , --single [ SINGLE ...]
input file: single structure file ( POSCAR, cif)
-f [ FILTER ...] , --filter [ FILTER ...]
filter ( sort) : remove species and sort
-p, --permit_diff_comp
flag for permitting different composition 例 init_POSCARS –> init_struc_data.pkl CrySPYで構造生成後に出力されるinit_POSCARSをスパコン等の別のマシンに移すような場合に使える.複数のファイルを変換可能.
python3 pos2pkl.py init_POSCARS pos2pkl.pyをPATHが通ったところにおけば,python3は省略可能.
Composition: Na8 Cl8
Converted. The number of structures: 4
Save init_struc_data.pkl 複数の入力ファイルの場合.
python3 pos2pkl.py init_POSCARS init_POSCARS2 init_POSCARS3 Composition: Na8 Cl8
Converted. The number of structures: 12
Save init_struc_data.pkl カレントディレクトリにすでにinit_struc_data.pklが存在し,それに追加する場合.
python3 pos2pkl.py init_POSCARS init_struc_data.pkl already exists.
Append to init_struc_data.pkl? [ y/n] : y
Load init_struc_data
Composition: Na8 Cl8
The number of structures: 12
Converted. The number of structures: 16
Save init_struc_data.pkl POSCAR or cif –> init_struc_data.pkl POSCARファイルやcifファイル等の構造が一つだけのデータも変換可能.-s/--singleオプションが必要.
python3 pos2pkl.py -s POSCAR test.cif Composition: Na8 Cl8
Converted. The number of structures: 2
Save init_struc_data.pkl init_POSCARS, POSCAR –> init_struc_data.pkl python3 pos2pkl.py init_POSCARS -s POSCAR Composition: Na8 Cl8
Converted. The number of structures: 5
Save init_struc_data.pkl
警告下記は間違い.init_POSCARSもシングル構造として取り扱われてしまう.
python3 pos2pkl.py -s POSCAR init_POSCARS Filter (Remove and Sort) 次のような組成のcifファイルを考える:Sr8 Co8 O20 X4.これはダミー原子(X4)を4原子含んでいる.
-f/--filterオプションは原子種を削除したり,ソートするのに使える.
cryspy.inのatypeと同じように指定する.
python3 pos2pkl.py -s Sr8Co8O20X4.cif -f Sr Co O Removed species: { 'X0+' }
Composition: Sr8 Co8 O20
Converted. The number of structures: 1
Save init_struc_data.pkl extract_struc.py を使えば,
init_struc_data.pklにどのように登録されたのか確認できる.
python3 extract_struc.py init_struc_data.pkl -pa ID 0
Full Formula ( Sr8 Co8 O20)
Reduced Formula: Sr2Co2O5
... -fオプションでソートもできる.
python3 pos2pkl.py -s Sr8Co8O20X4.cif -f O Co Removed species: { 'Sr' , 'X0+' }
Composition: O20 Co8
Converted. The number of structures: 1
Save init_struc_data.pkl kpt_check.py kpt_check.pyはkppvolを入力した際にkメッシュがどれくらいになるかをチェックすることができる.
POSCAR,CONTCAR,およびinit_struc_data.pklが読み込み可能.
pymatgenライブラリが必要.
初期構造を生成後に,kppvolの値をどれくらいにしたら良いか色々試すことができる.(下記の最後の例を参照)
使い方 このスクリプトをPATHが通ったところにおけばpython3を省略できる
usage: kpt_check.py [ -h] [ -w] [ -n NSTRUC] infile kppvol
positional arguments:
infile input file: POSCAR, CONTCAR, or init_struc_data.pkl
kppvol kppvol
options:
-h, --help show this help message and exit
-w, --write write KPOINTS
-n NSTRUC, --nstruc NSTRUC
number of structure to check 例 POSCARとkppvol a = 10.689217
b = 10.689217
c = 10.730846
Lattice vector
10.689217 0.000000 0.000000
0.000000 10.689217 0.000000
0.000000 0.000000 10.730846
kppvol: 100
k-points: [ 2, 2, 2] KPOINTSファイルの生成 POSCARおよびCONTCARを入力とする際は,-wオプションを使用することでKPOINTSファイルを生成できる.
kpt_check.py -w POSCAR 100 $ cat KPOINTS
pymatgen 4.7.6+ generated KPOINTS with grid density = 607 / atom
0
Monkhorst
2 2 2 init_struc_data.pklとkppvol init_struc_data.pklの初期構造データに任意のkppvolの値を適用した場合のkメッシュを調べることが可能.
デフォルト設定でははじめの5構造をチェックする.
-nを使うとチェックする構造数も変えられる.
kpt_check.py -n 3 init_struc_data.pkl 100 # ---------- 0th structure
a = 8.0343076893
b = 8.03430768936
c = 9.1723323373
Lattice vector
8.034308 0.000000 0.000000
-4.017154 6.957915 0.000000
0.000000 0.000000 9.172332
kppvol: 100
k-points: [ 3, 3, 3]
# ---------- 1th structure
a = 9.8451944096
b = 9.84519440959
c = 6.8764313585
Lattice vector
9.845194 0.000000 0.000000
-4.922597 8.526188 0.000000
0.000000 0.000000 6.876431
kppvol: 100
k-points: [ 3, 3, 4]
# ---------- 2th structure
a = 7.5760383679
b = 7.57603836797
c = 6.6507478296
Lattice vector
7.576038 0.000000 0.000000
-3.788019 6.561042 0.000000
0.000000 0.000000 6.650748
kppvol: 100
k-points: [ 4, 4, 4]