ROOT演習2022

ROOTとは

ROOTというのは素粒子、原子核、宇宙物理等の分野でよく使われるデータ解析と描画のためのソフトウェアである。C++言語で書かれていて、提供されるライブラリを自分で書いたC++プログラムの一部として利用することができる。また、コマンドラインでライブラリに実装された機能を直接利用することもできる。データをどのように描画できるかはギャラリで見るとよい。

ヒストグラムとグラフ

大規模データを扱う(TTree)

素粒子の実験では、粒子散乱のデータ(散乱事象)を多数記録して、それらを基にいろいろな分布を作って、理論的に予言される分布と比較することが多い。散乱事象というミクロなスケールで起こっている現象を一つ一つ積み重ねて、マクロな観測量に対応させる訳である。ROOTでは、このような構造のデータを扱うのに便利なTTreeという機能が提供されている。データ全体の中に多数の事象が含まれていて、それぞれの事象には散乱前後の粒子の情報が複数あって、各粒子の情報というのは、エネルギー・運動量・スピン・電荷等から構成されている。このように大きなデータが枝分かれして小さなデータに分解されるようなものを計算機科学の用語で木構造という。TTreeではこのような木構造になったデータを効率的に扱えるようになっている。

演習

演習1: C++マクロを実行する

abc.Cという名前のテキストファイルを作成して、以下の内容を記述する。(ファイル名は何でもよいが、ファイルの中の関数名と同じにする必要がある。)

#include <iostream>

int abc() {
  std::cout << "Executing the function abc()" << std::endl;
  return 0;
}

ターミナルでROOTを起動して、ROOTのプロンプトが表示されたら.x abc.Cと入力する。

% root
root [0] .x abc.C
root [1] std::cout << "Print abc from interactive ROOT" << std::endl;

これで、ファイルに記述されたabc()というC++関数が実行されたことが分かる。このファイルのように、ROOTから直接呼び出せるC++コードを記述したファイルのことをマクロと呼ぶ。 ROOTを対話的に起動したときには、上の例のようにファイルに記述したC++コード(マクロ)の関数を呼び出して実行することもできるし、C++のコードを直接入力・実行することもできる。 指定したマクロを呼び出すには、上の例のように行の先頭に.xのようなROOT独自のコマンドを指定して実行する。ROOT独自のコマンドとして以下のものはよく使用する。

コマンド

機能

.q

対話的なROOTセッションを終了する

.x <filename>

指定したファイル名のマクロを実行する

.L <filename>

指定したファイル名のマクロを読み込む(ROOTの機能の一部として組み込む)

.ls

現在のROOTフォルダの内容を表示する

.?

ヘルプ

マクロを簡単にC++の関数を実行する仕組みとして利用することもできる。main関数を書いたり、コンパイルしたりする必要がなく、ROOTのインタプリタがコードを1行ずつ読み込んで解釈して順番に実行してくれる。

演習:自分で好きな計算をするマクロを書いて実行する。

演習2: 有限個のデータを生成してヒストグラムを作成する

ヒストグラムとは、ある範囲を有限個の区間に分割して、それぞれの区間に含まれるものの数を表すものである。ヒストグラムの各区間のことをビンとも呼ぶ。

予め決めた範囲より下(上)に含まれるものをアンダーフロー(オーバーフロー)という。

1~6の整数値を取る一様乱数を10000回生成して、それぞれの数が出る回数の分布を作る。(ファイル名:makeHist.C)

#include "TH1.h"
#include "TRandom3.h"

void makeHist() {
  const int nbins = 6;
  unsigned int seed = 12345678;
  TH1* hist = new TH1F("hist", "", nbins, 0.5, 6.5);
  TRandom3 random(seed);
  for (int i=0; i<nbins; ++i) {
    int number = static_cast<int>(random.Uniform(0.0, 6.0));
    hist->Fill(number);
  }
  hist->SetMinimum(0.0);
  hist->Draw();
}

ROOTを起動して、以下のコマンドを実行する。

root [0] .x makeHist.C

演習3: ヒストグラムを関数でフィットする

演習3-1:

演習3-2:

演習4: 2次元データを散布図で表示する

TGraph, TGraphErrors, TGraphAsymmErrorsを使う。

演習5: 木構造データを生成してTTreeを使う

既にあるTTreeを使ってみる。演習6~10で使うデータ。

演習6: 直線状を運動する多数の粒子の振る舞い(1)

演習7: 直線状を運動する多数の粒子の振る舞い(2)

剛体球の場合

演習8: 直線状を運動する多数の粒子の振る舞い(3)

粒子間にポテンシャルが働く場合

演習9: 直線状を運動する多数の粒子の振る舞い(4)

RootTutorial2022 (最終更新日時 2022-06-17 04:39:52 更新者 TakanoriKono)