Change History 2024#

Author:

Yasuhiro Inamura

Last Update:

Oct 14, 2024

4.0.241010 or later#

Oct 10 2024

[update:Utsusemi:4.0] Add DymPDFFromSpinWText as a facade function for SIK

DATA_RDCT-282 空蟬4:SpinWの出力テキストデータをDymPDFへ読ませたい

  • DymPDFFromSpinWTextをBL01(SIK)のファサード群( Cmm )に追加した

  • SpinWの出力テキストデータの場所指定をfull pathだけでなく、ファイル名を書くだけでカレントフォルダを探しに行くようにした

Oct 10 2024

[bugfix:Utsusemi:4.0] The problem that DymPDFFromSpinWText occurs the memory leak

DATA_RDCT-282 空蟬4:SpinWの出力テキストデータをDymPDFへ読ませたい

DymPDFFromSpinWTextを実行すると下記のメモリリークが示されるので対処した。

swig/python detected a memory leak of type 'ElementContainerArray *', no destructor found.

原因

Swigの関数でElementContainer系を直接戻り値とするとこのメモリリークが発生する。

ElementContainerArray ShamotoDymPDF::PutResult(bool);

対処

Python側でElementContainer系を作成して、それをポインタ渡しでSWIG関数に渡し内部で利用することで、このリークを回避する。 以下のメソッドを追加し、Python側からElementContainerArrayを渡して使用する。

void ShamotoDymPDF::PutResult(ElementContainerArray*, bool);
Oct 10 2024

[update:Utsusemi:4.0] Add DymPDFFromSpinWText function which DymPDF function can read the output text file from SpinW code.

DATA_RDCT-282 空蟬4:SpinWの出力テキストデータをDymPDFへ読ませたい

SpinWからの出力テキストデータをDymPDFにて処理できるようにした。

テキストデータのフォーマットは

<Q>, <EnergyTransfer>, <Intensity>, <Error>

もしくは同様のコンテンツでスペース区切り。

仕様

  • これまで(DymPDF)

    • ShamotoDymPDFへは通常Powderデータを読み込ませる

    • 内部で横軸Q(hw=一定)のデータに加工(MlfArraySlicer)してDymPDF計算を行う。

  • 今回追加(DymPDFFromSpinWText)

    • テキストの中身を読み込んでElementContainerArrayの形式に変換し、ShamotoDymPDFに渡す

      • 本来ShamotoDymPDFへはPowderデータを読み込ませるが、Q, hwの直行座標データとして作成し読み込ませる

    • ElementContainerArrayへの変換は2タイプに対応

      • テキスト出力のhwの切り方をそのまま使用する手法(ShamotoDymPDF::SetSlicedData)

        • 横軸Q(hw=一定)のElementContainer(をまとめた-Array)を作成し、内部でQ軸方向へのスライスは行わない

      • 通常データ(横軸hwのElementContainerをまとめた-Array)に変換して読ませる手法(ShamotoDymPDF::SetData)

        • 内部でMlfArraySlicerを使用するので任意のhwの範囲とbin幅を設定できる

4.0.240828 or later#

Aug 28 2024

[update:Utsusemi:4.0] Add NBR and DNA into _loadenv to execute the binary-mode apps on linux and macos.

Aug 28 2024

[bugfix:Utsusemi-DNA:4.0] Fix the path expression in ElasticScanGUIQt.py

Aug 27 2024

[bugfix:Utsusemi:4.0] The issue that the build of Ubuntu24 debian package.

Aug 27 2024

[update:Utsusemi:4.0] Add scripts to build deb package on Ubuntu24

Aug 27 2024

[bugfix:manyo:0.3.4] The issue that the build of Ubuntu24 debian package.

Aug 27 2024

[update:manyo:0.3.4] Add scripts to build deb package on Ubuntu24

Aug 27 2024

[bugfix:Utsusemi-SAS:4.0] The issue that the build of Ubuntu24 debian package.

Aug 27 2024

[update:Utsusemi-SAS:4.0] Add scripts to build deb package on Ubuntu24

Aug 27 2024

[bugfix:Utsusemi-DNA:4.0] The issue that the build of Ubuntu24 debian package.

Aug 27 2024

[update:Utsusemi-DNA:4.0] Add scripts to build deb package on Ubuntu24

Jul 27 2024

[update:manyo:0.3.4] Improve some codes to remove the compile warning.

macOS上のコンパイルで

% clang++ --version
Apple clang version 15.0.0 (clang-1500.3.9.4)

下記のようなWarningが出たので修正した。

ElementContainer.cc:2437:38: warning: 'binary_function<double, double, double>' is deprecated [-Wdeprecated-declarations]
template <class T> class S3 : public binary_function<T, T, T>

ググると、binary_function<T, T, T> -> function<T(T, T)> とすれば良いらしい。Warningが消えた!!!

一方で、別の手段としてlamda式を使うことも推奨されていたので、そちらを採用した。ソースコードには binary_functionfunction のどちらも残してある。

// A = sum{T[i]/(E[i]*E[i])}
auto S3 = [](Double &arg1, Double &arg2)->Double{ return arg1 / (arg2 * arg2); };
A = inner_product(Target->begin(), Target->end(), Error->begin(), 0.0,
                  plus<Double>(), S3 );
// B = sum{1/(E[i]*E[i])}
auto S2 = [](Double &arg1, Double &arg2)->Double{ return 1.0 / (arg1 * arg2); };
B = inner_product(Error->begin(), Error->end(), Error->begin(), 0.0,
                  plus<Double>(), S2 );
Jul 27 2024

[bugfix:manyo:0.3.4] The issue that the compile error occurs on macOS with boost 1.85.0

macOS上だけなのかは不明だが、boost 1.85.0 がインストールされたmacOS上でコンパイルすると、下記のようなエラーが出るので対処した。

clang++ -fPIC -O3 -Xpreprocessor -fopenmp -Werror=return-type -DPyMaj=3 -I.   -c DoubleBinArrange.cc -DMULTH=1
In file included from DoubleBinArrange.cc:5:
In file included from ./DoubleBinArrange.hh:11:
In file included from ./NeutronVector.hh:270:
In file included from ./NeutronVector.cc:14:
In file included from /opt/homebrew/include/boost/filesystem.hpp:16:
In file included from /opt/homebrew/include/boost/filesystem/path.hpp:34:
In file included from /opt/homebrew/include/boost/filesystem/detail/path_traits.hpp:26:
In file included from /opt/homebrew/include/boost/system/error_category.hpp:10:
/opt/homebrew/include/boost/system/detail/error_category.hpp:87:5: error: unknown type name 'constexpr'
    constexpr error_category() noexcept: id_( 0 ), stdcat_(), sc_init_()

検索するとコンパイルオプションに -std=c++11 を追記すれば良いとのことだったので、とりあえずmacOS用のMakefile.macをそのように変更した。

また、macOS用のデフォルトコンパイラを clang++ に変えた(すでに depend.mac では変わっていたので実は影響なかった)

さらに、macOS用のmanyo/Makefile.mac をデフォルトにし、Python2用はmanyo/Makefile.py2.macとした。

Jul 24 2024

[update:manyo:0.3.4] Rename Makefille.mac to Makefile.py2.mac and Makefile.py3.mac to Makefile.mac

Aug 23 2024

[update:Utsusemi-DNA:devLevTools] Update some manyo-LevmatTools codes to be compiled with mxml version 4.0

DATA_RDCT-280 空蟬4:DNAのmanyo-LevmarToolsの修正

mxml(libmxml)のバージョンが4になると、#includeの指定先や、いくつかのコードに修正が必要となる。 コード自体の変更と、Makefile.macにmxml4用の追記をしたMakefile.mac.mxml4やdepend.mac.mxml4を追加した。将来的にはLinux用のMakefileにも変更が必要だが、とりあえずmacOS用だけ作成した。

  1. includeの修正とmxml.hのバージョン3以前で定義されていた MXML_DESCEND_ALL がバージョン4では MXML_DESCEND に変更されているのでその対応

  2. mxmlLoadFile() および mxmlSaveFile が大幅に変更されているのでその対応

  3. コンパイル時のmxmlのバージョン指定は、MakefileのCXXFLAGに -DLIBMXML4 を加えることで動作するようにし、そのmacOS用のMakefile.mac.mxml4とdepend.mac.mxml4を追加

注釈

mxmlのバージョン3以前でのmxmlLoadFileの定義は以下のようになっている。

mxml_node_t *                           /* O - First node or @code NULL@ if the file could not be read. */
mxmlLoadFile(mxml_node_t    *top,       /* I - Top node */
             FILE           *fp,        /* I - File to read from */
             mxml_load_cb_t cb)         /* I - Callback function or constant */
  • 第一引数NULLはTop nodeはない(読み込んだxmlをそのままtreeに)ということだろう

  • 第3引数MXML_TEXT_CALLBACKは読み込んだxmlをテキストのまま扱うということのようだ

  • mxml.hでMXML_TEXT_CALLBACKは0で定義されていて、内部でTEXTで読み込む(mxmlNewText())ようだ

これが、4.0.xでは

//
// 'mxmlLoadFile()' - Load a file into an XML node tree.
//
// This function loads the `FILE` pointer `fp` into an XML node tree.  The
// nodes in the specified file are added to the specified node `top` - if `NULL`
// the XML file MUST be well-formed with a single parent processing instruction
// node like `<?xml version="1.0"?>` at the start of the file.
//
// Load options are provides via the `options` argument.  If `NULL`, all values
// will be loaded into `MXML_TYPE_TEXT` nodes.  Use the @link mxmlOptionsNew@
// function to create options when loading XML data.
//

mxml_node_t *                           // O - First node or `NULL` if the file could not be read.
mxmlLoadFile(
    mxml_node_t    *top,                // I - Top node
    mxml_options_t *options,            // I - Options
    FILE           *fp)                 // I - File to read from

と変化した。おそらく、Top nodeは同じ意味で、 FILE *fp も同じだろう。optionsに関してはコメントに NULL`を指定すればMXML_TYPE_TEXTとなるとある。コード(mxml-file.c)ではMXML_TYPE_TEXTの場合、 `mxmlNewText が呼び出されており、これはおそらく3.xで使用されていたオプション(MXML_TEXT_CALLBACK)と同じ挙動になるであろう。

よって

tree = mxmlLoadFile(NULL, fp, MXML_TEXT_CALLBACK)

tree = mxmlLoadFile(NULL, NULL, fp)

と書き換えることでOKだと思われる。 mxmlSaveFile も同様の修正を行なった。

Aug 22 2024

[update:Utsusemi-DNA:4.0] Improve C++ codes to avoid warnings on compile.

コンパイル時に以下のようなWarningメッセージが出る場合があるので修正した。

  1. if文が無効

UtsusemiChopCondInfoReaderTrignet.cc:243:67: warning: if statement has empty body [-Wempty-body]
    if (_parserWirInfo->hasPath("wiringInfo/tofBinInfo/tofBin/") );
  1. snprintfを使え

UtsusemiEventDataConverterDNA.cc:579:21: warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead. [-Wdeprecated-declarations]
                sprintf( key_c, "%02d_%03d", daq, mod ); //[TY 20141205]
他複数
Aug 19 2024

[update:Utsusemi-DNA:devLevTools] Improve codes to avoid the warnings on compile.

DATA_RDCT-280 空蟬4:DNAのmanyo-LevmarToolsの修正

コンパイル時にthrow関連で表示される以下のようなWarningに対応した。

  1. snprintfにおける代入先のサイズが小さいWarning

AdvInsMEM.cc:1854:39: warning: ‘%s’ directive output may be truncated writing up to 255 bytes into a region of size between 243 and 252 [-Wformat-truncation=]
1854 |     snprintf(cmd, sizeof(cmd), "cp %s %s", filename5, file5);
     |                                       ^~              ~~~~~

file5 のサイズが最大256、それを格納する`cmd` のサイズが256なので溢れる可能性があると言っている。 cmd のサイズを512にすることでこのWarningを回避した。

以下のWarningも同様なので、格納先のChar*のサイズを大きくすることで回避した。

AdvParamSet.cc: In member function ‘void AdvParamSet::dump()’:
AdvParamSet.cc:698:71: warning: ‘%lu’ directive output may be truncated writing between 1 and 10 bytes into a region of size between 0 and 15 [-Wformat-truncation=]
  698 |         snprintf(map_fmt, sizeof(map_fmt), "%%4s%%4s%%-%lus %%%lulu*%%%lulu %%s", max(l, KEY.size()), di, dj);
      |                                                                       ^~~
(略)
  1. fgetsの戻り値が無視されるというWarning

AdvInsMEM.cc: In member function ‘int AdvInsMEM::execute()’:
AdvInsMEM.cc:494:16: warning: ignoring return value of ‘char* fgets(char*, int, FILE*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
  494 |           fgets(buffer, length_buffer, stdin);
      |           ~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

stdinからの入力をbufferに入れ込む場合には、その際NULLだったりリターンキーのみだった場合に、再度入力を促す(コメント表示とfgetsを実行)ようにした。

別の箇所にはFILEからの入力を表示するだけのコードなので、こちらはNULLでなければ表示するように書き換えた。

  1. system(cmd)の戻り値が無視されるというWarning

AdvInsMEM.cc: In member function ‘int AdvInsMEM::main_mem_proc(int*, int, int, float*, float*, float*, float*, float*, float*, float*, float*, int, int)’:
AdvInsMEM.cc:1909:11: warning: ignoring return value of ‘int system(const char*)’ declared with attribute ‘warn_unused_result’ [-Wunused-result]
 1909 |     system(cmd);
      |     ~~~~~~^~~~~

systemはintを返すが、何を返してくるかはコマンドインタープリタとコマンド次第のようなのでとりあえずintで受けた。 またこのあたりのコードは “should be removed in future” とコメントされているので、無視して良いので、この程度の対応で終わらせておく。

Aug 19 2024

[update:Utsusemi-DNA:devLevTools] Improve codes to avoid the warnings on compile about the dynamic exception.

DATA_RDCT-280 空蟬4:DNAのmanyo-LevmarToolsの修正

コンパイル時にthrow関連で表示される以下のようなWarningに対応した(古くなった例外仕様)。

warning: dynamic exception specifications are deprecated in C++11 [-Wdeprecated]
      |         void setSource(ElementContainer &src) throw(invalid_argument) ;
      |                                               ^~~~~

基本的には関数定義で付属していた動的例外仕様 throw(xxx) を削除しただけ。

Aug 17 2024

[bugfix:Utsusemi-DNA:devLevTools] Fix codes to avoid the warnings on compile(2).

DATA_RDCT-280 空蟬4:DNAのmanyo-LevmarToolsの修正

  • 以下のWarningへ対処した

AdvParamSet.cc:141:10: warning: logical not is only applied to the left hand side of this comparison [-Wlogical-not-parentheses]
    if ( ! value.size() > 0) {
以下略
AdvInsMEM.cc:991:71: warning: format specifies type 'int' but the argument has type 'int *' [-Wformat]
if( !(strlen(buffer)) || !(snprintf(buffer, sizeof(buffer), "%d", &ncom)) ){
                                                                 ~~   ^~~~~
AdvInsMEM.cc:1560:60: warning: invalid conversion specifier '=' [-Wformat-invalid-specifier]
          printf("%s Please input float number again(ene0%j=%f)\n", MessageTag,j,ene0);
                                                          ~~^
AdvInsMEM.cc:1560:80: warning: format specifies type 'double' but the argument has type 'int' [-Wformat]
          printf("%s Please input float number again(ene0%j=%f)\n", MessageTag,j,ene0);
                                                            ~~                 ^
                                                            %d
AdvInsMEM.cc:1560:82: warning: data argument not used by format string [-Wformat-extra-args]
          printf("%s Please input float number again(ene0%j=%f)\n", MessageTag,j,ene0);
Aug 17 2024

[bugfix:Utsusemi-DNA:devLevTools] Improve codes to avoid the warnings on compile.

DATA_RDCT-280 空蟬4:DNAのmanyo-LevmarToolsの修正

  • 以下のspringfを用いることへのWarningへ対処した

warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead.
  • 以下のheader guardに関するWarningへ対処した

warning: 'METHOD_FACTORY_H' is used as a header guard here, followed by #define of a different macro

4.0.240821 or later#

Aug 22 2024

[update:uGao:master] Improve M2PlotPlus.py to avoid the RuntimeWarning with the latest version of PySide6

PySide6の新しいバージョンでは、下記のようなWarningが出るようになった(確認Ubuntu24.04, macOS, Windows)ので修正した。

RuntimeWarning: Failed to disconnect (<bound method M2PlotPlus.CopyKeyToLabel of <uGao.M2PlotPlus.M2PlotPlus(0x1a7998e5e30, name="MainWindow") at 0x000001A4A2026A00>>) from signal "currentIndexChanged(int)".
  self.cbX.currentIndexChanged.disconnect(self.CopyKeyToLabel)

別の場所で self.cbX.currentIndexChanged.connect(self.CopyKeyToLabel) を実行している部分があるが、これを実行する前に disconnect するとWarningとなる。 connectしたかどうかを判別するフラグ(self.cb_currentIndexChanged_connected)を追加した。

Aug 22 2024

[update:Utsusemi-DNA:4.0] Improve C++ codes to avoid warnings on compile.

コンパイル時に以下のようなWarningメッセージが出る場合があるので修正した。

  1. if文が無効

UtsusemiChopCondInfoReaderTrignet.cc:243:67: warning: if statement has empty body [-Wempty-body]
    if (_parserWirInfo->hasPath("wiringInfo/tofBinInfo/tofBin/") );
  1. snprintfを使え

UtsusemiEventDataConverterDNA.cc:579:21: warning: 'sprintf' is deprecated: This function is provided for compatibility reasons only.  Due to security concerns inherent in the design of sprintf(3), it is highly recommended that you use snprintf(3) instead. [-Wdeprecated-declarations]
                    sprintf( key_c, "%02d_%03d", daq, mod ); //[TY 20141205]
他複数
Aug 21 2024

[bugfix:Utsusemi:4.0] The issue that D4Mat2Slicer does not work on Manyo-lib compiled with swig 4.2.0 and gcc 13.2.0 (Map<Double> object cannot be used on python)

D4Mat2Slicerで、XMLファイルを扱うTreatD4Matrix2XmlParams classからメンバー変数 Map<Double> deviceEncCodeDic を取り出して使用するところでエラーとなる問題に対処した。

バイナリデータを読み込むと以下のようなエラーが出た。

Traceback (most recent call last):
  File "/opt/mlfsoft/python-utsusemi/utsusemi/vis/D4Mat2SlicerQ.py", line 2541, in OnLoadData
    self.OnLoadXtalParam(input_xml=xp)
  File "/opt/mlfsoft/python-utsusemi/utsusemi/vis/D4Mat2SlicerQ.py", line 2788, in OnLoadXtalParam
    tt = TreatXmlParams(self)
         ^^^^^^^^^^^^^^^^^^^^
  File "/opt/mlfsoft/python-utsusemi/utsusemi/vis/D4Mat2SlicerQ.py", line 206, in __init__
    self.anglePerEncode = XP.deviceEncodeDic.Put(self.deviceEncode)
                          ^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'SwigPyObject' object has no attribute 'Put'
swig/python detected a memory leak of type 'Map< double > *', no destructor found.

メンバー変数の Map<Double> TreatD4Matrix2XmlParams::deviceEncCodeDic を取り出してみると、Map< double > が単なるSwigPyObjectと扱われていてそのメソッドにアクセスできないというエラーであった。 どうも Map< double> * のデストラクタがない、というメモリリークもあるらしく、使えなくなっている。

ちょっと根が深そうなので、根本解決ではないが、Mapをそのままオブジェクトとして使わずに、TreatD4Matrix2XmlParams に必要な情報を取り出すメソッドを追加することで回避した。

XP.deviceEncodeDic.Check(str) -> XP.CheckDeviceEncodeName(str)
XP.deviceEncodeDic.Put(str) -> XP.PutDeviceEncode(str)
Aug 20 2024

[update:Utsusemi:4.0] Add Utsusemi GUI commands for macOS

macOS上で動作する実行ファイルを、Ubuntu版やmacOSバイナリ版を参考に作成した。 以下の場所に配置しPATHに追加することで、空蝉のGUIをコマンドとして起動できる。

${MLFSOFT_PATH}/bin

それに合わせてPythonパッケージのインストールスクリプトや、環境依存の設定ファイルを作成するスクリプト、READMEなども更新した。

Aug 20 2024

[bugfix:Utsusemi:4.0] Small bugfix for SequenceEditor and UtsusemiEnvironmentSettings App.

  1. SequenceEditorでthreading.ThreadのDaemon化する設定方法を変更(メソッドではなくメンバー変数で指定)

  2. SequenceEditorでコメント用ダイアログ表示のexec関数をPySide6に対応させた

  3. macOS環境(PySide6.7.0)でUtsusemiEnvironmentSettings(DlgSetUtsusemiEnv.py)の終了時にapp.exit()だけではコード実行も終了しなかったのでself.close()も追加した

Aug 19 2024

[update:Utsusemi:4.0] Add and improve some scripts for compiling on macOS

Aug 11 2024

[update:Utsusemi-DNA:4.0] Update codes and scripts to compile on macos.

macos上でコンパイルが可能なようにいくつか追加や修正した。

  1. Makefile関連

  • manyo-LevmarTools/Makefile.macの修正

  • manyo/Makefile.mac, depend.macの追加

  1. コンパイルエラーへの対処

  • manyo-LevmarTools/AdvBSpline.cc

下記のエラーが出るのでコメントアウト。どうもgsl 2.7 -> 2.8においていくつかのメンバー変数が大きく変更になった模様。

AdvBSpline.cc:299:71: error: no member named 'n' in 'gsl_bspline_workspace'
    std::cout << "number of polynominal pieces" << bspline_workspace->n;
                                                   ~~~~~~~~~~~~~~~~~  ^
1 error generated.

n ではなく ncontrol が正解のようだが未確認。

Aug 10 2024

[update:Utsusemi-DNA:devElasticScan] Remove useless tags in environ_ana.xml

Aug 10 2024

[update:Utsusemi-SAS:4.0] Rename Makefile.py3.mac to Makefile.mac

Aug 10 2024

[update:Utsusemi-SAS:4.0] Rename Makefile.mac to Makefile.py2.mac

Aug 10 2024

[bugfix:Utsusemi-SAS:4.0] The issue that compile error occurs on macos with boost 1.85.0

Aug 2 2024

[update:Utsusemi:4.0] Set the memory save mode in D4Matrix2 as default mode.

D4Mat2Slicerにおいて、Memory Save Modeをデフォルトモードとした。

Aug 2 2024

[bugfix:Utsusemi:4.0] Improve the parts layout of D4Mat2Slicer GUI and fixed that the time cost of slicing is invalid on memory save mode.

  • Memory Save Modeのチェックボックスの位置がおかしいのを修正した

  • メモリーセーブモードのスライスでの処理にかかる時間を正しく表示するようにした

  • 不要な環境変数(UTSUSEMI_D4MAT2_MEMSAVE)が存在しないことを示す表示をなくした

Aug 2 2024

[update:Utsusemi:4.0devMemSave] Add the checkbox to change the memory save mode.

  • メモリセーブモードをGUI上で制御できるようにチェックボックスをつけた

  • UtsusemiD4Matrix2::SetMemorySaving(bool)で、falseの時にメモリをクリアするようにした

Jul 30 2024

[merge:Utsusemi-DNA:devElasticScan] Merge some codes updated in dnapca05(10.107.2.96).

dnapca05のUtsusemi-DNAはbranch:4.0の2022/10/18版であり、最新のものと比較して必要な更新をbranch:devElasticScanのコードに対して行った。

  • BaseCommandsDNA.pyとLS350IROHA2LogReader.pyはgitの4.0から少しだけ差分があったので追記した

更新部分はそれほど重要ではなさそうだが更新して同期しておく。

Jul 27 2024

[update:manyo:0.3.4] Improve some codes to remove the compile warning.

macOS上のコンパイルで

% clang++ --version
Apple clang version 15.0.0 (clang-1500.3.9.4)

下記のようなWarningが出たので修正した。

ElementContainer.cc:2437:38: warning: 'binary_function<double, double, double>' is deprecated [-Wdeprecated-declarations]
template <class T> class S3 : public binary_function<T, T, T>

ググると、binary_function<T, T, T> -> function<T(T, T)> とすれば良いらしい。Warningが消えた!!!

一方で、別の手段としてlamda式を使うことも推奨されていたので、そちらを採用した。ソースコードには binary_functionfunction のどちらも残してある。

// A = sum{T[i]/(E[i]*E[i])}
auto S3 = [](Double &arg1, Double &arg2)->Double{ return arg1 / (arg2 * arg2); };
A = inner_product(Target->begin(), Target->end(), Error->begin(), 0.0,
                  plus<Double>(), S3 );
// B = sum{1/(E[i]*E[i])}
auto S2 = [](Double &arg1, Double &arg2)->Double{ return 1.0 / (arg1 * arg2); };
B = inner_product(Error->begin(), Error->end(), Error->begin(), 0.0,
                  plus<Double>(), S2 );
Jul 27 2024

[bugfix:manyo:0.3.4] The issue that the compile error occurs on macOS with boost 1.85.0

macOS上だけなのかは不明だが、boost 1.85.0 がインストールされたmacOS上でコンパイルすると、下記のようなエラーが出るので対処した。

clang++ -fPIC -O3 -Xpreprocessor -fopenmp -Werror=return-type -DPyMaj=3 -I.   -c DoubleBinArrange.cc -DMULTH=1
In file included from DoubleBinArrange.cc:5:
In file included from ./DoubleBinArrange.hh:11:
In file included from ./NeutronVector.hh:270:
In file included from ./NeutronVector.cc:14:
In file included from /opt/homebrew/include/boost/filesystem.hpp:16:
In file included from /opt/homebrew/include/boost/filesystem/path.hpp:34:
In file included from /opt/homebrew/include/boost/filesystem/detail/path_traits.hpp:26:
In file included from /opt/homebrew/include/boost/system/error_category.hpp:10:
/opt/homebrew/include/boost/system/detail/error_category.hpp:87:5: error: unknown type name 'constexpr'
    constexpr error_category() noexcept: id_( 0 ), stdcat_(), sc_init_()

検索するとコンパイルオプションに -std=c++11 を追記すれば良いとのことだったので、とりあえずmacOS用のMakefile.macをそのように変更した。

また、macOS用のデフォルトコンパイラを clang++ に変えた(すでに depend.mac では変わっていたので実は影響なかった)

さらに、macOS用のmanyo/Makefile.mac をデフォルトにし、Python2用はmanyo/Makefile.py2.macとした。

Jul 18 2024

[bugfix:Utsusemi-DNA:devElasticScan] The issue that vector templates does not work on compiling with swig 4.2.0 on Ubuntu 24.04

DATA_RDCT-267 万葉ライブラリ:swig 4.2.x対応

Ubuntu24.04LTSではデフォルトでswig 4.2.0がインストールされるが、このバージョンでは、Manyo core以外のモジュールで作成された vector<XXX> が正しく変換されず、vectorとして使用できない問題があったので、その修正を行なった。

  • DNA.iに追記

Jul 10 2024

[bugfix:Utsusemi-DNA:devElasticScan] The issue that the file path for the detector efficiency correction is wrong (given by old method) in BaseCommandsDNA::SolidAngleCorreDNA

Jul 10 2024

[update:Utsusemi-DNA:devElasticScan] Update do_make_Utsusemi.py to work on Ubuntu24.04

Jul 10 2024

[update:Utsusemi-DNA:devElasticScan] Add new function in DNA/facade/Cmm.py from the BL02 PC

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

  • Cmm::CalcDATSumWithNormCurrent(…)が追加されていたので反映した

  • Cmm:GetDataOrgで修正が行われていたので反映した

Jul 10 2024

[update:Utsusemi-DNA:devElasticScan] Update the settings of objects for QDoubleSpinBox on SQWqt.py from the BL02 PC

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

SQWqtのDouble Spin Boxの最大値設定の修正が現場で行われていたので、それを修正した。

  • Emaxの最大値最小値をそれぞれ 10000 -> 40000, -10000 -> -40000 に変更した

Jul 10 2024

[update:Utsusemi-DNA:devElasticScan] Update the settings of objects for QDoubleSpinBox on ElasticScanGUI from the BL02 PC

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

ElasticScanGUIQtのDouble Spin Boxの最小値、増減ステップの値などの修正が現場で行われていたので、それを修正した。

  • EminおよびEmaxのSetDecimalsの引数を0 -> 2へ

  • EminおよびEmaxのSingleStepを0.01 -> 1.0へ

  • Emaxの最小値を0 -> -999.000へ

Jun 13 2024

[update:uGao:master] Add new arguments to set figure size in the constructor of U2IFInDark class

May 7 2024

[update:Utsusemi-DNA:devElasticScan] Update LS350IROHA2LogReader.py by Yamada@CROSS

May 7 2024

[update:Utsusemi-DNA:devElasticScan] Update SQW software by Yamada@CROSS

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

  • SQWのGUIにおける入力値の範囲指定を適切なものに

  • 温度センサーの選択肢にPEACEシリーズを追加

Feb 22 2024

[update:Utsusemi-DNA:devElasticScan] Update ElasticScanGUI codes by T. Yamada

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

reported by Takeshi Yamada@CROSS

GUI以外の主だった修正箇所は以下の通りです。

/opt/mlfsoft/python-utsusemi/utsusemi/DNA/ana/ElasticScanGUI/ElasticScanPy3.py

def ConvertXaxisFromTimeToTemp(ecES,ecTLog): を追加しました。

/opt/mlfsoft/python-utsusemi/utsusemi/DNA/ana/Reduction/ElasticScanBase.py
L465-L469
465     #for i in range(num_of_eca -1):[2024022 TY]
466     for i in range(num_of_eca):
467         if ((i+1)%10)==0:
468             print(">>>     ",i+1,"/",num_of_eca,"     <<<")
469         #eca = ecm(i+1)[2024022 TY]
470         eca = ecm(i)

L1213  EC.Add("x",list(range(11))) #TY[20240222] range(11) -> list(range(11))
Feb 22 2024

[update:Utsusemi-DNA:devElasticScan] Add new sensors into ElasticScan program(2)

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

lasticScanGUIQtの温度センサーの選択肢を増やした(コード側)

Feb 22 2024

[update:Utsusemi-DNA:devElasticScan] Add new sensors into ElasticScan program

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

ElasticScanGUIQtの温度センサーの選択肢を増やした(GUIのみ)

Feb 22 2024

[bugfix:Utsusemi-DNA:devElasticScan] The issue that the fitting function on ElasticScan causes the error

DATA_RDCT-257 空蝉4:DNAのSQWプログラムのバグ

reported by Takeshi Yamada@CROSS

ElasticScanのフィッティング(単に線形フィットなのですが)を再度したいと思っていて既存のコードをとりあえず動かすと以下のようなエラーとなりました。PeakfitInfo.xmlが要ると言われているのですが、アドバンスト様のフィッティングルーチンを呼ぶのに何か準備されたことはあるでしょうか?

10.107.2.96でこのファイル(“PeakfitInfo.xml”)を探すと

~/data/oldanaxml/PeakfitInfo.xml

を発見。コードを確認すると、エラー(raise)直前のコード

PeakFitInfoPath = PSD.CheckForInput("xml", "PeakfitInfo.xml")

で得られたPathが空っぽだったために故意に起こされたエラーであり、このCheckForInputを探ると、現在の空蝉環境では

~/ana/DNA/xml

の下にPeakfitInfo.xmlがあれば良いようだ。

このファイルもgitの管理下においた。

4.0.240731 or later#

Jul 31 2024

[update:Utsusemi:4.0] Improve the positions for OK/Cancel buttons in DlgSetUtsusemiEnv.py

Jul 31 2024

[update:Utsusemi:4.0] Add the function to show the error dialog when “Load” data process fails in D4Mat2Slicer.

DATA_RDCT-279 空蝉4:D4Mat2Slicerでd4mファイルを読み込んでProjectionの途中で止まる問題

読み込み時にエラーが発生したらエラーの発生を表示し、それ以上プロセスを進めることができないようにする。

  • 読み込む途中でエラーとなったらその情報をターミナルに強制表示(UtsusemiD4Matrix2.cc)

  • 読み込みがエラーだったらErrorダイアログを表示してそれ以上処理を進めない(D4Mat2SlicerQ.py)

Jul 31 2024

[update:Utsusemi:4.0] Apply new device to MakeRunList (Cry3He, …)

MakeRunListの温度ログの抽出対象デバイスを増やした。

  • “devTemp” : “Cry3He” でSEのHe3クライオの温度を取得可能に

Jul 30 2024

[bugfix:Utsusemi:4.0] The issue that the spin box GUI parts of Utsusemi Environment Setting Dialog are collapsed on Windows 11

DATA_RDCT-276 空蝉4:環境設定アプリのSpinBoxがWindows 11上で潰れる問題

Windows版の”UtsusemiEnvironmentSettings”アプリのフォントサイズ指定といったSpin Boxパーツが潰れている問題に対応した。

挙動確認:Windows 11, macOS Ventura, Ubuntu Linux 22.04

Jul 27 2024

[update:Utsusemi:4.0] Rename Makefiles for macOS to use as default

デフォルトのMakefileを Makefile.py3.mac から Makefile.mac とした。

  • ファイル名の変更

    • Makefile.mac -> Makefile.py2.mac

    • Makefile.py3.mac -> Makefile.mac

  • コンパイルスクリプトの変更(Makefile.py3.mac -> Makefile.mac)

    • contrib/macos/AppleSilicon/02compile_manyo.sh

      • contrib/macos/AppleSilicon/03compile_utsusemi.sh

Jul 20 2024

[update:Utsusemi:4.0] Update scripts to build and install manyo and Utsusemi on macOS

macOSにインストールするスクリプトを最新のものに置き換えた。

  • ソースコードをsourceフォルダ内に配置する

  • Nexus Fomatのコンパイルで失敗するため(NXbrowse.c)、パッチを作成した

  • Makefile.py3.macでコンパイルオプションに -std=c++11 を加えてコンパイルエラーをなくした

Jul 18 2024

[bugfix:Utsusemi-SAS:4.0] The issue that vector templates does not work on compiling with swig 4.2.x

DATA_RDCT-267 万葉ライブラリ:swig 4.2.x対応

Ubuntu24.04LTSなどではデフォルトでswig 4.2.0が、macOSではswig 4.2.1がインストールされるが、これらバージョンでは、Manyo core以外のモジュールで作成された vector<XXX> が正しく変換されず、vectorとして使用できない問題があったので、その修正を行なった。

  • manyo/SAS.iに追記

Jul 9 2024

[update:Utsusemi:4.0] Update do_make_Utsusemi.py to work on Ubuntu 24.04

Jul 9 2024

[update:manyo:0.3.4] Update do_make_Manyo.py to work on Ubuntu24.04

Jul 9 2024

[update:Utsusemi-SAS:4.0] Update do_make_Utsusemi.py to use argparse module and to work on Ubuntu 24.04

Jun 21 2024

[update:Utsusemi:4.0] Improve FilterTrignet::DumpTrigEventFile method.

TrigNETのイベントを可視化するUtsusemiFilterTrignet::DumpTrigEventFileの高度化し、キッカーイベントも表示するようにした(Pulse IDも)。

import Manyo.Utsusemi as mu

UFT = mu.UtsusemiFilterTrignet()
# arguments: TrigNET event file, Output file, isDecorated, withT0
UFT.DumpTrigEventFile("NBR001623_00_000_000.edb", "Results.txt", True, True)

Results.txtは下記のようになる。

=== Kicker ID : 0
...
=== Kicker ID : 751
2024/06/14 22:39:34,    34.040190, 1534.6750, DIO1  Up , DIO [1,0,0,0,0,0,0,0]
...
Jun 21 2024

[update:manyo:0.3.4] Update T0TreatToolsBase::DumpInfo function to apply plural events files and improve showing information.

  • T0TreatToolsBase::DumpInfoで複数(連番イベントデータファイル)を扱えるようにした

  • 表示情報の改良

    • 複数ファイルに対応

    • Pulse ID の情報もまとめて表示

4.0.240605 or later#

Jun 5 2024

[bugfix:Utsusemi:4.0] The issue that the push of the file open button in SequenceEditor occurs error

Windows版でSequenceEditorを起動し、pmtファイルを開くためのボタンを押すとエラーが発生する問題に対処した。

Windows環境は以下の通り。

  • python : 3.11

  • PySide6 : 6.7.1

  • matplotlib : 3.9.0

エラーは下記。

Traceback (most recent call last):
  File "C:\Program Files\Utsusemi\python-utsusemi\utsusemi\ana\SequencerQ.py", line 3208, in OnOpen
    ftpl = self.sfile.OpenSequence(
           ^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\Utsusemi\python-utsusemi\utsusemi\ana\SequencerQ.py", line 956, in OpenSequence
    fname = os.path.split(initFile)
            ^^^^^^^^^^^^^^^^^^^^^^^
  File "<frozen ntpath>", line 213, in split
TypeError: expected str, bytes or os.PathLike object, not bool

これまで、ボタンを押した時のイベントを受ける関数に引数が渡らないと理解していたが、以下の例の場合ではOnOpenに対して”True”の引数が渡っていた。この引数をOnOpen関数が拾って挙動がおかしくなった。

self.btOpen.clicked.connect(self.OnOpen)

そこで、イベントを受ける関数と、pmtファイルを開く関数を分けることで回避した。

May 27 2024

[update:Utsusemi:4.0] Add NBR to the choice of BL in UtsusemiSettignApp (DlgSetUtsusemi)

May 27 2024

[bugfix:Utsusemi:4.0] The issue that vector templates does not work on compiling with swig 4.2.1

DATA_RDCT-267 万葉ライブラリ:swig 4.2.x対応

swig 4.2.1では、Manyo core以外のモジュールで作成された vector<XXX> が正しく変換されず、vectorとして使用できない問題があったので、その修正を行なった。

manyo/core/Manyo.iに記述されているvector関連のテンプレートをMLF.iやUtsusemi.iにも貼り付けておくという対策である。

May 27 2024

[bugfix:manyo:0.3.4] The issue of wrong implementation of “unique” function used in MlfMatrixSlicer::GetPlaneAsDetectorMap.

MlfMatrixSlicer::GetPlaneAsDetectorMapで使用されているunique関数の使い方がおかしいので修正した。

戻り値にはuniqueの結果短くなったvectorのEndがイテレータとして戻される。よってEraceでvectorの余計な部分を削除する必要がある。しかし実際には削除する処理がなかったので修正した。

May 27 2024

[update:manyo:0.3.4] Update obsolete methods in boost::filesystem::path which cause compile error on boost v1.85.0

DATA_RDCT-273 万葉ライブラリ:Boostライブラリ1.85で起きる問題

Boostライブラリ 1.85.0の環境では、以下のメソッドが使用不可能(コンパイルエラー)となる問題に対応した。

boost::filesystem::path::normalize()
boost::filesystem::path::branch_path()
boost::filesystem::basename(...)

修正としては、それぞれほぼ同じ機能のメソッドに置き換えた。

boost::filesystem::path::normalize -> boost::filesystem::path::lexically_normal()
boost::filesystem::path::branch_path -> boost::filesystem::path::parent_path()
boost::filesystem::basename -> boost::filesystem::path::filename().generic_string()

normalizeに関しては、完全な語感はない(シンボリックリンクの処理など)と思われるが、実際に使用されるのがWriteSerializationFile::SplitSaveというメソッドで、ほどんど利用実績がないため、これ以上は不問とする。

May 27 2024

[bugfix:manyo:0.3.4] The issue that vector templates does not work on compiling with swig 4.2.1

DATA_RDCT-267 万葉ライブラリ:swig 4.2.x対応

swig 4.2.1では、Manyo core以外のモジュールで作成された vector<XXX> が正しく変換されず、vectorとして使用できない問題があったので、その修正を行なった。

manyo/core/Manyo.iに記述されているvector関連のテンプレートをMLF.iやUtsusemi.iにも貼り付けておくという対策である。

May 23 2024

[bugfix:uGao:master] The issue that “from matplotlib.cm import get_cmap” causes error in matplotlib version 3.9.0 on Windows installed by PIP.

May 22 2024

[bugfix:Utsusemi:4.0] The issue that the search path is wrong in PutLatestDataFolder with given dataDir argument

May 22 2024

[update:Utsusemi:4.0] Add new python function to get latest run number and it data folder

最新のRunNoとそのフォルダを返す関数を加えた。

import utsusemi.aan.Reduction.BaseCommands as BC

# Search in $UTSUSEMI_DATA_DIR$/$UTSUSEMI_INST_CODE$* /data/SIK, /data/SIK00, /data/SIK01, ..
runNo, dataPath = BC.PutLatestDataFolder()

# Seach in "/ace/SIK" only
runNo, dataPath = BC.PutLatestDataFolder("/ace/SIK")

第2引数には探すRunNoの範囲を指定できる(list)。

# Search in run number range from 100000, 400000.
runNo, dataPath = BC.PutLatestDataFolder("", [100000, 400000])
May 20 2024

[update:uGao:master] Add new function to give upper or lower limit in AutoScale (intensity) mode of U2IFInDark and u2dplot with the dark mode.

U2IFInDarkでSetRange(True, 0.0, 0.0)で強度の範囲をAutoにすることは可能であるが、下端や上端を固定したい。

U2IFInDark::SetRangeコマンドはparams.autoRange (bool) を制御するだけである。 またparams.rangeは、None(起動直後)か、(int, int)タプルである。

DarkModeの時、autoRange == Trueならば params.range = (None, int) や (int, None) を許可する。 タプル内でNoneの場合自動的に最大値か最小値で置き換え、intであればそれをはfixした値とみなす。

想定した仕様は以下の通り(いずれもDarkMode)。

  • 範囲の両端がAutoの場合、params.autoRange = True, params.range = None

  • 範囲の片方がAutoの場合、params.autoRange = True, params.range = (None, int) or (int, None)

  • 範囲の両端がFixの場合、params.autoRange = False, params.range = (int, int)

U2IFInDark::SetRangeでは以下のように表現する。

import uGao.U2IFInDark as UD

p=UD.U2IFInDark()
p.SetKeys(None, None, "Intensity", "TOF")    # 横軸、縦軸、強度のキー
p.SetData(DAT)                               # データをセット
#p.SetRange(True)               # 強度の範囲指定はAuto
p.SetRange(True, 0.01, None)    # 強度の範囲指定で下限値のみ固定
#p.SetRange(False, 0.05, 10e10) # 強度の範囲を指定する(先頭のFalseはAutoスケール停止の意味)
p.SetLog(True)
title = "Run No = {} @{}".format(runNo, now_dt.strftime("%y-%m-%d %H:%M"))
p.SetTitles(title, "")             # TitleとSubTitle
p.SetLabels("PSD","Pixel")         # 軸のラベル
p.SetFigureSize(8.0, 3.0)
p.SaveFile( "./graph.png" )                    # 画像ファイルとして保存
del p
May 17 2024

[bugfix:uGao:master] The issue that error occurs when ElementContainer are given in constructor of MPlotInDark, revice the docstrings

DATA_RDCT-271 夕顔:MPlotのDarkモードの作成

  • コンストラクタでElementContainerを与えるとエラーとなるのを修正した

  • Docstringsの修正

May 17 2024

[update:uGao:master] Update MPlotInDark.py to control MPlot without X server

DATA_RDCT-271 夕顔:MPlotのDarkモードの作成

Xを使用しない環境でMPlot(FastPlotQT)を制御し、画像ファイルだけを作成するためのコードに対して、コンストラクタで画像のサイズとdpiを指定できるようにした。 また、画像保存時はself.canvas.print_figure(fname, dpi=XXX)のようにdpiも引数で与えられていたが、今回は指定せずデフォルト値を使うようにした。

import uGao.MPlotInDark as FP

# コンストラクタでサイズとdpiを指定できる
p = FP.MPlotInDark(sizeX=5.0, sizeY=2.5, dpi=72)

...
May 17 2024

[update:uGao:master] Add MPlotInDark.py to control MPlot without X server

DATA_RDCT-271 夕顔:MPlotのDarkモードの作成

Xを使用しない環境でMPlot(FastPlotQT)を制御し、画像ファイルだけを作成するためのコードを新たに追加した。 ほぼ、MPlotのCUIと同じ機能が使用できるが、現状OverPlotのみである。

サンプルコードは以下の通り。

import Manyo
import uGao.MPlotInDark as FP

ec = Manyo.ElementContainer()
ec.Add("X", [1.0, 2.0, 3.0, 4.0, 5.0])
ec.Add("Y", [1.0, 2.0, 0.1, 1.0])
ec.Add("E", [1.0, 1.0, 1.0, 1.0])
ec.SetKeys("X", "Y", "E")

ec2 = ec.Mul(2.0)

p = FP.MPlotInDark()
p.AddData([ec, ec2])

p.SetYScale(False, 0.01, 10)
p.SetLog(True)
p.SetXScale(False, -1, 10)
#p.RemoveData(1)
p.SetPlotParam(0, ls="-", lc="k", lw=9)
p.SetMainTitle("Run No: 5515")
p.SetSubTitle("This is test!")
p.SetXLabel("Index X")
p.SetYLabel("Intensity")
p.Save("./test.png")

4.0.240426 or later#

Apr 26 2024

[update:Utsusemi:4.0] Enabled to give new device name of BL14 (He3TL) in devTemp and devGonio of MakeRunList commands.

MakeRunListのdevTempとdevGonioの引数に新たに”He3TL”を使えるようにした。ただし、”Shin-TL”というデバイス名はいずれ修正されるのでそのつもりで。

Apr 26 2024

[bunfix:Utsusemi:4.0] The issue that SequenceEditor’s commands list shows wrong arguments on launching with the given initial sequence script

DATA_RDCT-269 【空蝉4】Sequence Editorのスクリプト読み込み時のバグ

SequenceEditorの起動時に -file= でスクリプトを初期スクリプトとして読み込ませた場合に、コマンドリスト上で選択されているコマンドの引数ではないものが表示される現象に対処した。

なお、GUI上のボタンからスクリプトを読み込ませた時には発生しないので、修正できそう。

  • Openボタン -> OnOpen()

  • 起動時 -> LoadInitSequence()

どちらにもほとんど同じスクリプトを読み込む処理が書かれていたので統一する。 OnOpenコマンドの引数を拡張して、起動時も同じ処理を行うようにした。

  • Openボタン -> OnOpen()

  • 起動時 -> LoadInitSequence() -> OnOpen()

Apr 9 2024

[update:Utsusemi:4.0] Update WiringInfo of BL01

Apr 9 2024

[bunfix:Utsusemi:4.0] The issue that PutLatestRunNoFromDataFolder occurs core dump error when the data folder includes the file or folder with short ( lower than 9 ) name.

Apr 9 2024

[update:Utsusemi:4.0] Replace the literal value for the error value for masked point with 0 intensity with UTSUSEMIMASKERRORVALUE

Apr 9 2024

[update:Utsusemi:4.0] Add the function to reduce the NXSPE file size by reducing the precision of data values in NXSPE file(2).

DATA_RDCT-236 空蝉4:Nxspeのファイルサイズ

ファサード(SaveDataToNxspe)に、NxspeFileIOクラスのファイルサイズを減らす引数を加えた。

Apr 9 2024

[update:Utsusemi:4.0] Add the function to reduce the NXSPE file size by reducing the precision of data values in NXSPE file.

DATA_RDCT-236 空蝉4:Nxspeのファイルサイズ

Nxspeファイルを保存するNxspeFileIOクラスにファイルサイズを減らすオプションをつけた。

Nxspeファイル保存時には圧縮が自動的にかけられるが、強度やエラーの値を一旦64bit(double)から32bit(float)に変換することで有効桁数を減らすことで、圧縮率を上げられることを確認した。 精度は落ちるがファイルサイズは半分強になる。

Apr 8 2024

[bugfix:Utsusemi:4.0] The issue that CalcContainers function can not treat the masked data point correctly(2).

DATA_RDCT-268 空蟬4:BL15でのTOFマスクが効かない?

Add new global constant value UTSUSEMIMASKERRORVALUE used to mask the point with 0 intensity.

Apr 6 2024

[bugfix:Utsusemi:4.0] The issue that CalcContainers function can not treat the masked data point correctly.

DATA_RDCT-268 空蟬4:BL15でのTOFマスクが効かない?

UtsusemiCalcContainers関数が正しくマスク値(Errorが負)を扱えない問題を修正した。

Apr 6 2024

[bugfix:Utsusemi-SAS:4.0] The issue that the treatments of a masked data point in some functions are not suitable.

DATA_RDCT-268 空蟬4:BL15でのTOFマスクが効かない?

いくつかの関数の中で、データ点のエラーを計算する際にマスクされている点を正しく(masked点の計算結果もmasked)扱っていないものがあったので修正した。

  • manyo/I0LambdaCorrection.cc

  • manyo/RPMTSetMaskBy2theta.cc

  • manyo/TransmittanceCorrection.cc

Apr 6 2024

[bugfix:Utsusemi-SAS:4.0] The issue that the error calculation of Polynomial3 in GetCalcTransmittance is wrong.

Apr 6 2024

[update:Utsusemi-SAS:4.0] Fixed small typo.

Feb 12 2024

[update:manyo:0.3.4] Remove the file which was uploaded by typo

4.0.240318 or later#

Mar 18 2024

[update:uGao:master] Improve the retry code for the failure of the socket connection in QtCom.py on macOS

macOS上では、起動待ち時間を追加。不具合により、Mac (Intel and AppleSilicon) では一度接続に失敗するとリトライによる再接続ができないため、接続までに10秒以上の待ち時間が設けられており、MPlotのスムーズな起動が妨げられていた。 また、macOS上では特に初回起動時に時間がかかるようで、time outすることが多かった。

そこで、macOS上ではsocket接続に失敗したときは作成したsocketのインスタンスを削除し、新たに作成し直すようにしてみたところ、起動がスムーズになった。 結果として、Linuxと同様の速度で起動する(たまに遅くなる)ようになった。

Mar 14 2024

[bugfix:uGao:master] The issue that ImportError in FastPlotQt.py on scipy version 1.12.0

DATA_RDCT-265 夕顔:scipy 1.12.0問題

scipyのバージョンが1.12になった時にFastPlotQt実行時に下記のImportErrorが出るので対応した。

>>> scipy.__version__
'1.12.0'
>>> import uGao.FastPlotQt as fastplot
  File "/opt/mlfsoft/python-utsusemi/uGao/FastPlotQt.py", line 69, in <module>
  from scipy import sum as sp_sum
ImportError: cannot import name 'sum' from 'scipy' (/home/yinamura/dev/works/240314uGao/venv/lib/python3.10/site-packages/scipy/__init__.py)

# 加えて下記も出る。

ImportError: cannot import name 'diag' from 'scipy' (/home/yinamura/dev/works/240314uGao/venv/lib/python3.10/site-packages/scipy/__init__.py)

これら(scipy.num, scipy.diag)は、numpyのモジュールに置き換えるだけで良いので、修正した。

Feb 28 2024

[bugfix:uGao:master] The issue that the data returned from uGaoUtil::ConvertEC causes the error in latest matplotlib when the error values are less than 0.

ConvertECでerror値がマイナスの場合、強度をMASKVALUEに置き換えるが、同時にerror値もマイナスだと新しいmatplotlibではエラーが発生する。それへの対処を行なった(エラー値を0.0とした)

Feb 28 2024

[update:uGao:master] Add the function to save and load initial setting file in the current directory.

DATA_RDCT-264 夕顔:M2Plot+で起動直後の設定ダイアログのAve/Sum設定が反映されない,初期設定ファイルのローカル化

  • 初期設定ファイルをローカル(カレント)ディレクトリに保存できるようにした

  • 起動時にローカル(カレント)ディレクトリに初期設定ファイルがあれば、そちらを優先するようにした

  • 初期設定ファイルの名前をわかりやすくした( initial.upr -> m2plotp_initial.prm )

Feb 28 2024

[bugfix:uGao:master] The issue that on launching M2Plot+ the saved setting about Ave/Sum is not applied into M2PlotPlus main panel.

DATA_RDCT-264 夕顔:M2Plot+で起動直後の設定ダイアログのAve/Sum設定が反映されない,初期設定ファイルのローカル化

起動直後、保存されていたAve/Sumの設定が設定ダイアログGUIおよび、M2PlotPlusメインパネルに反映されていないにも関わらず、機能としては反映されているので混乱が生じていたのを修正した。

Feb 27 2024

[bugfix:uGao:master] The issue that on launching M2Plot+ the saved setting about Ave/Sum is not applied into parameter setting dialog.

DATA_RDCT-264 夕顔:M2Plot+で起動直後の設定ダイアログのAve/Sum設定が反映されない,初期設定ファイルのローカル化

起動直後、保存されていたAve/Sumの設定が設定ダイアログGUIに反映されていないにも関わらず、機能としては反映されているので混乱が生じていたのを修正した。

Feb 22 2024

[update:Utsusemi-DNA:4.0] Improve the codes for ElasticScan by Dr. T.Yamada

Feb 22 2024

[bugfix:Utsusemi-DNA:4.0] Typo of the name of modules

Feb 17 2024

[bugifx:Utsusemi:4.0] The issue that the script to create environment setting on macOS does not work correctly

Feb 15 2024

[update:Utsusemi-SAS:4.0devTransAng] Remove useless comments

Feb 14 2024

[update:Utsusemi:4.0] Improve do_make_Utsusemi.py with DIST_NAME is Ubuntu22

Feb 14 2024

[update:Utsusemi-SAS:4.0devTransAng] Add function to dump the calculated factor and error by a Polynominal Approximation method with the angle dependency into ElementContainer

DATA_RDCT-262 BL15:透過率補正の角度依存性を実装する

角度依存性を考慮したPolynominal Approximation手法の計算補正値(factor)を可視化するために、ElementContainerMatrixの強度として取り出せるようにした。

Feb 14 2024

[bugfix:Utsusemi-SAS:4.0] The issue that the histogram creation of RPMT data does not find the RPMT data file

GetHistogramSAS(…, Bank=”RPMT”, …)で、ConvertFromRPMTK2Psd内でRPMTのファイルが見つからない問題に対処した。

/data/SASxxのフォルダをglobで探しにゆく際に、見つけたデータフォルダの最初のフォルダしかファイルを探さない問題に対処した。 globで見つけたSASxx/SASxxxxxxxx_YYYYMMDDを全て検索するようにした。

元々はACEに全て入っていたので、「最初のフォルダ」でも問題がなかったが、現在は分散して保存しているので、このエラーが発現した。

Feb 11 2024

[update:Utsusemi-SAS:4.0devTransAng] Add new method for transmittance correction using “Polynominal Approximation”

DATA_RDCT-262 BL15:透過率補正の角度依存性を実装する

透過率補正の角度依存性処理をTransmittanceCorrectionクラスに加えた。

従来の処理(exp, poly3)と変わらないが、ループの中でif文を増やすのはよろしくないので、PolynominalApproximationによる補正処理は、 _ExecutePolyApproximation を新たに作成した。なおポインタの活用などで高速化しているはず。

また従来の Execute の中身(exp, poly3)は _Execute に移動し(メソッド名の変更) ExecutefuncType でそれぞれの方式にあった処理コードを実行するようにした。

Feb 10 2024

[update:Utsusemi-SAS:4.0] Delete the unusual file

Feb 9 2024

[update:Utsusemi-SAS:4.0devTransAng] Add new fitting function for the transmittance correction using “Polynominal Approximation”

DATA_RDCT-262 BL15:透過率補正の角度依存性を実装する

厚みを含めた形の関数 Polynominal Approximation を作成し、それでフィッティングできるようにした。

透過率補正の流れ

# I/I_0の計算
Trs = GetTransNormByMonTs(...)

# Trsに対してフィッテイング
Trans.FitPolynominal3(dat=Trs)
# -> TransBaseCommands::FitPlynominal3(dat=Trs)
# -> TransBaseCommands::Fit()

# 戻り値として ( フィッティング結果値, フィッテイング結果標準偏差, 関数コード)
# 同時にTrsのヘッダに "TransmittanceParameter", "TransmittanceParameterError", "TransmittanceFitFunc"の情報を追加

# プロット用Trs_calcを作成
Trs_calc = Trans.GetCalcTransmittance(dat=Trs)
# この結果は表示するだけに使用

# データ補正
# 戻り値PyObjsを受けて、サンプルデータを補正する
Trans .TransmittanceCorrection(dat=DATs, params=PyObjs)

新たなフィッティング関数

フィッティング関数を以下のように定義する。 ここでTはthickness of sample、これはフィッティング中は固定。

S = p0 + p1 * lamb + p2 * lamb^2 + p3 lamb^3
f = exp( -S*T)

ただし、実際にフィッティングを行うPythonコード TransBaseCommands::Fit() においては、Thicknessをパラメータの一つとしてscipy.optimizeleastsqに渡すと固定できないので、別途フィッティング関数 TransBaseCommands::FitPolyApprox() を作成した。

fitfunc = lambda p, x, t: np.exp(-(p[0] + (p[1] * x) + (p[2] * x * x) + (p[3] * x * x * x)) * t)
errfunc = lambda p, x, y, sigma, t: fitfunc(p, x, t) - y
scipy.optimize.leastsq(errfunc, iniVal, args=(lambda, intensity, error, thick)...)

TransmittanceCorrectionの改変

PyObjsに含まれる情報を利用して、サンプルデータを補正する class manyo::SAS::TransmittanceCorrection で、 TransmittanceCorrection::PolynominalApproximation を作成し、内部で補正対象データのヘッダからThickness情報を取り出して補正用factorを計算するようにした。

また、フィッティング関数コードの統一のため、TransmittanceCorrection::TRANSMIT_TYPE_POLYAPPROX を定義した。

処理の流れ

結果として、 Polynominal Approximation を用いた補正は、下記のような流れとなる。

# I/I_0の計算
Trs = GetTransNormByMonTs(...)

# Trsに対してフィッテイング
Trans.FitPolyApproximation(dat=Trs)
# -> TransBaseCommands::FitPlyApproximation(dat=Trs)
# -> TransBaseCommands::FitPolyApprox()

# 戻り値として ( フィッティング結果値, フィッテイング結果標準偏差, Thickness, 関数コード)とThicknessを増やした
# 同時にTrsのヘッダに "TransmittanceParameter", "TransmittanceParameterError", "TransmittanceFitFunc"の情報を追加
# さらにThicknessを "TransmittancePolyApproxThick" のキーで与える

# プロット用Trs_calcを作成、この中でTrsのヘッダThicknessを利用する。ように改変
Trs_calc = Trans.GetCalcTransmittance(dat=Trs)
# この結果は表示するだけに使用

# データ補正
# 戻り値PyObjsを受けて、サンプルデータを補正する
Trans .TransmittanceCorrection(dat=DATs, params=PyObjs)
# -> TransBaseCommands::TransmittanceCorrPolyApproximation()
# 内部でPyObjs->paramsからThicknessを取り出し、補正対象のデータのヘッダに埋め込み
# manyo.SAS.TransmittanceCorrectionで使用するように変更
Feb 8 2024

[update:Utsusemi:4.0] Update BL01 WiringInfo

Feb 5 2024

[update:manyo:0.3.4] Improve do_make_Manyo.py

以下の点でコンパイル用スクリプト do_make_Manyo.py を改良した。

  • 引数解析を argparse モジュールを利用するようにした

  • MANYO_REVを新しく設定し、gitのlog情報から最終日付をMANYO_REVとして指定するようにした

他のコードも修正した。

  • Makefile 内でMANYO_REVを利用して core/.__init__.py にRevision番号(日付)を加えるようにした。

__version__ = "0.3.4.240205"
Feb 5 2024

[update:manyo:0.3.4] Add T0TreatToolsBase::DumpInfo to show the information included in event data

T0TreatToolsに下記のような情報を表示するDumpInfo()メソッドを追加した。引数に目的のイベントデータファイルへのパスを与えることが可能だが、空の場合、すでに読み込まれているイベントデータから情報を引き出す。

  • 測定開始・終了時刻

  • T0イベントが抜けているかを確認した結果(T0 IDが+1ずつIncrementしているかどうか)

他に、publicメソッドとして、 EncodePidClockEventDecodePidClockEvent を追加した。 (ダミーのイベントデータを作成するのに便利かも)

Feb 3 2024

[update:Utsusemi:4.0] Change the order of options on executing do_make_Utsusemi.py with –help

Feb 3 2024

[bugfix:Utsusemi:4.0] The issue of the wrong treatment of flags –with-para and –without-para at do_make_Utsusemi.py

Feb 3 2024

[update:Utsusemi:4.0] Improve do_make_Utsusemi.py to use argparse module

  • コンパイルに使用する do_make_Utsusemi.py の引数解析を argparse モジュールを使用するようにした

  • 不要なhelpメッセージをコメントとした

  • 古いデフォルト値を現在のものに変更した

Feb 3 2024

[bugfix:uGao:master] The issue that change the backend to Agg does not work in FastPlotQt.py

DATA_RDCT-261 夕顔:U2IFInDarkがX serverがない時に動作しない

Ubuntu 22.04LTS の時(matplotlib ‘3.7.1’ and PySide6 ‘6.5.2’)にバックエンドを変更するコマンド matplotlib.use(‘Qt5Agg’) 実行時に下記のようなエラーが出る。

ImportError: Cannot load backend ‘Qt5Agg’ which requires the ‘qt’ interactive framework, as ‘headless’ is currently running

これまでは、これを利用してバックエンドをX非使用設定 use(‘Agg’) を実行していた。

しかし、Ubuntu 18.04LTS(matplotlib ‘3.7.1’ and PySide6 ‘6.5.2’)でのバックエンド変更コマンドではエラーは発生せず、バックエンドの切り替えができていなかった。

ただし下記の部分で別途ImortErrorが発生したので、そこでも use(‘Agg’) を設定するようにした。

from pylab import setp, getp

Jun 29 2023

[update:Utsusemi-DNA:4.0] Delete bashrc.manyo.release

4.0.240119 or later#

Jan 19 2024

[bugfix:uGao:master] The issue that plotting-in-dark mode (U2IFInDark.py) causes the error on sst access without launching Xserver (X-forwarding).

DATA_RDCT-261 夕顔:U2IFInDarkがX serverがない時に動作しない

>>> import uGao.U2IFInDark as UD
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/mlfsoft/python-utsusemi/uGao/U2IFInDark.py", line 11, in <module>
    from uGao.u2dplot import U2Params, D2Chart
  File "/opt/mlfsoft/python-utsusemi/uGao/u2dplot.py", line 19, in <module>
    import uGao.MPlot as mp
  File "/opt/mlfsoft/python-utsusemi/uGao/MPlot.py", line 12, in <module>
    from uGao.uGaoUtil import TempFile, TraceAtt, ConvertEC, STRING_TO_REPLACE_SPACE
  File "/opt/mlfsoft/python-utsusemi/uGao/uGaoUtil.py", line 38, in <module>
    matplotlib.use('Qt5Agg')
  File "/home/yinamura/.local/lib/python3.10/site-packages/matplotlib/__init__.py", line 1233, in use
    plt.switch_backend(name)
  File "/home/yinamura/.local/lib/python3.10/site-packages/matplotlib/pyplot.py", line 279, in switch_backend
    raise ImportError(
ImportError: Cannot load backend 'Qt5Agg' which requires the 'qt' interactive framework, as 'headless' is currently running

修正の過程#

  1. matplotlib.use(“Qt5Agg”)がエラーなのでmatplotlib.use(“Agg”)にする

  2. FigureCanvasも from matplotlib.backends.backend_agg import FigureCanvasAgg から持ってくる

  3. FigureCanvasQTAggにあるsize()メソッドは、FigureCanvasAggにはないので、関連するコマンドは削除する

    • 削除ではなくD2Chartのインスタンス作成時の引数 isDarkModeTrue にして、内部で上記のブロックをスキップするようにした

matplotlib.use(“Agg”)#

  • 画面にウィンドウを開いて動作させるプログラムは対話型バックエンド(interactive backend)

  • パラメータだけで画像ファイルを生成するようなプログラムは非対話型バックエンド(non-interactive backend)

Xserverがないのは非対話型バックエンドである必要があるため、対話型バックエンドを使用するとエラーとなるようだ。

try:
    matplotlib.use("Qt5Agg")
except:
    matplotlib.use('Agg')

この結果、別のエラーが発生した。

Traceback (most recent call last):
  File "/home/yinamura/dev/works/UtsusemiTest240117.py", line 45, in <module>
    p=UD.U2IFInDark()
  File "/opt/mlfsoft/python-utsusemi/uGao/U2IFInDark.py", line 49, in __init__
    self.canvas = FigCanvas(self.fig)
  File "/home/yinamura/.local/lib/python3.10/site-packages/matplotlib/backends/backend_qt.py", line 204, in __init__
    _create_qApp()
  File "/home/yinamura/.local/lib/python3.10/site-packages/matplotlib/backends/backend_qt.py", line 110, in _create_qApp
    raise RuntimeError('Invalid DISPLAY variable')
RuntimeError: Invalid DISPLAY variable

FigureCanvasのインスタンス作成時エラー#

U2IFInDark.pyでは、non-intaractive backend、use(“agg”)なのに、backend_qt5aggを使用していた

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigCanvas の部分を from matplotlib.backends.backend_agg import FigureCanvasAgg as FigCanvas に変更することで回避。

この結果、別のエラーが発生。

Traceback (most recent call last):
  File "/home/yinamura/dev/works/UtsusemiTest240117.py", line 52, in <module>
    p.SaveFile( "TestData.png" )                    # 画像ファイルとして保存
  File "/opt/mlfsoft/python-utsusemi/uGao/U2IFInDark.py", line 326, in SaveFile
    self.d2 = D2Chart(self, self.canvas, self.ndata, True)
  File "/opt/mlfsoft/python-utsusemi/uGao/u2dplot.py", line 5113, in __init__
    self.PlotD2Chart()
  File "/opt/mlfsoft/python-utsusemi/uGao/u2dplot.py", line 5497, in PlotD2Chart
    _canvas_size = self.canvas.size()
AttributeError: 'FigureCanvasAgg' object has no attribute 'size'. Did you mean: 'resize'?

FigureCanvasAggにないメソッドでエラー#

FigureCanvasQTAggで使用できたメソッドがFigureCanvasAggにないのでエラーとなる。 その部分をD2Chartクラスの引数のisDarkMode=True指定時にスキップするように改変。

# ウィンドウサイズ指定の反映
_canvas_size = self.canvas.size()

から

logging.debug("D2Chart::PlotD2Chart new_size {0}".format(_new_size))
self.canvas.window().resize(*_new_size)

まで。

Jan 17 2024

[update:Utsusemi:4.0] Add new WiringInfo for SIK.

4.0.240116 or later#

Jan 16 2024

[update:Utsusemi:4.0] Update environ_ana.xml for SIK.

Jan 16 2024

[update:Utsusemi:4.0] Add an argument of DetEffi in PowderSQE to do the detector efficiency correction

PowderSQEに検出器効率補正を選択できる引数を追加し、処理するようにした。

  • python-utsusemi/ana/Reduction/BaseCommandsInEla.py

  • python-utsusemi-SIK/facade/DR.py

def PowderSQE(runNo="0", Ei=0.0, deltaE=0.0, Erange="0.0 0.0", deltaQ=0.1, Qrange="-1.0 -1.0", TimeSlice="-1.0 -1.0", MaskFile="default", NormFactor=1000000.0, TimeDepBack="TOF:None", Vpath="/home/sikuser/user/template/vanadium_correction/", Vfile="None", VintegRange="All", VpixelRange="2:97", DetEffi="SIK-SUS304-3He-PSD.dat"):
    """
    Load EventData and convert to powder-averaged S(Q,E) with the vanadium correction. This includes:
    - GetDataOfMonoChroEi3(): convert to histogram
    - LadDataFromDump(): load vanadium data
    - RadialCollimatorCorrect(): correct intensity unevenness due to the radial collimator
    - ToPowder(): powder average
    @param runNo    (string) Run Number(s) "<run1>[,<run2>,...]"(delimitor is comma or space)
    @param Ei       (double) Incident Energy [meV]
    @param deltaE   (double) Delta Energy Transfer [meV]
    @param Erange   (string) min and max of Energy Transfer [meV] "<min>,<max>"(delimitor is comma or space)
    @param deltaQ   (double) binning of Q
    @param Qrange   (string) min and max of Q "<min>,<max>"(delimitor is comma ro space)
    @param TimeSlice(string) start time and end time [seconds] "<min>,<max>"(delimitor is comma or space)
    @param MaskFile (string) file name for masking
    @param NormFactor (double) normalize factor data*factor/beamCurrent. if 0, do nothing.
    @param TimeDepBack (string) Subtruct time-independent-background "TOF:34000-36000" or "DARK:20717"
    @param Vpath    (string) path containing the vanaidum Manyo Binay (mdb) file
    @param Vfile    (string) name of vanadium Manyo Binay (mdb) file. If None, the vanadium correction is skipped
    @param VintegRange (string) Integrate range "All" or "<start>:<end>"
    @param VpixelRange (string) Pixel range to be used "All" or "<start>:<end>"
    @param DetEffi (string) File name of the detector efficiency correction data. "None" : do not correction
    @retval ECM     (ElementCotainerMatix)
    """

    mu.UtsusemiMessage('DR.PowderSQE("{}",{},{},"{}",{},"{}","{}","{}",{},"{}","{}","{}","{}","{}","{}")'.format(runNo, Ei, deltaE, Erange, deltaQ, Qrange, TimeSlice, MaskFile, NormFactor, TimeDepBack, Vpath, Vfile, VintegRange, VpixelRange, DetEffi))
    return BaseCom.PowderSQE(runNo, Ei, deltaE, Erange, deltaQ, Qrange, TimeSlice, MaskFile, NormFactor, TimeDepBack, Vpath, Vfile, VintegRange, VpixelRange, DetEffi)
Jan 16 2024

[bugfix:Utsusemi:4.0] Fixed the issues around the function of DumpAsText.

D4Mat2SlicerのDumpAsTextに関するバグを修正した。

  • プルダウンを選択した時にボタンがONにならない

  • 保存ダイアログで表示するファイルの拡張子が .txt でない

  • テキスト保存のメソッド呼び出しの引数を少しわかりやすくした

  • テキスト保存のメソッド呼び出し時にコメントを表示した

Jan 16 2024

[bugfix:Utsusemi:4.0] The issue that ImportError happends on import BaseCommands without the connection to X server.

Xサーバーへのアクセスができない状態で、utsusemi.ana.Reduction.BaseCommandsを直接間接問わずimportすると、下記のようなエラーが出る。

>>> import DR
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/mlfsoft/python-utsusemi/utsusemi/SIK/facade/DR.py", line 4, in <module>
    import utsusemi.ana.Reduction.BaseCommandsInEla as BaseCom
  File "/opt/mlfsoft/python-utsusemi/utsusemi/ana/Reduction/BaseCommandsInEla.py", line 12, in <module>
    from utsusemi.ana.Reduction.BaseCommands import *
  File "/opt/mlfsoft/python-utsusemi/utsusemi/ana/Reduction/BaseCommands.py", line 13, in <module>
    from utsusemi.ana.Reduction import PutSum
  File "/opt/mlfsoft/python-utsusemi/utsusemi/ana/Reduction/PutSum.py", line 12, in <module>
    import uGao.MPlot as mp
  File "/opt/mlfsoft/python-utsusemi/uGao/MPlot.py", line 12, in <module>
    from uGao.uGaoUtil import TempFile, TraceAtt, ConvertEC, STRING_TO_REPLACE_SPACE
  File "/opt/mlfsoft/python-utsusemi/uGao/uGaoUtil.py", line 38, in <module>
    matplotlib.use('Qt5Agg')
  File "/home/yinamura/.local/lib/python3.10/site-packages/matplotlib/__init__.py", line 1233, in use
    plt.switch_backend(name)
  File "/home/yinamura/.local/lib/python3.10/site-packages/matplotlib/pyplot.py", line 279, in switch_backend
    raise ImportError(
ImportError: Cannot load backend 'Qt5Agg' which requires the 'qt' interactive framework, as 'headless' is currently running

import uGao.MPlot as mp が強制的にDISPLAY関連の設定が必要となるらしい。 幸いPutSum.pyではMPlotは不要なので、削除するにとどめた。

Jan 15 2024

[update:Utsusemi:4.0devD4Mat2Dump] Remove some output lines for debug (Only shown on DebugMode)

DATA_RDCT-230 空蝉4:D4Mat2Slicer要望・バグ2023

デバッグ用に追加した出力をデバッグモードの時だけ表示するようにした。

Jan 15 2024

[update:Utsusemi:4.0devD4Mat2Dump] Add new flag in BaseCommands:InEla::LoadRunListToExtract because the angle calculations between D4Mat and D4Mat2 are differnt.

DATA_RDCT-230 空蝉4:D4Mat2Slicer要望・バグ2023

D4Mat用のExtractファイルにおける角度計算とD4Mat2用では異なる。RunListを読み込んで処理するルーチンで、D4Mat2用の処理を行うためにフラグを追加し、処理を分けるようにした。

Jan 15 2024

[bugfix:Utsusemi:4.0devD4Mat2Dump] The issue that the average treatment does not included in UtsusemiD4Matrix2::PutSlicedD4MatrixToVectors

DATA_RDCT-230 空蝉4:D4Mat2Slicer要望・バグ2023

UtsusemiD4Matrix2::PutSlicedD4MatrixToVectorsで、データ点を加算した時に平均化する処理が抜けていたので修正した。

  • 引数にbool isAveを加えた

  • 関数内で、isAveに応じた処理を行うように改変した

  • エラーの取り出しに間違いがあったので修正した(eArray4には err^2 が入っているため)

  • 加算が全くなかったデータ点はマスク値(エラー値を-1e-10)とした(暫定)

サンプルコード

    isAve = False
if D4M.MakeSllicedD4MatrixInner(ax1range, ax2range, ax3range, ax4range, folding):
    ...
    if D4M.PutSlicedD4MatrixToVectors(ax1v, ax2v, ax3v, ax4v, intv, errv, isAve):
        print(" ------------ Output to vectors : succeeded.")
        D4M.ClearSlicedD4MatrixInner()
    ...

fo = open(outFile2, "w")
ind = 0
for i1 in range(ax1v.size()):
    for i2 in range(ax2v.size()):
        for i3 in range(ax3v.size()):
            for i4 in range(ax4v.size()):
                a_line = "{:g}, {:g}, {:g}, {:g}, {:g}, {:g}\n".format(ax1v[i1], ax2v[i2], ax3v[i3], ax4v[i4], intv[ind], errv[ind])
                fo.write(a_line)
                ind += 1
fo.close()
Jan 15 2024

[update:Utsusemi:4.0devD4Mat2Dump] Change the order of values in the intensity vector produced from UtsusemiD4Matrix::DumpD4MatIntoVect()

UtsusemiD4Matrix::DumpD4MatIntoVectで取り出される強度vectorの値の並びをわかりやすいように 変更した。

結果として、D4Matrix2のPutSlicedD4MatrixToVectorsと同じ並びとなった。

並び定義

intensity[ind]
ind = ((ix * ax1size + iy) * ax2size + iz) * ax3size + ihw

サンプルコード

DM.DumpD4MatIntoVect(ax1[:-1], ax2[:-1], ax3[:-1], hwr[:-1], ["X", "Y", "Z", "T"], [], False, ax1v, ax2v, ax3v, ax4v, intv, errv)
...
for i in range(ax1v.size()):
    for j in range(ax2v.size()):
        for k in range(ax3v.size()):
            for l1 in range(ax4v.size()):
                a_line = "{:g}, {:g}, {:g}, {:g}, {:g}, {:g}".format(ax1v[i], ax2v[j], ax3v[k], ax4v[l1], intv[ind], errv[ind])
                fo.write(a_line + "\n")
                ind += 1
Jan 12 2024

[update:Utsusemi:4.0devD4Mat2Dump] Add new methods to output D4matrix2 data sliced by given axes ranges into vectors

DATA_RDCT-230 空蝉4:D4Mat2Slicer要望・バグ2023

D4Mat2の4次元データを与えられた軸の範囲でスライスした結果をvectorで取り出すため(Pythonのメモリ上で扱うため)に必要となるメソッドを追加した。 その際に、同様のデータをテキストファイルに出力するメソッドと共通する部分を MakeSlicedD4MatrixInner として定義し利用している。

bool PutSlicedD4MatrixToVectors(vector<Double> *ax1, vector<Double> *ax2, vector<Double> *ax3, vector<Double> *ax4, vector<Double> *intensity, vector<Double> *error);
bool MakeSllicedD4MatrixInner(vector<Double> ax1range, vector<Double> ax2range,
                              vector<Double> ax3range, vector<Double> ax4range,
                              vector<Double> folding, bool isAve=true);
void ClearSlicedD4MatrixInner();

使い方

D4M = mu.UtsusemiD4Matrix2()

# Import Data into vectors
isAve = False
if D4M.MakeSllicedD4MatrixInner(ax1range, ax2range, ax3range, ax4range, folding, isAve):
    ax1v = Manyo.MakeDoubleVector()
    ax2v = Manyo.MakeDoubleVector()
    ax3v = Manyo.MakeDoubleVector()
    ax4v = Manyo.MakeDoubleVector()
    intv = Manyo.MakeDoubleVector()
    errv = Manyo.MakeDoubleVector()
    if D4M.PutSlicedD4MatrixToVectors(ax1v, ax2v, ax3v, ax4v, intv, errv):
        print(" ------------ Output to vectors : succeeded.")
    else:
        print(" ERROR: failed to open output to vectors")
        sys.exit(-1)

D4M.ClearSlicedD4MatrixInner()
del D4M

# Save vectors as a text file
fo = open(outFile, "w")
ind = 0
for i1 in range(ax1v.size()):
    for i2 in range(ax2v.size()):
        for i3 in range(ax3v.size()):
            for i4 in range(ax4v.size()):
                a_line = "{:g}, {:g}, {:g}, {:g}, {:g}, {:g}\n".format(ax1v[i1], ax2v[i2], ax3v[i3], ax4v[i4], intv[ind], errv[ind])
                fo.write(a_line)
                ind += 1
fo.close()
Jan 12 2024

[update:Utsusemi:4.0devD4Mat2Dump] Add new methods to put D4Mat data into vectors on UtsusemiD4Matrix class

DumpD4MatToFileは、読み込んだD4Matデータをテキストファイルにして書き出す処理であるが、それをPython上でVectorとして取り出せるように新たに関数を加えた。

bool  DumpD4MatIntoVect( PyObject* a1range, PyObject* a2range, PyObject* a3range, PyObject* a4range, PyObject* def_axes, PyObject* foldings,  bool isAve,
                        vector<Double> *ax1, vector<Double> *ax2, vector<Double> *ax3, vector<Double> *ax4, vector<Double> *intensity, vector<Double> *error);

Int4 DumpD4MatIntoVect( vector<Double> a1r, vector<Double> a2r, vector<Double> a3r, vector<Double> a4r, vector<string> def_axes, vector<Double> foldings, bool isAve,
                        vector<Double> *ax1, vector<Double> *ax2, vector<Double> *ax3, vector<Double> *hws, vector<Double> *intensity, vector<Double> *error);
   //!< Put D4Matrix into given vectors on memory.
    /*!< The order of intensity ::
     *   for ihw in range(hws.size()):
     *       for i1 in range(ax1.size()):
     *           for i2 in range(ax2.size()):
     *               for i3 in range(ax3.size()):
     *                   ind = i3 + (ax3.size() * i2) + (ax3.size() * ax2.size() * i1) + (ax3.size() * ax2.size() * ax1.size() * ihw)
     *                   i1, i2, i3, ihw, intensity[ind], error[ind]
     *
     *   DumpD4MatToFile( a1r, a2r, a3r, a4r, def_axes, foldings, isAve,
     *                    ax1, ax2, ax3, hws, intensity, error );
     *   @param a1r (vector<Double>)  first axis range  [min, max]
     *   @param a2r (vector<Double>)  second axis range [min, max]
     *   @param a3r (vector<Double>)  third axis range  [min, max]
     *   @param a4r (vector<Double>)  fourth axis range [min, max]
     *   @param def_axes (vector<string>)   role of each axis, for example [ "X", "Y", "T", "T" ]
     *   @param foldings (vector<Double>) folding values, [] means [ -1, -1, -1, -1]
     *   @param isAve  (bool) If False, the intensity of a bin is the summation of the counts.
     *   @param ax1 (vector<Double>*) ax1 vector imported from D4Matrix data
     *   @param ax2 (vector<Double>*) ax2 vector imported from D4Matrix data
     *   @param ax3 (vector<Double>*) ax3 vector imported from D4Matrix data
     *   @param hws (vector<Double>*) hw vector imported from D4Matrix data
     *   @param intensity (vector<Double>*) intensity vector imported from D4Matrix data
     *   @param error (vector<Double>*) error vector imported from D4Matrix data
     *   @retval 0 No trouble.
     *   @retval -1 Failes to calculate the ranges for the axes.
     */

使用例

DM = mu.UtsusemiD4Matrix()
...
if DM.OpenMat(data_dir, pFile): # D4Matデータを無事に開けたら
    #if DM.DumpD4MatToFile(ax1[:-1], ax2[:-1], ax3[:-1], hwr[:-1], ["X", "Y", "Z", "T"], [], str(Output_File), True, False):
    ax1v = Manyo.MakeDoubleVector()
    ax2v = Manyo.MakeDoubleVector()
    ax3v = Manyo.MakeDoubleVector()
    ax4v = Manyo.MakeDoubleVector()
    intv = Manyo.MakeDoubleVector()
    errv = Manyo.MakeDoubleVector()
    if DM.DumpD4MatIntoVect(ax1[:-1], ax2[:-1], ax3[:-1], hwr[:-1], ["X", "Y", "Z", "T"], [], False, ax1v, ax2v, ax3v, ax4v, intv, errv):
        print(" Output 4D as text succeeded.")
    else:
        print("#### ERROR at output #####")
else:
    print("#### ERROR at Opening #####")
    sys.exit(-1)

###############
fo = open("Conv3.txt", "w")

ind = 0
for l1 in range(ax4v.size()):
    for i in range(ax1v.size()):
        for j in range(ax2v.size()):
            for k in range(ax3v.size()):
                a_line = "{:g}, {:g}, {:g}, {:g}, {:g}, {:g}".format(ax1v[i], ax2v[j], ax3v[k], ax4v[l1], intv[ind], errv[ind])
                fo.write(a_line + "\n")
                ind += 1
Jan 12 2024

[bugfix:Utsusemi:4.0devD4Mat2Dump] The issue that the bin-width correction function are executed on doing data reduction without any correction.

D4Matrix(D4MatSlicer)でのデータ処理に使用するExtract.pyで.vbinファイルを作成する時に、ビン幅最適化計算で必要となる補正を全く行わない処理をUtsusemiSqeCalc::ConvertToD4Matで行った場合、bin幅補正(bin幅で強度を割る)処理が実行されていた。 その処理を実行しないようにするフラグを引数に加え、処理を書き直した。

UtsusemiSqeCalc::ConvertToD4Mat(string filepath, bool isAverageMode, bool useBinCorr)

使用例:

sqe = mu.UtsusemiSqeCalc()
sqe.SetTarget(DAT)
sqe.LoadXtalParam(XtalParam)
sqe.SetRotationSteps("Y:%g"%(PhiValue))
sqe.Projection()
# vbin作成時に平均化処理とbin幅補正を行わない
sqe.ConvertToD4Mat(savePath, False, False)
Jan 10 2024

[update:Utsusemi:4.0devD4Mat2Dump] Add new methods to output D4matrix data sliced by given axes ranges as a text file

DATA_RDCT-230 空蝉4:D4Mat2Slicer要望・バグ2023

D4Mat2SlicerのSlicingの各軸の範囲設定に応じたテキストデータの書き出しを可能とした。 それに応じて、D4Mat2Slicerの”Data Conversion”における”DumpAsText”で使用する関数名を修正した。

UtsusemiD4Matrix2

bool UtsusemiD4Matrix2::PutSlicedD4MatrixToText(string filepath,
                                                vector<Double> ax1range, vector<Double> ax2range,
                                                vector<Double> ax3range, vector<Double> ax4range,
                                                vector<Double> folding, bool isAve=true);
        //!< Put sliced (matrix) data points into the text file
        /*!<
         *   @param filepath (string) The path of the file.
         *   @param ax1range (vector<Double>) Ax1 range [<min>, <max>, <bin>]
         *   @param ax2range (vector<Double>) Ax2 range
         *   @param ax3range (vector<Double>) Ax3 range
         *   @param ax4range (vector<Double>) Ax4(hw) range
         *   @param folding  (vector<Double>) Folding information [<ax1_fold>, <ax2_fold>,...]
         *   @param isAve (bool) true means that the calculated intensity is normalized by the number of data.
         *   @retval true succeeded.
         *   @retval false failed.
         */