localPDF チュートリアル
1. 目的
Web ブラウザでファイルを選択し、ボタンをクリックして PDF を計算する代わりに、ローカル Python から同じ計算コアを API で実行する。
基本形は、
config 読み込み
↓
実験データ読み込み
↓
必要なら background 読み込み
↓
run_all()
↓
run_bft()
↓
結果取得 / 保存 / 表示
である。
2. 最小例
from localPDF import Config
from localPDF import LocalPDF
config = Config("SiO2_LabAgSource.json")
pdf = LocalPDF(config=config)
pdf.load_xy("SiO2_20h_LabAgSource.dat")
pdf.run_all()
pdf.run_bft()
q, sq = pdf.get_sq()
r, gr = pdf.get_gr_lorch()
pdf.save_sq("sq.dat")
pdf.save_gr_lorch("gr_lorch.dat")
これが最も基本的な利用方法である。
3. background がある場合
from localPDF import Config
from localPDF import LocalPDF
config = Config("config.json")
pdf = LocalPDF(config=config)
pdf.load_xy("sample.dat")
pdf.load_bg_xy("background.dat", factor=1.0)
pdf.run_all()
pdf.run_bft()
pdf.save_sq("sq.dat")
pdf.save_gr_lorch("gr_lorch.dat")
4. 結果を Python 上で使う
q_iq, iq = pdf.get_iq()
q_sq, sq = pdf.get_sq()
r_gr, gr = pdf.get_gr()
r_lorch, gr_lorch = pdf.get_gr_lorch()
返り値は NumPy array として後続処理に使用できる。
5. 補正過程を確認する
計算結果だけでなく、実験強度がどのように処理されたかも API から確認できる。
tt, raw = pdf.get_intensity_raw()
tt, bg = pdf.get_intensity_bg()
tt, bg_scaled = pdf.get_intensity_bg_scaled()
tt, subtracted = pdf.get_intensity_subtracted()
q, corrected = pdf.get_intensity_corrected()
q, normalized = pdf.get_intensity_corrected_normalized()
q, f2, compton, total = pdf.get_formfactor_components()
これは Web 版のグラフで確認していた中間状態を Python 側で直接取得したい場合に使う。
6. Bokeh で表示する
from localPDF import Config
from localPDF import LocalPDF
from localPDF import LocalPDFPlot
config = Config("SiO2_LabAgSource.json")
pdf = LocalPDF(config=config)
pdf.load_xy("SiO2_20h_LabAgSource.dat")
pdf.run_all()
pdf.run_bft()
view = LocalPDFPlot(local_pdf=pdf)
view.view_all()
現状の view_sq()
は曲線描画部分がコメントアウトされているため、view_all() 内の
S(Q)/i(Q) panel には曲線が表示されない。
7. example/main_local.py の読み方
添付された example は次の順序になっている。
config = LocalPDFConfig(config_json)
pdf = LocalPDF(config=config)
view = LocalPDFPlot(local_pdf=pdf)
pdf.load_xy(xy_file)
if bg_file is not None:
pdf.load_bg_xy(bg_file, factor=bg_factor)
pdf.run_all()
pdf.run_bft()
pdf.save_iq("local_iq.dat")
pdf.save_sq("local_sq.dat")
pdf.save_gr("local_gr.dat")
pdf.save_gr_lorch("local_gr_lorch.dat")
view.view_all()
この example が localPDF 本体の標準利用例と考えてよい。
8. まず覚える API
最初は次の8個程度で十分である。
Config(...)
LocalPDF(...)
load_xy(...)
load_bg_xy(...)
run_all()
run_bft()
get_sq()
get_gr_lorch()
ファイル出力するなら、
save_iq()
save_sq()
save_gr()
save_gr_lorch()
を追加する。
9. Web 版との感覚的な対応
Web:
ファイル選択
→ config 選択
→ S(Q) 計算ボタン
→ G(r) 計算ボタン
→ download
Local:
Config(...)
→ load_xy(...)
→ run_all()
→ run_bft()
→ save_*()
localPDF を理解するときは、「Web 版のクリック操作を Python API に置き換えたもの」と考えるのが基本である。