D4MatSlicer(Step By Step回転測定)用コマンド#

Step By Stepの回転測定のデータを可視化するためには、まずそれぞれの角度のRunのデータ処理を行い、融合したD4Matデータを作成するというステップが存在する。( 「多次元系単結晶試料非弾性散乱測定(回転測定)のデータ処理(Step-by-Step法)」 を参照)

それぞれの角度のRunの処理済みデータはD4Mat変換用ファイルとよんでいるが、そのデータを作成してしまえば、融合したり可視化するのはD4MatSlicer というソフトウェアを利用することで実現できる( 「ソフトウェアマニュアルのD4MatSlicer」 )。

本節では、このD4MatSlicerの機能をコマンドラインから制御する方法を示す。

この機能に必要なコマンド(クラス)は、 UtsusemiD4Matrix である。

サンプルコード#

ここでは、 UtsusemiD4Matrix クラスをPythonから使用するサンプルコードを示す。

なお、本節では work フォルダ内で作業を行い、そこには data フォルダには、Step By Step測定のそれぞれの角度の処理済みデータであるD4Mat変換用ファイル(vbinファイル)が存在しているとする。

$ pwd
/home/hogehoge/work
$ ls -F
data/
$ ls -F data/
S1214.vbin  S1218.vbin  S1222.vbin  S1226.vbin  S1230.vbin  S1234.vbin  S1238.vbin  S1243.vbin  S1247.vbin
S1215.vbin  S1219.vbin  S1223.vbin  S1227.vbin  S1231.vbin  S1235.vbin  S1240.vbin  S1244.vbin  S1248.vbin
S1216.vbin  S1220.vbin  S1224.vbin  S1228.vbin  S1232.vbin  S1236.vbin  S1241.vbin  S1245.vbin  S1249.vbin
S1217.vbin  S1221.vbin  S1225.vbin  S1229.vbin  S1233.vbin  S1237.vbin  S1242.vbin  S1246.vbin

作業の前に、さらにD4Matデータファイル一式を納めるフォルダを作成しておく。

$ mkdir D4Mat
$ ls -F
D4Mat/ data/

またスクリプト内のコマンド(メソッド)のリファレンスは、次節に記している。

サンプルコード 1#

まず、D4Matデータファイルを作成し、そこへ上記の vbin ファイルのデータを流し込む作業を行う。

import Manyo.Utsusemi as mu

DM=mu.UtsusemiD4Matrix()

ax1 = [-1.0,1.0,0.5]           # 射影の情報を指定
ax2 = [-5.0,5.5,0.02]
ax3 = [-1.4,2.0,0.02]
hwr = [0.0,42.0,0.2]
titles = ["Qa","Qb","Qc","hw"] # 射影の軸のタイトル指定

data_dir = "./D4Mat"           # D4Matデータの保存先
pFile = "D4Mat.xml"            # D4Matデータのパラメータファイル名

DM.AllocateNewMat( ax1, ax2, ax3, hwr, titles, data_dir, pFile) # D4Matデータの作成

DM.AddToMatFromBinFolder( "./data" ) # "./data"内にある vbin ファイルの読み込み

サンプルコード 2#

次に、サンプルコード 1で作成したD4Matデータを開き、2次元スライスを実行する。本スクリプトではさらにM2Plotを用いて可視化している。

import Manyo
import Manyo.Utsusemi as mu

DM=mu.UtsusemiD4Matrix()

if DM.OpenMat( "./D4Mat_CUI", "D4Mat.xml"):  # D4Matデータを無事に開けたら
    sax1 = [-0.1,0.1]                        # スライスの範囲をそれぞれの軸で指定
    sax2 = [-5.0,5.0]
    sax3 = [-1.4,2.0]
    shw = [0.0,42.0]
    def_ax = ["T","T","X","Y"]               # スライス軸の指定
    fold = []                                # 畳み込みの指定

    eca = Manyo.ElementContainerArray().     # 空っぽのElementContainerArray作成し
                                             # スライスの実行
    if DM.Slice2d( eca, sax1, sax2, sax3, shw, def_ax, fold ):
        import uGao.M2PlotPlusCui as mp              # スライス成功なら2Dプロットで表示
        p=mp.M2PlotPlusCui(eca)
        p.ShowData()
    else:
        print "#### ERROR at Slicing #####"
else:
    print "#### ERROR at Opening #####"

サンプルコード 3#

サンプルコード 1で作成したD4Matデータを開き、3次元スライスを実行する。本スクリプトではさらにSliceViewer3Dを用いて可視化している。

import Manyo.Utsusemi as mu
import Manyo

DM=mu.UtsusemiD4Matrix()

if DM.OpenMat( "./D4Mat_CUI", "D4Mat.xml" ): # D4Matデータを無事に開けたら
    sax1 = [-1.0,1.0]                        # スライスの範囲をそれぞれの軸で指定
    sax2 = [-5.0,5.5]
    sax3 = [-1.4,2.0]
    shw = [0.0,42.0]
    def_ax = ["T","X","Y","Z"]               # スライス軸の指定
    fold=[]                                  # 畳み込みの指定
    keys = ["Vx","Vy","Vz"]                  # スライスされたデータの軸名(出力データ用)

    dat = Manyo.ElementContainerMatrix()     # 出力データを納めるコンテナを準備
                                             # スライスの実行
    if DM.Slice3d( dat, sax1, sax2, sax3, shw, def_ax, fold, keys ):
                                             # スライスの実行がうまくいった場合
        import uGao.SliceViewer3D as mp.     # ここでは3Dプロッタへ流す。
        p=mp.SliceViewer()
        p.setData(dat,"Sliced Data of D4Mat")

    else:
        print "#### ERROR at Slicing #####"
else:
    print "#### ERROR at Opening #####"

サンプルコード 4#

ここでは D4MatSlicer の仮想データを作成し、スライスするところまでをスクリプト化した。

import sys
import Manyo.Utsusemi as mu

DM=mu.UtsusemiD4Matrix()

# Sample Info
LC = [4.81,8.47,2.941,90.0,90.0,90.0] # 格子定数
UV = [0,1,0]                          # U-vector
VV = [0,0,1]                          # V-vector
RV = [DM.ROTATE_AXIS_Y,-45]           # U-V vectorの回転指定
#RV = []

# Projection Info
VA = [ 1,0,0,0,                       # 射影情報
       0,1,0,0,
       0,0,1,0,
       0,0,0,1
       ]
# Data Reduction Info
Ei = 45.6
dhw = 0.2
hw_min = -4.0
hw_max = 42.0
hw_info = [Ei, dhw, hw_min, hw_max]  # 非弾性処理用情報
phiSteps = [-82.5+(float(i)*2.5) for i in range(34)]      # 回転測定の全角度情報

if DM.SetRunNoForVirtualMatrix( 999999, hw_info ):        # 測定情報はRunNoで与える
    pass
else:
    print "##### ERROR"
    sys.exit(-1)

v=DM.EstimateRangeOfVirtualMat( LC,UV,VV,RV,VA,phiSteps ) # 上記の測定条件でのQの範囲を計算
if len(v)==0:                                             # 戻り値のリストのサイズが0なら失敗
    print "##### ERROR : Estimate Range"
    sys.exit(-1)
print "Estimated range v.size()=",v.size()
for i in range(4):
    print "ax%d = %g - %g"%( i,v[i*2],v[i*2+1] )

ax1 = [v[0],v[1],0.5]                                     # D4Matデータの範囲とbin幅を指定
ax2 = [v[2],v[3],0.02]                                    # ここでは計算されたQ範囲を使用
ax3 = [v[4],v[5],0.02]
ax4 = [v[6],v[7],dhw]
titles = ["Qa","Qb","Qc","hw"]                            # 軸のタイトル指定

# Make Virtual D4Mat data
isOk = DM.AllocateVirtualMat( LC,UV,VV,RV,VA,phiSteps,ax1,ax2,ax3,ax4,titles )
                                                          # 仮想D4Mat作成
if isOk:                                                  # 成功すれば、通常と同じスライスが可能
    sax1 = [-0.1,0.1]
    sax2 = [v[2],v[3]]
    sax3 = [v[4],v[5]]
    shw = [-1.0,1.0]
    def_ax = ["T","X","Y","T"]
    #fold = [-1,-1,-1,-1]
    fold=[]
    eca = Manyo.ElementContainerArray()
    isOk = DM.Slice2d( eca, sax1, sax2, sax3, shw, def_ax, fold )
    if isOk:
        import uGao.M2PlotPlusCui as mp
        p=mp.M2PlotPlusCui(eca)
        p.ShowData()
        p.SetLabels("Qb","Qc")
    else:
        print "#### ERROR at Slicing #####"
else:
    print "#### ERROR at Making Virtual D4Mat #####"

UtsusemiD4Matrixリファレンス#

以下に UtsusemiD4Matrix で使用できるコマンド(メソッド)のうち、主要なものを示す。

class UtsusemiD4Matrix#

D4Matデータの作成、スライスを行う。 各コマンドは戻り値がboolのものは実行の成否が、boolでないものは isStatusOK() コマンドを利用できる。

UtsusemiD4Matrix.AllocateNewMat(a1range, a2range, a3range, a4range, titles, data_dir, paramfile)#

新しい(空っぽの)D4Matデータを作成する。

Parameters:
  • a1range (list(float)) – Ax1軸の情報 [min_Ax1, max_Ax1,delta_Ax1]

  • a2range (list(float)) – Ax2軸の情報 [min_Ax2, max_Ax2,delta_Ax2]

  • a3range (list(float)) – Ax3軸の情報 [min_Ax3, max_Ax3,delta_Ax3]

  • a4range (list(float)) – Ax4軸の情報 [min_Ax4, max_Ax4,delta_Ax4]

  • titles (list(str)) – 上の4軸のタイトル, Size=4

  • data_dir (str) – D4Matデータを作成する場所(フォルダ)

  • paramfile (str) – D4Matデータの名前(ファイル名, 拡張子は不要)

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.OpenMat(datapath, paramfile)#

作成済みのD4Matデータを開く。

Parameters:
  • data_dir (str) – D4Matデータを作成する場所(フォルダ)

  • paramfile (str) – D4Matデータの名前(ファイル名, 拡張子は不要)

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.CloseMat(datapath, paramfile)#

開いているD4Matデータを閉じる。

Returns:

None

Return type:

None

UtsusemiD4Matrix.isMatOpened()#

D4Matデータが開かれているかどうかを返す。

Returns:

Trueなら開いている。

Return type:

bool

UtsusemiD4Matrix.isStatusOK()#

直前のコマンドが正しく終了したかを確認する

Returns:

Trueなら正しく終了した

Return type:

bool

UtsusemiD4Matrix.AddToMatFromBin(filename)#

開いているD4Matデータに、 与えられたファイル名の vbin ファイルデータを一つだけ読み込ませる。

Parameters:

filename (str) – ファイルパス

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.AddToMatFromBinFolder(folderpath, _ext='.vbin')#

開いているD4Matデータに、与えられたフォルダの中に入っている全ての vbin ファイルデータを読み込ませる。

Parameters:
  • folderpath (str) – フォルダのパス

  • _ext (str) – vbin ファイルの拡張子(デフォルトは .vbin)

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.Slice2d(eca, a1range, a2range, a3range, a4range, def_axes, foldings)#

引数で与えられた条件でD4Matデータを2次元でスライスする。それぞれの軸は最小値と最大値の範囲を与える。

Parameters:
  • eca (ElementContainerArray) – スライス結果を収める空のコンテナ

  • a1range (list(float)) – Ax1軸の情報 [min_Ax1, max_Ax1]

  • a2range (list(float)) – Ax2軸の情報 [min_Ax2, max_Ax2]

  • a3range (list(float)) – Ax3軸の情報 [min_Ax3, max_Ax3]

  • a4range (list(float)) – Ax4軸の情報 [min_Ax4, max_Ax4]

  • def_axes (list(str)) – 4つの軸のうち、スライス軸、積分軸を指定する。スライス軸は “X”, “Y”、積分軸は “T”で示す。

  • foldings (list(float)) – 畳み込み指定。不要ならば、空のリスト[]、もしくは[-1,-1,-1,-1]を与える。

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.SetAxTitles(titles, isSaved)#

4つの軸のタイトルを指定する。

Parameters:
  • title (list(str)) – タイトルのリスト

  • isSaved (bool) – すぐにD4Matファイルにこの変更を保存するかどうか

Returns:

None

Return type:

None

UtsusemiD4Matrix.Slice3d(ecm, a1range, a2range, a3range, a4range, def_axes, foldings, key_axes)#

引数で与えられた条件でD4Matデータを3Dスライスする。それぞれの軸は最小値と最大値の範囲を与える。

Parameters:
  • ecm (ElementContainerMatrix) – スライス結果を保管するデータコンテナ

  • a1range (list(float)) – Ax1軸の情報 [min_Ax1, max_Ax1]

  • a2range (list(float)) – Ax2軸の情報 [min_Ax2, max_Ax2]

  • a3range (list(float)) – Ax3軸の情報 [min_Ax3, max_Ax3]

  • a4range (list(float)) – Ax4軸の情報 [min_Ax4, max_Ax4]

  • def_axes (list(str)) – 4つの軸のうち、スライス軸、積分軸を指定する。スライス軸は “X”, “Y”, “Z”、積分軸は “T”で示す。

  • foldings (list(float)) – 畳み込み指定。不要ならば、空のリスト[]、もしくは[-1,-1,-1,-1]を与える。

  • key_axes (list(str)) – スライスデータの3軸のキー(変数名)を指定する。わからなければ[“Vx”,”Vy”,”Vz”]で良い。

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.OutputText3D(a1range, a2range, a3range, a4range, def_axes, foldings, filename, isIgnoreMaskVal, maskValStr)#

引数で与えられた条件でD4Matデータを3Dスライスし、テキストに書き出す。それぞれの軸は最小値と最大値の範囲を与える。

Parameters:
  • a1range (list(float)) – Ax1軸の情報 [min_Ax1, max_Ax1]

  • a2range (list(float)) – Ax2軸の情報 [min_Ax2, max_Ax2]

  • a3range (list(float)) – Ax3軸の情報 [min_Ax3, max_Ax3]

  • a4range (list(float)) – Ax4軸の情報 [min_Ax4, max_Ax4]

  • def_axes (list(str)) – 4つの軸のうち、スライス軸、積分軸を指定する。スライス軸は “X”, “Y”, “Z”、積分軸は “T”で示す。

  • foldings (list(float)) – 畳み込み指定。不要ならば、空のリスト[]、もしくは[-1,-1,-1,-1]を与える。

  • filename (str) – 出力するファイル名

  • isIgnoreMaskVal (bool) – データ内にマスク値があった時、それを書き出すかどうか

  • maskValStr (str) – マスク値を書き出す際に指定しないと”nan”になるが、それを別の文字列に置き換える場合に指定する

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.DumpD4MatToFile(a1range, a2range, a3range, a4range, def_axes, foldings, filename, isText)#

引数で与えられた範囲で、D4Matデータをファイルに出力する(4次元データ)。それぞれの軸は最小値と最大値の範囲を与える。出力フォーマットはテキストかバイナリかを選べる。

Parameters:
  • a1range (list(float)) – Ax1軸の情報 [min_Ax1, max_Ax1]

  • a2range (list(float)) – Ax2軸の情報 [min_Ax2, max_Ax2]

  • a3range (list(float)) – Ax3軸の情報 [min_Ax3, max_Ax3]

  • a4range (list(float)) – Ax4軸の情報 [min_Ax4, max_Ax4]

  • def_axes (list(str)) – 4つの軸のうち、スライス軸、積分軸を指定する。スライス軸は “X”, “Y”, “Z”、積分軸は “T”で示す。

  • foldings (list(float)) – 畳み込み指定。不要ならば、空のリスト[]、もしくは[-1,-1,-1,-1]を与える。

  • filename (str) – 出力するファイル名

  • isText (bool) – 出力フォーマットの指定。Trueならテキスト、Falseならバイナリ。

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.SetRunNoForVirtualMatrix(runNo, hwInfo)#

仮想D4Matデータを作成する場合に装置情報とデータ処理条件(入射エネルギーなど)が必要である。装置情報はRunNoを与えるとそのRunNoの測定時の装置情報が利用される。最新の場合は999999など大きなRunNoを与えておけば良い。hwInfoは下記の通り

index

0

1

2

3

Ei

hw_bin

hw_min

hw_max

Parameters:
  • runNo (int) – RunNo

  • hwInfo (list(float)) – データ処理条件

Returns:

Trueなら成功, Falseなら失敗

Return type:

bool

UtsusemiD4Matrix.AllocateVirtualMat(latticeConst, Uvec, Vvec, rotateSteps, viewAxes, phiSteps, a1range, a2range, a3range, a4range, titles)#

引数で与えられた条件で仮想的なD4Matデータをメモリ上で作成する。このコマンドの前に SetRunNoForVirtualMatrix を実行する必要がある。

Parameters:
  • latticeConst (list(float)) – 格子定数の指定 [ a, b, c,α,β,γ]

  • Uvec (list(float)) – U-vector

  • Vvec (list(float)) – V-vector

  • rotateSteps (list(float)) – U-V-vectorの回転を指定する。Y方向に-5度回転なら [ D4Matrix::ROTATE_AXIS_Y, -5.0 ] 指定方法はサンプルスクリプト4を参照のこと。

  • viewAxes (list(float)) – 射影情報を与える。指定方法はサンプルスクリプト4を参照のこと

  • phiSteps (list(float)) – 回転測定のそれぞれの角度のリスト

  • a1range (list(float)) – Ax1軸の情報 [min_Ax1, max_Ax1]

  • a2range (list(float)) – Ax2軸の情報 [min_Ax2, max_Ax2]

  • a3range (list(float)) – Ax3軸の情報 [min_Ax3, max_Ax3]

  • a4range (list(float)) – Ax4軸の情報 [min_Ax4, max_Ax4]

  • title (list(str)) – タイトルのリスト

Returns:

結果 True 成功, False 失敗

Return type:

bool

UtsusemiD4Matrix.EstimateRangeOfVirtualMat(latticeConst, Uvec, Vvec, rotateSteps, viewAxes, phiSteps)#

引数で与えられた条件でD4Matデータを作成した場合におけるそれぞれの軸の範囲を見積もる。このコマンドの前に SetRunNoForVirtualMatrix を実行する必要がある。

Parameters:
  • latticeConst (list(float)) – 格子定数の指定 [ a, b, c,α,β,γ]

  • Uvec (list(float)) – U-vector

  • Vvec (list(float)) – V-vector

  • rotateSteps (list(float)) – U-V-vectorの回転を指定する。Y方向に-5度回転なら [ D4Matrix::ROTATE_AXIS_Y, -5.0 ] 指定方法はサンプルスクリプト4を参照のこと。

  • viewAxes (list(float)) – 射影情報を与える。指定方法はサンプルスクリプト4を参照のこと

  • phiSteps (list(float)) – 回転測定のそれぞれの角度のリスト

Returns:

各軸の範囲。サイズは8のリストで、[ Ax1_min, Ax1_max, Ax2_min, …, Ax4_max ] と与えられる。

Return type:

int