E. D4Matrixデータ間の四則演算

E. D4Matrixデータ間の四則演算#

ここでは、二つのD4Matrixデータがある場合に、両者の間で四則演算、実際の使用では例えばバックグランドの引き算などが必要になる場合がある。残念ながら、この機能は現状スクリプトで行うことだけが可能であり、特にGUIは存在しない。

サンプルスクリプト#

二つのD4Matデータがあったとして、片方からもう片方を引いて、結果をoutputフォルダに新しいD4Matデータとして出力するものである。

import Manyo.Utsusemi as mm
import os

# Set file pathes to D4Mat data
d4mat1_dir  = "./d4mat1"
d4mat1_name = "D4Mat.xml"
d4mat2_dir  = "./d4mat2"
d4mat2_name = "D4Mat.xml"

# Set file path to output D4Mat data
output_dir = "./output"
output_name = "D4Mat.xml"

# Open two data sets
tt = mm.D4MatrixCalc()
tt.OpenMat1( d4mat1_dir, d4mat1_name )
tt.OpenMat2( d4mat2_dir, d4mat2_name )

# Make folder for output
if not os.path.exists( output_dir ):
    os.system("mkdir -p %s"%(output_dir))

# 1.0*D4Mat1 - 1.0*D4Mat2  ==> Output
tt.CalcBetweenTwo( "-", 1.0, 1.0, output_dir, output_name )

このスクリプトでは、二つのD4Matデータがそれぞれ同じフォルダ内に .. code-block:: shell

$ ls -F

d4mat1/ d4mat2/

として配置されている場合に使用できる。ここで、 d4mat1/d4mat2/ の下には、D4Matデータの構成ファイルである D4Mat.xml や、 D4Mat_XXXX.bin ファイルが入っている。

実行方法#

$ ls -F
  d4mat1/   d4mat2/

$ python D4MatCalcSample.py
[2019/06/03 16:25:33] Message : UtsusemiD4Matrix >> _OpenFiles > File Block: ./d4mat1/D4Mat_00000.bin is opened
[2019/06/03 16:25:33] Message : UtsusemiD4Matrix >> _OpenFiles > File Block: ./d4mat1/D4Mat_00193.bin is opened
(中略)
[2019/06/03 16:25:34] Message : D4MatrixCalc >> CalcBetweenTwo > open ./output/D4Mat_00193.bin
[2019/06/03 16:25:34] Message : D4MatrixCalc >> CalcBetweenTwo > close file : ./output/D4Mat_00193.bin

$ ls -F
  d4mat1/   d4mat2/ output/

計算された結果はoutput_dir(スクリプトでは”output”というフォルダ)で指定されたフォルダ内に作成されるが、フォルダ自体が存在しない場合は自動的に作成される。

計算元の二つのD4Matデータフォルダはどこにあっても動作する。スクリプトの中の

# Set file pathes to D4Mat data
d4mat1_dir  = "./d4mat1"
d4mat1_name = "D4Mat.xml"
d4mat2_dir  = "./d4mat2"
d4mat2_name = "D4Mat.xml"

の部分で、データフォルダを指定している。

また、サンプルスクリプトでは、d4mat1からd4mat2を1対1で引き算するものであるが、最後の行の .. code-block:: python

tt.CalcBetweenTwo( “-”, 1.0, 1.0, output_dir, output_name )

のコマンドの引数を

  • “-“を”+”にすると足し算、

  • 1.0, 1.0 を例えば1.0, 0.5とすると、1.0*data1 - 0.5*data2

という計算を行うことになる。