Locked History Actions

Diff for "ANAROOT/ROOTの小技"

Differences between revisions 26 and 27
Deletions are marked like this. Additions are marked like this.
Line 144: Line 144:

== ANAROOTの小技 ==
=== ANALOOP中で宣言した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();
}

}}}

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

ROOTの小技

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 *filecut = new TFile("cut.root"); // あらかじめ作ったTCutG
TFile *infile  = new TFile("allRI.root");
TFile *fout = new TFile("100Sn.root","recreate");
filecut->Get("100Sn")->Clone();
((TTree*)infile->Get("tree"))->CopyTree("100Sn")
fout->Write();
fout->Close();

で、100Snに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後のプロット

Ntuple, Tree変数のループマクロの生成

root[i] ntp->MakeClass(); 

Ntuple, Treeでヒストbinningを指定しつつdraw

root[i] ntp->Draw("a>>h1(100,0,1000)"); // bin数、min、max

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中で宣言した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();
}