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でビンの数を指定し、xlowとxupでX軸の範囲を指定します。
ヒストグラムにデータを入力するには、Fillメソッドを使用します。
Fillしたデータの値がビンの範囲内にある場合は、そのビンのカウントが増加します。
ビンの範囲外のデータポイントは、
Underflow(xlowより小さい)または
Overflow(xupより大きい)としてカウントされます。
データを解析する際に、データの分布を視覚化して分析するために使用します。 データ型に応じた派生クラスを選択することで、メモリ使用量と精度のバランスを最適化できます。
保存したい(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) |
|---|---|---|
指定方法 |
|
|
役割 |
データポイントの統計的重要度 |
各ビンの統計誤差(不確かさ) |
フィッティング |
重みが統計的重要度として考慮される |
エラーは重みとして使用される場合がある |
自動計算 |
指定しない場合は重み=1 |
|
実践例:ガウス分布のデータを解析したい
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個のデータポイントをヒストグラムに入力し、その統計情報を表示しています。
関連メソッド
TH1::GetEntries - エントリー数を取得
TH1::GetBinContent - ビンの内容を取得
TH1::GetBinError - ビンの誤差を取得
TH1::Integral - ヒストグラムの積分値を計算
TH1::Fit - 関数をフィットする