多次元系単結晶試料非弾性散乱測定(回転測定)のデータ処理(Step-by-Step法)

更新日

2018.06.29

著者

稲村泰弘

はじめに

概要

本稿では、空蟬環境における高次元試料測定のデータ可視化を行うための手順のうち、入射ビームに対する試料の方位を Step-by-Step で変更して測定、変更して測定、というスキャン測定を行なったデータに対する処理手順を示す。 空蟬環境の構築や、基本的な使用方法については特に記述しないので、別書を参照していただきたい。

特にイベントデータからのヒストグラム化や各種補正を行うデータリダクション作業ができる、もしくは作業が終わっていることを前提に記述されているので、注意すること。

可視化への主な流れ

多次元系試料の測定後、多数の試料方位の測定データ(Run)が存在しているはずである。それらのデータを一つにまとめ、可視化するための作業の流れを以下に示す。

  1. 空蟬のコマンドやスクリプトを利用し、データリダクション(EventDataからQ-wデータまで)をRunごとに行い、それぞれデータをD4Mat変換用ファイル(vbinファイル)として保存する。

  2. D4matSlicer を使用し、Runごとのvibinファイルを一つのデータへまとめる(D4matrixデータ)。データの追加も可能。このデータに対しスライス(2D可視化)を行う。

なお、2. については本章に続き「D4matSlicerマニュアル」を参照のこと。

手順

1. 各Runデータのvbinファイル出力

Sequencer上でデータリダクション(EventDataからQ-wデータまで)をRunごとに行い、可視化ソフト(VisualContM)を通じ、それぞれのデータを4次元空間可視化用データへ統合するためのD4Mat変換用ファイル(vbinファイル)を作成する。

概要

それぞれのvbinファイルの作成作業は、 SequenceEditor に登録してあるコマンドを利用しビームラインに備えられたPythonのスクリプトを走らせることで、ほぼ自動化されている。ただし VisualContM のスライス用条件ファイル(XtalParam.xml)を利用するので、この処理を行う前に一度は VisualContM で可視化して条件が正しいか確認しておく必要がある。スクリプト例はAppendix.Aを参照のこと

手順

  1. 作業用ディレクトリを作成し、移動する

    例:作業用ディレクトリとして、RUN1234を作成する。

    $ mkdir RUN1234
    $ cd RUN1234
    
  2. 結晶構造情報と向きを指定してあるパラメータファイル(XtalParam.xml)を準備する

    このパラメータファイルは、VisualContMのParamSaveボタンで作成される試料やスライスの情報を含んだ条件ファイルである。適当な名前(ここではXtalParam.xml)で作業用ディレクトリへ保存する。

  3. 空蟬のSequenceEditorのDR.MakeRunListを実行した結果のファイルを確認する

    このファイルは、 RunNo, 測定開始日, 測定開始時刻, 測定終了日, 測定終了時刻, プロトン数, 温度(sencer A), 温度(sencer B), 試料角度 のリストであり、下記のようなTEXTフォーマットである。

    以降は、RunListファイルと呼ぶ。

    RunListファイル例:run_list.txt

    run#           start                 end              protons     T_A    T_B     gonio
    9845   2014/12/17 17:38:05   2014/12/17 17:45:16       196632   300.00   1.00   191.3960
    9846   2014/12/17 17:45:30   2014/12/17 17:51:46       195911   300.00   1.00   191.8960
    9847   2014/12/17 17:52:01   2014/12/17 17:58:17       196044   300.00   1.00   192.3960
    9848   2014/12/17 17:58:32   2014/12/17 18:04:49       196402   300.00   1.00   192.8960
    9849   2014/12/17 18:05:03   2014/12/17 18:11:19       195273   300.00   1.00   193.3960
    9850   2014/12/17 18:11:34   2014/12/17 18:17:51       196351   300.00   1.00   193.8960
    9851   2014/12/17 18:18:05   2014/12/17 18:24:22       196522   300.00   1.00   194.3960
    9852   2014/12/17 18:24:37   2014/12/17 18:30:53       196038   300.00   1.00   194.8960
    .....(後略)
    
  4. D4Mat変換用ファイル(vbinファイル)保存用ディレクトリを作成する。

    例:dataという名前のディレクトリを作成する。

    $ mkdir data
    
  5. Appendix.Aに記載されているスクリプトを作成、もしくはコピーし作業用ディレクトリへ保存する。

  6. スクリプトのパラメータを変更する。

    例:変更するパラメータ

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    #####################
    # modify here
    ####################
    Ei=50.048
    delta_hw = 0.2
    hw_min = -25.0
    hw_max = 45.1
    maskfile = "mask.txt"
    normFactor = 1000000.0
    XtalParam = "XtalParam.xml"
    savePathDir = "./data"
    gonioValueAtZero =-22.440
    #########################
    

    パラメータ

    意味

    Ei

    入射エネルギー[meV]

    delta_hw

    Δhω

    hw_min

    hωの最小値

    hw_max

    hωの最大値

    maskfile

    マスクファイル名

    normFactor

    ノーマライズファクター

    XtalParam

    5)で準備した、結晶構造情報と向きを指定してあるパラメータファイル

    savePathDir

    3)で準備したvbinファイル保存先。ここでは作業フォルダ内の"data"フォルダ。

    gonioValueAtZero

    U-vectorの方向、すなわち0度の時のGonio (Run Listに書かれている)値

    基本的にはAppendix Aに示したような、解析コマンドに与えるパラメータである。

    以下に幾つかのパラメータの注意点を述べる。

    savePathDir

    出力データの保存先で、3)で作成したディレクトリを指している必要がある。

    gonioValueAtZero

    スクリプト実行時には2)で作成したRunListファイルを用いるが、このファイルに書かれている角度はゴニオの制御に用いる値であり、解析に用いる角度(U-vectorの方向を0度とした角度)ではない。よってスクリプトではRunListファイルに書かれているコニオ制御値からこの値を用いて、解析に用いる角度に変換している。

  7. 先の3)で作成したリストファイルを引数にして、スクリプトを実行する。

    例:Extract.pyと言う名前で、作業用ディレクトリに置いてある。

    $ ./Extract.py run_list.txt
    もしくは
    $ python Extract.py run_list.txt
    

    実行結果のファイルは、作業用ディレクトリの下の6)の"savePathDir" に設定したフォルダ(例ではdata)に保存される。

    imagec1

2 vbinファイルの統合とスライス

D4MatSlicerという可視化ソフトを用いて、前章で作成した各RunのD4Mat変換用ファイル(vbinファイル)を一つのD4matデータへ統合する。その大まかな流れは、

  • D4MatSlicer上で新しい4次元マトリックス(以降D4Matrixデータ)を作成

  • そこへ先の出力データファイルを統合する

というものである。

以降の処理については引き続き、以下のマニュアルを参照していただきたい。

(「使用マニュアル」の「B. 仮想データ及び新データの作成」及び「C. 各方位のデータのマージと可視化」)

Appendix

A VisualContM出力ファイル作成スクリプト(複数データ用)

複数のイベントデータのデータリダクションとVisualContMデータファイル作成を連続して行い、ファイルを書き出すスクリプトである。この使用方法は本文を参照すること。

Extract_template.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#! /usr/bin/env python
import os
import sys
import DR
import Cmm

#####################
# modify here
####################
Ei=50.048
delta_hw = 0.2
hw_min = -25.0
hw_max = 45.1
maskfile = "mask.txt"
normFactor = 1000000.0
XtalParam = "XtalParam.xml"
savePathDir = "./data"
gonioValueAtZero =-22.440
#########################

argv = sys.argv
print "len(argv)=",len(argv)

listFileName=""
if len(argv)==2:
    if os.path.exists(argv[1]):
        listFileName=argv[1]
        print "AngleList=",listFileName
else:
    print "Usage::"
    print "  ./Extract_runlist.py [filename of runlist]"
    sys.exit(0)

if not os.path.exists(savePathDir):
    print " savePathDir = ",savePathDir," is not found. Making new "
    com = "mkdir -p "+savePathDir
    ret = os.system(com)
    if ret!=0:
        raise UserWarning,"Cannot make new folder(" + savePathDir +")"

conds = []

if listFileName!="":
    fo = open( listFileName,"r" )
    ss=fo.readline()
    while(True):
        ss=fo.readline()
        if ss=="":
            break
        if ss[0]=="#":
            print "Skip::",ss
            continue
        ss_s = ss.split()
        if len(ss_s)==9:
            runNo = int(ss_s[0])
            if normFactor==0.0:
                norm = 0.0
            else:
                norm = float(ss_s[5])/normFactor*(-1.0)
            angle = float(ss_s[8])-gonioValueAtZero
            conds.append( (runNo,angle,norm ) )
    fo.close()

#print conds


for (ScanNo,PhiValue,Norm) in conds:
    #Cmm.CopyData(ScanNo)
    print  "==============[ %06d,%8.3f,%10.5f ]" % (ScanNo,PhiValue,Norm)
    savePath = os.path.join( savePathDir, ("S%06d.vbin"%(ScanNo)) )
    DAT = DR.GetDataOfMonochroEi2(ScanNo, Ei, delta_hw, hw_min, hw_max, maskfile, Norm)
    Cmm.VisContMOutputFileByPhi(DAT, XtalParam, PhiValue, savePath)
    del DAT

B VisualContM出力ファイル作成スクリプト(シングルデータ用)

例1

イベントデータからのデータリダクションを行い、VisualContMデータファイルを作成する

イベントデータからVisualContMデータファイルを作成
1
2
3
4
5
6
import DR
import Cmm
DAT = DR.GetDataOfMonochroEi2( runNo=1025, Ei=45.56, deltaE=0.2, Emin=-5.0, /
                    Emax=44.0, MaskFile="mask.txt", NormFactor=1000000.0 )
Cmm.VisContMOutputFileByPhi( dat=DAT,  param_file="/home/hoge/param.xml", /
                    phi=5.5, output_file="/home/hoge/dat_1025.vbin", isText=False )

1行目と2行目はおまじない。3行目はRunNumberが1025、入射エネルギーが45.56 meV、Energy Transfer軸のビン幅が0.2 meV、最小値が-5.0meV、最大値44.0meVの条件でデータリダクションすることを意味する。4行目は、VisualContM条件ファイルが/home/hoge/param.xmlであり、試料の回転角度が5.5 degree、書き出しファイル名が/home/hoge/dat_1025.vbin、そしてファイルはバイナリであるという条件でファイルを書き出すコマンドである。(メモリ削減バージョンはVisContMOutputFileByPhi)

例2

データリダクションされてセーブされたデータ(dmpファイル)を読み込み、VisualContMデータファイルを作成する

dmpファイルからVisualContMデータファイルを作成
1
2
3
4
import Cmm
DAT = Cmm.LoadDataFromDump( path="/home/hoge", filename="dat_1025.dmp" )
Cmm.VisContMOutputFileByPhi( dat=DAT,  param_file="/home/hoge/param.xml", /
            phi=5.5, output_file="/home/hoge/dat_1025.vbin" ,isText=False )

1行目はおまじない。2行目はdmpファイル/home/hoge/dat_1025.dmpからデータを読み込むコマンド。3行目はVisualContM条件ファイルが/home/hoge/param.xmlであり、試料の回転角度が5.5 degree、書き出しファイル名が/home/hoge/dat_1025.vbin、そしてファイルはバイナリであるという条件でファイルを書き出すコマンドである。 (メモリ削減バージョンはVisContMOutputFileByPhi)

C D4Mat変換用ファイル(vbinファイル)作成をSequenceEditor上で行う方法

  1. Sequencer上でデータリダクション処理を行い、VisualContMでデータを表示できる状態にする。

    データ自体は、以下のような形で読み込んでおく 1) Rawデータからデータリダクション(Sequencer上でDR.GetDataOfMonochroEi2などのコマンド使用) 2) 既に処理済みで保存してあるデータの読み込み(Sequencer上でCmm.LoadDataFromDumpなどのコマンド使用)。

  2. VisualContMをi.のデータで起動する。

  3. VisualContMで試料情報(Lattice parameterなど)を入力し、Projectionボタンを押し、通常のスライスができる状態にする。

  4. VisualContMでのスライス用の各軸情報(X-Axis, Y-Axis, Thickness)において、全部の軸でX-AxisかY-Axisのどちらかにする。

  5. ファイルに保存したいスライス範囲とステップを指定する。スライス範囲は通常AutoFillボタンを押して各軸の最大値、最小値が入っていればよいだろう。ただし、ステップはすべてのRunで共通のものを指定しておく必要がある。

  6. その状態で、BINボタンを押す。ファイルセーブ用ダイアログが開くので、ファイル名を決め、適当なフォルダにセーブしておく。ここでファイル名の拡張子は必ず「.vbin」とする。以降、このデータファイルをVisualContM出力データファイルと呼ぶ。

  7. 様々な条件の出力を行ううち、最終的に落とし込みたい4次元マトリックスの領域(各軸の範囲とステップ)が決まると思われる。その範囲をスライス条件として、VisualContMのParamSaveボタンで条件を保存しておく。この条件ファイルはデータを一つにまとめるマトリックスを作成する際に利用できる。

  8. いちいちVisualContMを起動するのは面倒である場合、ii. からvi. までの処理を行うSequencer上のコマンドが利用できる。ただし、vii.で作成するスライス条件ファイルが必要であるので、先に一度はVisualContMを起動し、条件を決定した後、ParamSaveする必要がある。

  • 使用コマンド:Cmm -> VisContMOutputFileByPhi

  • パラメータ :

    パラメータ

    内容

    dat

    リダクション済みのデータ(ElementContainerMatrix)

    param_file

    VisualContMのParamSaveボタンで作成される試料やスライスの情報を含んだ条件ファイル

    phi

    試料の回転角度

    output_file

    出力用ファイル名。拡張子は.txtか.vbinでなければならない。もしファイル名の拡張子が.txtなら、 テキストファイルとして、.vbinならバイナリファイルとして出力される。テキストファイルなら 可読性が上がるし,バイナリファイルならファイルサイズが小さく、かつD4MatSlicerへの読み込みが 多少速くなる。

    hasMuchMem

    処理に十分なメモリが割り振れるかどうか。