まずは、ヒストグラムの箱を作成する。 どの型でも扱いは同じなので、 型の1次元ヒストグラムを例にとれば、
TH1F *h1 = new TH1F("name","title",60,-10.,20.);のような感じである。 ここで、 は、 クラスの派生クラスとしての 名前であり、あとで見るように、 ポインターを知らなくてもこの名前をたよりに オブジェクトを探すことができる。 はヒストグラムの題であり、 はビンの数、 と は横軸の 下限と上限である。
の場合と同様、
TH1F h1("name","title",60,-10.,20.);のように作っても良い。 ただし、プロット関連の ROOT のクラスのメンバー関数は その戻り値として新たにできたプロットの ポインターを返すことが多いので、 混乱を避けるため、 著者の場合、自分で作る際もポインターを使うことにしている。
さて、箱ができたのでこのヒストグラムにデータをフィルしてみよう。 のところにデータをフィルするには
Double_t x = 5.;として、
h1->Fill(x);で良いわけだが、 たくさんフィルするのに手ではやってられない。 たくさんデータをフィルしたければ、 「猿にも」にあるようにファイルから読み込んだりすれば 良いわけだが、 ここでは、練習なので、正規分布乱数を使ってフィルしてみる。
gRandom->SetSeed(); Int_t i; for (i=0; i<10000; i++) h1->Fill(gRandom->Gaus(5.,3.));この例では、乱数のシードをセットした後、 中心 . で、幅 の 正規分布乱数 点をフィルしている。 は省略できるようである。 乱数には他にも、 とか とか とか とかいろいろあるので試してみるのも一興である。 今の例では、 ループを1行で書くことができたが、 複数行にわたるコマンドを書きたい場合も生ずる。 そんな場合は "{" をうち複数行モードにはいってから入力する。 複数行モードの終は "}" である。
ヒストグラムは重みつきでフィルすることもできる。
Double_t w = 0.5; h1->Fill(x,w);とかすると、ビンは ではなく だけ増えることになる。 これらのフィルの操作は、後で見るように 2次元ヒストグラムに関しても同様である。
さて、 フィルの結果を描画するには
h1->Draw();と打つ。
味もそっけもないヒストグラムである。