5-2c ROOTによるシミュレーション出力の処理例
- Textからマクロを使ってROOTに読み込む方法
- 直接Geant4からROOTのHistgramを出力する方法
- 参考資料
1. Textからマクロを使ってROOTに読み込む方法
まず、最も簡単な使用例から。まずGeant4からASCIIファイルでデータを書き出し、それをROOTのマクロで読む。この場合、必要なのはROOTの知識だけである。T00の出力結果をもとに、簡単にマクロの内容を解説する。(データ)(マクロ)
■ データの書式

■ データ読み込み部

- インクルードファイルは、基本的なものはROOTがロードされた時に読み込まれているので、自分でインクルードする必要はない。
- データファイルに文字列が含まれているため、まずデータをdummyバッファに読み、strncmp関数を使って文字列判別を行う。strncmpは、第1引数と第2引数に格納された文字列を、先頭から第3引数に格納された字数分だけ比較し、同じなら0を返す。
- maxeventで定義した値よりも大きなイベント数を解析させようとすると異常終了するので注意。
■ ヒストグラム作成部

- まず、ヒストグラムを描くためのCanvasを定義。引数の詳細は参考資料を参照。
- DivideはCanvasを分割するためのTCanvasのメソッド。この場合横に2つに分割。
- TH1DはDoubleの1次元ヒストグラム。2次元を描かせたければTH2Dとなる。
- ヒストグラムを分割されたCanvasに描く時には、Canvasの描きたい場所に移動する必要がある。移動にはTCanvasクラスのcdメソッドを使う。引数はCanvasのIDだが、このIDは分割前の大Canvasに0が割り当てられているため、一番左上のCanvasのIDは1になる。
[top]
2. Geant4から直接ROOTのHistgramを出力する方法
Geant4から直接ROOTのヒストグラムを出力したい場合には、基本的には以下の手順を踏む。
- UserRunActionクラスのBeginOfRunActionでTFileオブジェクトをnewし、ファイルオープンする
- 同時にデータをfillするためのヒストグラムを作っておく
- UserEventActionクラスのEndOfEventActionでヒストグラムにデータをFillする
- UserRunActionクラスのEndOfRunActionでTFileにヒストグラムを書き込み、ファイルを閉じる
これらを実際に実装するためには、以下の準備が必要である。
- Rootをインストールしておく(大前提、でないとコンパイルできない)
- GNUmakefileのbinmake.gmkをインクルードするより前の行に以下の行を加える
- CPPFLAGS += $(shell $(ROOTSYS)/bin/root-config --cflags)
- ROOTLIBS = $(shell $(ROOTSYS)/bin/root-config --glibs)
- EXTRALIBS += $(ROOTLIBS)
- ROOTSYS環境変数を定義する
- ROOTSYS = <somewhere> // <somewhere>はrootをインストールしたディレクトリ
- MacOSXを使っているユーザーは、$G4INSTALL/config/sys/Darwin-g++.gmkの最終行のendifの直前に以下の行を加える (スペースが見にくいので、コピー&ペーストを推奨)
- LDFLAGS += -O -Xlinker -bind_at_load -flat_namespace
T00を改造して、T00.rootを作成するプログラム(T00-ROOTout.tgz)を作成したので、詳細はソースファイルを参照。なお、変更前のファイルは全て.ORIGをつけて保存してある。
作成したT00.rootを見るには、
root -l T00.root
と打つとそのうちプロンプトが出てくるので、すかさず
TBrowser b;
と打つとあとはGUIで解析できる。詳細は参考資料を参照のこと。
3. 参考資料
[top]
[ top | 2-2a 物質定義 | 2-2b
測定器記述 | 5-2a 測定器応答実装例 | 5-2b
アプリケーション作成 | 5-2c
ROOTによる結果処理例]
このページに関するご質問、ご叱責はこちらへ。