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 に置き換えたもの」と考えるのが基本である。