ROOTファイルでsaveしたcanvasからstat boxを消す
はじめに
何かのヒストグラムをDrawした時に得られるTCanvasのオブジェクトをROOTファイルとして保存することが出来ます。
TH1D *hist = new TH1D("hist","hist",100,-10,10);
// (histに何か詰める)
hist->FillRandom("gaus",1000);
TCanvas *canvas = new TCanvas("canvas");
hist->Draw();
canvas->SaveAs("fig.root");
このようにして保存したCanvasのスタットボックスを消したかったのですが、その消し方がトリッキーだったので、備忘録として書いておきます。
方法
スタットボックスを描画するかどうかはTStyle
でもTPad
でもなく、ヒストグラム型であるTH1
型で決めます。具体的にはTH1::SetStats()
で決まっております。なので、ヒストグラムのオブジェクトを取得しなければなりません。それをCanvasから取得するにはTCanvas::FindObject(TString)
を使います。
$ root fig.root
root [1] .ls // 上で作ったTCanvasのオブジェクトがあるか確認
TFile** fig.root
TFile* fig.root
KEY: TCanvas canvas;1
root [2] canvas->ls() // このキャンバスにどんなオブジェクトが入っているか確認出来る
Canvas Name=canvas Title= Option=
TCanvas fXlowNDC=0 fYlowNDC=0 fWNDC=1 fHNDC=1 Name= canvas Title= Option=
OBJ: TList TList Doubly linked list : 0
TFrame X1= -10.000000 Y1=0.000000 X2=10.000000 Y2=93.450000
OBJ: TH1D hist hist : 1 at: 0x22b9160
OBJ: TPaveText title X1= -1.020057 Y1=98.122501 X2=1.020057 Y2=104.547189
root [3] TH1D *h = (TH1D*)canvas->FindObject("hist") // TH1D型オブジェクト'hist'を取得
root [4] h->SetStats(0) // ヒストグラムオブジェクトが取れたので、設定する
root [5] canvas->Draw() // これで消えているはず