以下は、draw_cell.py のコードを解析して作成したドキュメントです。

# 1) プログラムの動作

- 概要
  - 指定された実空間の単位格子と逆格子の原子配置を 3D プロットとして描画します。
  - CIF ファイルを入力として読み込み、実空間・逆格子両方のセルを描画します。CIF が提供されない場合は、コード内のデフォルトの格子パラメータとサイト情報を用いて格子を描画します。
  - 実空間単位格子は与えられた格子パラメータおよび原子サイト情報に従い描画され、逆格子セルは実空間セルに対してスケーリングした同様の描画が行われます。

- 主な処理の流れ
  - コマンドライン引数として infile（CIF ファイル名）を受け取り、2 番目の引数がある場合は debug フラグとして解釈します。
  - infile が与えられていれば CIF ファイルを tkCIF を用いて読み込み、結晶情報（格子パラメータ、格子ベクトル、 reciprocal の情報など）を取得します。
  - CIF が取得できなかった場合は terminate() によりエラーメッセージと Usage を表示して終了します。
  - CIF が取得できた場合は取得した結晶情報を用い、実空間セルと Reciprocal 空間セルの原子サイトを展開して (nrange で決められた範囲)、描画対象の全サイトリストを作成します。
  - そうでない場合はデフォルトの lattice_parameters と sites、そして与えられたパラメータに基づくセルを展開して描画します。
  - 3D プロット (matplotlib の 3D Axes) の figure を作成し、draw_unitcell で実空間セル、同様に実空間セルのスケールを kRaij に合わせて逆格子セルを描画します。
  - 描画後、座標系のスケールを適切に揃えるため軸のリミットを統一します。
  - plt.show() により画面表示。終了時に exit()。

- 使用ライブラリの依存
  - 非標準ライブラリ（このコードでは以下を想定）
    - tklib.tkfile, tklib.tkutils, tklib.tkcrystal.tkcif, tklib.tkcrystal.tkcrystal, tklib.tkcrystal.tkatomtype
    - tkcrystalbase.py（同梱のベース機能/ユーティリティ）
  - 標準・一般的なライブラリ
    - numpy
    - matplotlib（.pyplot を使用して 3D プロットを作成）
  - 注意: 上記の tklib 関連モジュールはこのスクリプトが正しく動作するために必須です。公開リポジトリ等に同梱されている前提です。

# 2) 必要な非標準ライブラリとインストールコマンドとインストール方法

- 必須ライブラリ
  - numpy
  - matplotlib
  - tklib（およびそのサブモジュール: tkfile, tkutils, tkcif など）
  - tkcrystalbase（および tkcrystal パッケージのモジュール）
- インストール方法の例
  - pip で numpy と matplotlib のインストール
    - pip install numpy matplotlib
  - あなたの環境に合わせて、以下のどちらかを実行（tklib 系は公開の PyPI には無い場合が多く、ソースからの導入が必要です）
    - git からクローンしてローカルに追加
      - git clone <tklib-repo-url>
      - cd <tklib-repo>
      - python setup.py install もしくは pip install -e .
    - あるいは ZIP をダウンロードして展開後、同様のインストール
  - tkcrystalbase などの依存パッケージ
    - もし別リポジトリに分かれている場合は、それぞれの README に従ってインストール
- 注意点
  - 本コードは相互に依存するカスタムモジュールを多用しています。公式の PyPI パッケージとして提供されていない可能性が高いので、リポジトリの README/INSTALL.md を確認し、ローカル環境にモジュールを適切に配置する必要があります。

# 3) 必要な入力ファイル

- CIF ファイル（infile として指定可能）
  - CIF ファイルは結晶構造データを含み、以下の情報を提供します（コードが期待するデータの例に基づく）
    - 結晶の格子パラメータ（a, b, c の長さ、α, β, γ の角度）
    - 格子ベクトル（a1, a2, a3 の成分）
    - 原子種・サイト情報（原子種名 name、サイトラベル label、原子番号 z、電荷 q、半径 r、色 color、サイト座標 pos など）
  - CIF ファイル名をコマンドライン引数として渡します
- CIF ファイルが読み込めない場合は、スクリプト内のデフォルトの lattice_parameters と sites が使われ、描画が実行されます。
- サイト座標は適切な Fractional 座標系で指定され、コード内では必要に応じて FractionalToCartesian 変換を使用します。

# 4) 実行後に生成される出力ファイル

- 出力ファイル形式
  - このスクリプトは主に対話的に 3D プロットを表示します（plt.show()）。
  - 明示的なファイル出力（PNG, PDF 等）を行うコードは含まれていません。そのため、実行時には GUI によるウィンドウが開き、ユーザーの操作で画を保存する必要があります（必要であればコードを拡張して savefig(...) を追加してください）。
- コンソール出力
  - CIF を用いた場合
    - infile の読み込み開始メッセージ
    - lattice parameters、格子ベクトル、計算されたメトリックテンソル gij、単位セル体積、逆格子のパラメータ・ベクトル・テンソル、逆格子体積などの情報を段階的に表示
    - AtomTypes, AtomSites の情報および展開した全サイトの一覧
  - CIF を使用しない場合はデフォルトの格子パラメータとサイト情報に基づく同様の出力が表示されます
- 3D 図
  - 実空間の単位セルと Reciprocal 空間の単位セルが 3D 図として描画されます（実空間セルは黒、逆格子セルは赤で描画される設計になっています）。

# 5) コマンドラインでの使用例 (Usage)

- 基本的な使い方
  - python draw_cell.py
    - infile を指定しないと、デフォルトの格子パラメータとサイト情報を用いて描画します。
  - python draw_cell.py infile CIF_FILE.cif
    - CIF_FILE.cif を読み込み、CIF の情報を用いて描画します。
- デバッグオプション
  - python draw_cell.py infile CIF_FILE.cif 1
    - 第2引数を debug