1/8
Date:

Mon, 16 Jun 2014 18:28:55 +0900

From:

Tsukasa NAKANOTo:“MIYAKE Akira”

Cc:"MATSUNO Junya", "TSUCHIYAMA, Akira",
YAMANAKA Ippei", “Yohei IGAMI", "Kenta YOSHIDA"

Subject: LAC の計算ソフト

みなさま、なかのです。
そう言えば思い出しました。先日の Spring-8 実験の時にそちらの新しい Linux 計算機（HSL）のディレクトリ /home/mineral/haspet/image/hubbell/ の下にぼくが大昔に書いた、書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/hubbell.tar.gz に入っている「指定した密度と組成の均質な物質の X 線線吸収係数（LAC）の理論値？を計算するためのソフトウェア」をインストールしました。
これは「NIST のホームページにある Hubbell & Seltzer の論文 http://www.nist.gov/pml/data/xraycoef/の表から転記した 92 元素の X 線質量吸収係数（MAC）のデータのファイル群」＋「指定した X 線エネ
ルギーにおける MAC を計測値から計算するための C 言語で書いた補間プログラム」＋「単原子物質や複合物質の MAC や LAC を計算するための C-shell scripts」から構成されています。ディレクトリ
hubbell/ の下にあるテキストファイル ”memo” が一応の説明書ですが、それはわかりにくいので、そちらで有用と思われる２個の C-shell scripts に関する説明だけを以下に書きます。これらはいずれも端末から起動します。
(1) モル比のかたちで組成が与えられた物質の LAC の計算
例えば、純水（組成 H2O、密度 1.0 g/cc）の７および８ keV での LAC の計算は以下のようにします。
echo
→

7 8 |

calc.cm.lac

1 H:2 O:1

7.00000015.490101

8.000000

10.372413

C-shell script “calc.cm.lac” は標準入力から読み取った keV 単位の X 線エネルギーのそれぞれにおける複合物質（composite material）の LAC の理論値（単位は 1/cm）を計算します。その際に、その物質の密度（g/cc）と組成（化学式）をコマンドラインから指定します。なお、（記法が少し変な）「化学式」に含まれるモル数（の比率）は整数でなくてもかまいません（H2O は「H:1 O:0.5」と記述しても OK）。
(2) 化学式ごとの重量比が与えられた物質の LAC の計算
例えば、７および８ keV における溶解度が 36 %の塩水の LAC は以下の２段階の手順で計算できます。
まず、エディタなどを使って以下のような行構成のテキストファイル ”dcc.txt” を作成します（このファイルの名前は任意です；dcc = density and chemical compostion）。

2/81.36100H:2

O:136

Na:1

Cl:1

上記の１行目は塩水の密度（g/cc）、２行目以降は空白かタブコードで区切った塩水の構成物質の重量の割合を表す任意の単位？の数値と「化学式」です。
その後、以下の端末入力によって塩水の LAC を計算できます。
echo→

7 8 |

calc.dcc.lac

755.820815

838.122739

dcc.txt

とりあえず以上です。
P.S.
標準的な UNIX コマンド "seq" を使えば、指定した初期値、刻み幅、終了値の連続した複数の数値を標準出力に書き出すことができます。
seq

10 5 20→101520先の例の “echo78” の部分をこれに置き換えれば、...。

3/8
Date:

Thu, 26 Jun 2014 18:11:21 +0900

From:

Tsukasa NAKANOTo:“MIYAKE Akira”

Cc:"MATSUNO Junya", "TSUCHIYAMA, Akira", "YAMANAKA Ippei", "Yohei IGAMI","Kenta YOSHIDA", Kentaro Uesugi, Masayuki Uesugi

Subject: LAC の計算ソフトの新版

みなさま、GSJ/AIST のなかのです。6/16 付けの E-mail で紹介した、大昔に書いた C-shell scripts "calc.cm.lac" と"calc.dcc.lac" のそれぞれと概ね同じ機能を持つ X 線線吸収係数（LAC）の計算プログラムを新たに書きました。
lac_cm
構成元素ごとのモル比（化学式）のかたちで組成が与えられた物質の LAC を計算する
calc.cm.lac に概ね互換な C 言語で書いたプログラム
lac_dcc
構成物質の化学式ごとの重量比が与えられた物質の LAC を計算する calc.dcc.lac に概ね互換なC 言語で書いたプログラム
これらの新しいプログラムは NIST のサイトにある Hubbell & Seltzer の論文
http://www.nist.gov/pml/data/xraycoef/の表３に載っていた 92 元素の X 線質量吸収係数（MAC）の測定値すべてを内蔵しているので「ポータブル」です。つまり、これらのプログラムの実行には MAC の測定値のデータファイルの類は不要であり、MAC の測定値を内部に埋め込んである C 言語のコードは Linux と Windows の両方でコンパイルできます（MacOS X でもコンパイルできるハズですが、試していません）。
lac_cm と lac_dcc のソースコードや Windows 用の実行ファイルの類は以下の２個の書庫ファイルに入れてあります（内容はどちらも同じです）。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/seltzer.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/seltzer.zip
Windows ならこれらの中に入っている実行ファイル lac_cm.exe と lac_dcc.exe を実行パスに登録済みのディレクトリにコピーすればインストールの作業は完了です。また、Linux（および MacOS X）の上での lac_cm と lac_dcc のインストールの手順は以下の通りです。
[1] 書庫ファイルをダウンロード・解凍・展開する。
wgettar

http://www-bl20.spring8.or.jp/¥~sp8ct/tmp/seltzer.taz
xzf

seltzer.taz

4/8[2] 展開されたディレクトリ seltzer/ に移動して make する。
cd

seltzermake[3] lac_cm と lac_dcc を実行パスに登録済みのディレクトリに移動する。
mv

lac_cmlac_dcc /usr/local/bin

lac_cm と lac_dcc の起動法は以前に説明した calc.cm.lac と calc.dcc.lac のものと同じです（6/16 付けのE-mail をご覧下さい）。
旧新のプログラムによる Linux 上でのジルコンの LAC の計算例
zircondensity = 4.6 ~ 4.7 (g/cc)
chemical formula = Zr:1Si:1

O:4

LAC (1/cm) at 9.8 keV
密度を 4.6 g/cc とした場合
echo 9.8 | calc.cm.lac 4.6 Zr:1 Si:1 O:4→ 9.800000

214.844242

echo 9.8 | lac_cm 4.6 Zr:1 Si:1 O:4→

9.800000

216.052865

密度を 4.7 g/cc とした場合
echo 9.8 | calc.cm.lac 4.7 Zr:1 Si:1 O:4→

9.800000

219.514769

echo 9.8 | lac_cm 4.7 Zr:1 Si:1 O:4→

9.800000

220.749666

上記の例からもわかるように、新しいプログラムは任意の X 線エネルギーにおける元素それぞれの MACの値を（離散的な）測定値の対数値の線形（１次式）補間で求めているので、その出力値は旧来のcalc.cm.lac などのプログラムが３次式補間によって計算した値とはわずかに異なります。
新しいプログラムが行っている MAC の測定値（の対数値）の線形補間について少しだけ補足しておきます。この E-mail に添付した PDF ファイル mac_rfe.pdf の図をご覧下さい。岩石の主要な構成元素（rock forming elements）の６個について Hubbell & Seltzer の論文の表３に載っていた MACの測定値を対数プロットした図です。この図では MAC の測定値を示している黒丸を直線で結んでありますが、これが新しいプログラムで採用した線形補間に相当します。念のため、UNIX の上でseq

5 0.0225|

lac_cm1 O:1のように入力して計算した６種類の rock forming elements の５～25 keV の範囲の 0.02 keV 刻み

5/8の X 線エネルギーにおける MAC（= 単位の密度を指定した場合の LAC）の値を先のものと同形式の図にプロットしてみました。この E-mail に添付した lac_rfe.pdf です。これら２個の図の内容がほぼ完全に一致していることを確認できます（ただし、gnuplot に縦軸の範囲を「おまかせ」して描画したので、25 keV 付近に MAC の測定値がない K と Ca のグラフの下端の位置が大きく違っていますが、...）。
これらの図からわかるように、X 線エネルギーを横軸とする物質の MAC のプロファイルは下に凸な曲線です。そして、MAC の測定値の対数値を X 線エネルギーに関して３次式で補間してやれば、この特徴を再現することができます（線形補間ではこれはできない）。旧来の calc.cm.lac などのプログラムはそれを行っているため、新しいプログラムを用いて計算した値よりもやや低い MAC（および LAC）の補間値を出力します。
なお、新旧のプログラムの補間値のどちらが「高精度」なのかは場合によります。測定値が密に分布している X 線エネルギーの範囲では３次式補間で得た MAC の値が「暴れる」こともありますが、線形補間ではそれは起こりえません。
とりあえず以上です。
P.S.
大昔に書いた calc.cm.lac などが入っている書庫ファイルは
http://www-bl20.spring8.or.jp/~sp8ct/tmp/hubbell.tar.gzです。新しいプログラムはこの中の C-shell script と同じに NIST の Hubbell & Seltzer の論文の MAC の測定値を利用して LAC の値を計算するので、新しい書庫ファイルの名前を ”seltzer.*”にしました。
添付ファイル：mac_rfe.pdf と lac_rfe.pdf
これらの PDF ファイルは前記の２個の書庫ファイルの両方に入っているので、それらのいずれかを解凍・展開して取り出したものをご覧下さい。
http://www-bl20.spring8.or.jp/~sp8ct/tmp/seltzer.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/seltzer.zip

6/8
Date:

Thu, 26 Jun 2014 18:20:39 +0900

From:

Tsukasa NAKANOTo:“MIYAKE Akira”

Cc:"MATSUNO Junya", "TSUCHIYAMA, Akira", "YAMANAKA Ippei, "Yohei IGAMI","Kenta YOSHIDA", Kentaro Uesugi, Masayuki Uesugi

Subject: 補足：LAC の計算ソフトの新版

みなさま、なかのです。先程の E-mail で紹介した新しい LAC の計算プログラムに関する補足です（誰も読まないかもしれませんが、ぼくの備忘録のつもりです）。
(1) 書庫ファイルの内容
書庫ファイル
http://www-bl20.spring8.or.jp/~sp8ct/tmp/seltzer.taz
http://www-bl20.spring8.or.jp/~sp8ct/tmp/seltzer.zipには以下のファイルが入っています。
nist.txt
NIST のサイトの Hubbell & Seltzer の論文の URL などを書き込んだテキストファイル。
index.txt
Hubbell & Seltzer 論文の表１から抜き出した 92 元素に関する情報を書き込んだ 92 行からなるテキストファイル。その各行にはタブコード区切りで以下の４個の値が並んでいる。
[1] 原子番号 Z = 01～92[2] その元素の質量数を A として、Z / A の値
[3] その元素の元素記号[4] その元素の元素名
run.mev_mac
Hubbell & Seltzer 論文の表３にリンクされている 92 元素それぞれの MAC の測定値のデータファイル（HTML 形式のページ）すべてをダウンロードし、使いやすいテキストファイルに整形する C-shell script。これを用いて次に記す "mev_mac/*.txt" を以下のようにして作成した。
rm -rf mev_mac
csh# 既存のディレクトリを消去しておく

run.mev_mac

ただし、Hubbell & Seltzer 論文の表３は 2004 年 11 月以来更新されていないので、今後もrun.mev_mac を改めて走らせる必要はない？

7/8
mev_mac/*.txt
Hubbell & Seltzer 論文の表３に載っていた元素ごとの MAC の測定値が書き込まれている 92個のテキストファイル。"*.txt" の "*" は原子番号で、それぞれのファイルの各行にその元素のMAC の測定値に関する以下の２もしくは３個の値がタブコード区切りで並んでいる。
[1] X 線エネルギー（単位は MeV）
[2] MAC の測定値（単位は cm^2/g）[3] X 線吸収端の名前（ごく少数の行のみ）
X 線の吸収端の位置を示す X 線エネルギーが同じ値の連続する２行には吸収端の直下と直上における MAC の測定値が書き込まれている。そして、直上の行には３番目の値として ”K” や ”L1”のような吸収端の名前が記されている。
run.log_mac
前記のファイル "mev_mac/*.txt" の中のデータすべてを C 言語コードに変換する C-shellscripts。それらのデータファイルの各行の２個の値を以下のように変換する。
X 線エネルギー：MeV 単位から keV 単位の値に変える（千倍する）。
MAC の測定値：自然対数の値に変換する。
この結果の数値のペアを C 言語コードに埋め込めるように整形して標準出力に書き出す。次に記す log_mac.h がそれを書き込んだファイルで、具体的には以下の入力でそれを作成した。
rm-f

log_mac.h # 既存のファイルを消去しておく

csh

run.log_mac>

log_mac.h

前述の run.mev_mac と同じ理由でこの C-shell script も再実行不要？
log_mac.h
後述する C 言語コード mac.c が使う 4479 行のインクルードファイル。keV 単位の X 線エネル
ギーの値とそこでの MAC の測定値の対数の値のデータが元素ごとに C 言語の構造体（struct）"keV_MAC" の配列に埋め込まれている。
mac.h と mac.c
構成元素ごとのモル比（化学式）のかたちで組成が与えられた物質の MAC を計算する関数
MAC() などの C 言語コード。
lac_cm.c、lac_dcc.c と Makefile
プログラム lac_cm と lac_dcc の C 言語コードとそれらを GNU-C Compiler などでコンパイルするための "Makefile"。
lac_cm.exe と lac_dcc.exe：ひとつ前の E-mail で説明済み
mac_rfe.pdf と lac_rfe.pdf：ひとつ前の E-mail に添付して説明済み

8/8(2) プログラム lac_dcc の新機能
新しいプログラム lac_cm は旧来の calc.cm.lac とほぼ完全に互換です（MAC の補間の仕方を除いては）。
一方、lac_dcc には calc.dcc.lac にはない２個の新機能を付加しました。まず、物質の全体としての密度（density）とその構成物質の化学式ごとの重量比（化学組成；chemical composition）を記述したファイル “dcc.txt”（このファイル名は任意ですが、ここではこう呼びます）に空行（正確には行頭に数値以外の文字列が記されている行）があると、その記述が終了したものと見なします。そして、ファイル名として “dcc.txt” の代わりに "-" を指定すると、密度と化学組成の記述を標準入力から読み取ります。
これらの新機能を組み合わせることにより、ファイル ”dcc.txt” をエディタで作成せずに、LAC を計算したい物質の密度・化学組成と X 線エネルギーの値すべてを標準入力から指定できます。と言っても何のことかわからないと思うので、実例を示します。まず、6/16 付けの E-mail で紹介した旧来の calc.dcc.lac の使用法をご覧下さい。lac_dcc ならこれと同じ内容の処理を以下のようにして実行することもできます。
会話的にパラメータを入力して実行する場合
lac_dcc

-

1.36
100

H:2O:1

36

Na:1

Cl:1

空行を打ち込む78→

7.000000

57.468334

8.000000

38.122740

Ctrl+D（UNIX）もしくは Ctrl+Z（Windows）を入力すれば終了
非会話的な実行法(echo

1.36&&← 改行しないecho

100 H:2 O:1 &&← 改行しないecho

36 Na:1 Cl:1&&← 改行しない

echo _ &&
echo→

7 8)

← 改行しない|

lac_dcc-

7.000000

57.468334

8.000000

38.122740

とりあえず以上です。