tkcif プログラム仕様

CIFファイルを管理するためのパッケージ。

CIF (Crystallographic Information File) 形式のファイルを読み込み、解析し、 結晶構造データとして操作するためのクラスと関数を提供します。 ファイルからのデータの抽出、キーワードと値のペアの解析、ループデータの処理などをサポートします。

関連リンク:

tkcif.py Library Technical Documentation

tklib.tkcrystal.tkcif.main()[ソース]
class tklib.tkcrystal.tkcif.tkCIF(path=None, mode='r', **args)[ソース]

ベースクラス: tkCIFObject

CIFファイルを管理するためのクラス。

CIFファイルの読み込み、解析、およびデータ抽出機能を提供します。 tkCIFObjectを継承し、ファイルI/OおよびCIFデータ構造の処理を拡張します。

GetNextKey(lines, i)[ソース]

指定された行からCIFキーワードと対応する値を抽出します。

CIFファイルの行を解析し、data_`ヘッダー、コメント、単一キーワード、 または `loop_ ブロックのキーワードと値を識別します。

パラメータ:
  • lines -- list[str] 解析対象の行のリスト。

  • i -- int 解析を開始する行のインデックス。

戻り値:

tuple[int, int, list] 現在の行インデックス、ステータス、および抽出されたキーワードと値のリスト。 ステータスは end_of_cifdataheadercommentsinglekeymultikeys (実際には`loopkeys`が返される)、loopkeysother のいずれかです。 keyval の形式はステータスに依存します。 - header: ['header', 'data_name'] - comment: ['# comment text', ''] - singlekey: ['keyword', 'value'] - loopkeys: [[['kw1', 'val1a'], ['kw2', 'val2a']], [['kw1', 'val1b'], ['kw2', 'val2b']], ...]

GetNextValues(lines, nrequired, i)[ソース]

複数行からCIF値を抽出します。

lines[i] から始まる複数行からCIF値を抽出し、指定された数の値が要求されるまで読み込みを続けます。 主に _keyword に続く値や loop_ データブロック内の値を処理するために使用されます。

パラメータ:
  • lines -- list[str] 解析対象の行のリスト。

  • nrequired -- int 必要とされる値の数。

  • i -- int 解析を開始する行のインデックス。

戻り値:

tuple[int, int, str, list[str]] 現在の行インデックス、ステータス、関連する結合行(文字列)、値のリスト。 ステータスは multikeys または end_of_cifdata のいずれかです。

GetNextValuesOne(lines, nrequired, i)[ソース]

単一の行からCIF値を抽出します。

lines[i] からCIFデータを抽出し、指定された数の値が要求された場合に、 それらをリストとして返します。マルチラインの値(セミコロンで開始・終了)も処理します。

パラメータ:
  • lines -- list[str] 解析対象の行のリスト。

  • nrequired -- int 必要とされる値の数。

  • i -- int 解析を開始する行のインデックス。

戻り値:

tuple[int, int, str, list[str]] 現在の行インデックス、ステータス、関連する行(文字列)、値のリスト。 ステータスは end_of_cifdatasinglekeymultikeys のいずれかです。

ReadCIF(path=None, find_valid_structure=1, print_level=1)[ソース]

CIFファイルを読み込み、tkCIFData オブジェクトを返します。

read_cif メソッドのエイリアスです。 有効な結晶構造データを持つ最初のデータブロックを返します。

パラメータ:
  • path -- str, optional 読み込むCIFファイルのパス。指定しない場合、self.path を使用します。

  • find_valid_structure -- int, optional 1の場合、有効な構造データが見つかるまでセクションを読み込みます。 0の場合、最初のセクションのみを読み込みます。デフォルトは1。

  • print_level -- int, optional デバッグ出力レベル。デフォルトは1。

戻り値:

tkCIFData 有効な結晶構造データを持つ tkCIFData オブジェクト。 find_valid_structure が有効で適切なデータが見つからない場合はNone。

ReadCIFs(path=None, print_level=1)[ソース]

CIFファイルを読み込み、その中の全てのデータブロックを tkCIFData オブジェクトのリストとして返します。

data_ で始まる各セクションを個別の tkCIFData オブジェクトとして解析し、リストに格納します。 ファイルポインタが io.StringIO オブジェクトである可能性も考慮します。

パラメータ:
  • path -- str or io.StringIO, optional 読み込むCIFファイルのパス、またはStringIOオブジェクト。 指定しない場合、self.path または self.fp を使用します。

  • print_level -- int, optional デバッグ出力レベル。デフォルトは1。

戻り値:

list[tkCIFData] 読み込まれた全てのCIFデータを含む tkCIFData オブジェクトのリスト。

ReadNextCIF(path=None, print_level=0)[ソース]

CIFファイルの次のデータブロックを読み込み、行のリストとして返します。

data_ で始まる次のCIFデータブロックを見つけ、#End または次の data_ ブロックの手前までを読み込みます。 パスが指定された場合、そのファイルを開いてから読み込みます。 それ以外の場合は、現在のファイルポインタ (self.fp) から読み込みます。

パラメータ:
  • path -- str, optional 読み込むCIFファイルのパス。指定しない場合、self.path を使用します。

  • print_level -- int, optional デバッグ出力レベル。デフォルトは0。

戻り値:

list[str] CIFデータの行のリスト。読み込むデータブロックがない場合はNone。

StringsToCIF(lines)[ソース]

文字列のリストからCIFの内容を抽出して辞書形式に変換します。

GetNextKey メソッドを使用して行のリストを解析し、 キーワードと値のペアを格納する辞書を構築します。 ループデータは keyword[i] の形式でインデックス付きエントリとして格納されます。

パラメータ:

lines -- list[str] CIFデータの行のリスト。

戻り値:

dict CIF情報を含む辞書。 キーはCIFキーワード(ループデータの場合は _keyword[index] 形式)、 値は対応するデータです。

read_cif(path=None, find_valid_structure=1, print_level=1)[ソース]

CIFファイルを読み込み、tkCIFData オブジェクトのリスト (self.cifdata_list) を更新します。

単一のCIFデータブロック、または複数のブロックを読み込むことができます。 find_valid_structure が真の場合、有効な結晶構造データ(_cell_length_a > 0)を 持つ最初のデータブロックを返します。

パラメータ:
  • path -- str, optional 読み込むCIFファイルのパス。指定しない場合、self.path を使用します。

  • find_valid_structure -- int, optional 1の場合、有効な構造データが見つかるまでセクションを読み込みます。 0の場合、最初のセクションのみを読み込みます。デフォルトは1。

  • print_level -- int, optional デバッグ出力レベル。デフォルトは1。

戻り値:

tkCIFData 有効な結晶構造データを持つ tkCIFData オブジェクト。 find_valid_structure が有効で適切なデータが見つからない場合はNone。

splitline(lines, i)[ソース]

与えられた行リストの指定されたインデックスの行をキーワードと値に分割します。

行をスペースで区切られたキーワードと値に分割します。 キーワードは非空白部分、値は残りの部分からヘッダーと末尾のスペースを除いたものです。

パラメータ:
  • lines -- list[str] 分割対象の行のリスト。

  • i -- int 分割する行のインデックス。

戻り値:

tuple[str, str, str] 行、キーワード、値のタプル。 行が存在しない場合は (None, '', '') を返します。