解析をするときにはMakeClass?をする。 Ntupleに詰められている変数などを自動的に読んでくれてヘッダファイルを作成してくれる。
tree->MakeClass("name");
でname.C name.h ができる。 ヘッダファイルの行列要素は読み込んだNtupleによるので適に変更する。 segmentation violation の場合はここが問題のことが多い。
Ntupleをいくつもまとめて解析したいときに使う。
TChain ch("tree"); ch.Add("filename");
でつなげられる。 MakeClass?で作ったコードを使うときには
.L name.C+g; name a(&ch); a.Loop();
でコードが走る。
Long64_t nentries = fChain->GetEntries();
の様に Fast を抜く
杉本さんに教えていただいた。
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ void MyRootAna::progress(Long64_t num){ num++; if(num % 100000 == 0){ std::cerr << " --> " << num << " events analized (" << now() << ")." << std::endl; INFO(" run:" << m_run << " event:" << m_event << " lumi:" << m_lumiblock << " globalBC:" << m_globalBcid); }else if(num % 10000 == 0){ std::cerr << "*"; } }
ミソは cout ではなく cerr を使うこと。 これによってスムースに表示される
ヒストグラムの統計情報を重ねて表示するには
h1->Draw("sames");
と s を付ける。 統計情報 BOX の調整は
gPad->SetStatX(); gPad->SetStatY();
などを利用してずらす。
自分の好きなようにカットをしたあとにNtupleに詰めると解析がはかどる。
TTree *tree = new TTree("tree","tree");
int integer = 0; float float = 0.; vector<int>vector; tree->Branch("Integer",&integer,"Integer/I"); tree->Branch("Float",&float,"Float/F"); tree->Branch("vector",&vector);
と定義する。 ベクターはクリアしなければならないので、
vector.clear();
とする。 int float はいつも通りで良いが、ベクターは
vector.push_back(argment);
のようにして詰める。 最後に
tree->Fill();
で詰め終わり。