tklib.tkcrystal.tkvesta のソースコード

"""
VESTA関連データ、特に元素情報を扱うモジュール。

VESTAで用いられる元素情報ファイル (elements.ini) から原子の基本情報を読み込み、
管理するためのクラス `tkVESTA` を定義します。
このモジュールは、物質シミュレーションや可視化アプリケーションにおいて、
原子のプロパティを簡単に取得・利用するための基盤を提供します。

:doc:`tkvesta_usage`
"""
import os


from tklib.tkprogvars import VESTADBDir
from tklib.tkutils import pint, pfloat


[ドキュメント] class tkVESTA(): """ VESTAの元素データや関連情報を管理するためのクラス。 元素の名前、原子番号、原子半径、ファンデルワールス半径、イオン半径、表示色などの情報を 辞書形式で保持し、容易にアクセスできるようにします。 """ def __init__(self, path = None, print_level = 1): """ tkVESTAクラスの新しいインスタンスを初期化します。 指定されたパスからVESTAの元素データを読み込み、`atom_dict` 属性に格納します。 `path`がNoneでない場合、モジュールレベルの `read_VESTA_elements` 関数を呼び出して データを読み込もうとします。 :param path: str, 元素データファイルへのパス。Noneの場合、インスタンスは初期化されますが、 データは読み込まれません。 :param print_level: int, メッセージの表示レベル。1の場合、読み込みメッセージが表示されます。 """ self.path = path self.print_level = print_level self.atom_dict = None if path is not None: # 注意: ここで呼び出されている `read_VESTA_elements` は、 # このクラスのメソッドではなく、外部(グローバルスコープ)の関数を指しています。 self.atom_dict = read_VESTA_elements(path, print_level = print_level)
[ドキュメント] def read_VESTA_elements(self, path = None, print_level = 1): """ VESTA形式の元素データファイルから原子情報を読み込みます。 このメソッドは、指定されたパスのファイル、またはデフォルトの `elements.ini` から 原子の様々なプロパティ(原子番号、半径、色など)を読み込み、辞書形式で返します。 ファイルが存在しない場合やパスが指定されていない場合はNoneを返します。 :param path: str, 元素データファイルへのパス。Noneの場合、デフォルトで `VESTADBDir` ディレクトリ内の `elements.ini` を使用します。 :param print_level: int, メッセージの表示レベル。1の場合、ファイルからの読み込み時に コンソールにメッセージが表示されます。 :returns: dict or None, 読み込んだ原子データを含む辞書。 辞書のキーは原子名(str)、値は各原子の詳細情報(dict)。 詳細情報のdictは 'Z' (float), 'atom_name' (str), 'ratom' (float), 'rvdw' (float), 'rion' (float), 'color' ([float, float, float]) をキーに持ちます。ファイルが存在しない場合はNone。 """ if path is None: path = os.path.join(VESTADBDir, 'elements.ini') if print_level: print(f"\nread_VESTA_elements(): Read atom data from [{path}]") if path is None or not os.path.exists(path): return None atom_dict = {} fp = open(path, "r") for line in fp: a = line.split() atom_name = a[1] _inf = { "Z": pfloat(a[0]), "atom_name": atom_name, "ratom": pfloat(a[2]), "rvdw" : pfloat(a[3]), "rion" : pfloat(a[4]), "color": [pfloat(a[5]), pfloat(a[6]), pfloat(a[7])], } atom_dict[atom_name] = _inf fp.close() return atom_dict