tkcrystalobject プログラム仕様

結晶構造を管理するためのルートパッケージ。

このモモジュールは、tkCrystalObject クラスを提供し、結晶の格子パラメータ、空間群、 原子タイプ、原子サイトなどの情報を管理するための基本的な機能を提供します。 結晶の幾何学的特性や化学組成の分析、回折計算、座標変換など、様々な結晶学的な操作をサポートします。

tkcrystalobject.py Technical Documentation

class tklib.tkcrystal.tkcrystalobject.tkCrystalObject(**args)[ソース]

ベースクラス: tkObject

結晶構造データを管理するクラス。

結晶の格子パラメータ、空間群、原子タイプ、原子サイトなどの情報を一元的に管理します。 tklib.tkobject.tkObject を継承し、オブジェクトのパス管理などの基本機能も利用できます。 このクラスは、結晶の物理的・化学的特性を計算し、様々な結晶学的な分析を行うための基盤を提供します。

AddAtomSite(label=None, name=None, charge=None, m=None, ws=None, pos=None, occ=1.0, force=None, velocity=None, hydrogen=None)[ソース]

新しい原子サイトを非対称単位の原子サイトリストに追加します。

原子タイプがまだ存在しない場合は、自動的に追加されます。 ラベルが指定されていない場合、原子名と連番で自動生成されます。

パラメータ:
  • label -- str, optional - 原子サイトのラベル(例: 'O1')。Noneの場合、自動生成されます。

  • name -- str, optional - 原子サイトの原子名(例: 'O')。

  • charge -- float, optional - 原子サイトの電荷。

  • m -- Any, optional - 未使用または不明なパラメータ。

  • ws -- Any, optional - 未使用または不明なパラメータ。

  • pos -- list of float, optional - 原子サイトの分数座標 [x, y, z]。

  • occ -- float, optional - 占有率。デフォルトは1.0。

  • force -- numpy.ndarray or list of float, optional - 原子サイトにかかる力 [fx, fy, fz]。

  • velocity -- numpy.ndarray or list of float, optional - 原子サイトの速度 [vx, vy, vz]。

  • hydrogen -- Any, optional - 未使用または不明なパラメータ。

戻り値:

None

AddAtomType(atomtype=None, charge=None)[ソース]

原子タイプリストに新しい原子タイプを追加します。

指定された atomtype 名が既に存在する場合は、既存の原子タイプとそのインデックスを返します。 存在しない場合は、新しい原子タイプを作成してリストに追加し、そのインデックスとオブジェクトを返します。

パラメータ:
  • atomtype -- str, optional - 追加する原子タイプの名前(例: 'O', 'Fe2+')。Noneの場合、空の原子タイプを作成。

  • charge -- float, optional - 原子タイプに設定する電荷。Noneの場合、atomtype から推測されます。

戻り値:

tuple of (int, tklib.tkcrystal.tkatomtype.tkAtomType) - 追加または見つかった原子タイプのインデックスとtkAtomTypeオブジェクト。

AddSymmetry(sym)[ソース]

空間群に新しい対称操作を追加します。

パラメータ:

sym -- str - 追加する対称操作の文字列(例: 'x,y,z')。

戻り値:

None

AnalyzeChemicalComposition(sort='')[ソース]

結晶の化学組成を分析し、設定します。

展開された原子サイトのリストから各原子の数をカウントし、化学組成と 単位胞あたりの化学式単位 (Z値) を計算して設定します。 ソートオプションにより、出力される組成の順序を制御できます。

パラメータ:

sort -- str, optional - 原子をソートする基準。 'atom_name': 原子名でソート。 'atomic_number': 原子番号でソート。 'atomic_mass': 原子量でソート。 '' (空文字列): 陽イオン性/陰イオン性に基づいてソート(デフォルト)。

戻り値:

str - 計算された化学組成文字列。

AtomDensity()[ソース]

結晶の原子密度を計算して取得します。

原子密度は、展開された原子サイトの総数を単位胞体積(pm^3)で割った値です。

戻り値:

float - 結晶の原子密度 (A^-3)。

AtomSiteList(mode=0)[ソース]

原子サイトのリストを取得します。(エイリアス)

atom_site_list メソッドと同じです。

パラメータ:

mode -- int, optional - 取得するリストの種類を指定するモード。 0: 非対称単位内の原子サイトリスト。 それ以外: 展開された原子サイトリスト。デフォルトは0。

戻り値:

list of tklib.tkcrystal.tkatomsite.tkAtomSite - 原子サイトオブジェクトのリスト。

AtomTypeList()[ソース]

登録されている原子タイプのリストを取得します。

戻り値:

list of tklib.tkcrystal.tkatomtype.tkAtomType - 原子タイプオブジェクトのリスト。

BurstToP1()[ソース]

現在の結晶構造をP1空間群に変換し、すべての原子を非対称単位に展開します。

この操作により、すべての空間群対称性が除去され、すべての原子が独立したサイトとして扱われます。 現在の空間群がP1に設定され、展開された原子サイトリストが非対称単位の原子サイトリストとして再設定され、 その後座標が再度展開されます。

CalLatticeParametersFromMetrics(update_aij=False)[ソース]

計量テンソル __gij から格子定数 (a, b, c, α, β, γ) を計算し、設定します。

このメソッドは、格子ベクトル __aij も更新しますが、update_aij がFalseの場合、 元の __aij は復元されます。 警告: ベータ角の計算に self.__gij[2][1] が使用されていますが、 これは self.__gij[2][0] (g_ca) の意図であった可能性があります。 既存のロジックを変更せずに維持します。

パラメータ:

update_aij -- bool, optional - 格子ベクトル aij を更新し続けるかどうか。 Falseの場合、計算後に元の`aij`を復元します。デフォルトはFalse。

戻り値:

None

CalMetricsFromLatticeVector()[ソース]

現在の格子ベクトル __aij から計量テンソル __gij を計算し、設定します。

計量テンソル gij は、g_ij = a_i . a_j (ベクトルa_iとa_jの内積) で計算されます。

戻り値:

numpy.ndarray - 計算された3x3の計量テンソル行列。

CalcLatticeVectorsFromLatticeParameters(latt=None)[ソース]

格子定数 (a, b, c, α, β, γ) から格子ベクトル行列 aij を計算します。

直交座標系に対する標準的な変換式(aベクトルがx軸に沿い、bベクトルがxy平面内にある)を 使用して格子ベクトルを構築します。 警告: このメソッドは、最初の return aij で処理を終了するため、 その後の if/elif/else ブロック内のロジックは実行されません。 既存のロジックを変更せずに維持します。

パラメータ:

latt -- list of float, optional - 計算に使用する格子定数 [a, b, c, alpha, beta, gamma]。 Noneの場合、オブジェクトの内部格子定数を使用します。

戻り値:

numpy.ndarray - 計算された3x3の格子ベクトル行列。

CalcMetrics(update_aij=True)[ソース]

格子定数に基づいて計量テンソル (gij)、逆計量テンソル (Rgij)、逆格子定数 (a*, b*, c*, α*, β*, γ*)、 および逆格子ベクトル (a*, b*, c*) を計算し、設定します。

このメソッドは、SetLatticeParameters が呼ばれた際などに内部的に使用されます。 また、update_aij がTrueの場合、格子ベクトル aij も再計算されます。

パラメータ:

update_aij -- bool, optional - 格子ベクトル aij も更新するかどうか。デフォルトはTrue。

戻り値:

None

CalculateDensity()[ソース]

単位胞の分子量と結晶密度を計算し、設定します。

原子タイプリストと非対称単位内の原子サイトリストに基づいて、 単位胞あたりの分子量 (MW) と結晶密度を計算します。 計算された密度は4桁に丸められます。

戻り値:

float - 計算された結晶密度。

CalculateHKLInterplanarSpacing(h, k, l)[ソース]

ミラー指数 (hkl) に対応する面間隔 dhkl を計算します。

逆計量テンソル Rgij を使用して計算します。

パラメータ:
  • h -- int - ミラー指数 h。

  • k -- int - ミラー指数 k。

  • l -- int - ミラー指数 l。

戻り値:

float or None - 面間隔 dhkl。計算できない場合(分母が0)はNone。

CalculateLatticeParametersFromVector(aij=None)[ソース]

格子ベクトル aij から格子定数 (a, b, c, α, β, γ) を計算します。(エイリアス)

calculate_lattice_parameters_from_vector メソッドと同じです。

パラメータ:

aij -- numpy.ndarray, optional - 計算に使用する3x3の格子ベクトル行列。Noneの場合、オブジェクトの内部格子ベクトルを使用。

戻り値:

numpy.ndarray - 計算された格子定数 [a, b, c, alpha, beta, gamma]。

CalculateReciprocalVolume()[ソース]

逆格子定数に基づいて逆格子単位胞体積を計算し、設定します。

戻り値:

float - 計算された逆格子単位胞体積。

CalculateVolume()[ソース]

格子定数に基づいて単位胞体積を計算し、設定します。

六面体単位胞の体積計算式を使用します。

戻り値:

float - 計算された単位胞体積。

CartesianToFractional(xc, yc, zc)[ソース]

直交座標を分数座標に変換します。

格子ベクトル行列 aij を使用して変換を行います。

パラメータ:
  • xc -- float - 直交座標のx成分。

  • yc -- float - 直交座標のy成分。

  • zc -- float - 直交座標のz成分。

戻り値:

numpy.ndarray - 分数座標 [x, y, z]。

ChemicalComposition()[ソース]

計算された化学組成を取得します。

例: 'H2O'

戻り値:

str - 化学組成文字列。

ClearAtomSiteList()[ソース]

原子サイトのリストをクリアします。

戻り値:

list - 空になった原子サイトのリスト。

ClearAtomTypeList()[ソース]

原子タイプのリストをクリアします。

戻り値:

list - 空になった原子タイプのリスト。

ClearSpaceGroup()[ソース]

空間群情報をクリアし、P1空間群に初期化します。

戻り値:

tklib.tkcrystal.tkspacegroup.tkSpaceGroup - 新しく初期化された空間群オブジェクト。

CrystalName(Create=0)[ソース]

現在の結晶名を取得します。

結晶名が設定されていない場合、Create が1であれば化学組成またはオブジェクトのパスから ファイル名を抽出し、それを結晶名として返します。

パラメータ:

Create -- int, optional - 結晶名が未設定の場合に生成するかどうかを示すフラグ。 1の場合、生成を試みます。デフォルトは0。

戻り値:

str or None - 結晶名、または生成に失敗した場合はNone。

Density()[ソース]

結晶の密度を取得します。

この値は、通常 CalculateDensity メソッドによって設定されます。

戻り値:

float - 結晶の密度。未設定の場合は0.0。

DiffractionAngle(wl, h, k, l)[ソース]

指定された波長 wl とミラー指数 (hkl) に対する回折角度を計算します。

2θ (Q2) の角度を計算し、面間隔 (dhkl) と逆格子ベクトル |s| (sB) も返します。

パラメータ:
  • wl -- float - 使用するX線波長(オングストローム単位)。

  • h -- int - ミラー指数 h。

  • k -- int - ミラー指数 k。

  • l -- int - ミラー指数 l。

戻り値:

tuple of (float, float, float) or (float, float, None) - (dhkl, sB, 2θ) のタプル。2θが計算できない場合はNone。

DoSymmetryOperation(pos, i)[ソース]

指定されたインデックス i の対称操作を座標 pos に適用します。

空間群オブジェクトを通じて対称操作を実行します。

パラメータ:
  • pos -- numpy.ndarray or list of float - 適用する分数座標 [x, y, z]。

  • i -- int - 適用する対称操作のインデックス。

戻り値:

numpy.ndarray - 対称操作が適用された新しい分数座標。

ExpandCoordinates(DoTranslation=1)[ソース]

非対称単位内の原子サイトを空間群操作と並進操作に基づいて展開し、全原子サイトのリストを生成します。(エイリアス)

expand_coordinates メソッドと同じです。

パラメータ:

DoTranslation -- int, optional - 並進対称操作を適用するかどうかを示すフラグ。 1の場合、並進操作も考慮します。デフォルトは1。

戻り値:

None

ExpandedAtomSiteList()[ソース]

展開された(空間群操作によって生成された)原子サイトのリストを取得します。(エイリアス)

expanded_atom_site_list メソッドと同じです。

戻り値:

list of tklib.tkcrystal.tkatomsite.tkAtomSite - 展開された原子サイトオブジェクトのリスト。

Fhkl(sB, h, k, l)[ソース]

指定されたミラー指数 (hkl) と |s| = 1/(2d) 値 sB に対する構造因子 F(hkl) を計算します。

展開された原子サイトリスト内の各原子の原子散乱因子 (ASF) と位置に基づいて計算されます。

パラメータ:
  • sB -- float - |s| = 1/(2d) の値(A^-1)。

  • h -- int - ミラー指数 h。

  • k -- int - ミラー指数 k。

  • l -- int - ミラー指数 l。

戻り値:

complex - 計算された構造因子 F(hkl)。

FindAtomSite(atomname, mode=0)[ソース]

指定された原子名に対応する原子サイトオブジェクトを検索します。

mode が0の場合、非対称単位内の原子サイトリストから検索します。

パラメータ:
  • atomname -- str - 検索する原子名。

  • mode -- int, optional - 検索するリストのモード。 0: 非対称単位内の原子サイトリスト。 デフォルトは0。

戻り値:

tklib.tkcrystal.tkatomsite.tkAtomSite or None - 見つかった場合はその原子サイトオブジェクト。見つからない場合はNone。

FindAtomType(atomtype)[ソース]

指定された原子タイプ名に対応する原子タイプリストのインデックスを検索します。

パラメータ:

atomtype -- str - 検索する原子タイプ名。

戻り値:

int - 見つかった場合はそのインデックス (0から始まる)。見つからない場合は-1。

FindNearestEquivalentFractionCoordinate(x2, x)[ソース]

与えられた座標 x2x に対して最も近い等価な分数座標を見つけます。

周期的な境界条件を考慮し、x2 から整数値を加減して x に最も近くなるように調整します。

パラメータ:
  • x2 -- float - 調整する分数座標値。

  • x -- float - 基準となる分数座標値。

戻り値:

float - x に最も近い等価な分数座標値。

FindNearestSite(pos0, irange=[1, 1, 1])[ソース]

指定された位置 pos0 に最も近い原子サイトを、展開された全原子サイトから検索し、そのインデックスを返します。(エイリアス)

find_nearest_site メソッドと同じです。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 検索の基準となる分数座標 [x, y, z]。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。デフォルトは[1, 1, 1]。

戻り値:

int - 最も近い原子サイトのリスト内インデックス。見つからなかった場合(リストが空の場合など)は-1。

FindiAtomType(atomname)[ソース]

指定された原子名に対応する原子タイプリストのインデックスを検索します。(エイリアス)

FindAtomType メソッドと似ていますが、SplitAtomName を内部で使用して原子名を解析します。

パラメータ:

atomname -- str - 検索する原子名。

戻り値:

int - 見つかった場合はそのインデックス (0から始まる)。見つからない場合は-1。

FormulaUnit()[ソース]

単位胞あたりの化学式単位の数を取得します (Z値)。

この値は、通常 AnalyzeChemicalComposition メソッドによって設定されます。

戻り値:

int or str - 化学式単位の数、または未設定の場合は空文字列。

FractionalToCartesian(x, y, z)[ソース]

分数座標を直交座標に変換します。(エイリアス)

fractional2cartesian メソッドと同じです。

パラメータ:
  • x -- float - 分数座標のx成分。

  • y -- float - 分数座標のy成分。

  • z -- float - 分数座標のz成分。

戻り値:

list of float - 直交座標 [xc, yc, zc]。

GetBravaisLattice()[ソース]

現在の空間群のブラベー格子名を取得します。

戻り値:

str - ブラベー格子名。

GetInterAtomicAngle(pos0, pos1, pos2)[ソース]

3つの原子サイト pos0, pos1, pos2 が形成する角度(pos1-pos0-pos2)を計算します。

pos0 を頂点とする角度を計算します。 degacos が0-180度の範囲を返す場合、if angle > 180.0 の条件は常にFalseになりますが、 既存のロジックを変更せずに維持します。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 角度の頂点となる分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 1番目の辺の端点となる分数座標 [x, y, z]。

  • pos2 -- numpy.ndarray or list of float - 2番目の辺の端点となる分数座標 [x, y, z]。

戻り値:

float - 計算された原子間角度(度)。

GetInterAtomicDistance(pos0, pos1, **kwargs)[ソース]

実空間における2つの分数座標間の距離を計算します。(エイリアス)

distance メソッドと同じです。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 実空間の開始点分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 実空間の終了点分数座標 [x, y, z]。

  • kwargs -- 距離計算に影響を与える可能性のある追加のキーワード引数。

戻り値:

float - 2点間の距離。

GetLatticeRange(Rmax)[ソース]

指定された最大距離 Rmax を考慮し、実空間での隣接単位胞の探索範囲 [nx, ny, nz] を推定します。

格子定数と角度に基づき、より正確な範囲を計算します。

パラメータ:

Rmax -- float - 考慮する最大距離。

戻り値:

tuple of int - 探索する隣接単位胞の範囲のタプル (nx+1, ny+1, nz+1)。

GetNearestInterAtomicDistance(pos0, pos1, AllowZero=True, irange=[1, 1, 1], **kwargs)[ソース]

2つの原子サイト間の最も近い原子間距離を計算します。(エイリアス)

get_nearest_interatomic_distance メソッドと同じです。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 最初の原子サイトの分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 2番目の原子サイトの分数座標 [x, y, z]。

  • AllowZero -- bool, optional - 距離が0(同一サイト)の場合を許容するかどうか。デフォルトはTrue。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。デフォルトは[1, 1, 1]。

  • kwargs -- 距離計算に影響を与える可能性のある追加のキーワード引数。

戻り値:

float or None - 最も近い原子間距離。オフセット計算が失敗した場合はNone。

GetNearestInterAtomicDistanceWithOffset(pos0, pos1, AllowZero=True, irange=[1, 1, 1], **kwargs)[ソース]

2つの原子サイト間の最も近い原子間距離と、その距離を達成するための並進オフセットを計算します。(エイリアス)

get_nearest_interatomic_distance_with_offset メソッドと同じです。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 最初の原子サイトの分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 2番目の原子サイトの分数座標 [x, y, z]。

  • AllowZero -- bool, optional - 距離が0(同一サイト)の場合を許容するかどうか。デフォルトはTrue。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。デフォルトは[1, 1, 1]。

  • kwargs -- 距離計算に影響を与える可能性のある追加のキーワード引数。

戻り値:

tuple of (float, float, float, float) - 最も近い原子間距離、およびその距離を達成するための x, y, z方向の並進オフセット。見つからなかった場合 (None, None, None, None)。

GetNearestInterAtomicDistances(pos0, pos1, CoordRMax=10.0, AllowZero=True, irange=None)[ソース]

指定された最大距離 CoordRMax 内にある、2つの原子サイト間のすべての原子間距離をリストで取得します。

周期境界条件を考慮し、指定された irange の範囲(または CoordRMax から推定された範囲)で 隣接単位胞を探索します。 警告: 内部で list[c] = ... のようなリストのインデックスアクセスを使用していますが、 list は空のリストとして初期化されているため、実行時に IndexError が発生する可能性があります。 正しい操作は list.append({'piCell': [ix, iy, iz], 'r': r}) ですが、既存のロジックを変更せずに維持します。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 最初の原子サイトの分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 2番目の原子サイトの分数座標 [x, y, z]。

  • CoordRMax -- float, optional - 距離の最大閾値。この値を超える距離はリストに含まれません。デフォルトは10.0。

  • AllowZero -- bool, optional - 距離が0(同一サイト)の場合を許容するかどうか。デフォルトはTrue。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。Noneの場合、CoordRMax から推定されます。

戻り値:

list of dict - 各要素は {'piCell': [ix, iy, iz], 'r': distance} の形式の辞書。

GetReciprocalDistanceFromK(k0, k1)[ソース]

逆格子空間における2点間の距離を計算します。

2つの逆格子ベクトル k0k1 を使用し、逆計量テンソル Rgij を用いて距離を算出します。

パラメータ:
  • k0 -- numpy.ndarray or list of float - 逆格子空間の開始点座標 [kx, ky, kz]。

  • k1 -- numpy.ndarray or list of float - 逆格子空間の終了点座標 [kx, ky, kz]。

戻り値:

float - 逆格子空間における2点間の距離。

GetSpaceGroupInf()[ソース]

空間群の名前、番号、およびセット番号を取得します。

戻り値:

tuple of (str, int, int) - 空間群の名前、番号、セット番号のタプル。

GetimaxByRmax(Rmax)[ソース]

指定された最大距離 Rmax を考慮し、実空間での隣接単位胞の探索範囲 [ix, iy, iz] を推定します。

この関数は、立方晶系を仮定して単純な範囲を計算します。

パラメータ:

Rmax -- float - 考慮する最大距離。

戻り値:

tuple of int - 探索する隣接単位胞の範囲のタプル (nx, ny, nz)。

InitializeRoot()[ソース]

オブジェクトの内部変数を初期化します。

結晶名、サンプル名、化学組成、格子ベクトル、計量テンソル、空間群、 原子タイプリスト、原子サイトリスト、温度などをリセットします。

IsAnionic(name)[ソース]

指定された原子名が陰イオン性かどうかを判定します。

酸素(O), 硫黄(S), セレン(Se), テルル(Te), フッ素(F), 塩素(Cl), ヨウ素(I), 窒素(N), ヒ素(As), アンチモン(Sb) を陰イオン性と見なします。

パラメータ:

name -- str - 判定する原子名(例: 'O', 'Cl')。

戻り値:

int - 陰イオン性であれば1、そうでなければ0。

IsCationic(name)[ソース]

指定された原子名が陽イオン性かどうかを判定します。

IsAnionic メソッドの逆の結果を返します。

パラメータ:

name -- str - 判定する原子名。

戻り値:

bool - 陽イオン性であればTrue、そうでなければFalse。

LatticeAxis()[ソース]

結晶の格子軸の種類(例: 'a', 'b', 'c' に対応するシステム名)を取得します。(エイリアス)

lattice_axis メソッドと同じです。

戻り値:

str - 格子軸の種類を示す文字列(小文字)。

LatticeParameters(UseAtomicUnit=0)[ソース]

格子定数 (a, b, c, α, β, γ) を取得します。(エイリアス)

lattice_parameters メソッドと同じです。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

list of float - 格子定数のリスト。

LatticeSystem()[ソース]

結晶の格子系(例: 'cubic', 'hexagonal')を取得します。(エイリアス)

lattice_system メソッドと同じです。

戻り値:

str - 格子系を示す文字列(小文字)。

LatticeVectors(UseAtomicUnit=0)[ソース]

格子ベクトル行列 aij を取得します。(エイリアス)

lattice_vectors メソッドと同じです。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

numpy.ndarray - 3x3の格子ベクトル行列。

Metrics()[ソース]

計量テンソル (gij) と逆計量テンソル (Rgij) を取得します。

これらは、実空間および逆格子空間での距離や角度の計算に使用されます。

戻り値:

tuple of (numpy.ndarray, numpy.ndarray) - (計量テンソル, 逆計量テンソル)。

ReciprocalLatticeParameters(UseAtomicUnit=0)[ソース]

逆格子定数 (a*, b*, c*, α*, β*, γ*) を取得します。

UseAtomicUnit が1の場合、原子単位系に変換して返します。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

list of float - 逆格子定数のリスト。

ReciprocalLatticeVectors(UseAtomicUnit=0)[ソース]

逆格子ベクトル (a*, b*, c*) を取得します。

UseAtomicUnit が1の場合、原子単位系に変換して返します。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

numpy.ndarray - 逆格子ベクトルの3x3行列。

ReciprocalVolume(UseAtomicUnit=0)[ソース]

逆格子単位胞体積を取得します。

UseAtomicUnit が1の場合、原子単位系に変換して返します。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

float - 逆格子単位胞体積。未設定の場合はアクセスエラーになる可能性があるため、使用前に注意が必要です。

RoundLatticeParameters(val, eps=1e-08)[ソース]

格子定数の角度を特定の標準値(60, 90, 120度)に丸めます。

指定された値が90度、60度、120度に非常に近い場合、その標準値に丸めます。 それ以外の場合は、RoundParameter 関数を使用して丸めます。

パラメータ:
  • val -- float - 丸めたい格子定数の角度(度)。

  • eps -- float, optional - 許容誤差。デフォルトは1.0e-8。

戻り値:

float - 丸められた格子定数の角度。

RoundSymmetricPosition(x, tol=0.0001)[ソース]

分数座標値を特定の対称性に関連する有理数に丸めます。

例えば、1/3, 2/3, 1/6 などの値に近い場合、それらの正確な値に丸めます。

パラメータ:
  • x -- float - 丸める分数座標値。

  • tol -- float, optional - 許容誤差。デフォルトは0.0001。

戻り値:

float - 丸められた分数座標値。

SampleName(Create=0)[ソース]

現在のサンプル名を取得します。

サンプル名が設定されていない場合、Create が1であればオブジェクトのパスからファイル名を抽出し、 それをサンプル名として返します。

パラメータ:

Create -- int, optional - サンプル名が未設定の場合にパスから生成するかどうかを示すフラグ。 1の場合、生成を試みます。デフォルトは0。

戻り値:

str or None - サンプル名、または生成に失敗した場合はNone。

SetAtomDensity(density)[ソース]

結晶の原子密度を設定します。

パラメータ:

density -- float - 設定する原子密度。

戻り値:

None

SetAtomSite(iatom, iatomtype=None, atomtype=None, label=None, atomname=None, m=None, ws=None, pos=[], force=None, occ=1.0, hydrogen=None)[ソース]

指定されたインデックス iatom の原子サイトのプロパティを設定します。

警告: iatomtype がNoneでない場合、at.SetiAtomType(iAtomType) が呼び出されますが、 iAtomType はこのスコープで定義されていません。これは実行時エラーを引き起こす可能性がありますが、 既存のロジックを変更せずに維持します。

パラメータ:
  • iatom -- int - 設定対象の原子サイトのインデックス。

  • iatomtype -- int, optional - 原子タイプリスト内の原子タイプのインデックス。

  • atomtype -- tklib.tkcrystal.tkatomtype.tkAtomType, optional - tkAtomTypeオブジェクト。

  • label -- str, optional - 原子サイトのラベル。

  • atomname -- str, optional - 原子サイトの原子名。

  • m -- Any, optional - 未使用または不明なパラメータ。

  • ws -- Any, optional - 未使用または不明なパラメータ。

  • pos -- list of float, optional - 原子サイトの分数座標 [x, y, z]。

  • force -- numpy.ndarray or list of float, optional - 原子サイトにかかる力 [fx, fy, fz]。

  • occ -- float, optional - 占有率。デフォルトは1.0。

  • hydrogen -- Any, optional - 未使用または不明なパラメータ。

戻り値:

None

SetChemicalComposition(composition)[ソース]

化学組成を設定します。

パラメータ:

composition -- str - 設定する化学組成文字列。

戻り値:

None

SetCrystalName(name=None, MakeFromPath=0)[ソース]

結晶名を設定します。

name が指定された場合、それを結晶名として設定します。 MakeFromPath が1の場合、オブジェクトのパスからファイル名を抽出し、それを結晶名として設定します。

パラメータ:
  • name -- str, optional - 設定する結晶名。Noneの場合、MakeFromPath の値に応じて処理されます。

  • MakeFromPath -- int, optional - オブジェクトのパスから結晶名を生成するかどうかを示すフラグ。 1の場合、パスから生成します。デフォルトは0。

戻り値:

None

SetDensity(density)[ソース]

結晶の密度を設定します。

パラメータ:

density -- float - 設定する密度。

戻り値:

None

SetFormulaUnit(Z)[ソース]

単位胞あたりの化学式単位の数を設定します (Z値)。

パラメータ:

Z -- int - 設定する化学式単位の数。

戻り値:

None

SetLatticeParameters(latt, GuessLatticeSystem=0, update_aij=True)[ソース]

格子定数 (a, b, c, α, β, γ) を設定し、空間群の格子系を更新し、計量テンソルなどを再計算します。

パラメータ:
  • latt -- list of float - 設定する格子定数 [a, b, c, alpha, beta, gamma]。

  • GuessLatticeSystem -- int, optional - 格子定数から格子系を推定するかどうかを示すフラグ。デフォルトは0。

  • update_aij -- bool, optional - 格子ベクトル aij も更新するかどうか。デフォルトはTrue。

戻り値:

None

SetLatticeSystem(latticesystem, SearchByLatticeParameter, tollat, tolangle)[ソース]

結晶の格子系を設定します。

tkSpaceGroup オブジェクトに設定を委譲します。

パラメータ:
  • latticesystem -- str - 設定する格子系名。

  • SearchByLatticeParameter -- bool - 格子パラメータに基づいて格子系を検索するかどうか。

  • tollat -- float - 格子定数比較の許容誤差。

  • tolangle -- float - 格子角度比較の許容誤差。

戻り値:

None

SetLatticeVectors(aij)[ソース]

格子ベクトル行列 aij を設定し、それに基づいて計量テンソルと格子定数を再計算します。(エイリアス)

set_lattice_vectors メソッドと同じです。

パラメータ:

aij -- numpy.ndarray or list of list of float - 設定する3x3の格子ベクトル行列。

戻り値:

None

SetSampleName(name=None, MakeFromPath=0)[ソース]

サンプル名を設定します。

name が指定された場合、それをサンプル名として設定します。 MakeFromPath が1の場合、オブジェクトのパスからファイル名を抽出し、それをサンプル名として設定します。

パラメータ:
  • name -- str, optional - 設定するサンプル名。Noneの場合、MakeFromPath の値に応じて処理されます。

  • MakeFromPath -- int, optional - オブジェクトのパスからサンプル名を生成するかどうかを示すフラグ。 1の場合、パスから生成します。デフォルトは0。

戻り値:

None

SetSpaceGroup(name=None, number=None, set=1)[ソース]

結晶の空間群を設定します。

tkSpaceGroup オブジェクトに設定を委譲し、格子系や格子軸も更新します。

パラメータ:
  • name -- str, optional - 空間群の名前(例: 'P 1')。

  • number -- int, optional - 空間群番号。

  • set -- int, optional - 空間群のセット番号。デフォルトは1。

戻り値:

None

SetSumChemicalComposition(composition)[ソース]

単位胞内の全原子に基づく合計化学組成を設定します。

この値は、通常 AnalyzeChemicalComposition メソッドによって設定されます。

パラメータ:

composition -- str - 設定する合計化学組成文字列。

戻り値:

None

SetTemperature(T)[ソース]

温度を設定します。

パラメータ:

T -- float - 設定する温度。

戻り値:

None

SetUnitcellWeight(MW)[ソース]

単位胞の分子量を設定します。

パラメータ:

MW -- float - 設定する分子量。

戻り値:

None

SetVolume(vol)[ソース]

単位胞体積を設定します。

パラメータ:

vol -- float or None - 設定する単位胞体積。Noneの場合、何も行われません。

戻り値:

None

SpaceGroup()[ソース]

現在の空間群オブジェクトを取得します。

もし空間群が初期化されていない場合、P1空間群として初期化されます。

戻り値:

tklib.tkcrystal.tkspacegroup.tkSpaceGroup - 空間群オブジェクト。

SumChemicalComposition()[ソース]

単位胞内の全原子に基づく合計化学組成を取得します。

例: 単位胞内にHが2個、Oが1個の場合 'H2O'。 この値は、AnalyzeChemicalComposition メソッドによって設定されます。

戻り値:

str - 合計化学組成文字列。

Symmetrize(tollatt=-4.0, tolangle=-4.0, tolpos=-4.0)[ソース]

結晶の格子定数を、現在の格子系に基づいて対称化します。

角度が90度に非常に近い場合は90度に丸められ、その後、各格子系固有の規則に従って 格子定数 (a, b, c, α, β, γ) が対称化されます。 このメソッドでは位置座標の対称化は行われません。 警告: 内部で SPG オブジェクトが明示的に定義されていない可能性がありますが、 既存のロジックを変更せずに維持します。また、菱面体晶・三方晶系の格子角度計算に 格子定数b (latt[1]) が誤って使用されている可能性があります。

パラメータ:
  • tollatt -- float, optional - 格子定数比較の許容誤差。デフォルトは1.0e-5。

  • tolangle -- float, optional - 格子角度比較の許容誤差。デフォルトは1.0e-5。

  • tolpos -- float, optional - 位置座標比較の許容誤差。このメソッドでは未使用。デフォルトは1.0e-5。

戻り値:

None

SymmetrizeParameter(ls, pos, tol)[ソース]

与えられた格子系 ls に基づいて、位置座標 pos を対称化します。

例えば、立方晶系では3つの座標が等しくなるように平均化します。

パラメータ:
  • ls -- str - 格子系名(例: 'cubic', 'hexagonal')。

  • pos -- list of float - 対称化する分数座標 [x, y, z]。

  • tol -- float - 丸めに使用する許容誤差。

戻り値:

list of float - 対称化された分数座標。

SymmetryOperation(i)[ソース]

指定されたインデックス i の空間群対称操作を取得します。

パラメータ:

i -- int - 取得する対称操作のインデックス。

戻り値:

str - 対称操作を表す文字列。

Temperature()[ソース]

現在の温度を取得します。

戻り値:

float - 現在設定されている温度。

UnitcellWeight()[ソース]

単位胞の分子量を取得します。

この値は、通常 CalculateDensity メソッドによって設定されます。

戻り値:

float - 単位胞の分子量。未設定の場合は0.0。

Volume(UseAtomicUnit=0)[ソース]

単位胞体積を取得します。

UseAtomicUnit が1の場合、原子単位系に変換して返します。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

float - 単位胞体積。未設定の場合はアクセスエラーになる可能性があるため、使用前に注意が必要です。

atom_site_list(mode=0)[ソース]

原子サイトのリストを取得します。

mode が0の場合、非対称単位内の原子サイトのリストを返します。 それ以外の場合、展開された原子サイトのリストを返します。

パラメータ:

mode -- int, optional - 取得するリストの種類を指定するモード。 0: 非対称単位内の原子サイトリスト。 それ以外: 展開された原子サイトリスト。デフォルトは0。

戻り値:

list of tklib.tkcrystal.tkatomsite.tkAtomSite - 原子サイトオブジェクトのリスト。

calculate_lattice_parameters_from_vector(aij=None)[ソース]

格子ベクトル aij から格子定数 (a, b, c, α, β, γ) を計算します。

aij がNoneの場合、オブジェクト自身の格子ベクトルを使用し、体積も再計算します。 計算された体積 V はこのメソッド内で使用されていませんが、既存のロジックを変更せずに維持します。

パラメータ:

aij -- numpy.ndarray, optional - 計算に使用する3x3の格子ベクトル行列。Noneの場合、オブジェクトの内部格子ベクトルを使用。

戻り値:

numpy.ndarray - 計算された格子定数 [a, b, c, alpha, beta, gamma]。

count_by_type(atype, mode='short', target='expanded')[ソース]

指定された原子タイプ atype の原子サイト数をカウントします。

target パラメータで展開された原子サイトまたは非対称原子サイトのどちらを対象にするか、 mode パラメータで原子名の比較方法(短い名前か完全な名前か)を指定できます。

パラメータ:
  • atype -- str - カウントする原子タイプ名。

  • mode -- str, optional - 原子名の比較モード。 'short': 原子タイプのみで比較(例: 'O')。 'full': 完全な原子名で比較(例: 'O1')。 デフォルトは'short'。

  • target -- str, optional - カウントの対象となる原子サイトリスト。 'expanded': 展開された全原子サイト。 'asymmetric': 非対称単位内の原子サイト。 デフォルトは'expanded'。

戻り値:

int - 指定された原子タイプの原子サイト数。

distance(pos0, pos1, **kwargs)[ソース]

実空間における2つの分数座標間の距離を計算します。

2つの分数座標 pos0pos1 を使用し、計量テンソル gij を用いて距離を算出します。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 実空間の開始点分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 実空間の終了点分数座標 [x, y, z]。

  • kwargs -- 距離計算に影響を与える可能性のある追加のキーワード引数。

戻り値:

float - 2点間の距離。

expand_coordinates(DoTranslation=1)[ソース]

非対称単位内の原子サイトを空間群操作と並進操作に基づいて展開し、全原子サイトのリストを生成します。

このメソッドは、__ExpandedAtomSiteList を生成し、各非対称原子サイトの多重度を設定し、 さらに単位胞の分子量、密度、化学組成を再計算します。

パラメータ:

DoTranslation -- int, optional - 並進対称操作を適用するかどうかを示すフラグ。 1の場合、並進操作も考慮します。デフォルトは1。

戻り値:

None

expanded_atom_site_list()[ソース]

展開された(空間群操作によって生成された)原子サイトのリストを取得します。

戻り値:

list of tklib.tkcrystal.tkatomsite.tkAtomSite - 展開された原子サイトオブジェクトのリスト。

find_nearest_site(pos0, irange=[1, 1, 1])[ソース]

指定された位置 pos0 に最も近い原子サイトを、展開された全原子サイトから検索し、そのインデックスを返します。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 検索の基準となる分数座標 [x, y, z]。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。デフォルトは[1, 1, 1]。

戻り値:

int - 最も近い原子サイトのリスト内インデックス。見つからなかった場合(リストが空の場合など)は-1。

fractional2cartesian(x, y, z)[ソース]

分数座標を直交座標に変換します。

格子ベクトル行列 aij を使用して変換を行います。

パラメータ:
  • x -- float - 分数座標のx成分。

  • y -- float - 分数座標のy成分。

  • z -- float - 分数座標のz成分。

戻り値:

list of float - 直交座標 [xc, yc, zc]。

get_atom_name_list(mode='all', NameOnly=True)[ソース]

指定されたモードに基づいて原子名のリストを取得します。

パラメータ:
  • mode -- str, optional - 取得する原子サイトのモード。 'aym': 非対称単位内の原子サイト。 (typo: 'asym' の意図) 'all': 展開された全原子サイト。 'type': 原子タイプリスト。 デフォルトは 'all'。

  • NameOnly -- bool, optional - 原子名のみを返すかどうか。Trueの場合、原子名(例: 'C')を返します。 Falseの場合、完全な原子名(例: 'C1')を返すことがあります。デフォルトはTrue。

戻り値:

list of str - 原子名のリスト。

get_nearest_interatomic_distance(pos0, pos1, AllowZero=True, irange=[1, 1, 1], **kwargs)[ソース]

2つの原子サイト間の最も近い原子間距離を計算します。

GetNearestInterAtomicDistanceWithOffset メソッドを使用して距離とオフセットを計算し、距離のみを返します。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 最初の原子サイトの分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 2番目の原子サイトの分数座標 [x, y, z]。

  • AllowZero -- bool, optional - 距離が0(同一サイト)の場合を許容するかどうか。デフォルトはTrue。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。デフォルトは[1, 1, 1]。

  • kwargs -- 距離計算に影響を与える可能性のある追加のキーワード引数。

戻り値:

float or None - 最も近い原子間距離。オフセット計算が失敗した場合はNone。

get_nearest_interatomic_distance_with_offset(pos0, pos1, AllowZero=True, irange=[1, 1, 1], **kwargs)[ソース]

2つの原子サイト間の最も近い原子間距離と、その距離を達成するための並進オフセットを計算します。

周期境界条件を考慮し、指定された irange の範囲で隣接単位胞を探索します。 このメソッドには、オフセットの計算ロジックに潜在的な問題 (ixのみを使用しiy, izを無視) が含まれていますが、 既存のロジックを変更せずに維持します。

パラメータ:
  • pos0 -- numpy.ndarray or list of float - 最初の原子サイトの分数座標 [x, y, z]。

  • pos1 -- numpy.ndarray or list of float - 2番目の原子サイトの分数座標 [x, y, z]。

  • AllowZero -- bool, optional - 距離が0(同一サイト)の場合を許容するかどうか。デフォルトはTrue。

  • irange -- list of int, optional - 探索する隣接単位胞の範囲 [ix, iy, iz]。 各要素は中心単位胞からの最大オフセットを示します。デフォルトは[1, 1, 1]。

  • kwargs -- 距離計算に影響を与える可能性のある追加のキーワード引数。

戻り値:

tuple of (float, float, float, float) - 最も近い原子間距離、およびその距離を達成するための x, y, z方向の並進オフセット。見つからなかった場合 (None, None, None, None)。

get_position_list(mode='all', IsReduce01=False)[ソース]

指定されたモードに基づいて原子位置のリストを取得します。

パラメータ:
  • mode -- str, optional - 取得する原子サイトのモード。 'aym': 非対称単位内の原子サイト。 (typo: 'asym' の意図) 'all': 展開された全原子サイト。 デフォルトは 'all'。

  • IsReduce01 -- bool, optional - 位置座標を0から1の範囲に正規化するかどうか。 Trueの場合、正規化します。デフォルトはFalse。

戻り値:

list of list of float - 各原子サイトの位置座標 (例: [[x1, y1, z1], [x2, y2, z2], ...])。

lattice_axis()[ソース]

結晶の格子軸の種類(例: 'a', 'b', 'c' に対応するシステム名)を取得します。

戻り値:

str - 格子軸の種類を示す文字列(小文字)。

lattice_parameters(UseAtomicUnit=0)[ソース]

格子定数 (a, b, c, α, β, γ) を取得します。

UseAtomicUnit が1の場合、原子単位系に変換して返します。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

list of float - 格子定数のリスト。

lattice_system()[ソース]

結晶の格子系(例: 'cubic', 'hexagonal')を取得します。

戻り値:

str - 格子系を示す文字列(小文字)。

lattice_vectors(UseAtomicUnit=0)[ソース]

格子ベクトル行列 aij を取得します。

UseAtomicUnit が1の場合、原子単位系に変換して返します。

パラメータ:

UseAtomicUnit -- int, optional - 原子単位系を使用するかどうかを示すフラグ。 1の場合、原子単位系に変換します。デフォルトは0。

戻り値:

numpy.ndarray - 3x3の格子ベクトル行列。

nAtomSite()[ソース]

非対称単位内の原子サイトの数を取得します。(エイリアス)

natom_site メソッドと同じです。

戻り値:

int - 原子サイトの数。

nAtomType()[ソース]

登録されている原子タイプの数を取得します。

戻り値:

int - 原子タイプの数。

nExpandedAtomSiteList()[ソース]

展開された原子サイトの総数を取得します。(エイリアス)

nexpanded_atom_site メソッドと同じです。

戻り値:

int - 展開された原子サイトの数。

nSymmetryOperation()[ソース]

空間群に含まれる対称操作の総数を取得します。

戻り値:

int - 対称操作の数。

natom_site()[ソース]

非対称単位内の原子サイトの数を取得します。

戻り値:

int - 原子サイトの数。

nexpanded_atom_site()[ソース]

展開された原子サイトの総数を取得します。

戻り値:

int - 展開された原子サイトの数。

set_lattice_vectors(aij)[ソース]

格子ベクトル行列 aij を設定し、それに基づいて計量テンソルと格子定数を再計算します。

設定後、内部の格子ベクトル (__aij) は与えられた aij で上書きされます。

パラメータ:

aij -- numpy.ndarray or list of list of float - 設定する3x3の格子ベクトル行列。

戻り値:

None