#acl Known:read,write All:read #この行は編集しないでください。(たぶんできないけど) 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(); }}}