============================
Change History 2021
============================
:Author: Yasuhiro Inamura
:Last Update: Jan. 25, 2022
.. contents:: contents
:depth: 2
4.0.211227 or later
======================
Dec 27 2021
[bugfix:manyo:0.3.4] the issue overlapped intensity bins on summation in MlfArraySlicer::_MakeRectXbinCutData
MlfArraySlicer::_MakeRectXbinCutData で与えたY区切りに対して積分した際に、境界部分がオーバラップされることがわかったので修正した。
これまでは以下のように、境界のindexが双方に含まれていた(二重にカウント)。
::
+-------------+-----------------+
|与えた区切り |使用されるindex |
+=============+=================+
|Y=0.049-0.099|index 275-300 |
+-------------+-----------------+
|Y=0.099-0.149|index 300-325 |
+-------------+-----------------+
|Y=0.149-0.199|index 325-350 |
+-------------+-----------------+
|Y=0.199-0.249|index 350-375 |
+-------------+-----------------+
今回の修正で、境界部分での二重にカウントすることは無くなった。
::
+-------------+-----------------+
|与えた領域 |使用されるindex |
+=============+=================+
|Y=0.049-0.099|index 275-299 |
+-------------+-----------------+
|Y=0.099-0.149|index 300-324 |
+-------------+-----------------+
|Y=0.149-0.199|index 325-349 |
+-------------+-----------------+
|Y=0.199-0.249|index 350-374 |
+-------------+-----------------+
_MakeRectYbinCutDataでの X区切りに対するindexは問題なかった。
なおMlfArraySlicer.ccの中で、#[inamura 211227] が含まれるコメント文を復活させると、それぞれの積分に加えられたindexが確認できる。
Dec 26 2021
[update:manyo:0.3.4] Improve to return false when the result of SearchInHeader is empty.
SearchInHeaderで、検索結果が空だった場合にfalseを返すようにした。
これにより、
- そもそも検索すべきデータがセットされていない
- データに対し検索をしたが見つからない
の両方でfalseを返すことになる。
Dec 25 2021
[Update:Utsusemi:4.0] Add new class to create event data
イベントデータを作成するためのクラス (UtsusemiEventDataCreator) を追加した。
シナリオとなるテキストファイルを読み込んで、イベントを生成し、ファイルに書き出す。
現状は、NEUNETとTrigNET(DIOシグナル)のみ対応。
**シナリオ例**
*s.txt*
::
#
k=T0, n=Neunet, t=Trignet
k:0:0.0
t:300:dio:2u
t:400:dio:2d
n:500
k
t:300:dio:2u
t:400:dio:2d
n:500
k
t:300:dio:2u
t:400:dio:2d
t:600:dio:1u
t:700:dio:1d
n:1000
k
t:300:dio:2u
t:400:dio:2d
n:2000
k
t:300:dio:2u
t:400:dio:2d
n:3000
(以下略)
::
+--------+------+---------------------+
|Event |Header|Notation |
+========+======+=====================+
|T0+Clock|k |k[::]|
+--------+------+---------------------+
|Neutron |n |n: |
+--------+------+---------------------+
|TrigNET |t |t:::|
+--------+------+---------------------+
**実行例**
*make_event.py*
.. code-block:: python
import Manyo.Utsusemi as mu
tt=mu.EventDataCreator()
neut="data/SIK/SIK000001_20211224/SIK000001_00_000_000.edb"
trig="data/SIK/SIK000001_20211224/SIK000001_00_254_000.edb"
tt.output( "s.txt",neut,trig )
引数はシナリオのファイルパス、Neunetイベントファイルパス、TrigNETイベントファイルパス、である。
::
EventDataCreator::output( string , string , string )
Dec 25 2021
[Update:Utsusemi:4.0] Add new cyclic data treatment on TrigNET with a virtual time origin and a counter by 25Hz trigger
以前からTrigNETのシグナルを起点とした時間分解(秒による指定)をサイクリックに処理する機能が実装されている。これによりストロボスコピック実験を行うための構成がシンプルになった。
しかしながら時間分解の起点となるシグナルからの秒数による指定だと、正確にフレーム単位で取り出すことが難しい(キッカーの周期がある程度揺らいだり、抜けたりするため)。
そこでTrigNETに、時間分解の起点となるシグナル、およびMLF基準トリガー(常時25Hzなど)のシグナルを同時にカウンターとして入力し、サイクリックに処理することにした。
これにより、Caseの範囲を起点シグナルのフレームからのフレーム数で指定でき、正確にフレーム単位で処理できるようになった。
この方式のCaseInfoの例は以下のようになる。
.. code-block:: xml
3
0
1.0
0.0
-0.5,11.5,1.0
1. のtype属性に"KICKCOUNT"を与える。
2. /には二つのがあり、片方は仮想キッカー、もう片方はカウンターであり、両者の区別はtitle属性で行う。
::
+----------+----------+
|役割 |title |
+==========+==========+
|仮想キッカー|"Kicker" |
+----------+----------+
|カウンター |"Couinter"|
+----------+----------+
**変更点**
- UtsusemiTrignetCounter::Type はこれまで 0:"ABP", 1:"NORMAL", 2:"ABC" だったが、新たに 3:"KICKCOUNT"を加えた
- UtsusemiTrignetCounter::SetType が"KICKCOUNT"を認識するようにした
- UtsusemiTrignetCounter::CountEvent で、"KICKCOUNT"の処理を行うように改変した
- UtsusemiTrignetCondition::Check( uInt4, UInt4, UInt4, vector* )に引数 string titleをつけた(キッカーとカウンター識別用)
Dec 22 2021
[Update:Utsusemi:4.0] Improve Shamono's DymPDF class to produce G(r,hw) 2D map by using of given r's bin width and max value.
DATA_RDCT-77 空蟬4 Dynamical PDF 計算コード移植
社本氏のDynamical PDFの計算クラス(ShamotoDymPDF)に対して以下の機能追加を行なった。
- 出力G(r,hw)のrのbin幅と最大値を設定して計算できるようにした
- Executeにboolの引数 *doSlice* を加え、スライス機能を実行するかしないかを選択できるようにした
- 将来的には、空蟬で作成されたデータではないデータを読み込んで同様の処理と空蟬での可視化ができるようにする布石
**サンプルコード**
::
(前略)
# 変換用クラスの準備
tt=mu.ShamotoDymPDF()
# データ読み込み
tt.SetData( DAT )
# hwのスライス領域の設定 幅:0.2, hw_min: 1.0, hw_max: 12.5
tt.SetSliceWidth( 0.2, 1.0, 12.5 )
# Magnetic form Factor
tt.SetMagFormFact( 0.4220, 17.684, 0.5948,6.005,0.0043,-0.609,-0.0219 )
# 出力用 r 情報( bin width : 0.1, max r : 40.0 )
tt.SetRRange( 0.1, 40.0 )
# Correction Factor (?)
tt.SetCf(74.84)
# 変換実行
tt.Execute()
# 結果取り出し(横軸r、横をhwにする場合は、PutResult(False))
eca = tt.PutResult(True)
(後略)
Dec 21 2021
[Update:Utsusemi:4.0] Improve Shamono's DymPDF calculation code to use Inelastic-Powder-Data directly.
DATA_RDCT-77 空蟬4 Dynamical PDF 計算コード移植
社本氏のDynamical PDFの計算クラス(ShamotoDymPDF)に対して以下の機能追加を行なった。
- 非弾性Powderデータを直接読み込む
- 与えたhwの範囲と幅により、Powderデータをスライスし、それぞれを変換コードにて変換
- 変換後データを再構築して、2次元の可視化が可能とする
あとはFacadeを作成すること。
**Test.py**
.. code-block:: python
import Manyo.Utsusemi as mu
import Manyo
import Cmm
import uGao.M2PlotPlusCui as M2
# 返還前の保存済み 非弾性パウダーデータ(バックグランドも引いてある)を読み込みプロット
DAT = Cmm.LoadDataFromDump( "data_shamoto","Mn3RhSi_5K_Ei18meV.dmp" )
v1=M2.M2PlotPlusCui(DAT)
v1.ShowData()
# 変換用クラスの準備
tt=mu.ShamotoDymPDF()
# データ読み込み
tt.SetData( DAT )
# スライス領域の設定 幅:0.2, hw_min: 1.0, hw_max: 12.5
tt.SetSliceWidth( 0.2, 1.0, 12.5 )
# そのほかパラメータ
tt.SetCf(74.84)
# 変換実行
tt.Execute()
# 結果取り出し(横軸r、横をhwにする場合は、PutResult(False))
eca = tt.PutResult(True)
# 変換後データの2Dプロット
v2=M2.M2PlotPlusCui(eca)
v2.ShowData("R","EnergyTransfer")
4.0.211217 or later
======================
Dec 17 2021
[bugfix:manyo:0.3.4] The issue that HeaderBase::InputString cannot treat previous format of string header info ( causes the core dump error )
DATA_RDCT-115 空蟬4:D4Mat2で古いd4mファイルの読み込みで core dump
HeaderBase::DumpToString及びInputStringの改良した結果、古いフォーマットにおけるStringの情報を読み込むと core dump する問題を修正した。
4.0.211203 or later
======================
Dec 3 2021
[Update:Utsusemi:4.0] Enable to find given run numbers in other data folders like (SIK, SIK00, SIK01,...) in MakeRunList function
Dec 3 2021
[bugfix:Utsusemi:4.0] The issue that an argument of Com:IntegPixels facade is not treated correctly on SequenceEditor
Dec 3 2021
[update:Utsusemi-SAS:0.3.7,4.0] Add new params to IncohCalcFor3HeSpinFilter.
- IncohCalcFor3HeSpinFilterに、Heのガス圧を+と-のそれぞれに指定できるようにした
- Cmm.IncohCalcFor3heNSFmulを上記に対応させた
Nov 26 2021
[bugfix:Utsusemi:4.0] The issue that error occurs on executing the projection on D4Mat2Slicer using Step-by-step data.
Nov 19 2021
[bugfix:Utsusemi:4.0] The issue that error occurs on cutting along PSD and Pixel on DetectMap
DATA_RDCT-112 空蟬4:DetectMapでPSD方向及びPixel方向のスライスができない
- 課題の問題点を修正した
- Cutする場合に、強度がMASKVALUEとなっているピクセル(エラーが負のものも)がCutの対象に含まれてしまう問題を修正した
- いくつか不要な出力コメントを削除した
Nov 17 2021
[update:Utsusemi-SAS:4.0] Update WiringInfo for added PSD at HL and HD
Nov 11 2021
[bugfix:Utsusemi:4.0] fixed wrong letter on VisualContM GUI.
4.0.211022 or later
======================
Oct 21 2021
[bugfix:Utsusemi:4.0] The issue that the error occurs on saving d4m file in D4Mat2Slicer
DATA_RDCT-82 D4Mat2Slicer関連の要望
連続回転測定のデータをd4m形式で保存するとエラー(2021.10.21稲村追記)に対応
連続回転測定時に複数のRunを扱えるようにした結果、d4m保存時の記述に問題がありエラーが出るのを修正した。
Oct 21 2021
[bugfix:Utsusemi:4.0] The issue that array variables created in D4MatGroup are not deleted correctly
Oct 14 2021
[Update:Utsusemi:4.0] Improve D4Mat2Slicer to enable to do data reduction with several run numbers at a time
DATA_RDCT-82 D4Mat2Slicer関連の要望
連続回転測定モードで、複数のRunNoを同時に処理(ヒストグラム化の時点でマージ)する機能を追加した。
**追加機能**
一度に複数のRunNoを扱うためには、RunNoごとにStart Deg(測定スタート時の角度情報)が必要である。
複数のRunNoとStart Degを入力するためにData ReductionパネルのRunNoとStart Degの入力欄に、複数の値をカンマ区切りで入力することで対応した。
**変更点**
RunNoごとにCaseInfoが異なる(Start Degが変わる)ので、共通のWiringInfoとDetectorInfoを設定したのち、RunNoごとにCaseInfoを作り、読み込ませ、TrigNETのイベントデータを読み込んで、NEUNETのデータを処理する。
よって、RunNoごとに
.. code-block:: python
cfile = DU.MakeCaseInfoFile( st_deg, min_deg, max_deg, w_deg, runNoi, dio )
self.DataConverter.SetCaseInfoParams( cfile )
self.DataConverter.LoadTrignetEventFile( runNoi, data_dir, "" )
self.DataConverter.LoadEventDataFiles( runNoi, data_dir, "" )
を実行することになる。
また、RunNoごとにそれぞれのCaseに対応するKicker数が異なるので、上記の処理の後にKicker数をCaseごとに保存し(PutNumOfT0ListInCases())、全てのRunNoを読み込んだのちに、そのRunNo毎のKicker数をマージ(加算)する。
その複数のRunNoでマージされたCaseごとのKicker数を、UtsusemiD4Matrix2::ImportEcmsContRotに渡せるように引数を変更し、このKicker数でCaseごとに取り出したElementContainerMatrixのヘッダのKicker数をオーバーライトしておく。
これにより複数のRunNoが含まれた強度の角度毎のノーマライズがImportEcmsContRot内部のUtsusemiReductionInEla::NormByKickersで問題なく行われる。
あと、Data ReductionパネルのRunNoとStart Degの入力欄を少しだけ大きくした。
Oct 11 2021
[bugfix:Utsusemi:4.0] Improved and fixed the way to calculate rotation angle steps on the virtual mode of both D4MatSlicer and D4Mat2Slicer
Oct 4 2021
[bugfix:Utsusemi:4.0] The issue that slicing on VisualContQ fails when the X-axis label text includes comma.
DATA_RDCT-109 空蟬4 VisualCont関連
1. Axis Labelに,が含まれていると、スライス時に失敗する問題に対応した
2. Projection実行後に自動的にスライスの軸の範囲がAutoFillされる機能を削除した
**対応1**
VisualContQにおけるLabelsは、ElementContainerのHeaderBaseに、X方向のbinの値のキーとして使用される。
uGaoの中でキーを取り出す際に DumpToStringを使用するが、HeaderBaseに例えばStringMapに複数の値が含まれていると、DumpToStringによってカンマ区切りで出力される。
::
>>> HH.Dump() # HeaderBaseに以下のようなDouble情報がある場合
***DoubleMap***
Index Key Value
0 Qx(H,0,0) -1.5
1 Qy -3.5
...
>>> HH.DumpToString() # 出力結果は
'...#,#2#,#Qx(H,0,0),Qy#,#-1.50,-3.50#,#...'
>>> v=HH.DumpToString().split('#,#')
>>> v[4]
'Qx(H,0,0),Qy'
ここにわかるように、同一Map内に複数あり、かつKeyにカンマが含まれると、カンマが区切りなのかKeyなのか判別が難しくなる。
よって、今回はVisualContQ内で、
- Labelにカンマが含まれる場合、カンマを外したものをKeyとして使用する
- プロットする際に、KeyとLabelを同一に扱っていたのを分離する
ことで、今回の問題を回避した。
**対応2**
OperationTab::OnProj内にある self.OnAutoFill()をコメントアウトし、呼び出さないようにした。
Oct 4 2021
[update:uGao:master] Update to treat new format of Manyo::HeaderBase::DumpToString
ManyoライブラリのHeaderBase::DumpToString及びInputStringのテキストフォーマットの改良(KEYやStringの区切りを","から"\,"に変更)に対応した。
Oct 4 2021
[bugfix:manyo:0.3.4] The issue that previous format in HeaderBase::DumpToString and InputString cannot treatment.
HeaderBase::DumpToString及びInputStringの改良した結果、古いフォーマットが扱えなくなったので修正した。
**注意点**
KEYやString, StringVector値といった文字列の区切りに使用されるのは コード内では'\\,' と記述されるが、実際に出力される文字列内では '\,' (
バックスラッシュ+,)である。
Oct 4 2021
[update:manyo:0.3.4] Improve the format used in HeaderBase::DumpToString and InputString to avoid incorrect treatment of Key and string including comma charactor
HeaderBase::DumpToString及びInputStringの改良を行なった。
**問題点**
ヘッダ情報のキーにコンマが含まれている時にDumpToStringの結果をInputStringで読み込むと、キーのコンマと情報区切り用のコンマとが判別できなくなるため、正しく処理できない。
Int4MapやDoubleMapなどのMapグループの区切りは '#,#'であるが、それぞれのMap内のキーと値の区切りは ','のみである。
::
#,#KEY1,KEY2#,#CONT1,CONT2#,#
ここで、KEYやCONTにコンマが入っていると、このテキストを正しくデコード(InputString) できないことになる。
**対処**
そこで、Stringを用いるKEYの区切りと、StringMap及びString vector Map内の値の区切りを '\\,' にすることで、KEYやString値にコンマがあっても大丈夫なようにした。
**Example**
以前の状態(復元したHH2がおかしいのをDumpで確認)
::
>>> import Manyo
Manyo>>> HH=Manyo.HeaderBase()
Manyo>>> HH2=Manyo.HeaderBase()
Manyo>>> HH.Add("Qx(H,0,0)",-1.5)
Manyo>>> HH.Add("Qy",-3.5)
Manyo>>> HH2.InputString(HH.DumpToString())
Manyo>>> HH.Dump()
***Int4Map***
Index Key Value
***DoubleMap***
Index Key Value
0 Qx(H,0,0) -1.5
1 Qy -3.5
***StringMap***
(omission)
Manyo>>> HH2.Dump()
***Int4Map***
Index Key Value
***DoubleMap***
Index Key Value
0 Qx(H -1.5
1 0 -3.5
***StringMap***
(omission)
今回の修正により、以下のように問題なく復元できた。
::
Manyo>> HH2.Dump()
(omission)
***DoubleMap***
Index Key Value
0 Qx(H,0,0) -1.5
1 Qy -3.5
(omission)
4.0.211003 or later
======================
Oct 3 2021
[bugfix:Utsusemi:4.0] The issue that data treatment for Qx-Qy-Qz text on VisualContQ causes core dump
QxQyQz形式のファイルを取り込んでProjection-> Sliceでダンプする(バグ)に対応
0.3.7 -> 4.0(WxPythonからPySide)に変更した際に、タブを独立したWidgetオブジェクトとして使用するようにしている。
しかしQx-Qy-Qzファイルを読み込む部分で古いコード(SetTab)を呼び出していたため、一つのタブに複数のオブジェクトが作成されるようなバグがあった。
古いコード(SetTab)の代わりに、新しいコード(AddNewTab)のみ使用するように改変した。
Sep 21 2021
[update:Utsusemi:4.0] Add some comments and fix return values of CalcYRotAngleFromQ function series
Sep 15 2021
[update:Utsusemi:4.0] Replaced print function to UtsusemiMessage series
Sep 14 2021
[update:Utsusemi:4.0] Add function to find rotation angle around Y axis from the Q position on energy - momentum transfer space
DATA_RDCT-108 空蟬4:単結晶試料データ処理後のQ空間の座標を測定するために必要な試料の方位を求める手段
VisualContMなどの単結晶試料データ処理を行なった後のQ-hw空間の座標を観測するために必要な試料の方位(Y軸周りに回転させる角度)を求める手段を作成した。
ついでに、検出器の位置(detIdとpixel)も計算するようにした。
戻り値については検討中。
**追加した関数**
*Python*
- BaseCommandsInEla::CalcYRotAngleFromQ
- BaseCommandsInEla::CalcYRotAngleFromQXtalParam
- BaseCommandsInEla::CalcYRotAngleFromQString
- BaseCommandsInEla::GetDetectorPixelFromOrientation
**manyo**
- UtsusemiSqeCalc2::PutInnerMatrix(string)
**使用例**
*既に用意されているXtalParamファイルを利用する場合*
コード
.. code-block:: python
import utsusemi.ana.Reduction.BaseCommandsInEla as BCI
XtalParam="XtalParam.xml"
Q = [1.0,1.0,-1.0] # Q values
Ei = 45.56 # [meV]
hw = 0.0 # [meV] 0.0 means elastic position
runNo = 999999 # run number is used to choose suitable WiringInfo and DetectorInfo
pixNum = 100 # number of pixels on 1 PSD
BCI.CalcYRotAngleFromQXtalParam( XtalParam=Xfile, Q=Qin,Ei=Ei, hw=hw, runNo=runNo, pixNum=pixNum )
*結晶・方位などの情報を直に渡す場合*
.. code-block:: python
import utsusemi.ana.Reduction.BaseCommandsInEla as BCI
LC = [3.62284,3.62284,3.62284,90,90,90] # Lattice Consts
Uv = [1,0,0] # U-vector
Vv = [0,1,1] # V-vector
RotStep = "None" # if No rotation of sample
# RotStep = "Y:-10.0" # If sample rotated -10 degree around Y axis
VA1 = [ 1, 0, 0 ] # Projection axis1
VA2 = [ 0, 1, 0 ] # Projection axis2
VA3 = [ 0, 0, 1 ] # Projection axis3
Q = [1.0,1.0,-1.0] # Q values
Ei = 45.56 # [meV]
hw = 0.0 # [meV] 0.0 means elastic position
runNo = 999999 # run number is used to choose suitable WiringInfo and DetectorInfo
pixNum = 100 # number of pixels on 1 PSD
BCI.CalcYRotAngleFromQ( LatticeConst=LC, Uvect=Uv, Vvect=Vv, RotStep=RotStep,
ViewAxis1=VA1, ViewAxis2=VA2, ViewAxis3=VA3,
Q=Qin, Ei=Ei, hw=hw, runNo=runNo, pixNum=pixNum )
*実行結果*
.. code-block:: python
Y Rotation Angle= -29.954239108109043
detId, pixel = 75, 52
Y Rotation Angle= -150.04576089189098
detId, pixel = 328, 52
Sep 3 2021
[update:Utsusemi:4.0] Add function to find pixel position from the Q position on energy - momentum transfer space
DATA_RDCT-108 空蟬4:単結晶試料データ処理後のQ空間の座標から検出器のPixelを求める手段
VisualContMなどの単結晶試料データ処理を行なった後のQ空間の座標が、実際の検出器のどこに当てはまるのかを求める手段を作成した。
**追加した関数**
- BaseCommandsInEla::GetOrigPixelFromQXtalParam
- BaseCommandsInEla::GetOrigPixelFromQString
- BaseCommandsInEla::GetOrigPixelFromQ
facadeとしては、GetOrigPixelFromQXtalParamとGetOrigPixelFromQStringを使用する。
**使用例**
*既に用意されているXtalParamファイルを利用する場合*
.. code-block:: python
import utsusemi.ana.Reduction.BaseCommandsInEla as BCI
XtalParam="XtalParam.xml"
Q = [1.0,1.0,-1.0] # Q values
Ei = 45.56 # [meV]
hw = 0.0 # [meV] 0.0 means elastic position
runNo = 999999 # run number is used to choose suitable WiringInfo and DetectorInfo
pixNum = 100 # number of pixels on 1 PSD
detId,pix = BCI.GetOrigPixelFromQXtalParam( XtalParam, Q, Ei, hw, runNo, pixNum )
print( "DetId={}, Pixel={}".format(detId,pix) )
*結晶・方位などの情報を直に渡す場合*
.. code-block:: python
import utsusemi.ana.Reduction.BaseCommandsInEla as BCI
LC = [4.8, 8.4, 2.9,90,90,90] # Lattice Consts
Uv = [0,1,0] # U-vector
Vv = [0,0,1] # V-vector
RotStep = "None" # if No rotation of sample
# RotStep = "Y:-10.0" # If sample rotated -10 degree around Y axis
VA1 = [ 1, 0, 0 ] # Projection axis1
VA2 = [ 0, 1, 0 ] # Projection axis2
VA3 = [ 0, 0, 1 ] # Projection axis3
Q = [1.0,1.0,-1.0] # Q values
Ei = 45.56 # [meV]
hw = 0.0 # [meV] 0.0 means elastic position
runNo = 999999 # run number is used to choose suitable WiringInfo and DetectorInfo
pixNum = 100 # number of pixels on 1 PSD
detId,pix = BCI.GetOrigPixelFromQ( LC, Uv, Vv, RotStep, VA1, VA2, VA3, Q, Ei, hw, runNo, pixNum )
print( "DetId={}, Pixel={}".format(detId,pix) )
Sep 2 2021
[bugfix:Utsusemi:4.0] The issue that error occurs on reading .d4m file in D4Mat2Slicer
4.0.210830 or later
======================
Aug 30 2021
[bugfix:Utsusemi:4.0] The issue that some text labels on GUI parts are collapsed with hi resolusion display and 200% of text size setting on window
Windowsのディスプレイ解像度が高く、高密度なディスプレイの場合、設定で拡大縮小とレイアウトで200%(推奨)という設定が選ばれる。
この時に幾つかのパーツ自体が縮小し、そのパーツのフォントサイズなどが200%になるためか、非常にアンバランスとなる問題に対処した。
**対応**
- QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling,True)の設定を加える
- QApplicationのフォントサイズを設定(今回は14)する
- フォントサイズを設定しないと極端に小さなサイズとなったため
**そのほか**
- SequenceEditorのコマンドツリーの横スクロールができなかったので、ツリーの内部サイズの横幅を400pxとした
- こうすることで最初から横スクロールバーが表示された
**動作確認**
以下の環境で正しく動作するようにした。
- Windows 10 Surface Pro
- 項目サイズ 200% (推奨)
- 解像度 2736 x 1824 (推奨)
- Anaconda 2105 (Python 3.8.8)
- PySide2 (v5.13.2)
一方、今回の変更がUbuntuでの動作に影響がないかをチェックしたが問題なし。
- Ubuntu Linux 20.04
- PySide2 (v5.14.0)
なお今回のコードでは
::
UTSUSEMI_DEFAULT_FONTSIZE
という環境変数があればデフォルトのフォントサイズとして使用するように加えているが、まだ設定ファイルは変更していない。
Aug 30 2021
[bugfix:uGao:master] The issue that some text labels on GUI parts are collapsed with hi resolusion display and 200% of text size setting on window
[bugfix:Utsusemi:4.0]と同等の変更
**対象**
- FastPlot.Qt.py
- u2dplot.py
- U2IF.py
- M2PlotPlus.py
Aug 27 2021
[bugfix:uGao:master] The issue that YZ slice aside 2D Plot does not shown on clicking plot.
Aug 27 2021
[update:Utsusemi:4.0] Add functions to remove run no from run list on D4Mat2Slicer
DATA_RDCT-82 D4Mat2Slicer関連の要望
以下のバグと要望に対応した
1. 空蟬0.3.xのXtalParamを読み込むとエラー
2. Projectionのax4のデフォルト値がおかしい(バグ)
3. runlistの先頭にコメントアウトが欲しい(要望)
4. runlist読み込み後 任意のrun noを削除したい(要望)
**4.への対応結果**
runlist読み込み後に任意のrun noを削除する方法は以下の通り
- D4Mat2SlicerのDataReductionパネル上のRun List上で削除したいrun noをクリックで選択状態にし、[Clear]ボタンを押す
Aug 26 2021
[update:Utsusemi:4.0] Remove the way of import module using wildcard like from import *
DATA_RDCT-101 空蟬4や夕顔のPythonコードからfrom XXX import * をなくしたい
空蟬でいくつか存在したワイルドカードを使用したimportをなくした。
Aug 25 2021
[update:Utsusemi:4.0] Improve XML treatment in SetMask in order to increase the processing speed.
DATA_RDCT-106 空蟬4: Mask動作が遅い問題
Manyo.MLF.BoostXmlParserに加えられた高速に検索する方法を導入し、マスク処理、特にMaskInfoに大量の情報が書かれていたときの処理を高速化することに成功した。
**試験**
maskのノードが10000個あるMaskInfo.xmlを用意して、これを用いて試験した。
.. code-block:: xml
0
0
...
**結果**
従来の方法だと69秒かかっていたDoMask処理が、0.4秒程度で終了した。ざっくり170倍ほどの高速化を達成した。
Aug 25 2021
[update:manyo:0.3.4] Add new method to BoostXmlParser to treat directly innder node of boost::property_tree/ptree in order to increase the processing speed.
DATA_RDCT-106 空蟬4: Mask動作が遅い問題
BoostXmlParserはシンプルな使い方ができるが、その分処理に時間がかかる部分がある。
XMLのトップのタグから目的のタグまでのパスを与えると、そのパスにそって何度も検索処理が発生し、時間がかかる。
特に大量のタグを含む場合に非常に遅くなる。
**対処**
検索を減らすためには、同じパスを何度も検索を行わなくてすむ手段も別途用意する。
具体的には、今まで隠蔽されていたptreeのノードを利用側でアクセス、検索できるようにする。
1. 特定のパスまでの ptreeのノードを取り出すメソッドを用意
2. 与えられたノードから、さらにパスを与えて情報を取り出す手段をこれまでのメソッドに追加
1では以下の新規メソッドを追加
- PutNode
- PutFoundChildNodes
2では以下の既存メソッドをオーバーロードしたものを用意
- PutContent
- PutAttValList
- PutElemContList
- PutNumOfElements
- hasPath
**利用例**
以下のようなXMLがあるとする。
.. code-block:: xml
INAMURA
10
TANAKA
20
SUZUKI
30
それに対して、groupタグのノードを取り出して、それに対して情報を取り出す例を以下に示す。
.. code-block:: python
n1 = PutNode("group","") #ノード取り出し
age = int( PutContent( n1, "person,name:INAMURA","") #ノードからINAMURAのageを取り出す
特に多くの同じタグが並ぶ場合、PutFoundChildNodesが強力である。
.. code-block:: python
n1 = PutNode("group","")
person_list = PutFoundChildNodes( n1, "person" ) #ノードからpersonタグのノードを全て取り出す
for i in range(person_list.size():
p_name = PutContent( person_list[i], "name", "" )
p_age = PutContent( person_list[i], "age", "" )
print( "NAME,AGE={},{}".format( p_name,p_age ) )
Aug 18 2021
[update:uGao:master] Improve checking range method in continuous slicing.
Aug 11 2021
[update:Utsusemi:4.0] Improve Reading step size in ReadEventData to be calculated from T0Index values.
UtsusemiEventDataConveter系で、イベントデータをファイルから読み込む際、一度に読み込むデータサイズはT0の個数(ReadingStep)で決められていて、その大きさは1500(つまり 1500/25Hz=60[sec])分を固定で読み込んでいた。これは読み込み時のバッファとして、散乱強度の強いデータでは大きなメモリ領域を、強度の弱いデータでは少ないメモリ領域を確保していた。しかし、これだと極端に大きな散乱のデータの場合、かなり大きな値になる。
SIKの場合おおよそ100,000 byte=100kBに対し、NBRでは600,000,000 byte = 600MBとなり、3桁以上の開きとなる。
処理を考えると、この値がマルチスレッドで増えるため、1フレームあたりのイベント量に応じて無駄にメモリを消費し、環境によっては厳しいものとなる。
そこで、データの量(正確には1フレームあたりのデータサイズ)によって、ReadingStepを変更することにした。
現状の形としては
1,500/(1フレームあたりのイベント数)* 10,000
とすることにした。
- SIK000373では 1フレームあたりの平均イベント数は7、ReadingStep = 2.0E+6、バッファは70MB
- NBR000724ではイベント数は3252129、ReadingStep = 4、バッファは120MB
と大体桁が揃う感じだ。こうなると読み込み時に8スレッドだと考えると、最大バッファは1GB以下となる。
当面はこれでゆく。
なお、この変更により、SIK000373のヒストグラム化処理が1割高速化した。
Aug 6 2021
[update:manyo:0.3.4] Add method to MlfArraySlicer to add LABEL information to given ElementContainer
DATA_RDCT-104 夕顔:M2PlotPlusの連続スライスの問題
上記の課題に対し、以下を解決するために必要なメソッドを追加した。
4. 元データは Qbin=0.05[1/A] で、Xrange 0.85-0.9 delta 0.0 や、 Xrange 0.9-0.95 delta 0.0 でLabelが"0"となっている。Xrange 0.85-0.95 delta 0.0 だとOK(by松浦さん at BL02 : 210804稲村追記)
**状況**
スライスの幅が狭い時、その範囲内にある一つのデータ(ElementContainer)のみを取り出し、それをそのままスライス結果として返していた。その際にMlfArraySlicerで作成されるはずのラベルに関するヘッダ情報がないために、MPlotでのプロット時に表示されない。
**対応**
MlfArraySlicer::SetHeaderToEC を加えスライス時のヘッダ情報を加えるメソッドを追加した
Aug 6 2021
[update:uGao:master] Improve the continuous slicing function of M2PlotPlus.
DATA_RDCT-104 夕顔:M2PlotPlusの連続スライスの問題
上記の課題に対し、以下を解決した。
4. 元データは Qbin=0.05[1/A] で、Xrange 0.85-0.9 delta 0.0 や、 Xrange 0.9-0.95 delta 0.0 でLabelが"0"となっている。Xrange 0.85-0.95 delta 0.0 だとOK(by松浦さん at BL02 : 210804稲村追記)
**状況**
1. スライスの幅が狭い時、その範囲内にある一つのデータ(ElementContainer)のみを取り出し、それをそのままスライス結果として返していた。その際にMlfArraySlicerで作成されるはずのラベルに関するヘッダ情報がないために、MPlotでのプロット時に表示されない。
2. また、同時にスライスのLABELで示される範囲が直感的でない(与えた値ではなく、データの範囲で表示するので、ずれがある)
**対応**
そこで、以下のように対応した。
- MlfArraySlicer::SetHeaderToEC を加えスライス時のヘッダ情報を加えるメソッドを追加した(Manyoのコミット)
- SetHeaderToECを利用するよう、M2PlotPlusのスライスを行う関数に変更を加えた。
- 2.のLABELに表示する範囲を直感的なものにするため、ユーザーの入力値をスライス関数に渡すように新たな引数を加えた。
**そのほか**
小さいバグを修正した。
- 連続スライス実行後に与えたパラメータが元の設定値に戻らないバグを修正
Aug 5 2021
[update:uGao:devContSlice] Improve the continuous slicing function of M2PlotPlus.
DATA_RDCT-104 夕顔:M2PlotPlusの連続スライスの問題
上記の課題に対し、以下を解決した。
3. 連続スライスで、Range 0.4 - 1.0 delta 0.1としたとき、0.35-0.45, 0.45-0.55, 0.55-0.65 ではなく、0.4-0.5, 0.5-0.6,..にしてほしい (by松浦さん at BL02 : 210804稲村追記)
**状況**
UI上にはスライスの方法として
1. 中央値+-幅で指定する
2. 範囲で指定する(積分的)
が用意されている。今回は、2.の連続スライスの機能に連続スライスを組み込んでいたが、そこに1.のやり方で実現したところに問題があるように思われる。
(A) Range 0.4 - 1.0 delta 0.0 のとき、スライス範囲は 0.4-1.0
(B) Range 0.4 - 1.0 delta 0.1 のとき、スライス範囲は 0.35-0.45, 0.45-0.55, 0.55-0.65, ...
すなわち、2.の機能は元々範囲をその両端で指定する(A)にもかかわらず、そのスライス自体は1.の中央値を用いる(B)やり方で行っていた。
この(A)と(B)では数値が食い違っているように見え、かつ実際に行っていることが異なっているところに問題があった。
そこで、2.における連続スライスは
(C) Range 0.4 - 1.0 delta 0.1 ==> 0.4-0.5, 0,5-0.6, 0.7-0.8,...
のように(A)と似た挙動するようににし、同時に新たに1.中央値で指定の方にも連続スライスの機能をつけることで、挙動の混乱が起きないようにする。
**変更点**
X Rangeで指定したときのスライスでは与えた範囲は端点として扱い(0.4-0.5, 0.5-0.6,...)、中央値をとるのは X valueの方に新しく to [XXX] step [ XXX] の欄を加えることにする。
- GUI (M2PlotPlus.ui) にパーツとスロットを追加
- M2PlotPlus.pyのスライス部分の修正
結果として、Manyo::MLF::CalcRangeAsBinCenterZeroは使用しないことになった。
Aug 3 2021
[update:Utsusemi:4.0] Improve the function of XtalParam.xml treatment to enable to read/write the partial information
DATA_RDCT-82 D4Mat2Slicer関連の要望
- XtalParam.xmlの一部、例えばProjection情報と、Slice情報だけを読み込む・保存するといったことが可能なようにした
XtalParam内の指定した情報のみXMLファイルに書き出したり、与えたXtalParam.xmlから必要な情報のみ読み込んだりが可能となった。
XtalParamのLoad,Saveボタンに加え、Partialボタンを用意し、XtalParam内の部分的な情報選択のためのダイアログを用意した。
部分的な読み込みに関しては、指定したファイル内に記述された情報から選択して反映させることができる。
一方書き出しに関しては、指定した情報のみで構成されたXMLファイルが作成される。これを通常のLoadボタンで読み込んだ場合、そこに書かれた情報のみ反映され、他の情報はそのままである。
また、これまではUtsusemiSqeCalcXtalParamのクラスをread/write毎に新規作成していたが、これでは以前読み込んだXMLの情報が毎回消えてしまうので、起動後は常に保持することで、他の情報が消えることを防ぐようにした。
Jul 29 2021
[bugfix:Utsusemi:0.3.7] The issue that UtsusemiContainerTextConverter occurs error on reading a text file outputed by itself.
DATA_RDCT-105 空蟬4 ContainerTextConverterの読み込みバグ
- UtsusemiContainerTextConverter::Saveで作成したテキストファイルをReadで読み込むとエラーとなる問題に対処
- 読み込み中の行番号とデータの個数が、先頭に#のある行をスキップしたことにより食い違いが生じることを考慮していなかったので修正
- UtsusemiContainerTextConverter::Saveで、Keyとvectorの書き出しの順番を改良し、X,Y,E,O1,O2,... とX,Y,Eを先頭に並べるようにした
Jul 28 2021
[bugfix:Utsusemi-DNA:4.0] The issue that Import Error of VisualModule occurs on SequenceEditor.
Jul 21 2021
[update:manyo:0.3.4] Add new option for CalcRangeAsBinCenterZero function.
DATA_RDCT-104 夕顔:M2PlotPlusの連続スライスの問題
CalcRangeAsBinCenterZeroでは、これまで与えられた最小値が0以上であっても、0を中心とするbinを仮定し、それに当てはめていた。
例えば
- 最小値: 0.1
- bin幅: 0.2
の場合、これまでの計算結果では、0を中心とした -0.1,0.1,0.3,0.5の列を作成するため
::
bin[0]=0.1
bin[1]=0.3
bin[2]=0.5
となっていたが、M2PlotPlusでの使用を考えると、あまり直感的ではない。
そこで、
::
bin[0]=0.0
bin[1]=0.2
bin[2]=0.4
とした方が良いと判断してた。
このロジックをbool isZeroCenter (Default=true)の引数で与えるようにした。
M2PlotPlus内では、Trueとしている。
この引数がTrueでも、与えられた範囲が0をまたぐ場合はこれまで通りである。
Jul 21 2021
[bugfix:uGao:master] The issue that continuous slicing function of M2PlotPlus occurs error and does not work correctly.
DATA_RDCT-104 夕顔:M2PlotPlusの連続スライスの問題
1. プロットデータの横軸の強度が0.1から始まっている時に、X rangeを0.1 - 1.9, Binを0.2をするとエラー(by 山田さん at BL02)
2. 連続スライスで境界領域において、同じbinが2度読み込まれる(by 松浦さん at BL02)
**1.について**
エラーが発生するのは、X range 0.1 - 1.9を用いてManyo::MLF::CalcRangeAsBinCenterZeroを実行した際に、これまでの演算では最小値として-0.1が戻ってきたため、データが存在しないところを読みに行っていたためにエラーとなっていた。
一度エラーとなると、その後は正しくデータが戻ってこないようだ。
**対応1**
FastPlotQt.py内での処理で、与えられたデータが全てMASKVALUEだった場合の処理で問題があったので修正した(山田さんのエラーログの直接的な原因はこれ)
**対応2**
データ範囲外を含むスライスによって下記の部分でエラーが発生する。
::
data_index_x0 = parent.converter.indices_sort[ indices[0] ]
IndexError: list index out of range
そこで、データのindexを正しく計算(範囲外の確認をきちんとする、正しい値を入れる)するようにした。
例えば
::
plot_index_x0 = n_x_data # 最大のbinを指したものとみなす
は、indexの最大値は、n_x_data-1 のはずなのでそのように修正した。
また、範囲の確認は、plot_index_x0は行っているのに、plot_index_x1については行われていなかったので追加した。
**1.の修正によって露わになった問題**
X range 0.1 - 1.9を用いてManyo::MLF::CalcRangeAsBinCenterZeroを実行した際に予期しない最小値が返ってくる。この関数は必ずbinの中央が原点となるように計算した最小値を返すからであるが、パウダーデータのように軸が正しか取らない場合、計算される値が直感的ではない。よって、MPlotPlusから呼び出す場合は、与えた最小値をbinの中央値とするように変更した。
**2.の修正**
連続スライスに限らず、スライスの領域の端点の扱いに問題がある。
例えば、1.0 +- 0.1 の場合、0.9 - 1.1の範囲の積分を期待するが、実際に計算されているのは0.850 - 1.10 である。この問題により、連続的にスライスすると同じ点が隣り合うスライスの両方で使用される。
これはM2PlotPlus内部で
numpy.searchsortedを利用して配列中のindexを取り出すが、連続スライスの場合、境界点が同じindexを返すために二重どりが発生する。
::
x0 = searchsorted( xbin, v0 ) - 1
x1 = searchsorted( xbin, v1 ) - 1
1 2 3 4 5 6
--+---+---+---+---+---+--
^ ^
| |
v0 v1
^ ^
x0 x1
この場合、v0の位置からindexのx0は2、v1のx1は5を選択される。
次のスライスでのv0は上のv1になるので同じようにx0は5となり、隣り合う部分で同じindex 5を共有することになる。
よって、範囲の両端でindexの計算方法を変える必要がある。
::
x0 = searchsorted( xbin, v0 )
x1 = searchsorted( xbin, v1 ) - 1
1 2 3 4 5 6
--+---+---+---+---+---+--
^ ^
| |
v0 v1
^ ^
x0 x1
とすることで、x1=4、次のスライスではx0=5となり、二重どりがなくなる。
Jul 19 2021
[update:Utsusemi:4.0] Rename DoxySwig.i to DoxySwig40.i to distinguish one of Utsusemi4.1 or later
Jul 19 2021
[update:Utsusemi:4.0] Update the swig interface file of Doxygen documentations.
Jul 19 2021
[update:Utsusemi:4.0] Add some comments to UtsusemiSqeCalc and UtsusemiSqeCalc2
- UtsusemiSqeCalcとSqeCalc2に少しコメント(Doxygen)を追記
- UtsusemiSqeCalc2::ConvertToD4Mat(string filepath)に引数 bool isAverageMode を加えた
Jul 19 2021
[bugfix:Utsusemi:4.0] The issue that scripts to make DoxySwig.i does not support python3
- コード内のDoxygenの記述をSWIGを通した後でdocstringsにするスクリプトが、python3に対応していなかった問題に対処
Jul 19 2021
[bugfix:Utsusemi:4.0] The issue that there are Warning message on compiling.
- 時刻のテキスト化をfprintfからstrftimeに変更
- fgetsの戻り値を使用するように変更
Jul 16 2021
[bugfix:Utsusemi:4.0] The issue that DetectMap can not treat correctly M2Plot+
DATA_RDCT-103 空蟬4DetectMapで2Dスライス時に挙動がおかしい
に対応した。
**現象**
1. DetectMapのPSDデータをM2Plot+で表示する
2. 無事にM2Plot+パネルとu2dplotパネルが表示
3. ここでM2Plot+パネルをClose
4. 続けてDetectMapからPSDデータをM2Plot+で表示
5. ここでu2dplotパネルのみ表示され、M2Plot+パネルが見えない
**対策**
DetectMapのコードの中から直接M2PlotPlusのインスタンスを作成してしまうと、M2PlotPlusの生死がわからない。
よってDetectMapで使用するM2PlotPlusを別クラス(Plot2DMapOnDetectMap)でラップし、使用することで扱いを簡略化し、かつM2PlotPlus側の'u2dclosed'イベントを拾うようにした。
Jul 14 2021
[bugfix:Utsusemi:4.0] The issue that DetectMap shows some warnings on matplotlib 3.3
DATA_RDCT-100 空蟬4 DetectMap起動時のWarning回避
の以下のWarningに対応した
::
C:\Program Files\Utsusemi\python-utsusemi\utsusemi\vis\DetectMap.py:974: MatplotlibDeprecationWarning:
The draw function was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use toolbar.canvas.draw_idle() instead.
self.toolbar.draw()
C:\Program Files\Utsusemi\python-utsusemi\utsusemi\vis\DetectMap.py:1216: MatplotlibDeprecationWarning: You are modifying the state of a globally registered colormap. In future versions, you will not be able to modify a registered colormap in-place. To remove this warning, you can make a copy of the colormap first. cmap = copy.copy(mpl.cm.get_cmap("jet"))
cmap.set_bad('w', 1.0)
メッセージにあるように書き換えただけ。
::
self.toolbar.draw() -> self.toolbar.canvas.draw_idle()
cmap = cm.jet -> cmap = copy.copy(mpl.cm.get_cmap('jet'))
Jul 14 2021
[bugfix:Utsusemi:4.0] The issue that DetectMap occurs error when mouse pointer moves on color bar area
DATA_RDCT-98 空蟬4:DetectMapでポインタ位置情報の表示部でエラー
マウスmoveイベントに関連しプロットエリア内にいる状態を示すフラグが、いつのバージョンからかは不明だが、カラーバー上でも立つようになったらしい。
DetectMap上のPSD位置などの情報をハッシュテーブルから値を取り出す時にエラーとなっていたので、範囲外の場合は無視するようにした。
Jul 14 2021
[bugfix:uGao:devForMPL3.3] The issue that uGao plotters show warnings on matplotlib 3.3
DATA_RDCT-102 夕顔の各種プロッタでmatplotlib 3.3 でWarningが出る問題
夕顔のプロッタをmatplotlib 3.3 で動作させると、同じようなWarningが出現する。
**DetectMap( utsusemi.vis.DetectMap -> uGaoUtil )**
::
C:\Program Files\Utsusemi\python-ugao\uGao\uGaoUtil.py:819: MatplotlibDeprecationWarning:The parent attribute was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use self.canvas.setParent() instead.
self.parent = parent
C:\Program Files\Utsusemi\python-ugao\uGao\uGaoUtil.py:824: MatplotlibDeprecationWarning:
The _init_toolbar method was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Please fully initialize the toolbar in your subclass' __init__; a fully empty _init_toolbar implementation may be kept for compatibility with earlier versions of Matplotlib.
NavigationToolbar2QT.__init__(self,parent.canvas,parent,coordinates=False)
**M2PlotPlus**
::
C:\Program Files\Utsusemi\python-ugao\uGao\u2dplot.py:461: MatplotlibDeprecationWarning:
The _init_toolbar method was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Please fully initialize the toolbar in your subclass' __init__; a fully empty _init_toolbar implementation may be kept for compatibility with earlier versions of Matplotlib.
super(ChartToolBar, self).__init__(parent.canvas, parent, coordinates=False)
**MPlot(FastPlotQ.py)**
::
C:\Program Files\Utsusemi\python-ugao\uGao\FastPlotQt.py:1088: MatplotlibDeprecationWarning:
The parent attribute was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use self.canvas.setParent() instead.
self.parent = parent
C:\Program Files\Utsusemi\python-ugao\uGao\uGaoUtil.py:819: MatplotlibDeprecationWarning:
The parent attribute was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use self.canvas.setParent() instead.
self.parent = parent
C:\Program Files\Utsusemi\python-ugao\uGao\uGaoUtil.py:824: MatplotlibDeprecationWarning:
The _init_toolbar method was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Please fully initialize the toolbar in your subclass' __init__; a fully empty _init_toolbar implementation may be kept for compatibility with earlier versions of Matplotlib.
NavigationToolbar2QT.__init__(self,parent.canvas,parent,coordinates=False)
C:\Program Files\Utsusemi\python-ugao\uGao\FastPlotQt.py:4677: MatplotlibDeprecationWarning:
The draw function was deprecated in Matplotlib 3.3 and will be removed two minor releases later. Use toolbar.canvas.draw_idle() instead.
self.toolbar.draw()
**修正点**
- self.parent = parent
- uGaoUtil::ChartToolBar(NavigationToolbar2QT)
- FastPlotQt::ChartToolBar2(uGaoUtil::ChartToolBar)
にて使用されている。self.canvas.setParent()の使用が推奨のようだが、次のNavigationToolbar2QT.__init__(...)を行うことで、self.parentに自動的に挿入される模様。
- NavigationToolbar2QT.__init__()
uGaoUtil::ChartToolBar::__init__()にて使用。
fully initializeが何を意味しているのかわからないが、どうも_init_toolbar メソッドをOverrideしていることが問題のようだ。
uGaoUtilのChartToolBarは、オリジナルのツールバーを拡張しようとして、結局行っておらず、FastPlotQt内でも独自拡張を_init_toolbarメソッドを同様にoverrideしている。おそらく大元のNavigationToolbar2QTのイニシャライズの時に自動的に_init_toolbarが呼ばれることになっているのを利用しようとしたと思われる。Warning文章では、_init_toolbarを使わず__init__内でやれ、と読める。
よって、
- uGaoUtil::ChartToolBar::_init_toolbar() は(使っていないので)廃止
- FastPlotQt::ChartToolBar2::_init_toolbar() 及び u2dplot::ChartToolBar::_init_toolbar()もinit_toolbar() に関してはinit_toolbar()に名前を変更し、__init__から呼び出す
という対応。
- toolbar.draw()
これはtoolbar.canvas.draw_idle()に置き換えるだけ。
Jul 14 2021
[bugfix:M2PP] スライス表示などのAxesインスタンス使用方法見直し
DATA_RDCT-85 DATA_RDCT-58 add_subplot時に同じ位置のAxesがあると、
新しいインスタンスを作らずに、既存のインスタンスを使うという仕様。
この仕様が将来変更されるとのことであった。
新しいインスタンスを作るようにすると、動作が変わったので、現状の既存インスタンスを使うのを将来も維持するように変更した。
4.0.210713 or later
======================
Jul 13 2021
[update:Utsusemi:4.0] Replace some print commands to Utsusemi logging commands
Jul 12 2021
[bugfix:Utsusemi:4.0] The issue that compile error occurs on Windows
Jul 12 2021
[bugfix:manyo:0.3.4] The issue that the diagonal cutting does not work correctly on MlfArraySlier
DATA_RDCT-58 夕顔M2Plot+への要望(集約)
下記に対応した。
- M2PlotPlusのDiagonalスライスがうまく動作していない。おそらくMlfArraySlicer(Manyo.MLF)に問題がありそう
指定した2点間の対角線上のスライス機能において、MASKVALUEの扱いが全く考慮されていなかったため、スライス結果がおかしな値となっていたのを修正した。
IntensityがMLF_MASKVALUE、もしくはErrorが負の場合、加算処理を行わないようにすることで問題を回避した。
Jul 9 2021
[bugfix:Utsusemi:4.0] Bugfix of the issue that the calculation of 3rd frame TOF (using a frame boundary TOF and frame periods) is wrong when one kicker is lack.
3rdフレームを利用したデータ処理において、キッカーが一つ抜けた場合の処理に問題があったので修正した。
**フレームバウンダリでTOFに加えられるClockの定義**
(UtsusemiEventDataConverterTemplate.cc内)
- Clock[0] : そのTOFが含まれるフレーム内で発生した中性子に加えるTOF ( = 0 )
- Clock[1] : そのTOFが含まれるフレームの1つ前のフレームで発生した中性子に加えるTOF
- Clock[2] : そのTOFが含まれるフレームの2つ前のフレームで発生した中性子に加えるTOF
**3rdフレーム使用時にキッカーが一つ抜けた場合**
Clock[1]に二つ分のフレームのTOF時間(80ms)が入る。
この場合、3rdフレーム解析時に使用されるClock[2]はClock[1]+40msと3フレーム分のTOFが入ることになり、上記のClockの定義でTOFを加えると、中性子TOFに余計なフレーム分のTOFが加えられることになる。
よって、Clock[2]を計算するときに、Clock[1]が1フレーム以上の時間を持つ場合にClock[2]=Clock[1]とすることで、この問題を回避した。(UtsusemiEventDataConverterTemplate::PreIncrement)
また、キッカーが抜けた場合、本来次のフレームで来るはずだったバウンダリTOF以下の中性子が、TOF+フレームの値でやってくる。この時、TOF+バウンダリ以下のTOFには一つ前のフレームを足し、TOF+バウンダリ以上のTOFにはそのフレームをたす必要がある。
これを判別するために以下の関数内でClockを足す部分に新たな分岐を加えた。
- UtsusemiNeunetEventDecoderBase::DecodeEventData
- UtsusemiReadoutMWPCEventDecoder::DecodeEventData
- UtsusemiReadoutRPMTEventDecoder::DecodeEventData
- UtsusemiReadoutWLSF32EventDecoder::DecodeEventData
この時、1フレーム分のTOFの値を設定できるように、
Double UtsusemiNeutronEventDecoderBase::_MicroSec_Par_Frame
を定義した。この値には通常40msが入るが、キッカーの間引き測定が行われることも考慮し変更できるメソッドも追加した。
- UtsusemiNeutronEventDecoderBase::SetFramePeriod( Double )
- UtsusemiEventDataConverterTemplate::SetFramePeriod( Double )
**この変更による影響はなし**
2ndフレームを使用する場合や、キッカーの抜け一つではない場合、例えばビームがメインリングに行くなど複数抜ける場合などでも上記の変更による影響はないことを確認した。
Jul 1 2021
[bugfix:uGao:master] The issue that slice with wrong range occurs when delta bin size is larger than difference of range.
DATA_RDCT-94 M2PP: 1Dプロット表示不具合
**以下の不具合に対応**
M2Plotのスライスで、範囲を"Along Y axis"で、X range 0.8 - 0.9, delta=0.5として1DプロットするとMPlotでの表示が 0.750 - 1.270となる。
**対応内容**
rangeで指定した幅(上記の例だと0.1 (=0.9-0.8))よりdeltaが大きな場合におかしなことが起きていたので修正。
Jun 24 2021
[bugfix:Utsusemi:4.0] Bugfix of the issue that D4Mat2Slicer does not read the setting of Time-independ background from XtalParam.xml on D4Mat2Slicer.
DATA_RDCT-95 空蟬4 D4Mat2SlicerでTimeIndependバックグランドの設定が読み込めない
上記の問題を修正した。
Jun 15 2021
[update:Utsusemi:0.3.7] Ignore useless signals from TrigNET to create virtual time origin for time division
DATA_RDCT-92 TrigNETシグナルを時間分解の仮想的な原点とする手法が働かない場合を解消する
CaseInfo.xmlにおいて、TrigNETのDIOのシグナルを時間分解における仮想的な原点とする機能がある。
シグナルが来たときに必ず時間分解の原点を設定する(シグナル優先)方針であったが、DIOシグナルが暴れる(オンオフを短時間でバタバタ繰り返す)場合に問題が起きる。
例えばオフの場合にのみ時間分解原点を設定する場合に、本来オンのタイミングでシグナルが暴れてオフが混じることで、正しくない時間が原点となる。
この対策として、シグナルが一定の時間で繰り返されることを前提に、CaseInfoで指定した時間分解の範囲にシグナルが来ても無視する設定をつけた(Case優先)。
この時間分解範囲内の次のシグナルが来ても無視される設定により、例えばオフの場合にのみ時間分解原点を設定する場合、オンが出現するタイミングも時間分解に含めてしまうように設定することで、シグナルが暴れて不要なオフシグナルが来ても無効化される。
時間分解のデータを取り出すときはシグナルが暴れる領域以降は使わないことにすれば良い。
**CaseInfo.xmlの例**
originValタグに、属性"priorigy"を設定、これは"case"か"signal"をとる。"case"になると、Case優先となり、時間分解中にシグナルが来ても無視される。
.. code-block:: xml
2
0
1.0
0.0
0.0,1.0
1.0,2.0
2.0,3.0
3.0,4.0
4.0,5.0
5.0,6.0
6.0,7.0
7.0,8.0
8.0,9.0
9.0,15.0
Jun 15 2021
[bugfix:Utsusemi:0.3.7] The issue that wrong raw data files which name include RunNo different with one included in folder name on histogram creation.
ヒストグラム化でRAWデータを読み込む際に、与えられたRunNoがフォルダ名に入っていれば、そこに含まれるファイル名が異なるRunNoでも読み込まれてしまう問題に対処
Jun 14 2021
[Bugfix:M2PP] Disable the matplotlib font manager logger.
DATA_RDCT-91 loggingへの大量の記載があり、matplotlibのfontmanager
からのものであった。
これを止めるための設定を追加した。
Jun 11 2021
[Update:M2PP] Change the format of slicing parameters on the plots.
DATA_RDCT-89 スライスプロットに付記するパラメータの形式を変更した。
範囲指定の場合は中央値も表示するようにした。
Jun 11 2021
[Update:M2PP] Change precisions of slicing parameters on the plots.
DATA_RDCT-89 スライスプロットに付記するパラメータの精度を変更した。
ダイヤログなどでの精度が".3f"だったのでそれに合わせるための変更。
Jun 10 2021
[Update:M2PP] Add slicing parameters on the plots.
DATA_RDCT-89 スライスパラメータをスライスプロットに付記した。
Jun 1 2021
[update:manyo:0.3.4] Update the path of access cgi to get proton current information
May 26 2021
[update:uGao] Add CUI function on M2PlotPlus to change units
DATA_RDCT-86 CUIでUnit情報を変更可能に対応
- M2PlotPlusCui:SetUnits を追加
- これを解釈するために
- M2PlotPlus:OnNotifySetUnits を追加
- その他これらのためにifi_mineへのリスナーとM2PlotPlusCuiIF.functionsへのsetunitsを追加
May 25 2021
[update:Utsusemi-DNA:4.0] Add and improve some files to make debian package for DNA (2)
- levmar系列のコンパイルやインストールがうまく動作しなかったためいくつかのスクリプトを改変
- lib-levmar/2.5/Makefile パッケージ作成用のパスの指定
- Debian Packageを作成するための設定を改変(rule)
- Utsusemi-DNA/Makefile
May 23 2021
[bugfix:Utsusemi-SAS:4.0] Add manyo/CC_Files_Dependence to compile on building deb package.
May 23 2021
[update:Utsusemi-SAS:4.0] Update script to make debian package of mlf-utsusemi-sas
May 23 2021
[update:Utsusemi-DNA:4.0] Add and improve some files to make debian package for DNA
- Debian Packageを作成するための設定ファイルを追加
- それに合わせてMakefileも一部改変
- lib-levmar, manyo-LevmarToolsは、make時にインストールまで行うようにした(本来は別ライブラリでインストールするべきか)
May 23 2021
[update:Utsusemi-DNA:4.0] Add 4.0 branch : improve installation by adding Makefile including copy python scripts.
- ブランチ4.0を追加
- lib-levmar/2.5/Makefile に INSTALL_ROOT=$(MANYO_PATH)を付けてMANYO_PATHにインストールするようにした
- トップディレクトリにMakefileを追加
- これを雛形として、$ make install でインストールできることを目指す(Debパッケージ作成への一歩)
- lib-levmar/2.5, manyo-LevmarTools, manyo をコンパイルし、Pythonコードをコピーするなどの機能を持つ
- Makefile は雛形、Makefile.ubu20 はUbuntu20用。
May 21 2021
[update:Utsusemi:4.0] Rename VisualModule facade form VisualModuleQ to VisualModule
May 21 2021
[bugfix:Utsusemi:4.0] The issue of failure to import Utsusemi installed from debian packages because of using old Makefile.obj
May 21 2021
[bugfix:Utsusemi-SAS:4.0] The issue that VisualModule facade occurs error in SequenceEditor script made on 0.3.7
May 21 2021
[update:Utsusemi-SAS:0.3.7] Add new WiringInfo from BL PC
May 20 2021
[update:Utsusemi:4.0] Add some functions on D4Mat2Slicer to know what task is executing, improve file name to save SPE and nxspe.
DATA_RDCT-82 D4Mat2Slicer関連の要望
以下の要望に対応した。
1. SPE出力およびnxspe出力で、プログレスバーに対応させる
2. 連続回転測定データの出力nxspeファイル名に角度を入れ込む(これまではindexだった)
3. データ読み込みで読み込み中の状態であることをわかりやすくする
1.では、その通り処理時にプログレスバーを表示するようにした (D4Mat2Slicer.py)
2.では、UtsusemiD4Mat2::ExportEcmFromStepByStep で各角度のデータを取り出すときにヘッダ情報に角度の情報(KEY=D4MatOne::D4MAT2ANGLE)を入れ込み、ファイル名に使用するようにした (UtsusemiD4Mat2.cc, D4Mat2Slicer.py)
3.では、メインパネルのData Reduction [Execute]ボタンの色を処理中は赤くするようにした(終了時に元に戻る)(D4Mat2Slicer.py)
ただし3.の機能実現では、コード内で単純に変更を加えてもその直後にパネルの描画Updateはされない(QtWidgets.QApplication側の都合)ので、一旦確認ダイアログを表示させて、そのタイミングで画面Updateさせることで対応した。
May 11 2021
[bugfix:Utsusemi:4.0] The issue error occurs on showing Ei value in VisualContQ
May 7 2021
[bugfix:Utsusemi:4.0] The issue that it does not work to do data reduction using the external script file on continuous rotation method in D4Mat2Slicer
DATA_RDCT-76 D4Mat2Slicerの連続回転測定で外部スクリプトが使用できない
**検討事項**
*連続回転測定時の外部スクリプトの役割の整理*
内部では連続回転測定のデータから各角度のデータ(ElementContainerMatrix)を一つずつ取り出し、PolarAngleなどの計算(CalcPhi)を行ったデータを作成する
- 外部スクリプトを使用しない場合、以下のデータ処理を行う
- Mask設定
- dHWCorrect
- NormBySolidAngle
- KiKfCorrect
- NormByKickers
- NormFactorの掛け算(f<0.0 -> I/\|f\|, f>0.0 -> I*f)
- DetectorEfficiencyCorrection
- 外部スクリプトの役割
- 上記のデータ処理をベースにして追加・改変を行いたい場合にのみ使用可能
- 上記のデータ処理に必要なパラメータ(GUIで与えられる)を引数にする
- DAT
- phi
- maskFile
- normFactor
- deteeffi
**実際の改変**
*D4Mat2Slicer*
- 外部スクリプトのテンプレートファイルの改変
- 元々Eiやhwの範囲など、連続回転測定には不要な引数があったのをなくして、上記の仕様に合うように改変
- 予め記載する処理を内部と同等にする
.. code-block:: python
Cmm.dHWCorrection(dat=DAT)
Cmm.SolidAngleCorrection(dat=DAT)
Cmm.KiKfCorrection(dat=DAT)
Cmm.DoMask(dat=DAT,filename=maskFile)
Cmm.NormByKickers(dat=DAT,factor=normFactor)
Cmm.DetectorEffi(dat=DAT, dataFile=deteeffi)
- 外部スクリプトの関数(DataReductionContRot)の呼び出しの変更(新しい引数に対応)
- その他
- Projection時にプログレスバーを表示
- UtsusemiD4Matrix2::ProjectionStepByStep( vector ) は内部で全部の角度の処理を行っていたため進捗がわからなかった
- UtsusemiD4Matrix2::ProjectionStepByStep( UInt4, vector ) を加え、角度一つずつ処理できるようにしてプログレスバーと連携させた
- ExecProjectionContRotクラスと関連する名前を ExecDataReductionContRot に変更
- 実態に合っていないため(ProjectionはStep-by-Stepと共用となったため)
- 細かいバグ修正
*BaseCommands::NormByKickers*
引数factorの仕様を変更(UtsusemiD4Matrix2内部の仕様に一致)
- factor<0の時、I/*
- factor>0の時、I//<\|factor\|>
*UtsusemiD4Matrix2*
UtsusemiD4Matrix2::ProjectionStepByStep( UInt4, vector ) を加え、角度一つずつ処理できるようにしてプログレスバーと連携させた。
*UtsusemiSetMask*
与えるファイル名が空文字("")の時もエラーを出さずに戻るようにした。
May 7 2021
[update:Utsusemi:0.3.7] Replace literal to constant value defined in Manyo
May 6 2021
[Update:Utsusemi:4.0] Add Shamoto's DymPDF calculation code by conversion from Fortran to C++
DATA_RDCT-77 空蟬4 Dynamical PDF 計算コード移植
社本氏のDynamical PDFの計算コード(Fortran)をC++に移植した。
ShamotoDymPDF classを作成・追加した。
現状、Shamotoの名前を冠したクラスにしているが、将来的には変更予定。
社本氏のFortranコードが吐き出すデータと比較して一致することころまで確認済み。
**Test.py**
.. code-block:: python
import Manyo
import Manyo.Utsusemi as mu
tt = mu.ShamotoDymPDF()
ECA = Manyo.ElementContainerArray()
tt.SetCf(74.84)
tt.Test("4meV18.TXT","G_4meV18.TXT",ECA)
import uGao.MPlot as mp
p=mp.MPlot([ECA(0),ECA(1),ECA(2)])
May 6 2021
[bugfix:Utsusemi:0.3.7] The issue that Bose Factor correction does not work correctly on hw<0.
Apr 28 2021
[bugfix:Utsusemi:4.0] The issue that data reduction of continuous rotation method occurs error
DATA_RDCT-75 空蟬4 D4Mat2で連続回転測定データ処理ができない
**症状**
1. 連続回転測定で[Set Parameters]ボタンが効かない
2. 連続回転測定での処理の途中で落ちる
**対策**
1. はStep by Stepの改良をした際に少し余計なことを行なっていたを修正
2. は、使用するWiringInfoに書かれていたTrigNETの情報が古く、今は使用していないものまで登録されていたせいで 存在しないTrigNETファイルを読みに行こうとして落ちていた。WiringInfoを修正して免れた。
**懸案**
D4Mat2のパネルでDAQ IDとmodule Noを利用する(デフォルトを埋めておく)ことを考える。
Apr 28 2021
[bugfix:Utsusemi:4.0] The issue that error occurs on using external script with plural run numbers on D4Mat2
**症状**
D4Mat2のStep-by-Stepである角度に複数のRunNoが入っている場合に、外部スクリプトを利用した処理をするとエラーになる問題に対処。
**対処**
スクリプトを実行する前にマスクファイルを設定する部分があり、GUIでのマスク設定が'default'であり、かつ複数のRunNoがあると(例え ば"66520,66656")とエラーになってしまうので修正した。
Apr 28 2021
[update:Utsusemi-DNA:master] Remove useless line form bashrc.py3.DNA
Apr 28 2021
[update:Utsusemi-DNA:master] Update bashrc.py3.DNA from BL's PC
Apr 28 2021
[update:Utsusemi-DNA:master] Add Extract_runlist_DNA.py for D4Matrix on DNA
DATA_RDCT-72 DNAで回転測定測定のデータ処理ができるようにする
以下の要望に対応した
- Extract.py
- Dumpファイルと角度のRunListから変換する
- VisContMOutputFileByPhiが Indirect Geometryに対応しているのか?
**対応**
Run listのフォーマットを
というシンプルなものとし、それを読み込んで処理するExtract.pyを作成した。
Run Listのサンプルとスクリプト自体は以下に入れておく
.. code-block:: shell
python-utsusemi-DNA/scripts/DNA_runlist_Sample.txt
python-utsusemi-DNA/scripts/Extract_runlist_DNA.py
**使い方**
SaveDataToDumpで保存されたデータ(dmpデータ)を準備し、dmpデータのファイルパスとそのデータの角度を一行に入れたRun Listファイルを準備する
.. code-block:: shell
$ python3 Extract_runlist_DNA.py [