1次元ヒストグラムしたい(TH1 / TH1D / TH1F

 1#include <TH1D.h>
 2
 3// ヒストグラムを作成
 4TH1D *h = new TH1D(
 5    "h1",    // ヒストグラムの名前
 6    "Histogram;X axis;Y axis",    // タイトルと軸ラベル(セミコロン区切り)
 7    200,  // nbinsx - ビン数
 8    -2,   // xlow - X軸の最小値
 9    2     // xup - X軸の最大値
10);
11
12// ランダムなデータをヒストグラムに入力
13for (int i = 0; i < 100000; i++) {
14    // 平均0、標準偏差1のガウス分布に従うデータを入力
15    h->Fill(gRandom->Gaus(0, 1));
16}
17
18// 統計情報を表示
19std::cout << "Mean: " << h->GetMean() << std::endl;
20std::cout << "RMS: " << h->GetRMS() << std::endl;
21std::cout << "Entries: " << h->GetEntries() << std::endl;
22
23// ヒストグラムを描画
24h->SetStats();  // 統計ボックスを表示
25h->Draw();

TH1はROOTで1次元ヒストグラムを扱う基底クラスです。 分布の精度に合わせて TH1D(倍精度浮動小数点)や TH1F(単精度浮動小数点)などの派生クラスを使用します。

nameはヒストグラムの識別子です。 プログラム内でヒストグラムを参照する際に使用します。 他のオブジェクトと重複しないように、ユニークな名前を付けることが推奨されます。

titleでグラフのタイトルを設定できます。 セミコロン(;)で区切ることでX軸とY軸のタイトルを同時に設定できます。

nbinsxでビンの数を指定し、xlowxupでX軸の範囲を指定します。 ヒストグラムにデータを入力するには、Fillメソッドを使用します。 Fillしたデータの値がビンの範囲内にある場合は、そのビンのカウントが増加します。 ビンの範囲外のデータポイントは、 Underflowxlowより小さい)または Overflowxupより大きい)としてカウントされます。

データを解析する際に、データの分布を視覚化して分析するために使用します。 データ型に応じた派生クラスを選択することで、メモリ使用量と精度のバランスを最適化できます。

保存したい(TH1::Write

1#include <TFile.h>
2
3// ヒストグラムを作成
4// ...(前のコードと同様)
5
6// ヒストグラムをファイルに保存
7TFile *file = new TFile("histogram.root", "RECREATE");
8h->Write();  // ヒストグラムをファイルに書き込む
9file->Close();  // ファイルを閉じる

ROOTのヒストグラムはTFileに保存します。 TH1->Writeメソッドでヒストグラムを書き込みます。 複数のヒストグラムを作成した場合は、ヒストグラムごとにWriteすることで、同じファイルに保存できます。

エラー(統計誤差)を管理したい

ヒストグラムの各ビンには、統計誤差(エラー)が関連付けられています。通常、エラーは自動的に計算されますが、明示的に設定することもできます。

重みとエラーの違い

項目

重み(Weight)

エラー(Error)

指定方法

Fillの第2引数

SetBinErrorで個別設定、またはSumw2で追跡

役割

データポイントの統計的重要度

各ビンの統計誤差(不確かさ)

フィッティング

重みが統計的重要度として考慮される

エラーは重みとして使用される場合がある

自動計算

指定しない場合は重み=1

Sumw2()後は重みから自動計算、通常は√N

実践例:ガウス分布のデータを解析したい

 1#include <TH1D.h>
 2#include <TRandom.h>
 3#include <cstdio>
 4
 5// ヒストグラムを作成
 6TH1D *h = new TH1D("gauss",
 7                   "Gaussian Distribution;Value;Frequency",
 8                   200, -5, 5);
 9
10// ガウス分布に従うデータを生成
11for (Int_t i = 0; i < 100000; i++) {
12    h->Fill(gRandom->Gaus(0, 1));
13}
14
15// 統計情報を表示
16printf("Mean: %f\n", h->GetMean());
17printf("RMS: %f\n", h->GetRMS());
18printf("Entries: %lld\n", h->GetEntries());
19
20// 統計ボックスを表示して描画
21h->SetStats();
22h->Draw();

このサンプルでは、平均0、標準偏差1のガウス分布に従う100000個のデータポイントをヒストグラムに入力し、その統計情報を表示しています。

関連メソッド

リファレンス