1次元ヒストグラムを作りたい(TH1

1#include <TH1D.h>
2
3// ヒストグラムを作成
4TH1D *h = new TH1D("h1", "Histogram;X axis;Y axis", 200, -2, 2);

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

1from ROOT import TH1D
2
3# ヒストグラムを作成
4h = TH1D("h1", "Histogram;X axis;Y axis", 200, -2, 2)

コンストラクターのシグネチャ

1TH1D(const char* name,
2     const char* title,
3     Int_t nbinsx,
4     Double_t xlow,
5     Double_t xup);

引数の説明

name - ヒストグラムの名前

  • オブジェクト識別用

  • ROOTファイルでの保存

  • 同じディレクトリ内では一意

title - ヒストグラムのタイトル

  • TCanvasに描画するときにキャンバス内に表示

  • "タイトル;X軸;Y軸"のようにセミコロン区切りの形式で軸ラベルも指定可能

nbinsx - X軸のビン数

  • ビン幅は (xup - xlow) / nbinsx で計算

  • nbinsxはヒストグラムのメモリ使用量に影響するため、適切な値を選択

xlow - X軸の最小値

  • xlowより小さい値はUndeflowとしてカウントされる

xup - X軸の最大値

  • xupより大きい値はOverflowとしてカウントされる

データ型を選択したい

TH1には複数の派生クラスがあります。 入力するデータの特性に合わせて選択できます。

クラス名

データ型

データ長

用途

TH1C

char

8bit 整数

非常に小さいカウント値(0-256)

TH1S

short

16bit 整数

小〜中程度のカウント値(0-65536)

TH1I

int

32bit 整数

整数値データ

TH1F

float

32bit 浮動小数点

連続値データ(標準)

TH1D

double

64bit 浮動小数点

高精度が必要な連続値データ

選択のガイドライン:

  • 整数値データ: TH1Iを使用

  • 連続値データ: TH1F(メモリ効率)またはTH1D(高精度)を使用

  • データサイズが大きい場合: TH1Fでメモリ節約

  • 高精度が必要な場合: TH1Dを使用

タイトルしたい(title

1#include <TH1D.h>
2
3// タイトルのみ
4TH1D *h1 = new TH1D(
5    "h1",
6    "Histogram Title",
7    100, 0, 10
8);

軸ラベルしたい(title;x-axis;y-axis

 1#include <TH1D.h>
 2
 3// タイトルと軸ラベル
 4TH1D *h2 = new TH1D(
 5    "h2",
 6    "Title;X axis;Y axis",
 7    100, 0, 10
 8);
 9
10// セミコロン区切り:タイトル;X軸タイトル;Y軸タイトル
11TH1D *h3 = new TH1D(
12    "h3",
13    "Gaussian Distribution;Value;Frequency",
14    100, -5, 5
15);

ヒストグラムを初期化するときに、タイトルと軸ラベルを指定できます。 セミコロン(;)で区切ることで、グラフのタイトル、X軸タイトル、Y軸タイトルを同時に指定できます。

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

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

重みとエラーの違い

項目

重み(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個のデータポイントをヒストグラムに入力し、その統計情報を表示しています。

関連メソッド

参考資料