この文書の現在のバージョンと選択したバージョンの差分を表示します。
両方とも前のリビジョン 前のリビジョン 次のリビジョン | 前のリビジョン 次のリビジョン 両方とも次のリビジョン | ||
ja:root:ttree [2014/06/11 06:43] kota [読み込むBranchを限定する] |
ja:root:ttree [2016/06/20 05:24] kota [読み込むBranchを限定する] |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== TTree を使う ====== | + | ====== TTree ====== |
ライン 5: | ライン 5: | ||
==== 読み込むBranchを限定する ==== | ==== 読み込むBranchを限定する ==== | ||
+ | === 方法1 --- SetBranchStatus === | ||
デフォルトではGetEntryすると、SetBranchAddressで指定されていないBranchまでも読みにいく(らしい)。 | デフォルトではGetEntryすると、SetBranchAddressで指定されていないBranchまでも読みにいく(らしい)。 | ||
treeに多数のBranchが入っていて、その一部だけを使う場合、これは非常に無駄になる。 | treeに多数のBranchが入っていて、その一部だけを使う場合、これは非常に無駄になる。 | ||
ライン 15: | ライン 16: | ||
</code> | </code> | ||
- | このとき、先に0番目のEntryをGetEntryしてやらなければならないらしい。 | + | このとき、先に0番目のEntryをGetEntryしてやらなければならないらしい。http://root.cern.ch/root/roottalk/roottalk03/4900.html |
理由は不明。 | 理由は不明。 | ||
- | 具体的には以下のように | + | 具体的には以下のようにする。 |
<code c_mac> | <code c_mac> | ||
tree->SetBranchAddress("hoge",&hoge); | tree->SetBranchAddress("hoge",&hoge); | ||
ライン 25: | ライン 27: | ||
・ | ・ | ||
tree->GetEntry(0); | tree->GetEntry(0); | ||
- | + | tree->SetBranchStatus("*",0); | |
- | tree->SetBranchStatus("*",0); //まず全体を読み込まない様に指定 | + | tree->SetBranchStatus("Detector.nHit",1); |
- | tree->SetBranchStatus("Detector.nHit",1); //次いで、使用するものを順次読み込む設定に変えていく | + | tree->SetBranchStatus("Detector.hits.*",1); |
- | tree->SetBranchStatus("Detector.hits.*",1);//クラス化されているものはワイルドカードで指定したりもできる | + | |
・ | ・ | ||
・ | ・ | ||
・ | ・ | ||
以下 event loop | 以下 event loop | ||
+ | </code> | ||
+ | === 方法2 --- TBranch::GetEntry=== | ||
+ | TBranch のGetEntryを用いることで、Branch毎に読み込むことができる。\\ | ||
+ | ただし、TChainを用いている時、気をつけなければならないことが1つ。\\ | ||
+ | TBranch::GetEntryは、引数として”当該イベントが含まれているTree内でのEntry Number”を取らなくてはならない。\\ | ||
+ | 具体的には次のようにする。 | ||
+ | <code c> | ||
+ | TChain *chain = ...; | ||
+ | Long64_t localEntry = chain->LoadTree(entry); | ||
+ | branch->GetEntry(localEntry); | ||
</code> | </code> | ||
+ | |||
+ | Long64_t TChain::LoadTree(Long64_t entry)は | ||
+ | TChainで結びつけられたTreeの全エントリにつけられた通し番号(entry)を引数にとり、 | ||
+ | そのentryが含まれるTreeをCurrent Treeとし、 | ||
+ | Current Tree内でのEntry Numberを返り値とする関数。\\ | ||
+ | Errorがあると-1~-4の値を返すので、 if( localEntry < 0 ) でError判定ができる。 | ||
+ | |||
+ | ==== 元treeから条件を満たすイベントの、必要なbranchだけを抽出したtreeを作る ==== | ||
+ |