2008年2月3日日曜日

ROOT treeの操作

treeの作成
TTree *tree = new TTree("name", "title")

treeの構造の確認
tree->Print();
こんな感じで表示されます。

******************************************************************************
*Tree :tree : tree *
*Entries : 0 : Total = 1475 bytes File Size = 0 *
* : : Tree compression factor = 1.00 *
******************************************************************************
*Br 0 :x : x/D *
*Entries : 0 : Total Size= 610 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*
*Br 1 :y : y/D *
*Entries : 0 : Total Size= 610 bytes One basket in memory *
*Baskets : 0 : Basket Size= 32000 bytes Compression= 1.00 *
*............................................................................*

要素数の確認
Long64_t num=tree->GetEntries();//全要素
Long64_t num=tree->GetEntries(const char *selection);//おそらく条件に一致する要素数

要素数の設定
tree->SetEntries(number);//number個に設定

branchの追加
TBranch *branch=tree->Branch("name",&val,"name/type");
val= ****;//valに適当な値を代入。
branch->Fill(); //Fill()するたびにvalの値が追加される。
tree->SetEntries(i);//branchにFillしてもtreeの要素数は増えないのに注意。
treeのentry数を上回ってしまったら適宜設定を。

typeはalphabet一文字で表される。大文字小文字の区別があるのに注意。
- C : a character string terminated by the 0 character
- B : an 8 bit signed integer (Char_t)
- b : an 8 bit unsigned integer (UChar_t)
- S : a 16 bit signed integer (Short_t)
- s : a 16 bit unsigned integer (UShort_t)
- I : a 32 bit signed integer (Int_t)
- i : a 32 bit unsigned integer (UInt_t)
- F : a 32 bit floating point (Float_t)
- D : a 64 bit floating point (Double_t)
- L : a 64 bit signed integer (Long64_t)
- l : a 64 bit unsigned integer (ULong64_t)
- O : a boolean (Bool_t)

一つのbranchに複数の値を設定する時は、
typedef struct{
UInt_t A,Z;
Double_t energy;
} Particle;
struct Particle fragment;
TBranch *branch=tree->Branch("fragment",&fragment,"A/i:Z/i:energy/D");
fragment.Z=1;
fragment.A=2;
fragment.energy=1e6;
branch->Fill();
てな感じで。

値の確認
tree->SetBranchAddress("name",&val);
tree->GetEntry(n);//valに"name"要素のn番目の値が格納される。

値の表示
tree->Show(i=-1);
iを設定しない時はcurrent entryが、設定すると設定したentryが表示される。

histgramの描画
tree->Draw("energy");//1次元
tree->Draw("A:Z");//2次元
tree->Draw("A:Z:energy");//3次元
のように描ける。詳しくは別のブログエントリーで。

0 件のコメント: