ノーマライズしたい(TH1::Scale)
1#include <TH1D.h>
2
3TH1D *h = new TH1D("h", "Data", 100, 0, 10);
4// ...データを入力...
5
6Double_t integral = h->Integral();
7h->Scale(1.0 / integral); // 積分値が1になるように正規化
TH1::Scaleメソッドで、ヒストグラムをスケーリング(拡大・縮小)できます。
TH1::Integralメソッドと組み合わせることで、ヒストグラムを正規化できます。
1from ROOT import TH1D
2
3h = TH1D("h", "Data", 100, 0, 10)
4# ...データを入力...
5
6integral = h.Integral()
7h.Scale(1.0 / integral) # 積分値が1になるように正規化
メソッドのシグネチャ
1void Scale(Double_t c1 = 1.0, Option_t* option = "");
引数と戻り値
引数:
c1 - スケーリング係数(デフォルト値は1.0)
option - オプション文字列(通常は空)
戻り値:
なし(
void)
ヒストグラム全体をスケーリングしたい(Scale)
1#include <TH1D.h>
2
3TH1D *h = new TH1D("h", "Data", 100, 0, 10);
4
5// データを入力
6h->Fill(2.5);
7h->Fill(5.0);
8h->Fill(7.5);
9
10// すべてのビンを2倍に拡大
11h->Scale(2.0);
12
13// または半分に縮小
14h->Scale(0.5);
15
16printf("After scaling, integral: %.1f\n", h->Integral());
Scale(factor)メソッドで、ヒストグラムのすべてのビン内容に係数を乗算できます。
これにより、ヒストグラムの全体的な大きさを変更できます。
積分値が1になるように正規化したい(Integral + Scale)
1#include <TH1D.h>
2
3TH1D *h = new TH1D("h", "Distribution", 100, 0, 10);
4
5// データを入力
6for (Int_t i = 0; i < 1000; i++) {
7 h->Fill(gRandom->Gaus(5, 1));
8}
9
10// 積分値を計算
11Double_t integral = h->Integral();
12
13// 積分値が1になるように正規化
14h->Scale(1.0 / integral);
15
16printf("After normalization, integral: %.6f\n", h->Integral());
Integral()とScale()を組み合わせることで、ヒストグラムを正規化できます。
正規化されたヒストグラムは、確率分布として解釈できます。
複数のヒストグラムを同じスケールで比較したい(Scale)
1#include <TH1D.h>
2
3TH1D *h1 = new TH1D("h1", "Sample 1", 100, 0, 10);
4TH1D *h2 = new TH1D("h2", "Sample 2", 100, 0, 10);
5
6// データを入力
7for (Int_t i = 0; i < 1000; i++) {
8 h1->Fill(gRandom->Gaus(5, 1));
9 h2->Fill(gRandom->Gaus(6, 1.5));
10}
11
12// 両方のヒストグラムを正規化
13Double_t integral1 = h1->Integral();
14Double_t integral2 = h2->Integral();
15
16h1->Scale(1.0 / integral1);
17h2->Scale(1.0 / integral2);
18
19printf("h1 integral: %.6f, h2 integral: %.6f\n", h1->Integral(), h2->Integral());
複数のヒストグラムを比較する場合、各ヒストグラムを個別に正規化することで、 イベント数の違いに左右されない公平な比較ができます。
関連メソッド
TH1::Integral- ヒストグラムの積分値を計算