Locked History Actions

ANAROOT/ROOTの小技

ANAROOT/ROOTの小技について、ここに記述してください。

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();