TChain編
TChain
を使うと同じ構造の TTree
を複数連結(=chain)して、ひとつの TTree
として扱うことができます。
TTree
を継承したクラスなので、連結した後は TTree
と同じように使えばOKです。
複数のTTreeを読み込みたい
TChain *chain=new TChain("tree", "tree title");
- 第1引数
読み込むTTreeの名前; 読み込むTTreeの名前と一致してないと怒られる
- 第2引数
タイトル; 説明みたいなもの。なくても大丈夫
chain->Add("../anadata/CALIB_RUN10.root");
chain->Add("../anadata/CALIB_RUN11.root");
chain->Add("../anadata/CALIB_RUN12.root");
- 第1引数
ファイル名; ワイルドカード指定もできる
サンプルコード : ループで読み込む
TChain *chain=new TChain("chain", "chainname");
const Int_t fNFile=11;
Int_t iFile;
for (iFile=0; iFile<fNFile; ++iFile) {
chain->Add(Form("../anadata/CALIB_RUN%d.root", iFile+10));
}
サンプルコード : ワイルドカード指定
TChain *ch = new TChain("upk");
ch->Add("upk_run*.root")
読み込んだTTreeの数を知りたい
chain->GetNtrees()
読み込んだTTreeのリストを取得したい
TObjArray *fileElements = fBsd->GetListOfFiles();
TIter next(fileElements);
TChainElement *chEl = 0;
while (( chEl=(TChainElement*)next() )) {
fprintf(stdout, "[%s]\tListOfFiles\t'%s'\n", __FUNCTION__, chEl->GetTitle() );
}
ROOTマニュアルに載ってた