以下は、提供された Python プログラム cif2rdf.py の解析結果をまとめたドキュメントです。

# cif2rdf.py のドキュメント

本プログラムは CIF (Crystallographic Information File) から原子配置情報を読み込み、径Rcの関数として径分布関数 RDF（および CN-RDF など）を計算・出力するツールです。モードに応じて「原子別」「部位別」「CN別」の RDF/RCN を算出します。必要に応じて Gaussian での畳み込みも適用可能です。結果は CSV 形式で保存され、グラフ描画も行います。

以下では、プログラムの動作、依存ライブラリ、入力ファイル、出力ファイル、Usage（実行方法）を順に説明します。

1) プログラムの動作

- 基本動作
  - コマンドライン引数を受け取り、指定された CIF ファイルから結晶構造情報を読み込みます。
  - 結晶の原子種・部位情報を取得し、Rmin 〜 Rmax の範囲で RDF（径分布関数）を計算します。
  - mode によって出力データの形を変えます。
    - mode = 'atom'：原子種ごとの RDF と RDF に対応する累積分布関数 RC(N) を出力。
    - mode = 'site'：部位ごとの RDF/RCN を出力。
    - mode = 'cn'：種類別の RDF/RCN を出力。さらに CN ごとに CNRDF や CNRCN も個別に出力。
  - wConv が 0 でない場合、RDF にガウス畳み込みを適用します。
  - CSV ファイルへ保存します（rdfcsvfile、cnrdfcsvfile など）。
  - グラフを描画して表示します。

- 内部処理の要点
  - CIF ファイルの検証、Crystal オブジェクトの取得、格子パラメータ・原子サイト情報の取得。
  - CalRDFi: 指定した基準原子 (atom0) と他の原子サイトの間の距離分布を Rstep ごとに集計して RDF を作成。
  - CalculateRDFs: mode に応じて RDF/RCN の集計を行い、必要なら RCN を計算します。
  - CalculateCNRDFs: CN 指定時の CN-RDF/ RCN の計算（CN 追跡用の追加配列）。
  - データが 2D/3D 配列になる部分は NumPy 配列を活用。
  - 最終的に各種データを CSV 形式で保存し、グラフを描画して表示します。

- 出力の性質
  - RDF/RCN の値は R 方向のビン階級ごとに格納され、Rstep で区間幅を決定。
  - mode に応じてcsv のヘッダと列数が変化します。
  - CN mode の場合、個別に CNRDF/CNRCN のデータを別ファイル名で出力します。

2) 必要な非標準ライブラリとインストールコマンド

- 必須ライブラリ（推奨環境で用意されるべきもの）
  - numpy
  - scipy
  - matplotlib
  - pandas はコード中では使用されていませんが、CSV処理で使われていないため不要
  - tif のような追加ライブラリは不要
  - cif2rdf.py が依存する tklib パッケージ（tklib.tkfile, tklib.tkutils, tklib.tksci, tklib.tkcrystal など）を入手・配置する必要があります

- インストール方法の例
  - Python 3.x を使用（推奨。3.8 以降で動作を確認）
  - pip を用いた標準的なインストール例:
    - pip install numpy scipy matplotlib
  - 重要: tklib は外部ライブラリとして公開パッケージとしては一般的ではない可能性があります。以下のいずれかを実行してください。
    - 手元の環境に tklib を含むソースを用意して、プロジェクトのパスに追加（例: 一式を src/tklib として配置）。
    - tklib が GitHub 等で公開されている場合には、git clone してパスを通す。
    - 公式リポジトリがない場合には、プログラムの動作に必須である tklib/tk* 系モジュールを同梱して実行できるようにしてください。
  - まとめると、最低限の実行環境は次のとおりです。
    - Python 3.x
    - numpy
    - scipy
    - matplotlib
    - cif2rdf.py が参照する tklib パッケージ（入手・配置が必要）

- 実行時のパス設定
  - tklib パッケージをどこかのディレクトリに置き、環境変数 PYTHONPATH にそのパスを追加するか、同じディレクトリ配下に配置して実行してください。
  - cif2rdf.py を実行する前に、tklib パッケージが import 可能であることを確認してください。

3) 必要な入力ファイル

- CIF ファイル
  - デフォルト CIF ファイル名: IGZO.cif（コード内の ciffile 変数に初期値として設定）
  - 実行時にはコマンドラインで別ファイルへ変更可能
- 追加で必要となる補助ファイル
  - read_xyzfile 関連の処理が存在しますが、実際には CIF ファイルを直接読み込み、tkCIF オブジェクト経由で結晶情報を取得します。すなわち、CIF ファイル自体が主入力です。
  - CIF が正しく構造情報を含んでおり、find_valid_structure オプションにより「有効な結晶構造」が検出される必要があります（findvalidstructure = 1）。

4) 実行後に生成される出力ファイル

- RDF/RCN データ CSV
  - rdfcsvfile: CIF ファイル名に基づく「-RDF.csv」ファイル
    - 例: IGZO.cif を使用した場合、 IGZO-RDF.csv という名前になる可能性があります（コード内では header から派生して rdfcsvfile を設定）。
  - cnrdfcsvfile: CIF ファイル名に基づく「-CNRDF.csv」ファイル
    - 例: IGZO-CNRDF.csv
- CN_RDF 固有ファイル
  - mode = 'cn' の場合、各元素ごとに「-CNRDF-<element>.csv」という追加ファイルを出力
- グラフファイル
  - コード内では plt.show() により対話表示のみを行い、ファイルとして PNG 等へ保存は行っていません（必要に応じて plt.savefig(...) を追加することが可能）。
- ログ/デバッグ情報
  - 実行中はターミナルに多くの標準出力が出力され、内部計算の中間値が表示されます。

5) コマンドラインでの使用例（Usage）

- 基本的な usage を表示する関数が用意されています。
- 使用法の基本形:
  - python cif2rdf.py mode ciffile Rmin Rmax nR nCN wConv

- 引数の意味
  - mode: 計算モード
    - 'atom'：原子種ごとの RDF/RCN
    -