ANAROOT/ROOTの小技について、ここに記述してください。
Contents
-
ROOTの小技
- あるTreeとそれから作成した新しいTreeとcombineして相関を見る
- FitSlicesY()
- TTreeからRI gated treeを作る
- TH1::Drawの高速化
- TH1, TH2 の要素をテキストで表示。
- ROOT libraryを使ってコンパイル
- SHELL変数をROOTマクロの引数にする。以下はさらにbash loop
- ROOT GUIでアイソトープにCUTGをかける
- TGraphをtxtから一発で作る方法
- bashに入る
- 値の評価
- 起動時にrootファイル読み込み
- 複数のtree/ntupleを一気にDraw
- Canvas右上のEntriesとかでヒストグラムの右上が隠れるのが嫌
- 2次元ヒストのZCOL表示をANAPAWみたいに設定する
- tree/ntupleをloopするためのクラステンプレートを作る
- Ntuple, Treeでヒストbinningを指定しつつdraw
- ANAROOTの小技
ROOTの小技
あるTreeとそれから作成した新しいTreeとcombineして相関を見る
TFile *file0 = TFile::Open("calib.root") mytree->AddFriend("mytree","reco.root") mytree->Draw("calibval:recoval>>hh(1000,2.5,4.5,1000,1,10)","","colz")
FitSlicesY()
h2dhist->FitSlicesY()
とすると2次元ヒストグラムをXの各ビンでスライスしてガウシアンでフィットしてくれる。 ProfileX()の少し高級な感じ。Display45のavy。
(2012 12/18 田中) 最近slfityというのをnadekoに実装しました(最新のトランクでは反映されているはず)。 引数でなんとなく想像できるとおもいます。xmin>xmaxだとguiでfitする、とかになった気がします。 分割数を自由に変えられたりmeanとsigmaをgraphに詰めてくれるので僕は重宝してます。
TTreeからRI gated treeを作る
TFile *infile = new TFile("allRI.root"); TFile *fout = new TFile("100Sn.root","recreate"); ((TTree*)infile->Get("tree"))->CopyTree("aoq<3.5&&aoq>3&&zet>49&&zet<51") fout->Write(); fout->Close();
で、beam種にGateがかかったTreeができる。
TH1::Drawの高速化
リモートでROOTで解析している時に回線が遅いとDrawに非常に時間がかかる。 これは主にTTF(true type font)のせいで、.rootrcで
# Unix.*.Root.UseTTFonts: true Unix.*.Root.UseTTFonts: false
とすればかなり軽くなる。 ただし、なぜかy軸(たぶんz軸も)の名前を入れようとするとおかしくなる。 anafileを使う場合はy軸に名前をいれないようにしたが、treeのdrawなどは デフォルトでy軸に名前が入るのでダメかも。
TH1, TH2 の要素をテキストで表示。
h1->Print("range");
rangeをallにかえるとoverflowとかも出る。
TGraphもPrintでテキスト表示可能。
ROOT libraryを使ってコンパイル
g++ Good.C `root-config --cflags` `root-config --glibs` -o Good
SHELL変数をROOTマクロの引数にする。以下はさらにbash loop
for ff in {50..99}; do root -b -l -q Run.C\(\"./run00$ff\.ridf\",\"run00$ff\.root\"\); done
.Cの後はスペースを入れない。バックスラッシュの位置がポイント。
-q オプションでマクロ終了時に.qしなくても終了します。
ROOT GUIでアイソトープにCUTGをかける
ntuple、treeを使って簡単にpidにgateをかける時の話。
A/Q-Zをプロット後、View->Toolbarで表示、はさみマークで見たいところを囲む。
CUTGとして登録されるので、
tree->Draw("mitaino","CUTG")
でgate後のプロット
TGraphをtxtから一発で作る方法
root[i] TGraph *graph = new TGraph("filename", "%lf %lf"); // スペース区切り、1と2行目読み込み root[i] TGraph *graph = new TGraph("filename", "%lf, %*lf, %lf"); // カンマ区切り、1と3行目読み込み root[i] TGraph *graph = new TGraph("filename", "%lg, %lg"); // scanfの記法が基本的に使える
bashに入る
root[0] .bash
値の評価
cuiで行末に";"を付けない場合は値の評価をしてくれる。
root[0] double x = 1; root[1] x (double))1.00000000000000000e+00
この機能はポインタがNullでないことを確かめるのに便利。
起動時にrootファイル読み込み
root hoge.root
で起動と同時にrootファイルが読み込まれる。
複数のtree/ntupleを一気にDraw
TChain ch("tree"); ch.Add("data/hoge_0.root"); ch.Add("data/hoge_1.root"); ch.Draw("adc");
Canvas右上のEntriesとかでヒストグラムの右上が隠れるのが嫌
gStyle->SetStatStyle(0)
で透明になります。
2次元ヒストのZCOL表示をANAPAWみたいに設定する
gStyle->SetPalette(1)
tree/ntupleをloopするためのクラステンプレートを作る
ntp->MakeClass();
Ntuple, Treeでヒストbinningを指定しつつdraw
root[i] ntp->Draw("x:y>>hoge(100,-10,10,100,-10,10)")
で100binづつにわけた+-10にはいるフレームにDrawされる。
ANAROOTの小技
ANALOOPを自分編集用に持ってくる
getAnaLoop.sh TAlSAMURAIExample
TAlEnc系は未対応。 編集後
.L TAlSAMURAI.cc+ book(new TAlSAMURAI)
でロードする。
ANALOOP中で宣言したtreeをファイルに落とす
treeをメモリ上に確保したままの大統計解析はメモリを大きく使うので、解析パフォーマンスが著しく落ちる。 サンプル:
void Run(char *infile, char*outfile="fout.root"){ gSystem->Load("TAlSAMURAI_cc.so"); TFile *fout = new TFile(outfile,"recreate"); book(new TAlSAMURAI); push(infile); start(); gSystem->Sleep(5000); join(); ((TTree*)gDirectory->Get("sm"))->Write(); fout->Write(); fout->Close(); exit(); }
ANALOOP中で宣言したtreeを途中でstopしてファイルに落とす
サンプル:
gSystem->Load("TAlSAMURAI_cc.so"); book(new TAlSAMURAI); push(infile); start(); stop(); TFile *fout = new TFile(outfile,"recreate"); ((TTree*)gROOT->Get("sm"))->Write(); fout->Write(); fout->Close();