CaseInfoとそのフォーマットについて

概要

空蟬は、TrigNETがDAQミドルウェアを通して出力するイベントデータを利用し、中性子データをTrigNETに入力されたシグナルの情報の組み合わせ(ケース)から分類し、ケースごとに個別のヒストグラムとして取り出す機能(フィルタリング)を持つ。このケースを定義するために必要な情報をXML形式で記述しており、それを"Case Info"と定義している。本稿ではCaseInfoの役割とそのフォーマットについて記述する。

イベント識別するための条件

  1. 測定時刻による切り出し

  • 測定開始を0としたときの経過時間(相対時刻)

  • 装置時刻(絶対時刻)

    • T0に使用されているMLF基本時刻(2008/1/1を0とするClock)での指定

    • 年月日時刻による指定

  1. TOF(TOFによるイベントの取捨選択=CaseIDを返す)

  2. TrigNETのイベントに記載された情報によるフィルタリング

  • TrigNETのイベントの値(DIO状態やアナログ値)に応じてCaseIDを返す

  1. TrigNETのイベントをトリガーとするカウンター

  • カウント数を内部で持っていて、指定したイベントがあればカウントし、そのカウント数に応じてCaseIDを返す

TrigNETイベントでの場合分けの流れ

  1. フィルタリングするための条件読み込み (CaseInfoファイル)

  2. TrigNETイベントの解析

  3. 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行目)。

  1. TrigNETのDIO1の立ち上がりで生じるシグナルのうち、DIO3がON、DIO4がOFFの時、(7行目)

  2. DIO2の立ち上がり時にLADC1が0〜1000000の間(8行目)

  3. 時刻が2012/4/12 2:45:00から2012/4/12 12:40:00までの(10行目)

  4. TOFが500から20000の間(11行目)

また、Case 2 の条件を以下のようにしている(13行目〜20行目)。

  1. TrigNETのDIO1の立ち上がりで生じるシグナルのうち、DIO3、DIO4がOFFの時(15行目)

  2. DIO2の立ち上がり時にLADC1が1000000から9000000の間(16行目)

  3. 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タグの詳細な情報を以下に記す。

caseInfo

CaseInfo内の全てのエレメントの親である。

名前

意味・説明

属性

無し

親エレメント

なし

子エレメント

filters

caseAmbiguity

一つのフレームの中に複数のCaseが入っていた場合の処理(主にノイズ対策)

名前

意味・説明

属性

無し

親エレメント

caseInfo

子エレメント

無し

コンテンツ

整数 0

全てを採用

整数 1

一つのCaseのみ以外は不採用

整数 2

多数決でCaseを一つに絞る

整数 3

最初のCaseだけを採用する

initialCase

最初のTrigNETのイベントが発生するまでのCaseを定義する。

名前

意味・説明

属性

無し

親エレメント

caseInfo

子エレメント

なし

コンテンツ

整数

Case Number

filters

filterの親。

名前

意味・説明

属性

i

ナンバリング

n

子エレメント<filter>の個数

親エレメント

caseInfo

子エレメント

filter

コンテンツ

無し

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" )

tofRange

TOFの条件。

名前

意味・説明

属性

なし

親エレメント

filter

子エレメント

なし

内容

切り出し時刻情報

カンマ区切りの2つの実数

counters

counterの親。

名前

意味・説明

属性

n

子エレメント(counter)の個数

親エレメント

caseInfo

子エレメント

counter

内容

無し

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

単純な時間分割用。

名前

意味・説明

属性

親エレメント

caseInfo

子エレメント

time

コンテンツ

無し

timeSlicing/time

単純な時間分割用。caseIdとその時間領域を記述する。単位は測定開始を0秒とした秒数(実数)で示す。

名前

意味・説明

属性

caseId

このコンテンツが示す時間領域に対するCaseId

親エレメント

timeSlicing

子エレメント

なし

コンテンツ

<開始>,<終了>

測定開始を0秒、実数、カンマ区切り