ノーマライズしたい(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());

複数のヒストグラムを比較する場合、各ヒストグラムを個別に正規化することで、 イベント数の違いに左右されない公平な比較ができます。

関連メソッド