tkcifobject.py ライブラリ技術ドキュメント

ライブラリの機能や目的

tkcifobject.py は、CIF (Crystallographic Information File) 形式のデータをPythonで扱うためのライブラリです。結晶学における標準的なデータ交換フォーマットであるCIFファイルの読み込み、解析、そして別の形式(tklib.tkcrystal.tkcrystal.tkCrystal オブジェクト)への変換、またはCIF形式での書き出し機能を提供します。

このライブラリの主な目的は以下の通りです。

  • CIFデータの解析: CIFファイルから、格子定数、空間群情報、原子サイト座標、原子タイプなどの結晶学関連情報を効率的に抽出します。

  • 結晶構造の抽象化: 抽出したCIFデータを、より高レベルな結晶構造オブジェクト (tkCrystal) に変換し、他の結晶学計算やシミュレーションで利用しやすくします。

  • CIFファイルの生成: プログラム内で構築された結晶構造データから、新しいCIFファイルを生成する機能を提供します。

これにより、研究者や開発者はCIFファイルの手動解析の手間を省き、Pythonプログラム内で結晶構造データをシームレスに利用・操作できるようになります。

importする方法

tkcifobject.py ライブラリは、Pythonプログラム内で以下のようにインポートして使用できます。

from tkcifobject import tkCIFObject, tkCIFData

または、特定のクラスのみをインポートする場合:

from tkcifobject import tkCIFData

必要な非標準ライブラリとインストール方法

tkcifobject.py は、多くの機能が tklib というモジュールに依存しています。 tklib は、このライブラリと同じプロジェクトの一部であるか、または特定の環境で利用されるカスタムライブラリである可能性が高いです。標準的なPythonパッケージインデックス (PyPI) に登録されている一般的なライブラリではないため、pip install tklib のようなコマンドで直接インストールすることはできないかもしれません。

tklib モジュールは、別途プロジェクトの指示に従ってインストールまたは配置する必要があります。通常、以下のいずれかの方法で入手・設定します。

  • tkcifobject.py が含まれるプロジェクトのルートディレクトリに tklib サブディレクトリが存在する。

  • PYTHONPATH 環境変数に tklib モジュールへのパスが設定されている。

  • プロジェクトのセットアップスクリプト (setup.py など) で tklib がインストールされる。

具体的なインストール方法は、このライブラリが属する上位プロジェクトのドキュメントを参照してください。

importできる変数と関数

クラス

class tkCIFObject(tkFile)

CIF処理のルートクラスであり、tklib.tkfile.tkFile を継承しています。主に基底クラスとしての役割を果たし、直接的なCIFデータ解析機能は tkCIFData クラスに委譲しています。

  • __init__(self, path = None, mode = 'r', **args)

    • コンストラクタ。pathmode を引数として受け取りますが、内部では特に使用せず、__crystalname__samplename を空文字列で初期化します。

    • 引数:

      • path (str, optional): ファイルパス。デフォルトは None

      • mode (str, optional): ファイルオープンモード。デフォルトは 'r' (読み込み)。

      • **args: その他のキーワード引数。

    • 戻り値: なし

  • __del__(self)

    • デストラクタ。特に何も処理しません。

    • 引数: なし

    • 戻り値: なし

  • __str__(self)

    • オブジェクトの文字列表現を返します。self.ClassPath() の結果を返します。

    • 引数: なし

    • 戻り値: (str) クラスパス文字列

class tkCIFData(tkCrystalObject)

CIFファイルの具体的なデータを保持し、解析・操作する主要なクラスです。tklib.tkcrystal.tkcrystalobject.tkCrystalObject を継承しています。

  • __init__(self, **args)

    • コンストラクタ。親クラス tkCrystalObject のコンストラクタを呼び出した後、debug フラグ、path、CIFデータ辞書 data、CIF入力行リスト lines、結晶名、サンプル名を初期化します。

    • 引数:

      • **args: 親クラスや自身の初期化に使用されるキーワード引数。

    • 戻り値: なし

  • __del__(self)

    • デストラクタ。親クラス tkCrystalObject のデストラクタを呼び出します。

    • 引数: なし

    • 戻り値: なし

  • __str__(self)

    • オブジェクトの文字列表現を返します。self.ClassPath() の結果を返します。

    • 引数: なし

    • 戻り値: (str) クラスパス文字列

  • get(self, key, i = None, defval = None)

    • CIFデータ辞書 self.data から、指定されたキー key の値を取得します。

    • key がリストの場合、リスト内のキーを順に試し、最初に見つかった値を返します。

    • key が整数の場合、入力行リスト self.lines から指定インデックスの行を返します。

    • i が指定された場合、key[i] の形式で辞書を検索します。

    • 値が見つからない場合は defval を返します。

    • 引数:

      • key (str or list of str or int): 検索するCIFタグ名、タグ名のリスト、または行番号。

      • i (int, optional): タグが配列形式の場合のインデックス。例: _atom_site_fract_x[0]0。デフォルトは None

      • defval (any, optional): キーが見つからなかった場合に返すデフォルト値。デフォルトは None

    • 戻り値: (any) 取得した値、または defval

  • geterrorf(self, key, i = None, defval = None)

    • get メソッドで取得した値を浮動小数点数に変換して返します。

    • 値に (エラー値) のような表記が含まれる場合、正規表現 r'\(.*\)' でエラー部分を除去してから変換を試みます。

    • 変換に失敗した場合は defval を返します。

    • 引数:

      • key (str or list of str or int): get メソッドに渡すキー。

      • i (int, optional): get メソッドに渡すインデックス。

      • defval (float, optional): 変換または取得に失敗した場合のデフォルト浮動小数点数値。デフォルトは None

    • 戻り値: (float) 変換された浮動小数点数値、または defval

  • getf(self, key, i = None, defval = None)

    • get メソッドで取得した値を単純に浮動小数点数に変換して返します。

    • 変換に失敗した場合は defval を返します。

    • 引数:

      • key (str or list of str or int): get メソッドに渡すキー。

      • i (int, optional): get メソッドに渡すインデックス。

      • defval (float, optional): 変換または取得に失敗した場合のデフォルト浮動小数点数値。デフォルトは None

    • 戻り値: (float) 変換された浮動小数点数値、または defval

  • geti(self, key, i = None, defval = None)

    • get メソッドで取得した値を整数に変換して返します。

    • 直接整数に変換できない場合、浮動小数点数に変換してから整数に丸めることを試みます。

    • 変換に失敗した場合は defval を返します。

    • 引数:

      • key (str or list of str or int): get メソッドに渡すキー。

      • i (int, optional): get メソッドに渡すインデックス。

      • defval (int, optional): 変換または取得に失敗した場合のデフォルト整数値。デフォルトは None

    • 戻り値: (int) 変換された整数値、または defval

  • CheckCIF1(self, key)

    • 指定されたCIFキー (key) がデータに存在し、geterrorf で有効な値として取得できるかを確認します。

    • 存在しない場合はエラーメッセージを標準出力に出力します。

    • 引数:

      • key (str): チェックするCIFタグ名。

    • 戻り値: (int) キーが存在し値が取得できれば 1、そうでなければ 0

  • CheckCIF(self)

    • CIFデータに含まれるべき必須の結晶学パラメータ(格子定数: a, b, c, alpha, beta, gamma; 原子サイト座標: x, y, z)の存在をまとめてチェックします。

    • いずれかの必須キーが見つからない場合、エラーメッセージを出力しプログラムを終了します (exit())。

    • 引数: なし

    • 戻り値: (int) 全ての必須キーが存在すれば 1。そうでなければプログラムが終了するため、0 は返りません。

  • LatticeParameters(self)

    • CIFデータから格子定数 (_cell_length_a から _cell_angle_gamma) の値を取得し、タプルとして返します。

    • 値は geterrorf を使用して浮動小数点数として取得されます。

    • 引数: なし

    • 戻り値: (tuple of float) (a, b, c, alpha, beta, gamma) の順で格子定数のタプル。

  • dataprint(self, key, i = None)

    • 指定されたCIFキー key の値を取得し、"{key}: {value}" の形式で標準出力に表示します。

    • key がリストの場合、リスト内のキーを順に試して最初に見つかった値を表示します。

    • キーが見つからない場合はエラーメッセージを出力します。

    • 引数:

      • key (str or list of str): 表示するCIFタグ名、またはタグ名のリスト。

      • i (int, optional): タグが配列形式の場合のインデックス。デフォルトは None

    • 戻り値: (int) 値が表示できれば 1、そうでなければ 0

  • InsertSpaceToSPGName(self, SPGName)

    • 空間群名 SPGName に特定のルールに基づいてスペースを挿入する処理を行います。

    • この関数には多数の正規表現置換が含まれており、空間群の表記規則に沿ってフォーマットを調整します。

    • 引数:

      • SPGName (str): 空間群名文字列。

    • 戻り値: (str) スペースが挿入された後の空間群名文字列。

  • FillCIFData(self)

    • tkCrystal オブジェクトを初期化し、CIFデータに基づいて結晶名や格子定数などを設定しようとする意図を持つ関数です。

    • 現在の実装では、一部の行がコメントアウトされており、限られた機能しか実行しません。具体的には、tkCrystal オブジェクトを作成し、結晶名を設定しますが、格子パラメータや体積などの設定はコメントアウトされています。

    • 引数: なし

    • 戻り値: なし

  • GetCrystal(self)

    • tkCIFData オブジェクトが保持するCIF情報から、tklib.tkcrystal.tkcrystal.tkCrystal オブジェクトを生成して返します。

    • 化学名、化学式、体積、単位式量Z、空間群名とその番号、格子定数、対称操作、原子タイプ、原子サイトなどの情報をCIFデータから抽出し、tkCrystal オブジェクトに設定します。

    • 引数: なし

    • 戻り値: (tklib.tkcrystal.tkcrystal.tkCrystal) 生成された結晶オブジェクト。

  • Print(self, PrintLines = 0)

    • print メソッドのラッパー。

    • 引数:

      • PrintLines (int, optional): 入力行も表示するかどうか。1 なら表示。デフォルトは 0

    • 戻り値: なし

  • print(self, PrintLines = 0)

    • CIFデータの内容を標準出力に詳細に表示します。

    • 結晶名、化学式、単位胞情報、空間群、対称操作、原子タイプ、原子サイトの情報を整形して出力します。

    • PrintLines1 の場合、元のCIF入力行も表示します。

    • 引数:

      • PrintLines (int, optional): 入力行も表示するかどうか。1 なら表示。デフォルトは 0

    • 戻り値: なし

  • nSymmetryOperation(self)

    • CIFデータに登録されている対称操作 (_symmetry_equiv_pos_as_xyz) の数を数えて返します。

    • 引数: なし

    • 戻り値: (int) 対称操作の数。

  • SymmetryOperation(self, i)

    • 指定されたインデックス i の対称操作文字列をCIFデータから取得して返します。

    • 取得した文字列から引用符を除去する処理 (DelQuote) が行われます。

    • 引数:

      • i (int): 取得する対称操作のインデックス。

    • 戻り値: (str) 指定されたインデックスの対称操作文字列。見つからない場合は None

  • WriteKeyVal(self, out, key, defval = None, i = None)

    • 指定されたファイルオブジェクト out に、CIFキー key とその値 (self.get(key, i, defval)) を書き込みます。

    • 値が None の場合は書き込みません。

    • 引数:

      • out (tklib.tkfile.tkFile object): 書き込み先のファイルオブジェクト。

      • key (str): 書き込むCIFタグ名。

      • defval (any, optional): キーが見つからなかった場合のデフォルト値。デフォルトは None

      • i (int, optional): タグが配列形式の場合のインデックス。デフォルトは None

    • 戻り値: (int) 書き込みが成功すれば 1、値が見つからなければ 0

  • WriteSimpleCIFFile(self, NewFile, WritePublication = 1)

    • 現在の tkCIFData オブジェクトの内容に基づいて、簡易的なCIFファイルを NewFile で指定されたパスに書き出します。

    • ファイル作成日、メソッド、化学情報、格子定数、空間群、対称操作、原子タイプ、原子サイトなどの情報を書き込みます。

    • WritePublication1 の場合、出版物関連のタグも書き込みます。

    • 引数:

      • NewFile (str): 新しく作成するCIFファイルのパス。

      • WritePublication (int, optional): 出版物関連の情報を書き込むかどうか。1 なら書き込む。デフォルトは 1

    • 戻り値: (int) ファイルの作成が成功すれば 1、失敗すれば 0

  • CreateCIFFileFromCCrystal(self, cry, NewFile, IsChooseRandomly = 0, IsPrint = 1)

    • tklib.tkcrystal.tkcrystal.tkCrystal オブジェクト cry の内容からCIFファイルを生成し、NewFile で指定されたパスに書き出します。

    • 結晶の化学式、格子定数、空間群情報、対称操作、原子タイプ、原子サイトなどの情報をCIF形式で出力します。

    • IsChooseRandomlyIsPrint 引数は現在の実装では使用されていません。

    • 引数:

      • cry (tklib.tkcrystal.tkcrystal.tkCrystal object): CIFファイルに書き出す元となる結晶オブジェクト。

      • NewFile (str): 新しく作成するCIFファイルのパス。

      • IsChooseRandomly (int, optional): 現在のところ未使用。デフォルトは 0

      • IsPrint (int, optional): 現在のところ未使用。デフォルトは 1

    • 戻り値: (int) ファイルの作成が成功すれば 1、失敗すれば 0

main scriptとして実行したときの動作

tkcifobject.py のソースコードには、if __name__ == '__main__': ブロックが存在しません。 したがって、このスクリプトをPythonインタープリタで直接実行しても、特別な処理や出力は行われません。本ライブラリは、他のPythonプログラムからインポートされ、その機能を利用されることを前提として設計されています。