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() // これで消えているはず
Shoichiro Masuoka

CNS, the Univ. of Tokyo. Dcotoral student

関連項目