以下は、Python プログラム cfg2cif.py の解析結果をまとめた技術文書です。

1) プログラムの動作
- 目的
  - CFG 形式の設定ファイル（cfgfile）を読み込み、分率座標系を用いた結晶構造情報を CIF 形式に変換する。
- 主な処理の流れ
  - コマンドライン引数を解釈して、cfgfile 名と座標縮約条件を設定する（reduce01、xlim、ylim、zlim）。
  - read_cfgfile(cfgfile) で CFG ファイルを解析:
    - サンプル名を取得
    - Defining vectors から格子定数ベクトル aij を作成
    - “molecules of type” 情報を読み取り、各タイプ分の分子数を取得
    - 各座標を順次読み込み、atomtypes 配列に基づく原子種名を付与
    - 座標を x, y, z（分数座標系）に変換。freduce01 が true の場合は座標を [0, 1] 範囲へ縮約 Reduce01 を適用
    - x > xlim または y > ylim または z > zlim を満たす場合はその原子をスキップ
    - cry (tkCrystal オブジェクト) に原子を追加
    - cry.ExpandCoordinates() を実行して座標拡張を実施
  - 生成された crystal オブジェクトを用いて、同一ディレクトリ内の CIF ファイルを ciffile 名で作成
  - 標準出力へデバッグ情報を表示
- 出力
  - CIF ファイル：指定された ciffile 名（ cfg ファイル名基盤.cif ）に生成
  - コンソール出力で、サンプル名、格子ベクトル、各原子の座標、統計情報などを表示

2) 必要な非標準ライブラリとインストール方法
- 依存ライブラリ（標準外）
  - numpy
  - scipy
  - matplotlib
  - その他のカスタムモジュール（配布元不明）
    - tkfile
    - tkutils
    - tksci (モジュール内の Reduce01, Round, 3x行列作成ユーティリティなど)
    - tkcrystal (tkCIF, tkCrystal, tkAtomType など)
    - tkcrystal/tkcif.py などの CIF 関連クラス
- インストール手順
  - 一般的な数値計算・可視化ライブラリ
    - Python 環境が整っている前提で:
      - pip install numpy scipy matplotlib
  - カスタムモジュール（必須だが公開パッケージとして入手不能な場合が多い）
    - これらはプロジェクト付属のローカルライブラリ、あるいは社内/個人で公開されているパッケージである可能性が高い。
    - 入手方法の例
      - プロジェクト内の lib ディレクトリまたは tk* 系ファイルをそのまま PYTHONPATH に追加
      - システムにインストール済みの場合は pip で相対パスを指定してインストール
      - もし公開リポジトリがある場合は、リポジトリから取得してインストール
  - 実行時のパス設定
    - スクリプト内では次のパスを追加している
      - c:/Programs/python/lib
      - d:/Programs/python/lib
    - Windows 環境でのパス指定のため、環境に応じて適切に設定してください
- 注意点
  - 上記カスタムモジュールが手元に無い場合、cfg2cif.py は動作しません。該当モジュールを入手して PYTHONPATH が通るように設定してください。

3) 必要な入力ファイル
- cfgfile（例: STD0.cfg）
  - CFG 形式の結晶データファイル。コードは以下の要素を前提に読み取ります。
    - サンプル名（1 行目）
    - 地晶格子情報のセクション（Defining vectors 直前の “molecules of all” などの情報）
    - natoms（総原子数）を「molecules of all」セクションから取得
    - Defining vectors セクションの 1 行目に格子ベクトルの成分
      - aij[0] を 2 倍して格子長として扱う処理あり
    - molecules of type セクション
      - 各原子種の分子数 ntypes の列挙
    - 実座標データ
      - 各原子の座標系は「name, xc, yc, zc」の順
      - name は atomtypes 配列の要素に対応（例: 'O', 'Zn', 'Ga', 'In'）
- 注意
  - 実際の CFG のフォーマットはコードのパーサに強く依存するため、ファイルの正確な構造は元ファイルの仕様に従って用意してください。

4) 実行後に生成される出力ファイル
- STD0.cif 形式の CIF ファイル（cfgfile の基盤名に .cif を付与した名前）
  - 例: STD0.cfg なら STD0.cif
- コンソール出力
  - サンプル名、格子ベクトル、原子リスト、座標、natoms、ntypes、等のデバッグ情報
  - 途中経過として、座標の縮約処理の有無、スキップされた原子の情報などが表示される可能性あり

5) コマンドラインでの使用例 (Usage)
- 基本的な使い方
  - python cfg2cif.py cfgfile (reduce01 xlim ylim zlim)
  - reduce01: 1 のとき座標を [0, 1] に縮約します。0 の場合は縮約を行いません。
- 実際の例
  - python cfg2cif.py STD0.cfg 1 1.0 1.0 1.0
  - 上記は、STD0.cfg を読み込み、座標縮約を有効化し、x/y/z の最大値を 1.0 に設定して CIF に変換します
- 出力ファイル名の決定
  - cfgfile 引数から拡張子を除いたベース名を取得し、同名の .cfg および .cif を生成
  - 実際の cfg2cif.py 内部ロジックでは cfgfile をベース名 .cfg、ciffile をベース名 .cif に設定して処理します