以下は、crystal_convert_cell.py の動作・必要環境・入力/出力について整理したドキュメントです。

---

# crystal_convert_cell.py 解析ドキュメント

## 1. プログラムの動作概要

- 目的
  - 単位格子を別の基底ベクトル系に変換し、元の格子と変換後の格子の原子配置を可視化する。
- 大枠の流れ
  - crystal_name に応じた晶系の格子定数・原子位置データを取得
  - conversion_mode に応じた変換行列 tij を取得
  - 原子サイト情報を元に、指定範囲 nrange で格子を繰り返し展開
  - 変換前格子 (Real space unit cell) と 変換後格子 (Converted cell) の原子・サイズを描画
  - 3D プロットを表示 (matplotlib)
- 主な出力
  - コンソール上に以下を表示
    - Crystal name、Lattice parameters、Lattice vectors、Metric tensor、Volume、Site 情報、変換行列 tij、Converted lattice vectors、Converted sites など
  - 3D プロットの表示（ポップアップウィンドウ）
- 実行時の入出力の特徴
  - 入力ファイルは使用しない。コマンドライン引数とスクリプト内のハードコードデータに基づく。
  - 実行中には標準出力へのテキスト出力と、3D 図の表示が行われる。
  - 最後に terminate() が呼ばれ、Usage 例が出力される形になる点に留意。

- 使用元データ
  - get_crystal(name) で晶系ごとの格子定数・サイト情報を返す。
  - get_conversion_matrix(key) で変換行列 tij を返す。
  - cal_lattice_vectors, cal_metrics, cal_volume など、格子計算関数は tkcrystalbase から提供される想定。

- 依存ライブラリ（内部関数は tkcrystalbase に依存）
  - numpy（数値計算・行列操作）
  - matplotlib（3D プロット用）
  - tkcrystalbase（本スクリプトの主要な数値・描画ユーティリティを提供）

---

## 2. 必要な非標準ライブラリとインストール方法

このスクリプトは以下の外部ライブラリ・モジュールを前提としています。

- Python3 系
- NumPy
  - インストール: 
    - pip install numpy
- Matplotlib
  - インストール:
    - pip install matplotlib
- tkcrystalbase
  - 説明
    - 本スクリプトは tkcrystalbase.py の機能を前提としており、同ファイルをプロジェクト内に用意しておく必要がある。また、tkcrystalbase に含まれる関数（例: cal_lattice_vectors, cal_metrics, convert_lattice_vectors, draw_unitcell など）を利用している。
  - 入手方法
    - 同一リポジトリ内に tkcrystalbase.py が存在する場合は追加インストール不要。別リポジトリやパッケージとして提供されている場合は、適切な方法で入手して同一ディレクトリに配置する。
  - 注意
    - tkcrystalbase が見つからない場合、import エラーになります。実行前に tkcrystalbase.py が参照可能な場所にあることを確認してください。

- その他
  - 3D プロットを表示するためのデバック環境（GUI が利用可能な環境）
  - もし headless 環境で実行する場合は、別途 PNG 等への出力へ変更する必要があります（本スクリプトは plt.show() での表示を想定）。

---

## 3. 必要な入力ファイル

- 本プログラムは外部ファイルを読み込まず、コード内にハードコードされたデータとコマンドライン引数に依存します。
- 実行時に必須となる外部ファイルは特にありません。ただし、動作には以下のものが前提です。
  - tkcrystalbase.py（同梱または同ディレクトリ上で import 可能な状態）
- 実行時にはコマンドライン引数として次を指定できます（以下を任意に変更可能）
  - crystal_name: 'FCC', 'BCC', 'Hex', 'Rhomb'
  - conversion_mode: 'FCCPrim', 'BCCPrim', 'HexOrtho', 'HexRhomb', 'RhombHex'
  - kRatom: 少数値（原子半径サイズのスケーリング係数）

---

## 4. 実行後に生成される出力ファイル

- 本スクリプトはファイルとしての出力を作成しません。代わりに以下を生成・表示します。
  - コンソール出力（標準出力）に、晶系情報・格子ベクトル・メトリックテンソル・体積・サイト情報・変換行列・変換後の格子ベクトル・変換後サイトリスト等のテキスト情報を出力
  - 3D グラフを表示するウィンドウ（Matplotlib による描画）
- もしファイル出力を希望する場合は、以下をスクリプトに追記する必要があります。
  - 2D/3D プロットを PNG/JPEG へ保存
  - あるいはサイトリストを CSV/JSON へ保存

---

## 5. コマンドラインでの使用例 (Usage)

- 基本的な使い方
  - python crystal_convert_cell.py crystal_name conversion_mode kRatom
- 実例
  - FCC 系の Prim 変換を実行し、原子半径スケールを 1000 に設定
    - python crystal_convert_cell.py FCC FCCPrim 1000.0
  - BCC 系の Prim 変換を実行
    - python crystal_convert_cell.py BCC BCCPrim 1000.0
  - Hex 系の正交基底変換を実行
    - python crystal_convert_cell.py Hex HexOrtho 1000.0
- 追加のヘルプ/Usage
  - 引数が不足している場合や誤った値を渡した場合、usage 出力とともに終了します（terminate() が呼ばれる前に usage が表示されます）。
- 実行時の出力
  - 標準出力に晶系情報、格子ベクトル、メトリックテンソル、体積、サイト情報、変換行列などが表示されます。
  - 3D プロットが別ウィンドウとして表示されます（環境により表示方法が異なる場合があります）。

---

## 補足

- 本スクリプトは tkcrystalbase.py の機能に大きく依存しています。tkcrystalbase が正しく提供されていない環境では、ImportError などが発生します。実行前に必ず tkcrystalbase の入手と配置を確認してください。
- データはスクリプト内でハードコードされているため、晶系や変換モードなどを変更するにはコードを直接編集する必要があります。コマンドライン引数での変更は、 crystal_name、conversion_mode、および kRatom の値を受け取るようになっています。
- 3D 図は GUI 環境で表示されます。headless 環境（サーバー