Research Notes

T. Matsumura

X線回折実験のデータ処理と解析

SPECのデータをC-PLOTで処理して(x,y,err)形式にする ––– C-PLOTマクロ –––

(1) 生データがあるLINUXにsshでログイン

自分のパソコンのターミナルソフトからSPECのデータがあるLINUXにsshでログイン.
> ssh name@xxx.xxx.xxx

(2) ディレクトリの作成

今,下の図1に示すようなファイル構成になっているとしよう. 生データはSep11という名前のディレクトリ下にあって,110930という名前のファイルだとする.Sep11の下にはlogfileやfile1やfile2といった名前の別のファイルも存在している.これより下の層のどこかに自分がデータ処理を行うためのディレクトリを作る.
Sep11 > mkdir tmatsu

(図1)

(3)リンクの作成

すべての個人的な作業は自分のディレクトリ下で行う.まず,生データにアクセスできるようにするため,生データファイルへのシンボリックリンクを張る.たとえば図1では,tmatsuの1つ上に生データ110930があるので,次のようにする.
tmatsu > ln -s ../110930 110930
こうすることでtmatsuに110930という名前のファイルができる.ただし,これの実体はSep11にある110930であって,コピーではない.別のwhoという人も同じファイルにリンクを張っている.新しいデータは次々に110930に付け加えられ,内容が更新されていくので,最新ファイルをいちいちコピーするより手間がはぶけ,また,同じファイルがあちこちにコピーされるより容量も少なくて済む.リンクファイルを消去してもリンクが切れるだけで本体は消えないが,内容に変更を加えると本体の内容も変わってしまうので,生データファイルはリンクファイルといえども読むだけで,絶対に書き換えてはならない.生データファイルを開いて中を読むときは,誤って書き換えてしまったりしないよう,なるべく自分のパソコンにコピーしてきたものを読む.

(4)C-PLOTマクロの作成

次のような内容のファイルを作成する.名前をたとえばscanxとしよう.自分のパソコンで作って転送してもいいし,Linux上でemacsやviで作ってもいい.
f1 scans.4 -f 110930 +n x=1 y=-1 m=-2 $1
f2 calc.4 y=y*96000;s=s*96000
eb 1
sa data/scan$1.dat w
これがC-PLOTでSPECのデータを処理する最も基本的なマクロであり,ほとんどこれだけで事足りる.
f1 scans.4 -f はおまじない.110930は生データのファイル名.+nはy値をモニター値で規格化する(割る)という意味.-nにすると規格化しない(割らない).x=1はデータの左から1列目がx値であるという意味.y=-1はデータの右から1列目がy値であるという意味.y=-4だとデータの右から4列目がy値として扱われる. m=-2はデータの右から2列目がモニター値であるという意味.$1は引数で,ここにスキャン番号が入力される.
f2 calc.4もおまじない. y=y*96000は,y値をモニター値で割り,96000をかけたものをyとするという意味.例えば,1秒間の測定での生のy値(カウント数)が126で,モニター値が93476だとすると,規格化後のyは126÷93476=0.0013479になる.しかし,このような小さな数字を見ても,1秒間に126カウントという生の具体的なイメージは全然わいてこない. そこで,1秒間のモニター値を96000として規格化することにし, 96000をかけてy=129.4とするのである.この96000という数字は,実験のどこかでの適当なモニター値を採用し,それをすべてのデータに対して共通に用いるのである.s=s*96000は標準偏差(sigma)についての同様な操作である.
eb 1は出力されるデータにエラーバー(標準偏差, s)をつけるという意味.1行が(x, y, s)のペアで出力される.eb 0であればつけない.1行は(x, y)のペアである.IgorProでの読み込みとの対応上,eb 1にしておく.
sa data/scan$1.dat w は,結果をdataディレクトリの下にscan$1.datというファイル名で出力する(saveのsa)という意味.wをつけると上書き.$1の部分にはスキャン番号が入る.

(5)C-PLOT実行ファイルの作成

スキャン番号を入れた次のような内容のファイルを作成する.名前をdo_scan1としよう.
do scanx 28
do scanx 29
do scanx "30 31 32"
do scanx 34
do scanx 35
do scanx "48 49"
do scanx 60
exit
これを実行することで,(4)で作ったscanxの引数$1に28, 29, "30 31 32", 34, 35, "48 49", 60が次々に入力されてscanxが実行されるのである.温度変化や磁場変化など,1回の連続測定でのスキャン数は数十にもおよぶので,同じ操作の連続実行で一挙に規格化されたデータを作るのである.一つ一つ手作業でこれをやっていたらたまらない.さらなる強みは,$1に"30 31 32"のようにして,複数のスキャン番号を入力できる点である.たとえば,x=-1から1までを測定範囲とする1つのスキャンで,x=-1からx=-0.2までが#30, -0.2から+0.2までが#31, +0.2から+1までが#32のように分かれているとき,"30 31 32"とすることで,C-PLOTはx=-1からx=1までを一つにまとめてくれる.#30, #31, #32で測定時間(モニター値)が違っていてもいい.あるいは,統計を稼ぐため,x値が同じであるようなスキャンを2回くり返して#48, #49という番号のデータができたとする.しかも,#48は1点30秒,#49は1点100秒のスキャンだったとする.こういうデータに対しても,"48 49"と入力することで,C-PLOTはちゃんと,同じx値の点については#48と#49を足して,合計のモニター値で規格化してくれる.
exitはC-PLOTから抜けるためのコマンドである.これを忘れて実行すると,実行後にC-PLOTが立ち上がったままとなる.

(6)データディレクトリの作成

実行する前にデータが出力されるdataディレクトリを作っておく.
tmatsu > mkdir data

(7)C-PLOTマクロの実行

実行は次のように行う.
tmatsu > nice cplot do_scan1 > out
niceはCPU作業の優先度を下げて実行するコマンド.Linuxでは測定系の制御を行っているSPECが走っており,それが最優先である.C-PLOTでの作業でCPUに負荷をかけないようにする.> out はC-PLOTからのメッセージをoutという名のファイルに出力するという意味.うまく動かなかったときなど,これを開いてみるとエラーメッセージなどが出力されていて,原因がわかる.
実行が終了すると,最後の行のexitでC-PLOTを抜けて元のコマンドラインに戻ってくる.すると,dataディレクトリの下にscan28.dat, scan29.dat, scan30, scan34.dat, scan35.dat, scan48, scan60.datができている.ここで,"30 31 32"や"48 49"のように引数を設定したときの出力ファイルには,.datがついていないことに注意しよう.次のようにしてつける.
tmatsu > mv data/scan30 data/scan30.dat

(8)データファイルの転送

できた.datファイルを自分のパソコンにsftpで転送する.

知っておくべきコマンド:ssh, sftp, exit, cd, cp, ln -s, ls, mkdir, mv, rm, rmdir, cat, moreなど.ほとんどの作業はこれだけでできる.