メインコンテンツまでスキップ

RDF Simple Decoder

Repository: https://github.com/yano404/RDFSimpleDecoder

名前の通り, RDFのデコーダ.

P4DAQのデコーダとして使うことを想定している. なので, 「4回生が読める, 改造できる」 を目標にして設計, 開発した(している)つもり.

デコードだけじゃなく, アナライザとしての機能を持たせることもできる. (ただそこまでなるとANAROOTやArtemisを使う方がよいと思う)

まだ改善すべき点多数.

Installation

git clone https://github.com/yano404/RDFSimpleDecoder.git

RDFSimpleConverter/src/main.cc の中身を使用しているDAQの構成に合わせて書き換える.

cd RDFSimpleDecoder
make

Usage

Setup

cd RDFSimpleDecoder
ln -s /path/to/<rdf directory> rdf

Decode

./decode <run number>

Decodeした結果は root/<run number>.rootに出力される.

Read ROOT File

$ root root/0420.root
root [0]
Attaching file root/0420.root as _file0...
(TFile *) 0x2072ae0
root [1] .ls
TFile** root/0420.root
TFile* root/0420.root
OBJ: TTree tree tree : 0 at: 0x20c2090
KEY: TTree tree;2 tree [current cycle]
KEY: TTree tree;1 tree [backup cycle]
KEY: TArrayL scaler;1 object title
root [2] tree->Print()
******************************************************************************
*Tree :tree : tree *
*Entries : 59064 : Total = 15164796 bytes File Size = 1928173 *
* : : Tree compression factor = 7.87 *
******************************************************************************
*Br 0 :tdc : tdc[16]/I *
*Entries : 59064 : Total Size= 3791111 bytes File Size = 617610 *
*Baskets : 119 : Basket Size= 32000 bytes Compression= 6.13 *
*............................................................................*
*Br 1 :qdc : qdc[16]/I *
*Entries : 59064 : Total Size= 3791111 bytes File Size = 1223650 *
*Baskets : 119 : Basket Size= 32000 bytes Compression= 3.10 *
*............................................................................*
*Br 2 :adc : adc[16]/I *
*Entries : 59064 : Total Size= 3791111 bytes File Size = 28742 *
*Baskets : 119 : Basket Size= 32000 bytes Compression= 131.81 *
*............................................................................*
*Br 3 :sca : sca[16]/I *
*Entries : 59064 : Total Size= 3791111 bytes File Size = 54853 *
*Baskets : 119 : Basket Size= 32000 bytes Compression= 69.07 *
*............................................................................*
root [3] TArrayL *sca = _file0->Get<TArrayL>("scaler")
(TArrayL *) 0x29b34c0
root [4] sca->At(1)
(long) 9954

ROOT5 w/ GCC4.4.7

ROOT>=6.20.00 としているけど, 実は ROOT5 , gcc 4.4.7 でも使える.

MakefileCXXFLAGS を次のように書き換えればbuildできる.`

-CXXFLAGS = -g -O2 -Wall $(shell root-config --cflags)
+CXXFLAGS = -std=c++0x -g -O2 -Wall $(shell root-config --cflags)

あと, scaler の値を保存している TArray へのアクセスの方法が少し異なる.

TArrayL *sca;
_file0->GetObject("scaler", sca);

ToDo

  • オンラインでデコードできるかテスト.
  • Error処理. ファイルが損傷していたりしてRDFフォーマットに則っていない時の処理.
  • BlockBuffer, EventBuffer, SegmentBufferがPublicなのをどうにかしたい.