The BAQ/Data Acquisition/DAQ System/NBBQ/ANAPAW

Japanese English
Nuclear Physics Data Acquisition Orchestra Gallery Memo Diary Link Home
DAQ System DAQ Module Pulse Shape Analysis RTLinux Linux Device Driver Home
Babirl Babarl NBBQ Home

もどる

ANAPAWインストール
まずはANAPAWを 武内さんのところからダウンロードして下さい。
(どちらかと言えば、naok版をお勧めします)
その前にCERN Libがインストールされていることが必要です。
ANAPAWのセットアップはややこしいのですが、とりあえず以下の手順で使えるようになります。
シェルはcsh系が基本なので、 bashを使っている人は '# tcsh 'と打って、cshにして下さい。

makeanaでのエラー
新しいCERNlibの場合はLAPACKとBLASというライブラリも必要なようです。
'makefile'の中の'LFLAGS'の最後に'-llapack -lblas'を書き加えて下さい。
(naok版のソースにはすでに'-llapack -lbals'は書いてあります)
ライブラリがインストールされていない場合は ここ からダウンロードできます。
'lapack-3_0-2_i386.rpm'と'blas-3_0-2_i386.rpm' をインストールすればよいです。
makeana時にいくつかwarningが出ますが、気にしないで下さい。

さらに新しいCERNlibではlibshiftというのが必要なようです。
packlibでエラーが出るときは'-lshift'を書き加えてください。

encを書く
雛型に入っている'src/enc_bbdaq.f'というソースは、Segment ID 1 にRawデータが2つ入っている場合のソースです。例えば、Rawデータが4つある場合は以下のように書き直します。

integer   nraw
parameter (nraw = 2)
integer*2 Raw(nraw)
       ↓
integer   nraw
parameter (nraw = 4)
integer*2 Raw(nraw)

このとき、Raw(1)〜Raw(4)までデータが入ります。
Rawデータを確保したら、valという変数に格納します。

id = 1
val(1,id) = id
val(2,id) = raw(1)
val(3,id) = raw(2)
val(4,id) = sqrt(val(2,id)*val(3,id))

id = 2
val(1,id) = id
val(2,id) = raw(3)
val(3,id) = raw(4)
val(4,id) = sqrt(val(2,id)*val(3,id))

valが実際にanafile(後述)から呼び出せる変数で、必要な値はすべてここに格納して下さい。
ちなみにvalはRealですが、RawはIntegerで宣言しているので、型に注意して下さい。

naok版で上記を書き直すと

naok = 0

id = 1
naok = naok + 1
val(1,naok) = id
val(2,naok) = raw(1)
val(3,naok) = raw(2)
val(4,naok) = sqrt(val(2,naok)*val(3,naok))

id = 2
naok = naok + 1
val(1,naok) = id
val(2,naok) = raw(3)
val(3,naok) = raw(4)
val(4,naok) = sqrt(val(2,naok)*val(3,naok))

IDを増やしたい時に、'naok = naok + 1'と書いてnaokに1足すことと、 'val(1,naok) = id'とやって、1番目のvalに ID番号を入れることが約束ごとになっています。
encを書き直したら'makeana' でコンパイルし直して下さい。


anafileを書く
以下にanafileのサンプルを示します。(anafileは旧版とnaok版共通です)

analys
1
gate
1, 1,1,1,2, 200.,500.
2, 1,2,2,2, 300.,600.
and
3, 1,2
or
4, 1,2
hst1
0, 1,1,1,2, 400, 0.,2000., 'raw 1'
0, 1,2,2,3, 400, 0.,2000., 'raw 4'
hst2
3, 1,1,1,4, 1,2,2,4, 200,0.,2000., 200,0.,2000., 'A1 vs A2'
exit

1行目の'analys'は約束ごとです。
2行目の'1'はAnalyzer番号というもので、ここでは'1'と書きます。この値は'src/usersrc.f'で決めています。余力があれば詳しく説明します。
3行目の'gate'は、ここからgateを定義するという意味です。
4〜5行目で1次元のゲートを作っています。
6行目の'and'はANDゲート、8行目の'or'はORゲートです。
10行目からやっと、1次元ヒストグラムを定義しています。
13行目からは2次元ヒストグラムです。

1次元ヒストグラムは11行目のように'0, 1,1,1,2, 400, 0.,2000., 'raw 1'' とやって定義しています。
最初の'0'はゲート番号で、'0'の場合はゲート無しという意味です。次の'1,1,1,2'が値です。 1つ目の'1'がAnalyzer番号、2〜3つ目がID、4つ目が値に対応しています。
言い替えれば、Analyzer番号1のencでのval(1,2)が'1,1,1,2'です。
その次の'400, 0.,2000.'は0.〜2000.までの範囲を400個のBinで作るという意味で、最後の'raw 1'はヒストグラムの名前です。

ゲートを作る時も'1,1,1,2'などとして、どの値にゲートをかけるか指定します。
4行目の'1, 1,1,1,2, 200.,500.,'と書いてある、最初の'1'がゲート番号、 '1,1,1,2'が対象となる値、'200.,500.,'がゲート範囲です。
ANDやORゲートはゲート番号を連ねていきます。
7行目の'3, 1,2'は『ゲート番号3 = ゲート番号1と2のAND』という意味です。
もちろん、'10, 1,2,3,4,5,6'などとして複数のゲートのANDやORも作れます。

以下にサンプルでanafileとrawdataを用意しました。 ANAPAWの動作確認に使って下さい。
test.ana  example.rdf

Last Update: 2006/10/31
Hidetada Baba
baba rarfaxp.riken.jp