tabuchi:xrayutils
文書の過去の版を表示しています。
xrayUtilities の使用例
python のライブラリとして提供されているxrayUtiliesの使用例を幾つか紹介しています。 応用物理学会 結晶工学分科会が企画する結晶工学セミナー「PythonとAIで進める結晶工学 ~結晶成長から評価技術まで~」(2026.3.9)での講演内容に対応して準備したものです。
主な目的は 「1.使用例」 を示すことです。
python の使用やプログラムを書くことについてはセミナーでは、より詳細な説明がありますのでそちらに従って下さい
(セミナーが推奨する神谷先生のwebページ)。
後日、セミナーの受講とは別に xrayUtilities を試してみたいという時には「xrayUtilities の準備」を参照してみて下さい。
1. 使用例
1.1 結晶構造の定義
-
結晶構造の定義と表示 ここをクリックすると表示
-
結晶構造の定義のバリエーション ここをクリックすると表示
1.2 構造因子の計算
-
構造因子の計算と表示 ここをクリックすると表示
1.3 回折パタンの計算と逆格子マップの表示
-
回折パタンの計算と逆格子マップの表示 ここをクリックすると表示
1.4 回折スペクトルの計算
- AlGaN/GaN(Sub)の回折スペクトルの計算と表示 ++ ここをクリックすると表示
- example-04-4.py
import numpy as np import matplotlib.pyplot as plt import xrayutilities as xu # GaN, AlN の結晶構造をCIFから読む GaN = xu.materials.Crystal.fromCIF("CIFs/GaN-Hex.cif") AlN = xu.materials.Crystal.fromCIF("CIFs/AlN-Hex.cif") # 今作った結晶(GaN, AlN)は、結晶構造の情報しか持ってないので # 積層構造にした時の歪の計算ができるように、弾性に関わる情報を追加する # ## どちらも Hexagonal GaN.symm_class_name = 'Hexagonal' AlN.symm_class_name = 'Hexagonal' # ## GaN, AlN の弾性定数 Cij の値を、名前のついた値として準備 C11_GaN, C12_GaN, C13_GaN, C33_GaN, C44_GaN = 390, 145, 106, 398, 105 C11_AlN, C12_AlN, C13_AlN, C33_AlN, C44_AlN = 396, 137, 108, 373, 116 # ## xu にサポートしてもらって 2階テンソルの形に組み上げる cij_array_GaN = xu.materials.material.HexagonalElasticTensor( C11_GaN, C12_GaN, C13_GaN, C33_GaN, C44_GaN ) cij_array_AlN = xu.materials.material.HexagonalElasticTensor( C11_AlN, C12_AlN, C13_AlN, C33_AlN, C44_AlN ) # ## さらに4階テンソルの形にもしておく ij to ijkl (プログラムでは '2' を 'to' の意味でよく使う) cijkl_tensor_GaN = xu.materials.material.Cij2Cijkl(cij_array_GaN) cijkl_tensor_AlN = xu.materials.material.Cij2Cijkl(cij_array_AlN) # ## Crystal オブジェクト(GaN, AlN)に4階テンソルを属性として設定 setattr(GaN, 'cijkl', cijkl_tensor_GaN) setattr(AlN, 'cijkl', cijkl_tensor_AlN) # ## 2階テンソルも elastic 属性に代入 GaN.elastic = cij_array_GaN AlN.elastic = cij_array_AlN # さらに混晶も準備する Alx = 0.2 # Al組成 x = 0.2 AlGaN = xu.materials.material.Alloy(GaN, AlN, Alx); # AlN 0.2 + GaN (1-0.2) # ここまでで、弾性定数の情報も持った GaN, AlN という結晶が準備できた。 # 次は、この物質のを積み上げていくためにその部品として Layer を作り、 # それを積み上げて積層構造にする # ## まずは 基板(厚さ無限のGaN Layer)、AlN層を準備 sub = xu.simpack.Layer( GaN, float('inf') ) # 基板 (GaN) lGaN = xu.simpack.Layer( GaN, 1500, relaxation=1.0 ) # 膜 (GaN) # ここでは使わない lAlN = xu.simpack.Layer( AlN, 1500, relaxation=1.0 ) # 膜 (AlN) # ここでは使わない lAlGaN = xu.simpack.Layer( AlGaN, 1500, relaxation=0.0 ) # 膜 (Al0.2GaN) # relaxation=1.0 => 0.0 にすると回折ピークは広角側に動く # ## 準備した Layer を積み上げて AlN層 / GaN 基板という積層構造を構築 Epi_Sub = xu.simpack.PseudomorphicStack001( "AlN/GaN", sub+lAlGaN ) # ω-2θ 強度計算 ## 波長、エネルギー、計算する角度範囲指定 wavelength = xu.wavelength('CuKa1') # 波長は Cu Ka1 の波長(1.5405...A) energy = 12390 / wavelength # エネルギーは波長から計算 two_theta = np.linspace( 32, 38, 200 ) # 横軸になる角度範囲のベクトルを作っておく #### ここまでは先にやった omega-2theta のシミュレーションの時と同一 #### # 動的モデルの設定とシミュレーション ## リファレンスに基板(GaN)だけの計算もする sub_model = xu.simpack.DynamicalModel( sub, energy=energy, resolution_width=0.0001 ) int_w2th_sub = sub_model.simulate( two_theta/2, hkl=(0, 0, 2) ) # 基板だけの時の omega-2theta スペクトル peak_index_sub = np.argmax( int_w2th_sub ) # そのピーク位置(2theta)の指数 peak_sub = two_theta[ peak_index_sub ] # そのピーク位置(2theta)の角度 omega_sub = np.linspace( peak_sub/2-0.5, peak_sub/2+0.5, 400 ) # 今わかった角度+/-0.5 omega の範囲を対称に int_RC_sub = sub_model.simulate( omega_sub, hkl=(0,0,2), geometry="omega" ) # ロッキングカーブ方向の強度計算 ## こちらは Epi/Sub = AlGaN/GaN の計算 epi_sub_model = xu.simpack.DynamicalModel( Epi_Sub, energy=energy, resolution_width=0.0001 ) int_w2th_epi_sub = epi_sub_model.simulate( two_theta/2, hkl=(0, 0, 2) ) # omega-2theta スペクトル peak_index_epi_sub = np.argmax( int_w2th_epi_sub ) # そのピーク index peak_epi_sub = two_theta[ peak_index_epi_sub ] # ピーク角度 omega_epi_sub = np.linspace( peak_epi_sub/2-0.5, peak_epi_sub/2+0.5, 400 ) int_RC_epi_sub = epi_sub_model.simulate( omega_epi_sub, hkl=(0,0,2), geometry="omega" ) # 結果のプロット plt.figure() plt.plot( omega_sub - peak_sub/2, int_RC_sub ) plt.plot( omega_epi_sub - peak_epi_sub/2, int_RC_epi_sub ) plt.title( 'Dynamical Simulation of Rocking Curve of AlGaN/GaN and GaN Sub') plt.yscale('log') plt.xlabel(r'$\omega\ (deg)$') plt.ylabel('Intensity (arb. u.)') plt.show()
田渕の講演資料の一部
田渕のページのルート
当 web ページとその下のページに関するお問い合わせ等ございましたら、連絡先にご連絡をお願いします。
今日: 4 / 昨日: 21 / 総計: 79
tabuchi/xrayutils.1772097886.txt.gz · 最終更新: by mtab







