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には複数の派生クラスがあります。
入力するデータの特性に合わせて選択できます。
クラス名 |
データ型 |
データ長 |
用途 |
|---|---|---|---|
|
|
8bit 整数 |
非常に小さいカウント値(0-256) |
|
|
16bit 整数 |
小〜中程度のカウント値(0-65536) |
|
|
32bit 整数 |
整数値データ |
|
|
32bit 浮動小数点 |
連続値データ(標準) |
|
|
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) |
|---|---|---|
指定方法 |
|
|
役割 |
データポイントの統計的重要度 |
各ビンの統計誤差(不確かさ) |
フィッティング |
重みが統計的重要度として考慮される |
エラーは重みとして使用される場合がある |
自動計算 |
指定しない場合は重み=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 - 関数をフィットする