Histogram

Plot

適当に作ったl=2のl(l+1)C_l/(2\pi)のヒストグラム:

TH1S h1("name","title",50,0,2000) ;
#include <fstream>
ifstream data("hist.dat") ;
double x ;
while( data >> x) h1.Fill(x) ;
data.close() ;
h1.Draw();

2.1.png


h1.Draw("E") ;

2.2a.png


h1.Draw("L") ;

2.2b.png


h1.Draw("P") ;

2.2c.png

フィッティング

ガウシアンフィッティング:

h1.Fit("gaus") ;

2.3a.png

パラメータ表示:

gStyle->SetOptFit() ;

2.3b.png

標準では、 "gaus"以外にも、"expoo" (exponential fitting)、 "pol1","pol2",.....,"poln"(1,2,.....,n次の冪関数でフィッティング)、 "landau" (Landau関数でフィッティング)を行なうことができる。

2.3c.png


任意の関数でフィッティングする場合、まずは一次元関数TF1を作成

f_1 = p_0 {\rm GammaDist}(x,\,\gamma=7/2,\,\mu=0,\,\beta=p_1)\propto x^{(2l+1)/2}\exp[-(2l+1)x/(2C_l)]
TF1 f1("f1","[0]*TMath::GammaDist(x, 7/2,0,[1]");

初期値を設定

f1.SetParameters(10,500) ;

フィッティング実行

h1.Fit("f1") ;

chi0.png

(右側のテールが足を引っ張って、ピークの位置が右側に移動してしまっているか。)

初期値がおかしいと変な結果になるので注意。

Graph

plot

WMAP five-yearの結果をプロットしてみる:

#include <fstream>
 double x[43],y[43], tmp ;
 int index=0 ;
 ifstream data("wmap.dat") ;
 while( !data.eof() ) { data >> x[index] >> tmp >> tmp >> y[index] >> tmp >> tmp >> tmp ; index++;}
 data.close() ;
 graph = new TGraph(index,x,y) ;
 graph->Draw("AP");

3p.png


滑らかな曲線で結ぶ:

 graph->Draw("APC");

3c.png


  • A: 軸をグラフの周りに描く。
  • P: データを指定したマーカーでプロットする。
  • L: 折れ線グラフで描く。
  • C: 滑らかな曲線で描く。

with error bar

#include <fstream>
 double x[43],y[43], x_error[43], x_error_l[43], x_error_r[43] ;
 double tmp ;
 int index=0 ;
 ifstream data("wmap.dat") ;
 while( !data.eof() ) { data >> x[index] >> x_error_l[index] >> x_error_r[index] >> y[index] >> y_error[index] >> tmp >> tmp ; x_error[index]= x_error_r[index]-x_error_l[index];index++;}
 data.close() ;
 graph = new TGraphErrors(index,x,y,x_error,y_error) ;
 graph->Draw("AP");

3error.png


ヒストグラムのとき同様に、フィッティングできる:

gStyle->SetOptFit()
graph->Fit("pol9") ;

3error_w_fit.png

Function

TF1, TF2

一変数関数、二変数関数。gnuplotのplotsplotの関係。 関数の入力はC言語の文法で入力。ただしx**n= x^nのような拡張がなされている。

TF1 f1( "f1", "x*sin(x)*exp(-0.1*x)", -10, 10) ;
f1.Draw() ;

4.1.png


単純なcontour plot以外にもsurface plot、様々なcontour plotlego plotが利用できる。

TF2 f2( "f2", "abs(sin(x)/x)*(cos(y)*y)", -6 ,6, -6, 6) ;
f2.Draw() ;

4.2n.png


f2.Draw("surf");

4.2s.png


f2.Draw("cont1");

4.2c1.png


f2.Draw("cont2");

4.2c2.png


f2.Draw("cont3");

4.2c3.png


f2.Draw("cont4");

4.2c4.png


f2.Draw("lego");

4.2l.png

parametric function

一変数関数、二変数関数共にパラメータを含む関数を定義することができる。 普通はfittingの際に使われる。パラメータ付の関数は、パラメータの箇所を[0],[1],・・・とすれば良いだけ。 パラメータの初期値は全て零なので、適当に初期化する:

TF1 f3( "f3", "[0]+[1]*exp(x)", -5, 5) ;
f3.Draw() ;

4.3a.png

f3.SetParameters( 1, 2) ;
f3.Draw() ;

4.3b.png

このパラメータは関数のfittingの際に初期値として使われる。

Ntuple

実際の解析に於いてヒストグラムを作成するということは、 たくさんのデータを様々な角度から見ることによって、 その中に含まれる情報を見つけ出すことである。

この作業をサポートする仕組みがNtupleである。 Ntupleとは、double, triple, quadruple,・・・のn番目を意味し、えぬてゅーぷると読む。 Ntupleを使うことで、データの集合から色々なヒストグラムを作成することができる。

データの読み込み

Ntupleの作成:

ntuple = new TNtuple( "name", "title", "Cmb:A:Index") ;

データの読み込み fileCmbAIndex.dat

double Cmb, A, Index, tmp ;
#include <fstream>
ifstream data("CmbAIndex.dat") ;
while( !data.eof() ){ data >> Cmb >> tmp >> A >> tmp >> Index >> tmp ; ntuple->Fill( Cmb, A, Index); }
data.close() ;
ntuple->Print() ;
******************************************************************************
*Tree    :name      : title                                                  *
*Entries :     4000 : Total =           50113 bytes  File  Size =          0 *
*        :          : Tree compression factor =   1.00                       *
******************************************************************************
*Br    0 :Cmb       :                                                        *
*Entries :     4000 : Total  Size=      16620 bytes  One basket in memory    *
*Baskets :        0 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    1 :A         :                                                        *
*Entries :     4000 : Total  Size=      16608 bytes  One basket in memory    *
*Baskets :        0 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*
*Br    2 :Index     :                                                        *
*Entries :     4000 : Total  Size=      16632 bytes  One basket in memory    *
*Baskets :        0 : Basket Size=      32000 bytes  Compression=   1.00     *
*............................................................................*

1-D histogram

ntuple->Draw( "変数リスト", "条件", "表示オプション") ;

でヒストグラムを描く。変数リストはCmbなら1-D Histogram、 Cmb:Aなら2-D Histogram、 Cmb:A:Indexなら3-D Histogramになる。条件、表示オプションは省略可。


ntuple->Draw( "Cmb" ) ;

Cmb.png


ntuple->Draw( "A" ) ;

A.png


ntuple->Draw( "Index" ) ;

Index.png


変数リストに演算を行なうことが可能:

ntuple->Draw( "sqrt(A)") ;

sqrtA.png

  • "A"
  • "sqrt(A)"
  • "Cmb+A/Index"
  • ・・・

条件設定して特定のデータのみからヒストグラムを作成:

ntuple->Draw( "Cmb", "Cmb>0", "") ;

Cmb0.png

  • "Cmb>0"
  • "sqrt(Cmb+A)>10"
  • "Cmb>0 && Index < -3"

2-D histogram

デフォルトではプロットはscatter-plotになっている:

ntuple->Draw("Cmb:A") ;

CmbA.png


ntple->Draw("A:Index") ;

AIndex.png


ntple->Draw("Index:Cmb") ;

IndexCmb.png

3-D histogram

2-D histogram同様に、デフォルトではscatter-plotで描かれる:

ntuple->Draw("Cmb:A:Index") ;

CmbAIndex.png

作成したhistogramの扱い

作成したヒストグラムはデフォルトではhtempというテンポラリ変数に作成される。 これを変更して独自の変数に作成することが可能。作成される変数を変更するには、 変数リストの中に>>を追加して

ntuple->Draw("Cmb >> hist") ;

のようにすれば良い。以後はhistを使って、

hist->Draw() ;
hist->Fit("gaus") ;

のように操作することが可能である。

尚、既存のヒストグラムに追加する場合は>>+を使う。

ntuple->Draw("A>>hist") ;
ntuple->Draw("A*2>>+hist") ;
hist->Draw() ;

AA.png

条件の定義

同様な条件を与えて複数のヒストグラムを作成する際に、 いちいち同じ条件を打ち込むのは賢くなし、めんどくさい。 そこでTCutを使って条件を定義する:

TCut positiveCut = "x>0 && y>0 && z>0" ;
ntuple->Draw( "x:y", positiveCut) ;

複数の条件を組み合わせる場合は&&で繋げればよい:

TCut energyCut = "energy>0" ;
ntuple->Draw("x:y*2", positiveCut && energyCut) ;

Graphics

様々な図形や文字を描く方法。

CUIを使った方法

TF1 f1("title","x",-5,5) ;
f1.Draw() ;

graphics.png


Line (from 1,2 to 3,4) :

TLine l1(1,2,3,4) ;
l1.Draw() ;

Box:

TBox b1(-1,-2,-3,-4);
b1.Draw();

Arrow:

TArrow a1(1,-2,3,-4) ;
a1.Draw() ;
a1.SetOption("<>") ;
a1.Draw() ;
TArrow a2(1,-1,3,-3,0.05,"<>") ;
a2.Draw() ;

Arc (center 0,0 radius 1) :

TArc ar1(0,0,1);
ar1.Draw() ;

Maker :

TMarker m1(3,2,20) ;
m1.Draw() ;
TMarker m2(3,1,10) ;
m2.Draw() ;

marker.png


Text :

TText t1(2,0,"Text here") ;
t1.Draw() ;

GUIを使った方法

Ver. 5.21使用

canvasの上部にあるメニューから、「view」⇒「Editor」及び「view」⇒「Toolbar」を選び有効にする。 メニューの下部にToolbar、canvasの左側にEditorが表示される。 これらを適当に選択して、お絵かきすればよい。

graphic_editor.png

Tips

Tips

画面分割

一画面に複数の図を書きたい場合は、 CanvasPadに分割する必要がある。 始めにCanvasを作成して、それから分割する:

TCanvas c1("Name","Title") ;
c1.Divide(2,2);

分割の際の個数はDivide(nx,ny);である。

divide2.2.png


画面上にx軸方向に2個、 y軸方向に2個のグラフを描く。 実際の図を書く前にそれぞれのPadに移動してから図を描く。 Padの移動にはcd(n); (nはPadの番号、1から始まる)で行なう:

TF1 f1( "f1", "sin(x)", -2,2) ;
TF1 f2( "f2", "cos(x)", -2,2) ;
c1.cd(1) ;
f1.Draw() ;
c1.cd(4) ;
f2.Draw() ;

cd.png


Padを更に分割することができる:

c1.cd(3) ;
gPad->Divide(3,2);

移動はc1.cd(3).cd(n);で可能:

TF1 f3("f3","x",-2,2) ;
c1.cd(3).cd(4) ;
f3.Draw() ;

gPadDivide.png

Log scale

c1.cd(2).SetLogx() ;
c1.cd(2).SetLogy() ;

元に戻すには引数に零を指定すればよい。

log.png

Grid

c1.cd(1).SetGridx() ;
c1.cd(1).SetGridy() ;

元に戻すには引数に零を指定すればよい。

grid.png

Print

ROOTで書いた絵を印刷するには、TCanvasに対してPrint("filename.eps");を実行する:

c1.Print("filename.eps") ;

これで、「filename.eps」というepsファイルが出力される。出力できる形式には

  • eps
  • ps
  • pdf
  • png
  • jpg
  • gif
  • ・・・ 等がある。

出力例:

  • jpg print.jpg
  • gif print.gif

添付ファイル: filegrid.png 496件 [詳細] filelog.png 496件 [詳細] fileprint.eps 580件 [詳細] fileprint.gif 491件 [詳細] fileprint.jpg 619件 [詳細] fileprint.pdf 753件 [詳細] fileprint.png 372件 [詳細] fileprint.ps 661件 [詳細] filecd.png 521件 [詳細] filegPadDivide.png 543件 [詳細] filedivide2.2.png 578件 [詳細] filegraphic_editor.png 586件 [詳細] filemarker.png 499件 [詳細] filegraphics.png 522件 [詳細] fileAA.png 417件 [詳細] fileCmbAIndex.png 547件 [詳細] fileIndexCmb.png 593件 [詳細] fileAIndex.png 508件 [詳細] fileCmbA.png 624件 [詳細] fileCmb0.png 632件 [詳細] filesqrtA.png 632件 [詳細] fileIndex.png 519件 [詳細] fileCmb.png 571件 [詳細] fileA.png 662件 [詳細] fileCmbAIndex.dat 676件 [詳細] file4.3b.png 686件 [詳細] file4.3a.png 527件 [詳細] file4.2s.png 667件 [詳細] file4.2n.png 600件 [詳細] file4.2l.png 584件 [詳細] file4.2c4.png 425件 [詳細] file4.2c3.png 559件 [詳細] file4.2c2.png 637件 [詳細] file4.2c1.png 589件 [詳細] file4.1.png 590件 [詳細] file3p.png 663件 [詳細] file3c.png 456件 [詳細] filewmap.dat 705件 [詳細] file3error.png 572件 [詳細] file3error_w_fit.png 485件 [詳細] filemax_ell_totCls.dat 268件 [詳細] filechi0.png 543件 [詳細] fileHist.dat 240件 [詳細] file2.4a.png 195件 [詳細] file2.4.png 187件 [詳細] file2.3c.png 463件 [詳細] file2.3b.png 546件 [詳細] file2.3a.png 551件 [詳細] file2.2c.png 389件 [詳細] file2.2b.png 393件 [詳細] file2.2a.png 531件 [詳細] file2.1.png 586件 [詳細] filehist.dat 702件 [詳細] filebenchmark.png 439件 [詳細] filestress.png 458件 [詳細] fileroot_splash.png 423件 [詳細]