CaseInfoとそのフォーマットについて¶
概要¶
空蟬は、TrigNETがDAQミドルウェアを通して出力するイベントデータを利用し、中性子データをTrigNETに入力されたシグナルの情報の組み合わせ(ケース)から分類し、ケースごとに個別のヒストグラムとして取り出す機能(フィルタリング)を持つ。このケースを定義するために必要な情報をXML形式で記述しており、それを"Case Info"と定義している。本稿ではCaseInfoの役割とそのフォーマットについて記述する。
イベント識別するための条件¶
測定時刻による切り出し
測定開始を0としたときの経過時間(相対時刻)
装置時刻(絶対時刻)
T0に使用されているMLF基本時刻(2008/1/1を0とするClock)での指定
年月日時刻による指定
TOF(TOFによるイベントの取捨選択=CaseIDを返す)
TrigNETのイベントに記載された情報によるフィルタリング
TrigNETのイベントの値(DIO状態やアナログ値)に応じてCaseIDを返す
TrigNETのイベントをトリガーとするカウンター
カウント数を内部で持っていて、指定したイベントがあればカウントし、そのカウント数に応じてCaseIDを返す
TrigNETイベントでの場合分けの流れ¶
フィルタリングするための条件読み込み (CaseInfoファイル)
TrigNETイベントの解析
Caseのタイムテーブルによる中性子イベントの分別
TrigNETの出力イベントのフォーマット¶
- トリガーの記述
イベントのトリガー
SID[7:3](int)
DIO1立ち上がり
0
DIO2立ち上がり
1
DIO3立ち上がり
2
DIO4立ち上がり
3
DIO5立ち上がり
4
DIO6立ち上がり
5
DIO7立ち上がり
6
DIO8立ち上がり
7
T0立ち上がり
14
TIイベント(タイマ)
15
DIO1立ち下がり
16
DIO2立ち下がり
17
DIO3立ち下がり
18
DIO4立ち下がり
19
DIO5立ち下がり
20
DIO6立ち下がり
21
DIO7立ち下がり
22
DIO8立ち下がり
23
Softwareイベント
31
- 記録イベントの識別
イベントの内容のタイプ
SID[2:0](int)
適応できる条件
DIO1 - 8
1
On/Off * 8
低速ADC1
2
範囲
低速ADC2
3
範囲
高速ADC
4
ADC1とADC2のそれぞれに対する範囲
CaseInfoの情報¶
語句の定義¶
Case¶
フィルターによって識別された場合をCaseと呼んでいる
「Case=0は不使用」と定義する
よって、使用するCaseは必ず0以上の整数。
Caseの識別を行うための条件は
フィルター
Trignetイベントデータによる分別
TOFの領域による分別
時刻情報による分別
カウンター
Trignetデータを解析し、それをカウンターとして、その値で分別。
Caseテーブル¶
中性子イベントをTOFで分けるために使用するテーブルをCaseテーブルと呼ぶ。
- 基本構造
vector< vector<UInt4> >
一つのフレーム内のCase分け情報を一つのvector<UInt4>で表す。
CaseIDとTOFを交互に並べる。TOFはCaseの境界となるTOFを指定。
TOFの単位は40MHzのClockで指定し、CaseIDともどもUInt4で表現する。
- 注意点
この表現方法は、現在のUtsusemiFilterTrignetクラスに搭載されているものであり、実際UtsusemiEventDataConverterTemplate::Incrementで呼び出される関数(UtsusemiEventCasesDecoderBase::GetCaseFromTof)によって使用される。この関数は、vector< vector<UInt4> >の枠組みさえ守れば本来自由に定義できるものであるため、別の形式を考えることも可能である。
Caseファイルフォーマットと例¶
Case Infoは、XML形式によって記述されている。以下に幾つかの例をあげる。
フィルター設定例(イベントシグナルの情報で識別)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <caseInfo>
<caseAmbiguity>1</caseAmbiguity>
<initialCase>0</initialCase>
<filters n="2">
<filter i="0" case="1">
<signal cond="AND" n="2">
<trignet i="0" index="0" io="DIO1R" type="DIO">*,*,1,0,*,*,*,*</trignet>
<trignet i="1" index="1" io="DIO2R" type="LADC1">0,1000000</trignet>
</signal>
<timeRange type="DATE">2012,4,12,2,45,0,0.0,2012,4,12,12,40,0,0.0</timeRange>
<tofRange>500.0,20000.0</tofRange>
</filter>
<filter i="1" case="2">
<signal cond="OR" n="1">
<trignet i="0" index="0" io="DIO1R" type="DIO">*,*,0,0,*,*,*,*</trignet>
<trignet i="1" index="1" io="DIO2R" type="LADC1">1000000,9000000</trignet>
</signal>
<timeRange type="MLF">345313,4313145</timeRange>
<tofRange/>
</filter>
</filters>
<counters/>
<timeSlicing/>
</caseInfo>
|
このCaseInfoに置いて、Case 1 の条件を以下のように定めている(5行目〜12行目)。
TrigNETのDIO1の立ち上がりで生じるシグナルのうち、DIO3がON、DIO4がOFFの時、(7行目)
DIO2の立ち上がり時にLADC1が0〜1000000の間(8行目)
時刻が2012/4/12 2:45:00から2012/4/12 12:40:00までの(10行目)
TOFが500から20000の間(11行目)
また、Case 2 の条件を以下のようにしている(13行目〜20行目)。
TrigNETのDIO1の立ち上がりで生じるシグナルのうち、DIO3、DIO4がOFFの時(15行目)
DIO2の立ち上がり時にLADC1が1000000から9000000の間(16行目)
MLF標準Clockで345313から4313145の間(18行目)
カウンター設定例1(単純Increment型)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <caseInfo>
<caseAmbiguity>0</caseAmbiguity>
<initialCase>1</initialCase>
<counters n=“1">
<counter i="1" type="NORMAL">
<signal n="2">
<trignet i="0" index="0" io="DIO1R" title="Counter1" attr="1.0"/>
<trignet i="1" index="0" io="DIO2R" title="Counter2" attr="-1.0"/>
</signal>
<conversionVal>1.0</conversionVal>
<originalVal unit="Counts">0.0</originalVal>
<conditions type="1" n="3">
<cond i="0" case="1">1.0,2.5</cond>
<cond i="1" case="2">2.5,14.0</cond>
<cond i="2" case="3">14.0,20.0</cond>
</conditions>
</counter>
</counters>
<timeSlicing/>
</caseInfo>
|
このCaseInfoではカウンターとしての使用方法の例を示している。
カウンター方式では、TrigNETへのシグナルによって加算される内部カウンターがあり、これとconversionValとoriginalValを利用して得られた値( Val = <originalVal> + <conversionVal> × <内部カウンター>)に対して、Caseを割り当てることになる。
この例では、
DIO1にシグナルが来た時に内部カウンターに1.0を加算 ( 7行目 )
DIO2にシグナルが来た時に内部カウンターに-1.0を加算( 8行目 )
と定義し、値 Val = 0.0(originalVal) + 1.0(conversionVal) × 内部カウンター が、
1.0 <= Val < 2.5 なら Case 1 ( 13行目 )
2.5 <= Val < 14.0 なら Case 2 ( 14行目 )
14.0 <= Val < 20.0 なら Case 3 ( 15行目 )
として識別 ( 12行目: <conditions>の属性 typeが1 ) される。値がそれ以外の値を取った時はイベントは無視される。
カウンター設定例2(サイクリックIncrement型)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <caseInfo>
<caseAmbiguity>0</caseAmbiguity>
<initialCase>1</initialCase>
<counters n=“1">
<counter i="1" type="NORMAL">
<signal n="1">
<trignet i="0" index="0" io="DIO1R" title="Counter1" attr="1.0"/>
</signal>
<conversionVal>2.0</conversionVal>
<originalVal unit="Counts">100.0</originalVal>
<cyclicRange begin="0.0" end="360.0"/>
<conditions type="2">
<cond>0.0,360.0,2.0</cond>
</conditions>
</counter>
</counters>
<timeSlicing/>
</caseInfo>
|
この例の場合、
DIO1にシグナルが来たら内部カウンターに1.0加算 ( 7行目 )
値 Val = 100.0 + 2.0 × <内部カウンター>
と定義されているが、さらに<cyclicRange>( 11行目 )により
値が 0.0から360.0 の間から外れた時は360.0 = 0.0 とみなす
ことになる。すなわち、Caseに分類に使う値Valはサイクリックに扱われる。
また、 <conditions>の属性 typeが2 であるので、そのコンテンツ <cond>0.0,359.0,2.0</cond> から
case 1 : 0.0-2.0
case 2 : 2.0-4.0
...
case 178 : 356.0-358.0
case 179 : 358.0-360.0
という分類となる。
カウンター(ロータリーエンコーダ用)¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <caseInfo>
<caseAmbiguity>0</caseAmbiguity>
<initialCase>0</initialCase>
<filters/>
<counters n=“1">
<counter i="0" type="ABP">
<signal n="2">
<trignet i="0" index="0" io="DIO1R" title="Aphase" attr="A"/>
<trignet i="1" index="0" io="DIO2R" title="BPhase" attr="B"/>
</signal>
<conversionVal>-0.002866242038</conversionVal>
<originalVal unit="Counts">9.09</originalVal>
<conditions type="2">
<cond>-90.0,10.0,2.0</cond>
</conditions>
</counter>
</counters>
<timeSlicing/>
</caseInfo>
|
ロータリーエンコーダのA相をDIO1に、B相をDIO2に入れておく。 A相,B相のシグナルによって計算されるカウント数(counts)に対し、
conversionVal=-0.002866242038、原点(originalVal)を 9.09とし、
これからCase識別用の値(Val)を計算する( Val = conversionVal*counts + originalVal )。
-90.0から+10.0を2.0刻みで分けて、Valの値が-90.0〜-88.0の時をCase 1, -88.0〜-86.0をCase 2, ...と割りあてる。
単純時間分解¶
特にTrigNETなどを使用せずとも、単純な時間分解だけでもCaseInfoは使用できる。以下のように timeSlicing を利用する。
1 2 3 4 5 6 7 8 9 10 11 | <caseInfo>
<caseAmbiguity>0</caseAmbiguity>
<initialCase>0</initialCase>
<filters/>
<counters/>
<timeSlicing>
<time caseId="1">0.0,1234.5</time>
<time caseId="2">1500.0,2345.6</time>
<time caseId="3">2445.6,3000.0</time>
</timeSlicing>
</caseInfo>
|
time タグで、測定開始からの秒数(実数)で開始と終了を示す
フォーマットは、<開始[秒]>, <終了[秒]>
time タグの属性値 caseId でその開始・終了範囲内のデータのCaseIdを決める
フォーマットの詳細¶
これらの情報を収めるXMLタグの詳細な情報を以下に記す。
caseAmbiguity¶
一つのフレームの中に複数のCaseが入っていた場合の処理(主にノイズ対策)
名前 |
意味・説明 |
|
---|---|---|
属性 |
無し |
|
親エレメント |
caseInfo |
|
子エレメント |
無し |
|
コンテンツ |
整数 0 |
全てを採用 |
整数 1 |
一つのCaseのみ以外は不採用 |
|
整数 2 |
多数決でCaseを一つに絞る |
|
整数 3 |
最初のCaseだけを採用する |
initialCase¶
最初のTrigNETのイベントが発生するまでのCaseを定義する。
名前 |
意味・説明 |
|
---|---|---|
属性 |
無し |
|
親エレメント |
caseInfo |
|
子エレメント |
なし |
|
コンテンツ |
整数 |
Case Number |
filters/filter¶
filterの条件の親。
名前 |
意味・説明 |
|
---|---|---|
属性 |
i |
インデックス |
case |
case番号 |
|
親エレメント |
filters |
|
子エレメント |
signal |
Trignetイベントの条件 |
timeRange |
時刻の条件 |
|
tofRange |
TOFの条件 |
|
コンテンツ |
無し |
signal¶
複数のTrigNETやその他のシグナルを用いる場合のために用意。
名前 |
意味・説明 |
|
---|---|---|
属性 |
n |
内包するタグ(trignet)の数 |
cond |
シグナル条件の"AND"/"OR" |
|
親エレメント |
filter or container |
|
子エレメント |
trignet |
|
コンテンツ |
trignet¶
Trignetイベントの条件。
名前 |
意味・説明 |
|
---|---|---|
属性 |
i |
ナンバリング |
index |
複数のTrigNETを使用するときのID |
|
io |
イベントトリガーの種類:詳細は下記 |
|
type |
イベント内容のタイプ:DIO, LADC1, LADC2, HADC |
|
title |
このシグナルの名前 |
|
attr |
何か属性を加える場合に使用。現在は単純カウンター設定時に内部カウンターの増減値として、 もしくは、エンコーダとしての設定時にA相B相の識別に使用。 |
|
親エレメント |
signal |
|
子エレメント |
なし |
|
内容 |
イベント内容によって異なる |
|
DIO1〜8 |
カンマ区切りの8つの整数(0か1)、Off=0,On=1,Free=それ以外、省略すると完全にフリー、 つまり状態がなんであれトリガーがあればよい |
|
低速ADC1、低速ADC2 |
カンマ区切りの2つの実数(min,max)、仕様上、minは0が最小値、maxに最大値はないが、 max=0なら上限なし判定 |
|
高速ADC |
カンマ区切りの4つの実数、minは0が最小値、maxは4095が最大値 |
ioの記述¶
イベント発生トリガー |
属性ioに使用できる文字 |
---|---|
DIOの立ち上がり |
DIO1R, DIO2R, DIO3R, DIO4R, DIO5R, DIO6R, DIO7R, DIO8R |
DIOの下り |
DIO1F, DIO2F, DIO3F, DIO4F, DIO5F, DIO6F, DIO7F, DIO8F |
T0立ち上がり |
T0R |
TI(タイマ) |
TI |
ソフトウェア |
SW |
全て利用 |
ANY |
timeRange¶
時刻の条件、内容が2つの実数なら相対時間で、内容が14の実数なら絶対時刻で切り出すことを示す。
名前 |
意味・説明 |
|
---|---|---|
属性 |
type |
時刻の指定方法:0. 測定開始からの経過時間[秒]、1.MLF基準Clock、2.年月日時分秒方式 |
親エレメント |
filter |
|
子エレメント |
なし |
|
内容 |
切り出し時刻情報 |
カンマ区切りの2または14の実数 ( 例:2013年4月10日 5時21分32.54秒->"2013","4","10","5","13","21","32","0.54" ) |
counter¶
counterの条件の親。
名前 |
意味・説明 |
|
---|---|---|
属性 |
i |
ナンバリング |
type |
カウンターとしてのタイプ(NORMAL:通常のシグナル、ABP:エンコーダ用) |
|
親エレメント |
counters |
|
子エレメント |
signal |
Trignetイベントの条件(filterのものと同じ) |
conversionVal |
カウンターの変換用(積) |
|
originalVal |
カウンターの変換用(原点) |
|
conditions |
Case分別用情報 |
conversionVal¶
Case識別に使用する値への変換用パラメータ。Case識別に用いる値は(originalVal) + (conversionVal) × カウント数。
名前 |
意味・説明 |
|
---|---|---|
属性 |
無し |
|
親エレメント |
counter |
|
子エレメント |
||
内容 |
カウント数にかける値 |
実数 |
originalVal¶
Case識別に使用する値への変換用パラメータ。Case識別に用いる値は(originalVal) + (conversionVal) × カウント数。
名前 |
意味・説明 |
|
---|---|---|
属性 |
||
親エレメント |
counter |
|
子エレメント |
||
内容 |
カウント数に足す値 |
実数 |
cyclicRange¶
Case識別に使用する値への変換用パラメータ。Case識別に用いる値が(begin)から(end)までサイクリックに扱われる。例えば角度で360度=0度とみなすのと同等。
名前 |
意味・説明 |
|
---|---|---|
属性 |
begin |
範囲の先頭 |
end |
範囲の末尾 |
|
親エレメント |
counter |
|
子エレメント |
||
内容 |
カウント数に足す値 |
実数 |
conditions¶
カウント数の変換値をCaseに分類する情報
名前 |
意味・説明 |
|
---|---|---|
属性 |
type |
条件の与え方(1: condの羅列、2: start,end,step) |
n |
子エレメント(cond)の個数 |
|
親エレメント |
counter |
|
子エレメント |
cond |
cond¶
カウント数の変換値をCaseに分類する情報
名前 |
意味・説明 |
|
---|---|---|
属性 |
i |
ナンバリング(conditionsのtype=1の時に使用) |
case |
このcondのCaseID(conditionsのtype=1の時に使用) |
|
親エレメント |
counter |
|
子エレメント |
||
内容 |
conditionsのtype=1の時:変換値の範囲 |
カンマ区切りの2実数 |
conditionsのtype=2の時:変換値の区切り情報 |
カンマ区切りの3実数(start, end, step)、CaseIDは先頭から1,2,...。 |
timeSlicing/time¶
単純な時間分割用。caseIdとその時間領域を記述する。単位は測定開始を0秒とした秒数(実数)で示す。
名前 |
意味・説明 |
|
---|---|---|
属性 |
caseId |
このコンテンツが示す時間領域に対するCaseId |
親エレメント |
timeSlicing |
|
子エレメント |
なし |
|
コンテンツ |
<開始>,<終了> |
測定開始を0秒、実数、カンマ区切り |