Deprecated: Array and string offset access syntax with curly braces is deprecated in /mnt/hep_web/hep_web/member/n-kota/dokuwiki/inc/init.php on line 542
ja:root:stat [GiriWiki]

ユーザ用ツール

サイト用ツール


ja:root:stat

差分

この文書の現在のバージョンと選択したバージョンの差分を表示します。

この比較画面にリンクする

両方とも前のリビジョン 前のリビジョン
次のリビジョン
前のリビジョン
ja:root:stat [2018/03/30 00:41]
kota [統計boxの移動・サイズ変更]
ja:root:stat [2019/04/18 16:23] (現在)
kota [Statistics box内のtextの編集]
ライン 67: ライン 67:
   * 2つのヒストグラムの統計情報を縦に並べるには、例えば以下のようにすればよい   * 2つのヒストグラムの統計情報を縦に並べるには、例えば以下のようにすればよい
 <code c_mac> <code c_mac>
 +  h0->​SetLineColor(kBlack);​
   h0->​Draw();​   h0->​Draw();​
 +  h1->​SetLineColor(kRed);​
   h1->​Draw("​sames"​); ​ // "​same"​ だとh0の統計boxが消えてしまう   h1->​Draw("​sames"​); ​ // "​same"​ だとh0の統計boxが消えてしまう
- 
   gPad->​Update();​   gPad->​Update();​
   ​   ​
-  Float_t st0_lower_left_x = 0.6; +  ​const Float_t st0_lower_left_x = 0.6; 
-  Float_t st0_lower_left_y = 0.75; +  ​const Float_t st0_lower_left_y = 0.75; 
-  Float_t st_Width = 0.39; +  ​const Float_t st_Width = 0.39; 
-  Float_t st_Height = 0.24; +  ​const Float_t st_Height = 0.24; 
-  Float_t st1_lower_left_x = st0_lower_left_x;​ +  ​const Float_t st1_lower_left_x = st0_lower_left_x;​ 
-  Float_t st1_lower_left_y = st0_lower_left_y - st_Height - 0.005;​ //​-0.005 は2つのboxの隙間+  ​const Float_t st1_lower_left_y = st0_lower_left_y - st_Height - 0.005;​ //​-0.005 は2つのboxの隙間
  
 //h0 の統計boxについて //h0 の統計boxについて
-  TPaveStats *st10 = (TPaveStats*)h0->​FindObject("​stats"​);​ +  TPaveStats *st0 = (TPaveStats*)h0->​FindObject("​stats"​);​ 
-  ​st10->​SetX1NDC(st0_lower_left_x);​ +  ​st0->​SetX1NDC(st0_lower_left_x);​ 
-  ​st10->​SetY1NDC(st0_lower_left_y);​ +  ​st0->​SetY1NDC(st0_lower_left_y);​ 
-  ​st10->​SetX2NDC(st0_lower_left_x + st_Width);​ +  ​st0->​SetX2NDC(st0_lower_left_x + st_Width);​ 
-  ​st10->​SetY2NDC(st0_lower_left_y + st_Height);+  ​st0->​SetY2NDC(st0_lower_left_y + st_Height); 
 +  st0->​SetLineColor(kBlack);
 //h1 の統計boxについて //h1 の統計boxについて
-  TPaveStats *st11 = (TPaveStats*)h1->​FindObject("​stats"​);​ +  TPaveStats *st1 = (TPaveStats*)h1->​FindObject("​stats"​);​ 
-  ​st11->​SetX1NDC(st1_lower_left_x);​ +  ​st1->​SetX1NDC(st1_lower_left_x);​ 
-  ​st11->​SetY1NDC(st1_lower_left_y);​ +  ​st1->​SetY1NDC(st1_lower_left_y);​ 
-  ​st11->​SetX2NDC(st1_lower_left_x + st_Width);​ +  ​st1->​SetX2NDC(st1_lower_left_x + st_Width);​ 
-  ​st11->​SetY2NDC(st1_lower_left_y + st_Height);+  ​st1->​SetY2NDC(st1_lower_left_y + st_Height); 
 +  st1->​SetLineColor(kRed);
 //​反映させる //​反映させる
   c->​Modified();​ //​ ”変更した” というフラグを立ててやる   c->​Modified();​ //​ ”変更した” というフラグを立ててやる
ライン 107: ライン 110:
  
 ---- ----
-Statistic ​box内のtextの編集[[https://​root.cern.ch/​doc/​v608/​classTPaveStats.html|公式のクラスリファレンス]]の”Statistics box editing”のところをみると良い。+==== Statistics ​box内のtextの編集 ​==== 
 + 
 +[[https://​root.cern.ch/​doc/​v608/​classTPaveStats.html|公式のクラスリファレンス]]の” Statistics box editing”のところをみると良い。 
 + 
 +参考コードを以下に。 
 +<code cpp> 
 +                                                                                    
 +void Stat() 
 +
 +  TCanvas *c1 = new TCanvas("​c1","​c1",​800,​600);​ 
 +  c1->​SetGrid(0,​0);​ 
 +  TH1D *hist = new TH1D("​hist","",​60,​-3,​3);​ 
 +  hist->​FillRandom("​gaus",​1000);​ 
 +  hist->​SetLineWidth(3);​ 
 +  hist->​SetLineColor(kBlue);​ 
 +  hist->​Draw();​ 
 + 
 +  ///////////////​ 
 +  ///// fit ///// 
 +  ///////////////​ 
 +  TF1 *gaus1 = new TF1("​gaus1","​gausn",​-3,​3);/////​ [0]*exp(-0.5*( (x-[1])/​[2])**2 )  / (sqrt(2*pi)*[2]) 
 +  gaus1->​SetLineWidth(5);​ 
 +  gaus1->​SetLineColor(kRed);​ 
 +  Double_t FitRangeMin = -2.5; 
 +  Double_t FitRangeMax =  2.5; 
 +  //​hist->​Fit("​gaus1","","",​FitRangeMin,​FitRangeMax);​ 
 +  hist->​Fit("​gaus1","​0","",​FitRangeMin,​FitRangeMax);/////​ 0はfit関数を描かないようにするため 
 + 
 +  gaus1->​SetRange(FitRangeMin,​FitRangeMax);/////​ fit rangeでだけ関数を表示するように 
 +  gaus1->​Draw("​same"​);​ 
 + 
 +  Double_t Gaus1Mean ​ = gaus1->​GetParameter(1);​ 
 +  Double_t Gaus1Sigma = gaus1->​GetParameter(2);​ 
 +  cout << "​Gaus-1 : " << endl; 
 +  cout << " ​   Mean  = " << Gaus1Mean << endl; 
 +  cout << " ​   Sigma = " << Gaus1Sigma << endl; 
 +  cout << "​Chisq/​NDF = " << gaus1->​GetChisquare() <<"/"<<​ gaus1->​GetNDF() << endl; 
 + 
 +  ////////////////​ 
 +  ///// stat ///// 
 +  ////////////////​ 
 +  gPad->​Modified();/////​TPad::​Modified()はいらないけどとりあえず呼んでおけばいいんでなかろうか。 
 +  gPad->​Update();/////​ TPad::​Update() is needed <​---こちらは必要 
 +  TPaveStats *st1 = (TPaveStats*)hist->​FindObject("​stats"​);​ 
 +  //​TPaveStats *st1 = (TPaveStats*)gPad->​GetPrimitive("​stats"​);​ 
 +  st1->​SetName("​mystats"​);/////​ <-- 名前を変更しておく必要あり(そうしないと、hist->​SetStats(0)で消えてしまう) 
 +  st1->​SetOptFit(0);​ 
 +  ///// TPad::​Modified() and TPad::​Update() are needed to reflect st1->​SetOptFit(0) 
 +  gPad->​Modified();​ 
 +  gPad->​Update();​ 
 + 
 +  ///// position and size of the stat. box 
 +  st1->​SetX1NDC(0.90-0.25);​ 
 +  st1->​SetY1NDC(0.90-0.25);​ 
 +  st1->​SetX2NDC(0.90);​ 
 +  st1->​SetY2NDC(0.90);​ 
 +  //// frame of the stat. box 
 +  st1->​SetLineWidth(3);​ 
 +  st1->​SetLineStyle(2);​ 
 +  st1->​SetLineColor(kMagenta);​ 
 + 
 +  ///// modify/​remove lines 
 +  TList *listOfLines = st1->​GetListOfLines();​ 
 +  st1->​GetLineWith("​Entries"​)->​SetTextColor(kBlue);​ 
 +  st1->​GetLineWith("​Mean"​)->​SetTextColor(kBlue);​ 
 +  TText *tconst = st1->​GetLineWith("​RMS"​);​ 
 +  listOfLines->​Remove(tconst);​ 
 + 
 +  ///// Add new lines in the stat box. 
 +  ///// Note that "​="​ is a control character 
 +  TLatex *TextGaus1Mean ​ = new TLatex(0,​0,​Form("​Gaus Mean  = %.2f",​Gaus1Mean));​ 
 +  TextGaus1Mean->​SetTextColor(kRed);​ 
 +  TextGaus1Mean->​SetTextSize(0);/////​ 0にしておくことで、フォントサイズを自動で調整してくれる 
 +  listOfLines->​Add(TextGaus1Mean);​ 
 +  TLatex *TextGaus1Sigma = new TLatex(0,​0,​Form("​Gaus Sigma = %.2f",​Gaus1Sigma));​ 
 +  TextGaus1Sigma->​SetTextColor(kRed);​ 
 +  TextGaus1Sigma->​SetTextSize(0);/////​ 0にしておくことで、フォントサイズを自動で調整してくれる 
 +  listOfLines->​Add(TextGaus1Sigma);​ 
 + 
 +  ///// the following line is needed to avoid that the automatic redrawing of stats 
 +  hist->​SetStats(0);​ 
 + 
 +  gPad->​Modified();/////​ TPad::​Modified() is needed 
 +  gPad->​Update();​ 
 + 
 +
 + 
 + 
 +</​code>​ 
 +---- 
 +ポイントは、 
 +  * 統計ボックス内のtextにアクセスするには、TList* TPaveStats::​GetListOfLines() でtextのリストを取ってきてやる 
 +  * TAttText::​SetTextSize(0)とすることで、フォントサイズを自動調整 
 +  * TPad::​Modified(),​ TPad::​Update()を(こまめに?)呼んでやる 
 +  * TPaveStats::​SetName("​hoge"​)で名前を変えてやる 
 +  * 変更後、TH1::​SetStats(0)を呼んでやる 
 +あたりだろうか。 
 +{{ :​ja:​root:​stat_edit.png?​400 |}} 
 +----
ja/root/stat.1522370494.txt.gz · 最終更新: 2018/03/30 00:41 by kota