lsq_latt2.py 入力ファイル書式

概要

lsq_latt2.py の入力ファイルの書式を説明する。

基本構造

1ジョブ分の構造は次のとおり。

1行目: タイトル
2行目: LS LE1 LE2 LE3 LE4 LE5 IW IO IP
3行目: wavelength radius
4行目以降: 反射データの繰り返し
データ終了行
プログラム終了行

最小構成の例

最小構成例は次のとおり。

BaZrO3
6 0 0 0 0 0 2 4 1
1.54180 0.0
1 0 0 21.224
1 1 0 30.179
1 1 1 37.155
2 0 0 43.151
1000 0 0 0
0

各行の意味

1行目: タイトル

任意の文字列1行。マニュアルでは79文字以内。

2行目: コントロールデータ

整数9個をスペースまたはカンマで区切って書く。

LS LE1 LE2 LE3 LE4 LE5 IW IO IP
LS: 結晶系
  • 1: triclinic

  • 2: monoclinic (b)

  • 3: monoclinic (c)

  • 4: orthorhombic

  • 5: tetragonal

  • 6: cubic

  • 7: trigonal

  • 8: hexagonal

LE1LE5: 系統誤差項の有無
  • LE1: (π/2 - θ) tan(π/2 - θ)

  • LE2: sin^2

  • LE3: sin^2 (1/sinθ + 1/θ)

  • LE4, LE5: 任意の系統誤差関数

IW: 重みの与え方
  • 0: w / sin^2

  • 1: 1 / (sin · σ(θ))^2

  • 2: 1

  • 3: w

  • 4: 1 / σ(θ)^2

IO: データ内容
  • 1: θ

  • 2: sin θ

  • 3: 円筒カメラ座標値 (x, z)

  • 4:

  • 5: d_hkl

  • 6: TEM写真のスポット間隔

IP:

マニュアルでは常に0を書くと説明されている。 ただし実例では 1 が使われており、Python コード中では実質未使用である。

3行目: 波長データ

wavelength radius
  • wavelength: X線波長

  • radius: カメラ半径

IO != 3 の場合、radius は無関係なので 0.0 でよい。

4行目以降: 基本データ

h k l data [z] [sigma_or_weight]

ここで

  • h k l: 回折指数

  • data: IO に対応する観測値

  • z: IO = 3 のときのみ必要

  • sigma_or_weight: IW != 2 のとき必要

ただし、実装では追加データの読み方が 別行 になっている。 したがって、実際に現行コードへ与える書式としては次のように考えるのが安全である。

IO = 4, IW = 2 の場合

h k l 2theta

IO = 3 の場合

h k l x
z

IW = 0, 1, 3, 4 の場合

h k l data
sigma_or_weight

IO = 3 かつ IW != 2 の場合

h k l x
z
sigma_or_weight

データ終了行

10000 0 0 0

また、2000 の場合は波長データから繰り返す。

1000 0 0 0

実用上の推奨は次のとおり。

  • 通常のデータ終了: 1000 0 0 0

  • 別波長データへ続く: 2000 0 0 0

プログラム終了行

データ終了後に整数1個を書く。

  • 0: 終了

  • 1: 次のタイトルへ進む

実データの解釈

例えば BZ.K は次の意味になる。

BaZrO3
6 0 0 0 0 0 2 4 1
1.54180 0.0
1 0 0 21.224
1 1 0 30.179
1 1 1 37.155
2 0 0 43.151
1000 0 0 0
0

すなわち

  • cubic

  • 系統誤差なし

  • 等重み

  • 観測値は [deg]

  • 波長 1.54180 Å

  • 4本の回折線 (100), (110), (111), (200)

  • データ終了

  • プログラム終了

実用テンプレート

現行コードに与える実用テンプレートは次の形がよい。

TITLE
LS LE1 LE2 LE3 LE4 LE5 IW IO IP
WAVELENGTH RADIUS

h k l DATA
[Z if IO=3]
[SIGMA_OR_WEIGHT if IW!=2]

h k l DATA
[Z if IO=3]
[SIGMA_OR_WEIGHT if IW!=2]

...

1000 0 0 0
0

補足

  • 複数波長を続ける場合は 1000 の代わりに 2000 0 0 0 を置く。

  • その直後に再び WAVELENGTH RADIUS 行を置く。