コードをクリップボードにコピーするには,セルの右上のアイコンをクリックする。
コード [1]: 個別ピーク形状当てはめ
#
# 04ippf.ipynb
# 個別ピーク形状当てはめ分析 (individual peak profile fitting)
# NIST SRM640d Si
# 試料調製: 井田隆, 2026 年 4 月 30 日
# データ収集:佐々木翔太, 2026 年 7 月 2 日
# 「散乱プロテクタ」は 2 mm 厚のスペーサを付けて無効化
# Θ 軸に取り付けていた錘を外した測定
#
%run ..\..\ippf2.5\ippf2.py 00raw.csv 01dct.csv 02peaks_ref_640d_Si.csv 03peaks_opt.csv ippf.cfg 'NIST SRM640d'
#
# ..\..\ippf2.5/ippf2.py
# 第1引数は生データのファイル名,逆畳込的処理によるピーク形状の変化を見るためだけに用いる。
# 第2引数は逆畳込的処理後データのファイル名
# 第3引数は既知のピーク位置の表 (CSV) 形式のファイル名
# 第4引数は最適化されたピーク位置の出力先ファイル名
# 第5引数は IPPF の設定ファイル名
# 第6引数はグラフの凡例タイトルに表示する文字列
#コード [2]: ピーク・シフト値への
定数・余弦・正弦項モデルの当てはめ
#
# 個別ピーク形状当てはめ解析の結果得られたピーク位置 "03peaks_opt.csv" の
# NIST SRM 640d 保証書記載値からのずれにピークシフトの定数・余弦・正弦項モデル
# Δ2Θ = Δ2Θ_0 + Δ2Θ_1 cosΘ + Δ2Θ_2 sinΘ
# をあてはめる。
# 個別ピーク形状あてはめ (IPPF) では, カウント数の平方根に等しい
# 統計誤差(ランダム誤差)と 0.001º 以上の誤差を仮定したが,
# 測定に用いた装置 MiniFlex 600-C の仕様では角度精度(確度?) が 0.01º であることから,
# 最適化されたピーク位置に最低でも 0.005º の誤差が含まれることを前提とする。
# %config InlineBackend.figure_formats = ['svg']
#
# "model_shift5.py の第1引数は最適化されたピーク位置のリスト
# (入力ファイル)(デフォルト:03peaks_opt.csv)
# 第2引数は当てはめの結果(出力ファイル)(デフォルト:04peaks_fit.csv)
# 第3引数は当てはめモデルの名称(デフォルト:const_cos_sin)
# 第4引数は設定ファイルの名称(デフォルト:model_shift.cfg)
# 第5引数は仮定する角度誤差 (°)(デフォルト:0.005)
# 第6引数は凡例のタイトル(デフォルト:SRM640d Si)
# 第7引数は試料位置ずれ (mm)(デフォルト:0.0)
# 第8引数は試料のX線侵入深さ (mm)(デフォルト:0.22)
# 第9引数は格子定数 a (Å)(デフォルト:5.43123)
# 第10引数は格子定数 c (Å)(デフォルト:5.43123)
#
%run ..\..\ippf2.5\model_shift5.py 03peaks_opt.csv 04peaks_fit.csv const_cos_sin model_shift.cfg 0.005 'SRM640d Si' 0.0 0.218 5.43123 5.43123
# 上のコマンドラインでは全ての引数を明示したが,
# %run ..\..\ippf2.5\model_shift5.py
# としても同じ動作をする。
#コード [3]: 角度補正
#
# 逆畳込的処理・ミニフレ補整後のデータでは
# 角度補正として
# Δ2Θ = -0.0516º +0.1152º cosΘ -0.1144º sinΘ
# を用いれば良いらしい。
# 以下の角度補正処置を施す。
# 装置(ミニフレ)の出力するデータを 00raw.csv として保存したが,
# 角度補正を施したデータの出力ファイル名を 01raw.csv とすることに注意する。
#
%run ..\..\ippf2.5\correct_shift3.py 00raw.csv 01raw.csv -0.0516 +0.1152 -0.1144 +0.0 +0.0
#
# ..\..\ippf2.5\correct_shift3.py
# 第1引数は角度補正前の強度データ・ファイル名(入力)
# 第2引数は角度補正後の強度データ・ファイル名(出力)
# 第3引数は定数・余弦・正弦・倍角余弦・倍角正弦項モデルの定数項値(º)
# 第4引数は定数・余弦・正弦・倍角余弦・倍角正弦項モデルの余弦項係数値(º)
# 第5引数は定数・余弦・正弦・倍角余弦・倍角正弦項モデルの正弦項係数値(º)
# 第6引数は定数・余弦・正弦・倍角余弦・倍角正弦項モデルの倍角余弦項係数値(º)
# 第7引数は定数・余弦・正弦・倍角余弦・倍角正弦項モデルの倍角正弦項係数値(º)
#
コード [4]: 角度補正後の再逆畳込的処理
%%time
#
# このコードセルでは角度補正を施したデータ 01raw.csv に対して逆畳込的処理を施す。
#
%run ..\..\exterm7.3\exterm7.py 01raw.csv 02dct.csv dct.cfg
#
# 逆畳込的処理 (exterm7.3)
# 入力ファイル名は 01raw.csv,出力ファイル名は 02dct.csv
#コード [5]: 角度補正・逆畳込的処理での強度形状の変化のグラフ表示
#
# 角度補正を施したデータ 01raw.csv に対して
# 逆畳込的処理・ミニフレ補整を施したデータ 02dct.csv を表示する。
#
import numpy as np
import matplotlib.pyplot as plt
source0 = np.loadtxt('01raw.csv',delimiter=',')
x,y0 = source0[:,0],source0[:,1]
source1 = np.loadtxt('02dct.csv',delimiter=',')
x,y1 = source1[:,0],source1[:,1]
fig,ax = plt.subplots(figsize=(6,3))
ax.axvline(28.441,ls='--',color='gray') # NIST SRM640d 保証書記載 Si 111 ピーク位置
ax.plot(x,y0,label='Raw data')
ax.plot(x,y1,label='adaptive DCT data')
ax.xaxis.set_ticks_position('both')
ax.yaxis.set_ticks_position('both')
ax.set_xlim(27.941,28.941)
ax.set_ylim(0,)
ax.minorticks_on()
ax.set_xlabel(r'$2\Theta (^\circ)$')
ax.set_ylabel(r'${\rm Relative\ intensity,}\ s_0 $')
ax.legend()
plt.show()
#
コード [6]: 角度補正・逆畳込的処理されたデータに対する個別ピーク形状当てはめ
#
# 個別ピーク形状当てはめ分析
#
%run ..\..\ippf2.5\ippf2.py 01raw.csv 02dct.csv 02peaks_ref_640d_Si.csv 04peaks_opt.csv ippf.cfg 'NIST SRM640d'
#コード [7]: 角度補正・逆畳込的処理されたデータのピーク位置のずれに対する定数・余弦・正弦項モデルの当てはめ
#
# 角度補正を施した後に逆畳込的処理・ミニフレ補整を施した場合の
# ピークシフトの定数・余弦・正弦項モデル
# Δ2Θ = Δ2Θ_0 + Δ2Θ_1 cosΘ + Δ2Θ_2 sinΘ
# をあてはめてみる(このこと自体にはあまり意味がない)。
# 個別ピーク形状あてはめ (IPPF) では, カウント数の平方根に等しい
# 統計誤差(ランダム誤差)と 0.001º 以上の誤差を仮定したが,
# 測定に用いた装置 MiniFlex 600-C の仕様では装置製造会社の
# 保証する角度精度(確度?) が 0.01º であることから,
# 最適化されたピーク位置に最低でも 0.005º の誤差が含まれることを前提とする。
# %config InlineBackend.figure_formats = ['svg']
#
%run ..\..\ippf2.5\model_shift5.py 04peaks_opt.csv 05peaks_fit.csv const_cos_sin model_shift.cfg
#