ROOT COMMAND MEMO
rootに関してのメモ


ROOTのインストールログ

TreeでMakeClass

# t1->MakeClass("hoge");
とするとhoge.Cとhoge.hというファイルができる。この二つのファイルを使って便利なことが できる。というのもt1に収められているBranchから新たにBranchをここで作れるって 事。

TreeでAddFriend

Treeで2つのroot fileを一緒のtreeと思って解析できるコマンド。
# t1 -> AddFriend("t2","hogege.root");
としよう。t1に属するBranchとt2に属するBranchを同時に解析できる。ちなみにイベントの数が同じでないと警告が出る。

Treeにいれたstd::vectorの関数を呼ぶ

std::vectorをTreeに入れると便利だが、vectorのサイズを調べる時に
# t1->Draw("hoge.size()");
とやってもエラーが出てしまう。その代わりに
#t1->Draw("hoge@.size()");
とやるとちゃんとsizeがプロット出来る。

Treeにいれたstd::vectorをTTree::Drawでプロットする時の注意点

std::vectorをTreeに入れると便利だが、TTree::Draw()で2次元ヒストグラムを
プロットすると変な相関が見えてしまう事がある。これはなぜかは調べていないが、とりあえず
http://root.cern.ch/root/html/tutorials/tree/hvector.C.html

を参考にヒストグラムにプロットするとちゃんと正しい相関が見える。

GetEntriesFastの罠

TObjArrayやTClonesArrayでループするときに活躍するGetEntriesFast()だが、
1つ罠が存在する。 例えば以下のようなことをする。
root [0] TClonesArray *array = new TClonesArray("TObject",20)
root [1] for(int i=0;i<10;++i) TObject *obj = new ((*array)[i]) TObject();
root [2] for(int i=15;i<20;++i) TObject *obj = new ((*array)[i]) TObject();
root [3] array->GetEntries()
(const Int_t)15
root [4] array->GetEntriesFast()
(const Int_t)20
ということになるので注意。GetEntries()はちゃんと中身があるかを確認しているが、
GetEntriesFast()は最後のオブジェクトが入っているindex+1を返すだけなので、
アレイの途中に何も入っていない場所があると変な処理をする可能性がある。
特にRemoveAt(int)等を使って途中のオブジェクトを削除した場合には注意が必要。


BACK