運動量エネルギー空間への射影に関連するコマンド#

単結晶を試料とした非弾性散乱測定を行なった場合、4次元空間情報(Q1, Q2, Q3, hw)に変換(射影)することが必要となる。その処理は以下のようなステップを踏む。

  1. 測定データのデータリダクション(ヒストグラム化、補正処理など)

  2. 試料の格子定数及び、入射中性子方向に対する試料の方位情報を準備(次の射影に必要)

  3. 測定データのQ空間への射影(Projection)

  4. 射影されたデータの可視化(スライスやプロット)

これらの作業は、先頭のデータリダクション以外は VisualContM「VisualContMマニュアル」 )というGUIのソフトウェアで行うこともできるが、全てのステップは Python のスクリプトで作成することができるよう、コマンドが準備されている。

本章では、そのコマンドの使用例とリファレンスを記述する。

空蟬における射影作業で用いられるコマンド(クラス)は、 UtsusemiSqeCalc である。

サンプルコード#

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

なお、本節では DAT はデータリダクション済みのデータとする。もっともシンプルには以下のようなスクリプトで得られるデータである。

## Data Reduction
import DR
DAT = DR.GetDataOfMonochroEi2(373,45.56,0.2,-4.0,40.0,"mask.txt", 0.0 )

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

サンプルコード 1#

全ての情報(試料、射影、スライス)を与える場合を示す。

# -*- coding: utf-8 -*-
import Manyo.Utsusemi as mu
import Manyo

## Projection for single crystal
sqe = mu.UtsusemiSqeCalc()                     # コマンド利用の準備
sqe.SetTarget(DAT)                             # 処理するデータを設定

## Parameters
LC = [4.8,8.4,2.9,90.0,90.0,90.0]              # 格子定数 a, b, c, alpha, beta, gamma
Uvect = [0.0, 1.0, 0.0]                        # U-vector
Vvect = [0.0, 0.0, 1.0]                        # V-vector
Rotations = "Y:-5.0"                           # U,V-vectorの回転指定
Proj_Ax1 = [1.0, 0.0, 0.0, 0.0, "Qa(rlu)"]     # 射影情報とラベル
Proj_Ax2 = [0.0, 1.0, 0.0, 0.0, "Qb(rlu)"]
Proj_Ax3 = [0.0, 0.0, 1.0, 0.0, "Qc(rlu)"]
Proj_Ax4 = [0.0, 0.0, 0.0, 1.0, "Energy(meV)"]

## Set parameters
sqe.SetLatticeConstants( LC )                   # 格子定数設定
sqe.SetUVvector( Uvect, Vvect )                 # U-vector, V-vector設定
sqe.SetRotationSteps( Rotations )               # U,V-vectorの回転指定
## Do projection                                # 射影計算実行
sqe.Projection( Proj_Ax1, Proj_Ax2, Proj_Ax3, Proj_Ax4 )

## Slicing
v=sqe.PutQRange()                              # 射影後の角軸の領域を取り出し
ax1=[ "T" ,v[0], v[1] ]                        # 各軸のスライス情報リスト
ax2=[ "T" ,v[2], v[3] ]                        # "X" : x軸方向(範囲とbin幅)
ax3=[ "X" ,v[4], v[5], 0.02 ]                  # "Y" : y軸方向(範囲とbin幅)
ax4=[ "Y" ,v[6], v[7], 0.2 ]                   # "T" : 厚み方向(範囲)
dfold = []                                     # 畳み込み情報
sqe.Slice(ax1,ax2,ax3,ax4,dfold)               # スライス実行
eca=Manyo.ElementContainerArray()              # 空のコンテナを準備
sqe.SetSlicedElementContainerArray(eca,"Energy","Qc")        # コンテナにスライス結果をコピー

## Plot sliced data
#import uGao.M2PlotPlusCui as mp
#p=mp.M2PlotPlusCui(eca)                        # 夕顔のM2PlotPlusでそのまま表示可能
#p.ShowData()

## Save sliced data as PNG figure file          # 夕顔で表示させずに画像だけ保存も可能(詳細は別項)
import uGao.U2IFInDark as UD
p=UD.U2IFInDark()
p.SetKeys("Qc","Energy","Intensity")            # 横軸、縦軸、強度のキー
p.SetData(eca)                                  # データをセット
p.SetRange(False,0.0,40.0)                      # 強度の範囲指定(最初のFalseはAuto Scaleはしないの意味)
p.SetTitles("Test Data","SubTitle")             # TitleとSubTitle
p.SetLabels("Qc(rlu)","Energy(meV)")            # 軸のラベル
p.SaveFile( "TestData.png" )                    # 画像ファイルとして保存
del p

## Save projection parameters
sqe.SaveXtalParam( "XtalParam.xml" )           # 上記の情報をXtalParam.xmlに書き出す

参考までに、上のスクリプトと同等の処理を行うためのパラメータを表示している VisualContM のパネルを示しておく。

fig01

サンプルコード 2#

全ての情報をXtalParam.xmlから与える場合を示す。

# -*- coding: utf-8 -*-
import Manyo.Utsusemi as mu
import Manyo

## Projection for single crystal
sqe = mu.UtsusemiSqeCalc()                     # コマンド利用の準備
sqe.SetTarget(DAT)                             # 処理するデータを設定

sqe.LoadXtalParam( "XtalParam.xml" )           # XtalParamを読み込む
sqe.Projection()                               # XtalParamの情報で射影計算を実行

## Slicing
sqe.Slice()                                    # XtalParamの情報でスライス実行
eca=Manyo.ElementContainerArray()              # 空のコンテナを準備
sqe.SetSlicedElementContainerArray(eca)        # コンテナにスライス結果をコピー

## Plot sliced data
import uGao.M2PlotPlusCui as mp
p=mp.M2PlotPlusCui(eca)                        # 夕顔のM2PlotPlusでそのまま表示可能
p.ShowData()

UtsusemiSqeCalcリファレンス#

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

class UtsusemiSqeCal#

データリダクション処理済みのデータを与えて、試料及び測定情報(格子定数、ビームに対する方位情報)を与えることでQ空間への射影処理を行い、射影後のデータのスライスまで行うクラスである。

UtsusemiSqeCalc.SetTarget(ecm)#

処理を行うデータを与える

Parameters:

ecm (ElementContainerMatrix) – 処理を行う非弾性散乱データ。

Returns:

None

Return type:

None

UtsusemiSqeCalc.SetLatticeConstants(latticeConstants)#

格子定数を与える

Parameters:

latticeConstants (list) – 格子定数 [ a, b, c, α, β, γ ]

Returns:

成功か否か

Return type:

bool

UtsusemiSqeCalc.SetUVvector(uv, vv)#

結晶の方位を決める U-vector と V-vectorを与える

Parameters:
  • uv (list) – U-vector [ uv_x, uv_y, uv_z ]

  • vv (list) – V-vector [ vv_x, vv_y, vv_z ]

Returns:

成功か否か

Return type:

bool

UtsusemiSqeCalc.SetRotationSteps(steps)#

実際の試料セッティングに合わせて、与えられた結晶の方位 U-vector と V-vectorを回転させる軸と角度を与える。 軸は、”X”, “Y”, “Z”、角度は、軸:角度 (デリミタはコロン)。複数の回転角を与える場合はカンマ区切りで並べる。

例:

Y軸周りに-5度

Y:-5

Z軸周りに10度

Z:10.0

上の両方(カンマ区切り)

Y:-5,Z:10.0

Parameters:

steps (str) – 角度と方位

Returns:

成功か否か

Return type:

bool

UtsusemiSqeCalc.Projection(ax1, ax2, ax3, ax4)#

射影に使用する軸を指定する。3つのQ軸( ax1, ax2, ax3 )と、1つのエネルギー軸( ax4 )で構成され、それぞれの軸を格子定数の a, b, c, Energy のベクトルと、ラベルの5つの要素を持つリストで与える。

全て省略した場合は、LoadXtalParamなどで登録済みの射影情報を用いて射影を行う。

例:

ax1 = [ 1.0, 0.0, 0.0, 0.0, “Qa(rlu)” ]

ax4 = [ 0.0, 0.0, 0.0, 1.0, “Energy(meV)” ]

Parameters:
  • ax1 (list) – ax1軸の指定

  • ax2 (list) – ax2軸の指定

  • ax3 (list) – ax3軸の指定

  • ax4 (list) – ax4軸の指定

Returns:

成功か否か

Return type:

bool

UtsusemiSqeCalc.SaveXtalParam(filepath)#

試料情報や射影情報をファイルに保存する(XtalParam.xml)。

Parameters:

filepath (str) – XtalParam.xmlのパス

Returns:

成功か否か

Return type:

bool

UtsusemiSqeCalc.LoadXtalParam(filepath)#

試料情報や射影情報を保存されたファイル(XtalParam.xml)から読み込む。

Parameters:

filepath (str) – XtalParam.xmlのパス

Returns:

成功か否か

Return type:

bool

UtsusemiSqeCalc.PutQRange()#

射影されたデータのQの最大範囲を取り出す。戻り値は サイズが8のvector<Double> となり、

[ Ax1の最小値, Ax1の最大値, Ax2の最小値, … , Ax4の最大値 ]

という形になる。

Returns:

Qの最大範囲

Return type:

vector<Double>

UtsusemiSqeCalc.Slice(ax1_info, ax2_info, ax3_info, ax4_info, folding_info[, isAve=True])#

射影されたデータを与える軸情報でスライスする。それぞれの軸で、以下のようなフォーマットで軸情報を与える

[ “A”, min, max, (width) ]

要素

タイプ

説明

“A”

str

軸の役割, X軸なら”X”、Y軸なら”Y”、Thickness軸なら”T”

min

float

範囲の最小値

max

float

範囲の最大値

width

float

bin幅、ただしAが”X”か”Y”の時のみ有効

軸情報を全て省略した場合は、すでに与えられた軸情報を用いて、射影されたデータをスライスする。この場合、 isAve のみ使用可能。

例:

X軸方向は長さ4のリスト

[ “X”, -1.8, 2.6, 0.02 ]

T軸方向は長さ3のリスト

[ “T”, -0.1, 0.1 ]

また畳み込みを行う場合は

[ ax1_fold, ax2_fold, ax3_fold, ax4_fold ]

ax1_foldなどには、以下のような数値を入れる。

-1

(負の値)使用しない

0.0

その軸=0で折りたたむ

x

その軸=xで折りたたむ

Parameters:
  • ax1_info (list) – Ax1軸の情報

  • ax2_info (list) – Ax2軸の情報

  • ax3_info (list) – Ax3軸の情報

  • ax4_info (list) – Ax4軸の情報

  • folding_info (list) – 畳み込み情報

  • isAve (bool) – スライス時の強度は平均値とするか(True)、積算するか(False)

Returns:

成功か否か

Return type:

bool