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/08/22 17:40]
kota [2つのヒストグラムの統計情報を並べて書く]
ja:root:stat [2019/04/18 16:23] (現在)
kota [Statistics box内のtextの編集]
ライン 71: ライン 71:
   h1->​SetLineColor(kRed);​   h1->​SetLineColor(kRed);​
   h1->​Draw("​sames"​); ​ // "​same"​ だとh0の統計boxが消えてしまう   h1->​Draw("​sames"​); ​ // "​same"​ だとh0の統計boxが消えてしまう
- 
   gPad->​Update();​   gPad->​Update();​
   ​   ​
ライン 111: ライン 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.1534959610.txt.gz · 最終更新: 2018/08/22 17:40 by kota