cif2cellことはじめ

# cif2cellの概要
[CIF2Cell download | SourceForge.net](https://sourceforge.net/projects/cif2cell/)
結晶構造のフォーマットであるcif(crystallographic Information File)から、第一原理計算コード(abinit, elk, vasp, pwscf他)の入力ファイル(原子配置の指定部分)を出力してくれる、pythonで書かれたアプリ。

# 一般ユーザー権限でインストール
ものは試しで一般ユーザー権限で出来る範囲でのインストールを試みる。
例として`cif2cell-1.2.10.tar.gz`を取ってきたとする。
`$ tar -zxvf cif2cell-1.2.10.tar.gz`で、展開し出来た`cif2cell-1.2.10`を`/home/user/sources`に移動。そのディレクトリに移動する。

## PyCiRWを一般ユーザー権限でインストール
実は、cif2cellをインストールするには、PyCiRWなるアプリが必要で、これはcif2cellのコードに同梱されている。`$ tar -zxvf PyCifRW-3.3.tar.gz`で展開してできる`PyCifRW-3.3`に移動する。

基本的には所謂`python setup.py install`でインストールされる類のもの。ただ、この手続きで管理者権限がないとファイル追加できない`/usr/lib64/python2.7/site-packages`にファイルを生成しようとするため、一工夫が必要。

### pythonで参照されるpathの確認
pythonを実行して、

```python
import sys
print(sys.path)
```
で、現在参照できるpathの確認をしよう。この中に`home/user/.local/lib/python2.7/site-packages`のような、一般ユーザーが編集できる箇所があれば、そこに入れることができる。但し、私は極度の潔癖でインストールしたものは、それとわかるように別に置いておきたいので、明確に入れる先を作ることにする。
### インストール用ディレクトリを作成してインストール
インストールする先を、`/home/user/opt/PyCifRW-3.3`とする。
のちに、インストールのprefixとして、このディレクトリを指定してインストールを試みると、適切なpathが設定されていないと怒られる。これは上で調べたpathの中に、これから入れるディレクトリに付随した箇所にpathが通っていないため。なので、適切にpathを追加することにする。
このpathの設定にはいくつか方法があるが、ここでは環境変数`PYTHONPATH`を設定することで解決することにする。

```bash
export PYTHONPATH=/home/user/opt/PyCifRW-3.3/lib64/python2.7/site-packages:$PYTHONPATH
```
で、環境変数`PYTHONPATH`が適切に設定される。このディレクトリはインストール前には存在していないが、これからインストールする先の下に先読みして`lib64/python2.7/site-packages`を補っておかないと、引き続くインストールのところでコケる。

```bash
python setup.py install --prefix=/home/user/opt/PyCifRW-3.3
```
で晴れてインストール終了。ソースのあるディレクトリにある`INSTALL`に、

```python
import CifFile
```
でインポートできれば、インストール成功とある。

多分だけど、これは`python setup.py install`を一般ユーザー権限で行うときにいつも使える手続きのように思う。
## cif2cellを一般ユーザー権限でインストール
ここまでくれば、晴れてcif2cellがインストールできる。cif2cellのソースがあるディレクトリに移って、

```bash
python setup.py install --prefix=/home/user/opt/cif2cell-1.2.10
```
でインストール完了。

cif2cellにpathを通しておくのは当然にして、

```bash
export PYTHONPATH=/home/user/opt/cif2cell-1.2.10/lib/python2.7/site-packages:$PYTHONPATH
```
が必要。これがないと、`cif2cell`の`from utils import *`のところでコケる。
PyCifRWインストールの時に指定したPYTHONPATHは、cif2cellの実行時にも引き続き指定しておく必要がある。

# cif2cellの使い方

## ベーシックな使い方
cif2cellの基本的なコマンドの使い方は

```bash
cif2cell *.cif -p abinit
```
で、elkやvaspでの入力ファイルを作りたい場合は`abinit`の個所を`elk`や`vasp`に変える。
出力ファイル名したい場合は

```bash
cif2cell *.cif -p abinit -o hoge.in
```
のように`-o`に引き続いて所望のファイル名を指定。

ソースコードの入っているディレクトリの`cifs`か`/home/user/opt/cif2cell-1.2.10/lib/sample_cifs`にcifの例が入っているので、すぐに実行できる。

## オプションの指定
オプションを指定することで、凝った使い方が出来る。例えば

```bash
cif2cell *.cif -p abinit --no-reduce
```
で、プリミティブではないセル(多分Bravais格子のこと)で入力ファイルを表示。

他のオプションは`$ cif2cell -h`で確認できるし、`/home/user/opt/cif2cell-1.2.10/lib/docs`に公式のマニュアルpdfがある。プリミティブセルから適当な大きさのsuper cellを作ったりなんかも出来るみたい(使ったことはない)。


# トラブルシューティング

## `*.cif`のあるディレクトリで`cif2cell`コマンドを実行するとコケる
`*.cif`のあるディレクトリで`cif2cell`コマンドを実行すると、以下のerrorを吐いてコケる。

```console
***Error: could not read ./4296217772-1-2.cif.
Something may be wrong with the CIF file, you can check it with the free IUCr CIF valitation tool at http://http://checkcif.iucr.org/
Traceback (most recent call last):
  File "/opt/cif2cell-1.2.10/bin/cif2cell", line 368, in <module>
    sys.stderr.write(e.value+"\n")
AttributeError: 'exceptions.ValueError' object has no attribute 'value'
```

cifファイルがあるのとは別のディレクトリで`cif2cell`を決めると、すんなり通る。こうならない書かれ方をしたcifもあるのかもしれないけれど。

# おまけ
## pwscf形式で出力してXCrySDenで表示
XCrySDenを使うと、結晶構造の可視化が容易にできたり、対応するBrillouin域のk空間のパスが容易に生成できたりする。
XCrySDenは、pyscf形式の入力ファイルを読み込めるので、こうした用途用にpwscfで出力もしておくと便利。

## cifってどこで手に入れるの？
「(物質名や化学式) cif」でググって探しても出てくる。
出所のわからないcifもなんだかｱﾚなので、私はいつもNIMSの[無機材料データベース (AtomWork) ](https://crystdb.nims.go.jp/)で探してくる。基本的に文献での報告値がベースなので、出所がわかるのが良い。
初めて計算する構造の結晶とかはcifをVESTAにいれてぐりぐり回して見たり、結晶のデータを直接論文から読み取って、VESTA経由でcifを生成したりして、コンシステンシーを確認する。
[ Materials Project ](https://materialsproject.org/)で調べてみるのもいいのかも(使ったことはない)。