next up previous contents
: グラフの作成:重ね書き : 対話モードで ROOT を使う : 統計情報の表示(SET STAT ...)   目次

プロットの情報を得る

ヒストグラムに蓄えられた情報をもとに何か 計算したいというのはしばしば起こる欲求である。 そんな時のための技を紹介する。 その際、まず覚えておかなくてはならないことは ビン番号の数え方の習慣である。


TH1D *h1 = new TH1D("name","title",nbins,xmin,xmax);
として作ったヒストグラムの場合、

  0             : underflow bin
  1 - nbins     : ordinary bins
  nbins+1       : overflow bin
となる。

既に存在しているヒストグラムの ビンの数や、上下限を知るには、


  nxbins = h1->GetXaxis()->GetNbins();
  xmin   = h1->GetXaxis()->GetXmin();
  xmax   = h1->GetXaxis()->GetXmax();
また、ビンの中心値や、ビンのエントリーの数を知るには

  xc     = h1->GetXaxis()->GetBinCenter(i); // center of i-th bin
  z      = h1->GetBinContent(i)             // content of i-th bin
が役に立つ。

2次元プロットの場合、 Y 軸のビンの数や、上下限を知るには、 容易に想像できるように、


  nybins = h2->GetYaxis()->GetNbins();
  ymin   = h2->GetYaxis()->GetXmin();
  ymax   = h2->GetYaxis()->GetXmax();
とすれば良い。 Y 軸であっても ${\tt GetXmin()}$ ${\tt GetXmax()}$ である点に注意。 X 軸については1次元の場合と同じ。

また、ビンの中心値や、ビンのエントリーの数を知るには


  xc     = h2->GetXaxis()->GetBinCenter(i);     // x center of bin (i,j)
  yc     = h2->GetYaxis()->GetBinCenter(j); 	// y center of bin (i,j)
  z      = h2->GetBinContent(h2->GetBin(i,j));  // content  of bin (i,j)
などとする。 ${\tt GetBin(i,j)}$ で2次元のビンを1次元に翻訳してくれる。 逆に ${\tt (x,y)}$ から ${\tt (i,j)}$ を知るには、 ${\tt Blow}$ でやったように、

  Int_t i = h2->GetXaxis()->FindBin(x);
  Int_t j = h2->GetYaxis()->FindBin(y);
を使う。

ビンの積分は


   sum = h1->Integral(i1,i2);
   sum = h2->Integral(i1,i2,j1,j2);
てな感じ。

さて、練習として、あるヒストグラムの平方根をとる ことを考えてみよう。


  void Sqrt(TH1 *h)
  {
     Double_t x, y, dy;
    
     for (int i=0; i<h->GetNbinsX()+1; i++)
     {
        y  = h->GetBinContent(i);
        dy = h->GetBinError(i);
        if (y > 0.) {
            y  = TMath::Sqrt(y);
            dy = 0.5*dy/y;
        } else {
            y = dy = 0.;
        }
        h->SetBinContent(i,y);
        h->SetBinError(i,dy);
     }
  }
のようなマクロを ${\tt sqrt.C}$ とかいう名前で用意しておけば

  .L sqrt.C
  Sqrt(h1);
とすることにより、${\tt h1}$ の中身の平方根がとられる。 このマクロではもとのヒストグラムを破壊してしまう。 それがいやなら、もとのヒストグラムをコピーしてから するか、新しいヒストグラムのポインターを返すように マクロを改良すれば良い。


next up previous contents
: グラフの作成:重ね書き : 対話モードで ROOT を使う : 統計情報の表示(SET STAT ...)   目次
Keisuke Fujii 平成12年12月22日