# cif_read.py の技術解説

以下は、Python 言語で書かれた cif_read.py の仕様を要約したドキュメントです。コードの動作や動作環境、実行時に得られる出力について、手順付きで整理しています。

---

## 1. プログラムの動作 (Overview)

- CIF ファイルを読み込み、結晶構造データをパースします。
- 非対称単位 (asymmetric unit) から原子位置を展開して実空間配置を作成し、関連する物性情報（密度、原子密度など）を計算します。
- 超格子 (superlattice) を作成して、さらなる展開原子サイトを生成します。
- 解析結果を標準出力に表示しつつ、ログファイルにも出力します。最終的には、プログラム終了前に確認用の待機プロンプトを表示します（ENTER キーで終了）。
- 主要な処理は以下の順で進みます。
  1. CIF ファイルの読み込み (ReadCIF)
  2. 結晶情報の取得と表示 (GetCrystal, PrintInf など)
  3. 密度関連の計算 (Density, AtomDensity など)
  4. 超格子の作成と展開原子サイトの出力
  5. プログラム終了時に終了待機

- 実行時の出力は、標準出力とログファイルの両方へ書かれます。ログファイル名は infile 名を元に生成され、ディレクトリとファイル名の組み合わせに従って作成されます。

---

## 2. 必要な非標準ライブラリとインストール方法

このスクリプトは、以下の外部ライブラリ（非標準ライブラリ）を前提として動作します。

- tklib（およびそのサブモジュール）
  - tkFile
  - tkutils（ terminate, pint, pfloat, getarg, getintarg, getfloatarg など）
  - tkapplication
  - tkcrystal.tkcif
  - tkcrystal.tkcrystal
  - tkcrystal.tkatomtype
- numpy
- csv（標準ライブラリだが、import されている）

インストール手順の例
- Python と pip がインストールされている前提

1) numpy のインストール
- pip を使って numpy をインストールします。
  - Windows/macOS/Linux 共通:
    - pip install numpy
  - あるいは conda を使っている場合は:
    - conda install numpy

2) tklib の入手とインストール
- tklib は本プログラムにとって必須のカスタムライブラリです。公開リポジトリがある場合はそこからインストールします。以下は想定される手順の例です。
  - git リポジトリから clone:
    - git clone <tklib-repo-url>
  - もしくは tarball を展開
  - 環境変数 PYTHONPATH に tklib のパスを追加:
    - export PYTHONPATH=/path/to/tklib:$PYTHONPATH
  - あるいは Python の相対インストール手順（setup.py 等がある場合）:
    - cd /path/to/tklib
    - python setup.py install

3) 依存関係の整理
- tklib が正しく機能するには、追加の依存モジュールが必要になる場合があります。公式ドキュメントに従って追加インストールしてください。

注意
- tklib は本プログラム専用のローカルライブラリと思われます。公開リポジトリ名・入手先が分かれば、そちらに合わせた明示的なインストール手順を追記します。
- 本コードは Python の標準ライブラリ（os, sys, shutil, glob, csv, pprint など）と numpy を使用します。

---

## 3. 必要な入力ファイル

- infile の CIF ファイル
  - デフォルト値: test.cif
  - 実行時にコマンドライン引数として infile を渡すことが可能です。
- CIF ファイルは結晶情報を含むテキストファイルであり、以下のようなデータを含む想定です（例示的な要素）:
  - 結晶系・格子定数・対称性情報
  - 原子種リスト（AtomType）
  - 非対称単位内の原子サイト（AsymmetricAtomSite）
  - その他、格子や対称操作の情報

- CIF ファイルは正しくパースできるフォーマットであることが前提です。読み込み失敗時はエラーメッセージと共に終了します。

---

## 4. 実行後に生成される出力ファイル

- ログファイル
  - ファイル名は infile のパスを基に生成され、テンプレートとして ["{dirname}", "{filebody}-out.txt"] が使われます。
  - 実行中に以下を出力します:
    - "Open logfile [logfile]"
    - 実行時の各種情報（infile、single、findvalidstructure、debug など）
    - CIF 読み込み・結晶情報の表示
    - 密度関連情報（Density、AtomDensity などの表示）
    - 展開後の原子サイト情報、超格子情報など
  - terminate() が呼ばれると、出力が終わってから「Usage」表示とともに待機プロンプトが表示され、ENTER 押下で終了します。

- 標準出力
  - スクリプト実行時の進行状況・計算結果・デバッグ情報がターミナルにも表示されます。

- 出力の具体例
  - CIF ファイルの読み込みメッセージ
  - 確認用の情報表示（化学種、原子位置、占有率、対称性情報など）
  - Density の値、原子密度（AtomDensity）など
  - 超格子作成後の格子パラメータと展開原子の一覧

- 注意
  - 現在の実装では、最終的に terminate() により対話的に終了します。自動化したい場合は terminate の呼び出しを省略する必要があります。

---

## 5. コマンドラインでの使用例 (Usage)

以下は、実行時の基本的な使い方と、実例です。

- 基本形
  - python cif_read.py infile
  - 例:
    - python cif_read.py test.cif

- debug オ