解析をするときには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();
でコードが走る。
これらの tuple をまとめるためには
ch.Merge("filename.root")
とするとまとまったtuple ができる
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();
で詰め終わり。
まず、ファイルを読み込む。
TFile f("filename.root");
名前を変えてそれぞれ読み込む。 次にそれぞれの Tree に名前をつける。
TTree *tr = f->Get("tree");
これで tr で tree にアクセスすることができる。 あとは普段と同じようにして描画する。
複数のデータを重ねるときにあると便利な方法。 まず、レジェンドのポインタを作る
TLegend *l = new TLegend(x,y,X',Y');
位置は右上と左下の点を指定する。 次に表に内容の設定をする。
l->AddEntry(histo,"display name","lp");
3つ目の表示オプションは TGraph と同じようになる。 最後にこれを表示させる。
l->Draw();
この際に "same" オプションは必要ない。 背景は灰色になってしまうので、
l->SetFillColor(0);
で白にするとすっきりする。 枠線が必要なければ
l->SetBorderSize(0);
で枠線を設定できる。
デフォルトではカラースケールは 20 になっている。 例えば 30 に変更するためには
gStyle->SetNumberContours(30);
とする。