tkcrystalbase プログラム仕様
tkcrystalbase.py
概要: 結晶構造計算と描画に関連するユーティリティ関数を提供するモジュール。 詳細説明:
このモジュールは、結晶の格子定数から実空間および逆空間の格子ベクトル、 メトリックテンソル、単位格子の体積などを計算する機能を提供します。 また、原子の分数座標とデカルト座標間の変換、原子間距離や角度の計算、 そしてmatplotlibを使用した3D描画ヘルパー関数を含んでいます。 物理定数や一般的な格子パラメータ、サイト情報もここで定義されています。
- crystal.tkcrystalbase.angle(pos0, pos1, pos2, gij)[ソース]
概要: 3つの分数座標で定義される角度を計算する。 詳細説明:
pos0 を頂点とし、pos0-pos1 と pos0-pos2 の2つのベクトルがなす角度を計算します。 角度の計算にはメトリックテンソル gij が使用されます。 結果は度数で返され、180度を超える場合は 360.0 - angle として調整されます。
- パラメータ:
pos0 -- numpy.ndarray or list of float: 角度の頂点となる分数座標 [x0, y0, z0]。
pos1 -- numpy.ndarray or list of float: 1つ目のベクトルを定義する分数座標 [x1, y1, z1]。
pos2 -- numpy.ndarray or list of float: 2つ目のベクトルを定義する分数座標 [x2, y2, z2]。
gij -- numpy.ndarray: 3x3 のメトリックテンソル。
- 戻り値:
float: 3点間で形成される角度(度)。 いずれかの距離が0の場合は0.0を返します。
- crystal.tkcrystalbase.cal_lattice_vectors(latt)[ソース]
概要: 単位格子の格子定数から実空間の格子ベクトルを計算する。 詳細説明:
格子定数 (a, b, c, α, β, γ) を受け取り、 直交座標系における3つの格子ベクトル a_vec, b_vec, c_vec を含む3x3行列を計算します。 格子ベクトルは、x軸に沿って a_vec が配置されるように構成されます。 角度は度数で指定されますが、内部ではラジアンに変換して計算されます。
- パラメータ:
latt -- list of float: 格子定数のリスト [a, b, c, alpha, beta, gamma]。 長さはオングストローム、角度は度で与えられます。
- 戻り値:
numpy.ndarray: 3x3 の格子ベクトル行列。 [[ax_x, ax_y, ax_z], [ay_x, ay_y, ay_z], [az_x, az_y, az_z]] の形式。
- crystal.tkcrystalbase.cal_metrics(latt)[ソース]
概要: 格子定数から格子ベクトルとメトリックテンソルを計算する。 詳細説明:
単位格子の格子定数から実空間の格子ベクトル aij を計算し、 それらの内積からメトリックテンソル gij を構築します。 結果は辞書形式で返されます。
- パラメータ:
latt -- list of float: 格子定数のリスト [a, b, c, alpha, beta, gamma]。 長さはオングストローム、角度は度で与えられます。
- 戻り値:
dict: 計算された格子ベクトル行列 ('aij') とメトリックテンソル ('gij') をキーに持つ辞書。 {'aij': numpy.ndarray, 'gij': numpy.ndarray} の形式。
- crystal.tkcrystalbase.cal_reciprocal_lattice_parameters(Raij)[ソース]
概要: 逆空間格子ベクトルから逆空間の格子定数を計算する。 詳細説明:
逆空間の格子ベクトル Raij (a*_vec, b*_vec, c*_vec) を用いて、 逆空間の格子定数 (a*, b*, c*, α*, β*, γ*) を計算します。 長さはベクトルのノルムから、角度はベクトルの内積から導出されます。
- パラメータ:
Raij -- list of numpy.ndarray: 逆空間の3つの格子ベクトル [Ra_vec, Rb_vec, Rc_vec] のリスト。
- 戻り値:
list of float: 逆空間の格子定数 [Ra, Rb, Rc, Ralpha, Rbeta, Rgamma] のリスト。
- crystal.tkcrystalbase.cal_reciprocal_lattice_vectors(aij)[ソース]
概要: 実空間格子ベクトルから逆空間格子ベクトルを計算する。 詳細説明:
実空間の格子ベクトル aij (a_vec, b_vec, c_vec) を用いて、 逆空間の格子ベクトル (a*_vec, b*_vec, c*_vec) を計算します。 逆空間ベクトルは、単位格子の体積 V と実空間ベクトルの外積によって定義されます。
- パラメータ:
aij -- numpy.ndarray: 3x3 の実空間格子ベクトル行列。 [[ax_x, ax_y, ax_z], [ay_x, ay_y, ay_z], [az_x, az_y, az_z]] の形式。
- 戻り値:
list of numpy.ndarray: 逆空間の3つの格子ベクトル [Ra_vec, Rb_vec, Rc_vec] のリスト。
- crystal.tkcrystalbase.cal_volume(aij)[ソース]
概要: 格子ベクトルから単位格子の体積を計算する。 詳細説明:
3つの格子ベクトル (a_vec, b_vec, c_vec) のスカラー三重積 (a_vec・(b_vec × c_vec)) を用いて、 単位格子の体積を計算します。
- パラメータ:
aij -- numpy.ndarray: 3x3 の格子ベクトル行列。 [[ax_x, ax_y, ax_z], [ay_x, ay_y, ay_z], [az_x, az_y, az_z]] の形式。
- 戻り値:
float: 単位格子の体積。
- crystal.tkcrystalbase.configure_axis_structure(ax, xrange, yrange, zrange, fontsize=12, legend_fontsize=12)[ソース]
概要: Matplotlibの3D軸オブジェクトの表示設定を行う。 詳細説明:
MatplotlibのAxes3Dオブジェクト (ax) に対して、軸ラベルのフォントサイズ、 軸の線、目盛り、グリッド、ペインの表示設定をカスタマイズします。 デフォルトでは、軸の線、目盛り、ラベルは非表示に設定され、 箱型のアスペクト比で視覚的に整えられます。
- パラメータ:
ax -- matplotlib.axes.Axes: 設定を行うMatplotlibの3D軸オブジェクト。
xrange -- tuple or list of float: x軸の表示範囲 (xmin, xmax)。
yrange -- tuple or list of float: y軸の表示範囲 (ymin, ymax)。
zrange -- tuple or list of float: z軸の表示範囲 (zmin, zmax)。
fontsize -- int, optional: 軸ラベルおよび目盛りのフォントサイズ。 0以下の場合は軸ラベルと目盛りを非表示にします。デフォルトは12。
legend_fontsize -- int, optional: 凡例のフォントサイズ(この関数では直接使用されません)。デフォルトは12。
- 戻り値:
None
- crystal.tkcrystalbase.distance(pos0, pos1, gij)[ソース]
概要: 2つの分数座標間の距離を計算する。 詳細説明:
2つの原子の分数座標 pos0 と pos1 の間の距離を、 メトリックテンソル gij を使用して計算します。 この関数は周期境界条件を考慮しません。
- パラメータ:
pos0 -- numpy.ndarray or list of float: 1点目の分数座標 [x0, y0, z0]。
pos1 -- numpy.ndarray or list of float: 2点目の分数座標 [x1, y1, z1]。
gij -- numpy.ndarray: 3x3 のメトリックテンソル。
- 戻り値:
float: 2点間の距離。
- crystal.tkcrystalbase.distance2(pos0, pos1, gij)[ソース]
概要: 2つの分数座標間の距離の2乗を計算する。 詳細説明:
2つの原子の分数座標 pos0 と pos1 の間の距離の2乗を、 メトリックテンソル gij を使用して計算します。 この関数は周期境界条件を考慮しません。
- パラメータ:
pos0 -- numpy.ndarray or list of float: 1点目の分数座標 [x0, y0, z0]。
pos1 -- numpy.ndarray or list of float: 2点目の分数座標 [x1, y1, z1]。
gij -- numpy.ndarray: 3x3 のメトリックテンソル。
- 戻り値:
float: 2点間の距離の2乗。
- crystal.tkcrystalbase.draw_box(ax, aij, nrange, color='black')[ソース]
概要: 3D軸上に単位格子のボックスを描画する。 詳細説明:
格子ベクトル aij で定義される単位格子の12本の辺を、Matplotlibの3D軸 ax に描画します。 この関数は、単一の単位格子を描画するために設計されており、nrange は現在の実装では使用されません。
- パラメータ:
ax -- matplotlib.axes.Axes: 描画対象のMatplotlib 3D軸オブジェクト。
aij -- numpy.ndarray: 3x3 の格子ベクトル行列。 [[ax_x, ax_y, ax_z], [ay_x, ay_y, ay_z], [az_x, az_y, az_z]] の形式。
nrange -- list of list of int: 描画するセルの範囲 [[xmin, xmax], [ymin, ymax], [zmin, zmax]]。 この関数では使用されません。
color -- str, optional: ボックスの線の色。デフォルトは 'black'。
- 戻り値:
None
- crystal.tkcrystalbase.draw_unitcell(ax, sites, aij, nrange, color='black', facecolor='black', edgecolor='white', alpha=0.7, kr=1.0)[ソース]
概要: 3D軸上に単位格子とその内部のサイト原子を描画する。 詳細説明:
まず draw_box 関数を呼び出して単位格子の境界線を描画します。 次に、sites リストに含まれる各原子について、その分数座標をデカルト座標に変換し、 指定された nrange の範囲内の周期的な位置に原子を散布図として描画します。 原子の描画スタイル(色、透明度、サイズ)は引数でカスタマイズ可能です。
- パラメータ:
ax -- matplotlib.axes.Axes: 描画対象のMatplotlib 3D軸オブジェクト。
sites -- list of list: サイト情報(原子名、ラベル、原子番号、原子質量、電荷、半径、色、位置)のリスト。 各要素は [name, label, z, M, q, r, color, pos] の形式。 None の場合、原子は描画されません。
aij -- numpy.ndarray: 3x3 の格子ベクトル行列。 [[ax_x, ax_y, ax_z], [ay_x, ay_y, ay_z], [az_x, az_y, az_z]] の形式。
nrange -- list of list of int: 描画するセルの範囲 [[xmin, xmax], [ymin, ymax], [zmin, zmax]]。 原子の繰り返し構造を描画するために使用されます。
color -- str, optional: 単位格子ボックスの線の色。デフォルトは 'black'。
facecolor -- str, optional: サイト原子の面の描画色。デフォルトは 'black'。
edgecolor -- str, optional: サイト原子のエッジの描画色。デフォルトは 'white'。
alpha -- float, optional: サイト原子の透明度(0.0から1.0)。デフォルトは 0.7。
kr -- float, optional: サイト原子の描画サイズに対するスケール因子。デフォルトは 1.0。
- 戻り値:
None
- crystal.tkcrystalbase.fractional_to_cartesian(pos, aij)[ソース]
概要: 分数座標からデカルト座標に変換する。 詳細説明:
単位格子内の原子の分数座標 (x_frac, y_frac, z_frac) と格子ベクトル aij を用いて、 原子のデカルト座標 (x_cart, y_cart, z_cart) を計算します。
- パラメータ:
pos -- numpy.ndarray or list of float: 変換する分数座標 [x_frac, y_frac, z_frac]。
aij -- numpy.ndarray: 3x3 の格子ベクトル行列。 [[ax_x, ax_y, ax_z], [ay_x, ay_y, ay_z], [az_x, az_y, az_z]] の形式。
- 戻り値:
tuple of float: 計算されたデカルト座標 (x_cart, y_cart, z_cart)。
- crystal.tkcrystalbase.main()[ソース]
概要: モジュールの主要な計算と結果の表示を実行する。 詳細説明:
定義された lattice_parameters を使用して、実空間および逆空間の 格子ベクトル、メトリックテンソル、単位格子の体積を計算します。 さらに、サンプルとして原子間距離と角度の計算も行い、 その結果を標準出力に表示します。 最後にプログラムを終了します。
- 戻り値:
None
- crystal.tkcrystalbase.reduce01(x)[ソース]
概要: 数値を0以上1未満の範囲に変換する。 詳細説明:
入力された数値の小数部分を返します。 例えば、3.75は0.75に、-2.3は0.7に変換されます。
- パラメータ:
x -- float: 変換する数値。
- 戻り値:
float: 0以上1未満の範囲に変換された値。
- crystal.tkcrystalbase.round01(x)[ソース]
概要: 数値を特定の閾値に基づいて0または1に丸めるか、0以上1未満の範囲に変換する。 詳細説明:
x が1.0に近い(絶対差が0.0002未満)場合は1.0を返します。 x が0.0に近い(絶対差が0.0002未満)場合は0.0を返します。 それ以外の場合、x > 1.0 なら x - int(x) を返します。 x < 1.0 なら x - int(x) + 1.0 を返します。 この関数は、負の数や1を超える数値を0以上1未満の範囲に正規化するために使用されることがあります。
- パラメータ:
x -- float: 丸める、または変換する数値。
- 戻り値:
float: 丸められた、または0以上1未満の範囲に変換された値。
- crystal.tkcrystalbase.round_parameter(x, tol)[ソース]
概要: 数値を指定された許容範囲 (tolerance) の整数倍に丸める。 詳細説明:
入力値 x を tol の整数倍に丸めます。 丸め処理は、(x + 0.1 * tol) / tol を整数に変換し、tol を掛けることで行われます。 これにより、例えば tol=0.5 で x=1.2 なら 1.0 に、x=1.3 なら 1.5 に丸められます。
- パラメータ:
x -- float: 丸める数値。
tol -- float: 丸めの基準となる許容範囲(単位)。
- 戻り値:
float: tol の整数倍に丸められた値。