TChainしたい

1TChain *chain=new TChain("tree", "tree title");
2// 第1引数: 読み込むTTreeの名前; 読み込むTTreeの名前と一致してないと怒られる
3// 第2引数: TChainのタイトルや説明。空欄でもOK

TChainクラスで、同じ構造の TTreeを複数連結(=chain)して、 ひとつの TTree として扱うことができます。 TTree を継承したクラスなので、連結した後は TTreeと同じように使えます。

複数のTTreeを読み込みたい(TChain::Add

1// TChain::Add("ファイル名")
2chain->Add("../anadata/CALIB_RUN10.root");
3chain->Add("../anadata/CALIB_RUN11.root");
4chain->Add("../anadata/CALIB_RUN12.root");

TChain::Addで、複数のファイル名を連結できます。 ファイル名はワイルドカード(*.root)で指定できます。

サンプルコード : ループで読み込む

1TChain *chain=new TChain("chain", "chain_title");
2const Int_t fNFile=11;
3Int_t iFile;
4for (iFile=0; iFile<fNFile; ++iFile) {
5    chain->Add(Form("../anadata/CALIB_RUN%d.root", iFile+10));
6}

サンプルコード : ワイルドカード指定

1TChain *ch = new TChain("upk");
2ch->Add("upk_run*.root")

読み込んだTTreeの数を知りたい(TChain::GetNtrees

1chain->GetNtrees()

読み込んだTTreeのリストを取得したい(GetListOfFiles

1TObjArray *fileElements = fBsd->GetListOfFiles();
2TIter next(fileElements);
3TChainElement *chEl = 0;
4while (( chEl=(TChainElement*)next() )) {
5    fprintf(stdout, "[%s]\tListOfFiles\t'%s'\n", __FUNCTION__, chEl->GetTitle() );
6}

ROOTマニュアルに載ってた