Geant4 Tutorial of install and set

Geant4 Tutorial of install and set
金賀 史彦
2006 年 3 月 24 日
目次
Geant4 のインストール
1
1.1
Geant4 に必要なソフトウェア
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.2
CLHEP のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
1.3
DAWN のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
1.4
Geant4 本体のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
Geant4 の使用
2
10
2.1
環境変数の設定
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.2
Geant4 の example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.1 example のコンパイル
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.2.2 example の実行 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.2.3 exampleN01 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.4 exampleN02 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.5 exampleN03 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.6 exampleN04 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.7 exampleN05 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.2.8 exampleN06 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.2.9 exampleN07 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3
自分で一からコードを書く場合の環境 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.3.1 ディレクトリを整える。
15
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.3.2 ヘッダファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.3.3 ソース . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
15
2.3.4 main を含むファイル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.3.5 GNUmakefile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.3.6 gmake そしてデバック . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
2.4
3
3
実際に使うには
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
解析
18
19
1
3.1
出力の扱い . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.2
ROOT を使用する . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
Geant4 を GUI で使う
23
4.1
Java2 標準環境のインストール . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4.2
環境変数の設定
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
4.3
実際に起動してみる . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
おわりに
24
4
5
2
1 Geant4 のインストール
この章では Geant4 を使う環境が整っていない状態からの設定を想定している。もし Geant4 がインス
トールされている環境ならば第 2 章 (10 ペー ジ) からを参考にして欲しい。今回説明する環境は OS が
RedHat Enterprise Linux 3 WS で Geant4 に関係するソフトは自分でインストールしていないことを前提と
している。また run level は 5 で GUI 環境でターミナルを出して作業している。なおログは取っていないの
で、これからインストールする場合はログを取って欲しい*1 。
1.1 Geant4 に必要なソフトウェア
最低限
• C++ コンパイラ
• CLHEP ライブラリ
• STL
• GNU Make
• Geant4 ツールキッドソース
が必要である。他にビジュアライズするために
• X Windows
• OpenGL または Mesa
• DAWN
• Open Inventor
• Momo
• VRML ブラウザ
などを用意する。今回は Open Inventor と VRML ブラウザは使用していない。これらの内、デフォルトで用
意されていないのは CLHEP ライブラリ、Geant4 ツールキッドソース、DAWN である。
1.2 CLHEP のインストール
ホームページ [1] から使っているディストリビューションに合わせたバイナリかソースをダウンロードす
る。ここでは/usr/ディレクトリ以下にダウンロードした。そして解凍、展開し、そのトップディレクトリで
configure と make を行えばよい。以下に例を示すが、この通りやるよりは [1] のガイドなどを参考にしたほ
うがよいと思う。
CLHEP のインストール----------------------------------------------------ディレクトリ/usr/に clhep-1.8.2.0.tgz をダウンロードしたとする。
*1
ログはターミナルに出力されるメッセージやエラーを取っておくことも必要なので、そのために tee コマンドを使用する。具体的
には make 2>&1 | tee logfilename とすれば logfilename にメッセージがエラーも全て記憶され、ターミナルにも表示され
る
3
[kanega@phnp173 kanega]$cd /usr
[kanega@phnp173 usr]$tar xvfz clhep-1.8.2.0.taz
[kanega@phnp173 usr]$cd CLHEP
[kanega@phnp173 usr]$su
//root になる
Password:xxxxxxxxxxxx
[root@phnp173 CLHEP]#./configure
[root@phnp173 CLHEP]#make
[root@phnp173 CLHEP]#make install
[root@phnp173 CLHEP]#exit
-----------------------------------------------------------------------ここで/usr/local/lib に libCLHEP-g++.1.8.2.0.a というファイルが生成されるが、Geant4 コンパイル時こ
のファイルと違う名前のファイルを探すのでこのファイルをリンクしておく。
libCLHEP-g++.1.8.2.0.a を libCLHEP.a にリンク-----------------------------[root@phnp173 usr]#cd /usr/local/lib
[root@phnp173 lib]#ln -s libCLHEP-g++.1.8.2.0.a libCLHEP.a
//libCLHEP.a というファイルに libCLHEP-g++.1.8.2.0.a というファイルにシンボ
リックリンクを行っている
-----------------------------------------------------------------------これで完了である。しかし、ここで使われている CLHEP ライブラリよりも最新のものが使え、このような
リンクを作る作業は必要ないかも知れないのでホームページを参考にして欲しい。
1.3 DAWN のインストール
これもホームページ [3] から/usr 以下にダウンロードし、解凍、展開する。そして一応 make clean を行い、
configure を行い、その後 make、make install を行う。
DAWN のインストール-------------------------------------------------------ディレクトリ/usr/に dawn_3_86a.taz をダウンロード
[kanega@phnp173 kanega]$cd /usr/
[kanega@phnp173 usr]$tar xvfz dawn_3_86a.taz
4
[kanega@phnp173 usr]$su
Passward:xxxxxxxxx
[root@phnp173 usr]#cd dawn_3_86.a
[root@phnp173 dawn_3_8_6.a]#make clean
[root@phnp173 dawn_3_8_6.a]#make guiclean
[root@phnp173 dawn_3_8_6.a]#./configure
:色々質問されるので各種設定をタイプする。
[root@phnp173 dawn_3_8_6.a]#make
[root@phnp173 dawn_3_8_6.a]#make install
[root@phnp173 dawn_3_8_6.a]#exit
------------------------------------------------------------------------なおホームページ [3] を参考にインストールをすればよいが、そこに載っているグラフィックの例の表示は、
おそらくインストールしたユーザでなければ実行できない。もしくは、あるファイルのパーミッションを変更
すれば実行できる。
DAWN のテスト------------------------------------------------------------[kanega@phnp173 dawn_3_8_6.a]$su
Passward:xxxxxxxxxxxxx
[root@phnp173 dawn_3_8_6.a]#cd PRIM_DATA
[root@phnp173 PRIM_DATA]#../dawn primitives.prim &
カメラ位置や色などの設定を変更する灰色のウィンドウが出現
し、OK をクリックするとポストスクリプトを表示するインストー
ル時に設定したソフトウェアが起動、画像を表示する。
[root@phnp173 PRIM_DATA]#exit
[kanega@phnp173 dawn_3_8_6.a]$cd PRIM_DATA
[kanega@phnp173 dawn_3_8_6.a]$ ../dawn primitives.prim &
おそらくエラーが起こる
------------------------------------------------------------------------あと configure の実行例を以下に示す。
5
./configure 後の画像例------------------------------------------------********************************************************
* Configure script to generate Makefile of DAWN
*
*
*
------ with OpenGL mode
*
*
* (Note: If you do not want to incorporate OpenGL
*
*
mode, use the other script "configure_nogl".) *
********************************************************
Input C++ compiler name (e.g. g++, no default).
: g++
Input optimization option (e.g. -O2, no default)
: -O2
Input Tcl/Tk window shell name
(e.g. wish, no default): wish
Input include directory of Xlib "with -I":
(e.g. -I/usr/X11R6/include)
Hit return key if path is already set properly.
)
: -I/usr/X11R6/include/
Input lib directory of Xlib "with -L":
(e.g. -L/usr/X11R6/lib)
Hit return key if path is already set properly.)
: -L/usr/X11R6/lib64
Input the first include directory of OpenGL "with -I":
(e.g. -I/usr/include)
Hit return key if path is already set properly.
)
: -I/usr/include
Input the second include directory of OpenGL "with -I":
(e.g. -I/usr/include/GL
Hit return key if path is already set properly.
: -I/usr/include/GL
Input lib directory of OpenGL "with -L":
6
)
(e.g. -L/usr/lib
Hit return key if path is already set properly.)
: -L/usr/lib64
Select OpenGL/Mesa or old Masa (0: OpenGL/Mesa , 1: Old Mesa (ver.3.0)): 0
Input directory to install executable files
(e.g. /usr/local/bin, no default ): /usr/local/bin
Select a system (0: Defalut, 1: AIX, 2: IRIX, 3: Solaris, 4: RedHat Linux): 4
Do you use remote-visualization function? (y/n, no default)
(Select n if your compilation fails for FRClientServer.cc)
: n
Old Makefile is deleted.
New Makefile is created.
C++ compiler
: g++
Optimization level
: -O2
Tcl/Tk window shell
: wish
Xlib include directory
: -I/usr/X11R6/include/
Xlib lib directory
: -L/usr/X11R6/lib64
OpenGL include directory: -I/usr/include
-I/usr/include/GL
OpenGL lib directory
: -L/usr/lib64
OpenGL libraries
: -lGLU -lGL
Socket libraries
:
System name
: RedHat
Remote visualization
: n
Type
"make" to start compilation.
After compilation, type
"make install" for installation.
Then four executable files "dawn", "DAWN_GUI",
"dawnunixd", and "dawninetd"
will be installed to
/usr/dawn_3_8_6a.
-------------------------------------------------------------------------
7
1.4 Geant4 本体のインストール
そしていよいよ本体のインストールである。今回は今までと違い root でインストールするのではなく、
geantusr というアカウントを作成し、そのアカウントでインストールを行った。そのアカウントのホームフォ
ルダのパーミッションも設定しておく。
アカウントの作成---------------------------------------------------------
[kanega@phnp173 kanega]$su Passward:xxxxxxxxxxxxx
[root@phnp173 root]#usradd geantuser
[root@phnp173 root]#passwd geantuser
New Password
もう一回
: xxxxxxxx
:xxxxxxxx
[root@phnp173 root]#exit
[kanega@phnp173 kanega]$su - geantuser
Passward:xxxxxxxx
[geantuser@phnp173 geantuser]$cd ..
[geantuser@phnp173 home]$chmod 744 geantuser
[geantuser@phnp173 home]$ls -l
..............
drwxr--r--
.. geantuser geantuser
................ geantuser/
------------------------------------------------------------------------Geant4 のソースをホームページ [2] から/home/geantuser/以下にダウンロードし、解凍、展開し、トップ
ディレクトリに入る。そして Configure -build を行い、質問に答え、install を行う。この際、数時間かかる
ので覚悟して欲しい。
Geant4 のインストール----------------------------------------------------[geantuser@phnp173 geantuser]$gunzip geant4.7.0.p01.tgz
[geantuser@phnp173 geantuser]$tar xvf geant4.7.0.p01.tar
[geantuser@phnp173 geantuser]$cd geant4.7.0.p01
[geantuser@phnp173 geant4.7.0.p01]$./Configure -build
;;;;;;;;;;;;;;;;; 色々質問してくるので適切にタイプする。
8
[geantuser@phnp173 geant4.7.0.p01]$./Configure -install
------------------------------------------------------------------------以上で完了である。もし build でエラーが起きたらどうするかなどホームページ [2] のドキュメントに載って
いるので参考にして欲しい。そのドキュメントには Configure を使わないインストールの仕方も載っている。
また別個にインストールをしなければならないもの (例えばハドロニックフィジクスリスト) もある。しかし、
これは後に説明する例題では N04 にしか使われていないので、説明を省く。ちなみに今回は Configure で設
定した環境は、DAWN を使う以外 デフォルトの設定 (ほとんど no) で設定した。
*2
この研究室のパソコン で dawn 以外のソフトを使いたい場合、設定し直して欲しい
9
*2
2 Geant4 の使用
2.1 環境変数の設定
インストールしたアカウントと違うアカウントで操作する場合、自分で環境変数を設定する必要がある。こ
れはスクリプトを Geant4 で用意させることも可能だが、今回は自分で変更する。環境変数は通常、.bashrc
もしくは.bash profile に記述するが、今回はテストという意味もかねてシェルスクリプトとして実行する。も
し、うまくいったらその記述をそのまま.bashrc または.bash profile に記述すればよい。
環境変数の設定------------------------------------------------------------
[kanega@phnp173 kanega]$emacs sukinanamae &
emacs の記述==============================================================
#!/bin/sh
export G4SYSTEM=Linux-g++
export G4INSTALL=/home/geantuser/geant4.7.0.p01
export G4WORKDIR=${HOME}/work/g4work
export CLHEP_BASE_DIR=/usr/local
export CPPVERBOSE=1
export OGLHOME=/usr/local
export OGLFLAGS=-I/usr/local/include
export OGLLIBS="-L/usr/local/lib -lGLU -lGL"
export G4VIS_BUILD_DAWN_DRIVER=1
export G4VIS_BUILD_DAWNFILE_DRIVER=1
export G4VIS_USE_DAWN=1
export G4VIS_USE_DAWNFILE=1
export G4USE_STL=1
export G4USE_STLPORT=1
export STLPORTDIR=/usr/stlport-4.6.2
export TCL_LIBRARY=/usr/lib/tcl8.3
export TK_LIBRARY=/usr/lib/tk8.3
export CLASSPATH==/${HOME}/foobar/GAG.jar
==========================================================================
[kanega@phnp173 kanega]$chmod +x sukinanamae // 実行許可を与える。
[kanega@phnp173 kanega]$. ./sukinanamae // 自身のシェルで実行。
[kanega@phnp173 kanega]$printenv | less
// 環境変数を表示する。
10
-------------------------------------------------------------------------これにより Geant4 プログラムのコンパイルが可能となる。上の環境変数は、見たら大体の意味がわかると思
うが、G4WORKDIR の記述は各アカウントによって異なる。今回はホームディレクトリに work/ディレク
トリを作り、その下に g4work/ディレクトリを作り、そこを指定したが、その下に bin/、tmp/ディレクトリ
が作成されるので、各自用意して欲しい。
2.2 Geant4 の example
2.2.1 example のコンパイル
これでもう自由に使えるはずである。Geant4 には例題が含まれているので、それを自分のディレクトリに
コピーし、gmake を行ってみる。
例題 N01 のコンパイル------------------------------------------------------
[kanega@phnp173 kanega]$cd /home/geantuser/geant4.7.0.p01/
[kanega@phnp173 kanega]$cp -r example/ /home/kanega/work/g4work
[kanega@phnp173 kanega]$cd work/g4work/example/novice/N01
[kanega@phnp173 N01]gmake
:色々メッセージが出る
[kanega@phnp173 N01]cd ../../../
[kanega@phnp173 g4work]$ls
//bin、tmp が生成されているか確認
example bin tmp
[kanega@phnp173 g4work]cd bin/Linux-g++
[kanega@phnp173 Linux-g++]$ls // 実行ファイルが生成されているか確認。
exampleN01
--------------------------------------------------------------------------この最後の exampleN01 は実行ファイルで、そのディレクトリにパスを通しておかないとかなりめんどくさ
いので、その設定をする。今回は.bash profile に記述するが、スクリプトで実行しても、.bashrc に記述して
もよい。
パスを実行ファイルに通す-------------------------------------------------
[kanega@phnp173 kanega]$emacs .bash_profile
emacs の記述=============================================================
# .bash_profile
11
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs //ここまでは関係ない
PATH=${PATH};/home/kanega/work/g4work/bin/Linux-g++
export PATH
========================================================================
--------------------------------------------------------------------------.bash profile に記述した設定はログイン時に読み込まれるので、一度ログアウトすれば設定が読み込まれ
る。.bashrc に記述すればシェル起動時に読み込まれるのでログアウトする必要がない。
2.2.2 example の実行
今回の N01 の場合はどのディレクトリで実行しても関係ないと思われるが、基本は main が書かれたファ
イルと同じディレクトリで実行する。マクロファイルなどがそのディレクトリにあるからであるが N01 も一
応そのように実行してみる。
実行ファイル exampleN01 の実行-----------------------------------------------
[kanega@phnp173 kanega]$cd /work/g4work/example/novice/N01
[kanega@phnp173 N01]$exampleN01
--------------------------------------------------------------------------novice/にあるプログラム群は N04 以外は同様に gmake でき、ファイルは生成されるが、実行方法は多少 N01
の場合と少し違う。N02 では
exampleN02 のコンパイル、実行----------------------------------------------[kanega@phnp173 N01]$cd ../N02
[kanega@phnp173 N02]$gmake
[kanega@phnp173 N02]$exampleN02 run.mac
// バッチモード
もしくは
[kanega@phnp173 N02]$exampleN02 // インタラクティブモード
12
Idle>
--------------------------------------------------------------------------後者の実行はインタラクティブモードで、コマンドを受け付ける。
インタラクティブモードの例-------------------------------------------------
*/マクロファイルの実行
Idle>/control/execute run.mac
*/粒子、エネルギーを指定して実行
Idle>/gun/particle e+
Idle>/gun/energy 10*GeV
Idle>/run/beamOn 1
--------------------------------------------------------------------------他の例題もこれらとビジュアライズの組合せで同様に実行できる。なお例題では環境変数によって使用する
インターフェイズを変えることができる (例えば G4 USE TCSH=1 と設定する)。Linux などでは tcsh イン
ターフェイズが使用でき、それはヒストリー機能やコマンドの補完機能を提供するので、そちらを使用するこ
とを勧める。
2.2.3 exampleN01
exampleN01 は基本的なフレームワークがどう働くか説明する novice レベルで最も簡単な例である。物理
プロセスは伴わず簡単な図形上 (箱型のサンドイッチカロリーメータとトラッカーチューブ) を相互作用を
まったくしない geantino という仮想の粒子が一イベントごとにトラッキングするだけである。
2.2.4 exampleN02
exampleN02 は固定したターゲットの実験である。箱型の六つの横にサイズが増加していくチェンバーに粒
子を打ち込むシミュレーションである。このチェンバーは検出器と見なされていて、いわゆるセンシティブ
ディテクターとして宣言されている。exampleN01 は輸送プロセスだけだったが今回は全ての電磁気プロセス
が導入されている。ビジュアライゼイションのためのファイルも用意されている。
2.2.5 exampleN03
簡単なカロリーメータのセットアップサンプルのシミュレーションである。
2.2.6 exampleN04
簡単な衝突型粒子加速器検出器のシミュレーションである。
2.2.7 exampleN05
パラメタライゼイションのセットアップを実装する。
13
図 1 exampleN01 の DAWN を使用した図
図2
exampleN02 の DAWN を使用した図
図 3 exampleN03 の DAWN を使用した図
2.2.8 exampleN06
オプティカルな光子の発生と移動のシミュレーションである。
2.2.9 exampleN07
三つの簡単なサンドイッチカロリーメータを実装する。
14
2.3 自分で一からコードを書く場合の環境
もし example を使わない場合は、自分でコードを書かなければならない。その手始めを述べる。
2.3.1 ディレクトリを整える。
まず任意のディレクトリで src/、include/ディレクトリを作成する。そして、include/ディレクトリにヘッ
ダファイルを、src/ディレクトリにソースを置く。
ディレクトリの作成--------------------------------------------------------
[kanega@phnp173 kanega]$mkdir g4test //作業するディレクトリ作成
[kanega@phnp173 kanega]$cd g4test
[kanega@phnp173 g4test]$mkdir src include
--------------------------------------------------------------------------
2.3.2 ヘッダファイル
ヘッダファイルは主にクラスやメンバ関数などのプロトタイプや、変数の宣言などを格納しておくファイル
である。
ヘッダファイルの作成------------------------------------------------------
[kanega@phnp173 g4test]$cd include
[kanega@phnp173 include]$emacs g4testDetectorConstruction.hh &
emacs で内容を記述===================
.............
====================================
[kanega@phnp173 include]$emacs g4testPhysicsList.hh &
同様================================
.............
====================================
.
.
.
--------------------------------------------------------------------------
2.3.3 ソース
ソースはヘッダファイルで記述されたプロトタイプの定義などの具体的な内容を書くファイルである。
ソースの作成--------------------------------------------------------------
15
[kanega@phnp173 include]$cd ../src
[kanega@phnp173 src]$emacs g4testDetectorConstruction.cc &
emacs で内容を記述=====================
...............
======================================
[kanega@phnp173 src]$emacs g4testPhysicsList.cc &
同様==================================
...............
======================================
.
.
.
--------------------------------------------------------------------------
2.3.4 main を含むファイル
main を含むファイルは include や src ディレクトリと同じディレクトリで実行ファイルにしたい名前にサ
フィックス.cc もしくは.icc をつけて作成します。
main ファイルの作成-------------------------------------------------------[kanega@phnp173 src]$cd ..
[kanega@phnp173 g4test]$emacs g4test.cc &
emacs で内容を記述=========================
...............
==========================================
--------------------------------------------------------------------------
2.3.5 GNUmakefile
最後に GNUmakefile を作成します。これは main を含むファイルと同じディレクトリに GNUmakefile と
いう名前のファイルを作成します。複雑な処理はなく、Geant4 で用意された makefile を読み込むのが主なの
で、これ自体に深い makefile の知識は必要ない。
GNUmakefile の作成--------------------------------------------------------[kanega@phnp173 g4test]$emacs GNUmakefile &
emacs の記述===========================================================
name := g4test
G4TARGET := $(name)
G4EXLIB := true
16
ifndef G4INSTALL
G4INSTALL = ../../..
endif
.PHONY: all
all: lib bin
include $(G4INSTALL)/config/binmake.gmk
======================================================================
[kanega@phnp173 g4test]$ls
GNUmakefile
g4test.cc
include
src
--------------------------------------------------------------------------ビジュアライズするプログラムなどでは、これに visclean などの記述を足すなども行えば、より使いやすくな
ると思う。
2.3.6 gmake そしてデバック
後は example と同じように gmake を行えば実行ファイル等が生成されるはずである。しかし、自分で書
いたソースならば、なんらかの打ち間違えがあっても不思議ではなく、gmake を行った後、大量のエラー
メッセージが出て来るであろう。それらはメッセージをよく見て include/、src/、main などを修正し、再度
gmake を行う。
gmake の実行、デバック、再度実行-------------------------------------------[kanega@phnp173 g4test]$gmake
..............
なんらかのエラー/src 中
g4testDetectorConstructon.cc 内
.................... エラー
[kanega@phnp173 g4test]$emacs src/g4testDetectorConstruction.cc &
エラー修正
[kanega@phnp173 g4test]$gmake
..............
[kanega@phnp173 g4test]$cd /home/kanega/work/g4work/bin/Linux-g++/
[kanega@phnp173 g4test]$ls // 実行ファイルが生成されているか確認
exampleN01 exampleN02 g4test
--------------------------------------------------------------------------以上が基本的な流れである。
17
2.4 実際に使うには
上で見てきたようにコードをいじらなくても粒子の種類や運動エネルギーなどを変化させることはできる
し、マクロファイルを作成し同様のことはできる。しかし、自分でやりたいシミュレーションを設定するには
それでは事足りないと思う。
あとは実際にコードを書くだけである。exampleN01 ぐらいなら一から全て書いていけるが、使えるもの
としてはシミュレーションの目的に合わせて example のコードなど既存のコードを改造するのが一番現実的
な方法と思われる。しかし、一から書くにしても、改造するにしても多少のクラスの知識などは必要と思わ
れる。
18
3 解析
今回は exampleN01 や N02 実行時に標準出力に表示されるデータを解析の道具に使う。標準出力をファイ
ルに出力し、そのファイルを自作のプログラムによって数字がスペースに区切られた.dat ファイルを作成し、
それを ROOT というソフトで読み込む。ROOT は Geant4 とは関係のないソフトなのでインストールの説
明はしない。
3.1 出力の扱い
------------------------------------------------------------------------[kanega@phnp173 N01]$exampleN01 > filename //filename は任意
もしくは
[kanega@phnp173 N01]$exampleN01 | tee filename
------------------------------------------------------------------------上のコマンドにより標準出力 (要はターミナルに表示される文字) をファイルに保存している。exampleN01
の場合、マテリアルの表示などの他に TrackerID、ParentID、Step、X[mm]、Y[mm]、Z[mm]、KinE[MeV]、
dE[MeV]、StepLeng[mm]、TrackLeng[mm] などが表示される。これを
=========================================================================
1 0 0 1 0 0 3 0 0 0
//順に TID PID Step X Y Z KinE dE SLeng TLeng
1 0 1 ..........
......
========================================================================
に変換する。これは自分でプログラムを書くか、あまりにもスマートではないがコピーアンドペーストでファ
イルに持ってくるという手もある。実はこのファイルだと 1 イベントのみにしか使えないので、イベント ID
も数字の列に加えた方がよい。とにかく数字の列を作成できればそれでグラフは作成できる。
3.2 ROOT を使用する
.dat ファイルが用意できたらグラフやヒストグラムを作成する。今回は ROOT というソフトを使う。
ROOT は C++ で作られており、使用に関しても C++ を書くのと同様な操作で使用できる。ROOT はイン
ストールされているならばターミナルで
-----------------------------------------------------------------------[kanega@phnp173 kanega]$root
ルートのロゴなどが表示される
root [0]
//コマンドを受け付けるプロンプトが出る。
-----------------------------------------------------------------------19
データの入出力を一行一行打ち込んでいたら面倒なので、それをまとめてファイルに記述し、それを実行する
のが現実的である。
-----------------------------------------------------------------------root [0] .x roothist.C
//マクロファイル rootmac.C を実行
root [1] ntuple -> Draw("x"); //コマンドの例 ここでは深く考えなくてよい
//ROOT の終了
root [2] .q
-----------------------------------------------------------------------上の例のとおり.(ドット) の後に x(execute)、q(quit) でマクロの実行、ROOT の終了を行っている。
では実際にマクロファイルを作成して、ヒストグラムと、グラフを作成する。なおヒストグラムは TH1S(一
次元) のオブジェクトを作成し (仮に h1 とする)、h1.Fill(x)、h1.Draw でデータのフィルとドローを行うこと
もできるが、今回は Ntuple というものを使った。これによってデータの集合から色々なヒストグラムを作成
することができる。
-----------------------------------------------------------------------[kanega@phnp173 kanega]$emacs roothist.C
roothist.C=============================================================
{//#include <fstream>
TNtuple *ntuple = new TNtuple("Geant4data", "initialdata",
"tid:pid:step:x:y:z:kine:de:stepleng:trackleng");
ifstream data("geant.dat");
float tid,pid,step,x,y,z,kine,de,stepleng,trackleng;
while(data >> tid >> pid >> step >> x >> y >> z >> kine >> de
>> stepleng >> trackleng)
ntuple ->Fill(tid,pid,step,x,y,z,kine,de,stepleng,trackleng);
data.close();
ntuple->Print();
}
========================================================================
[kanega@phnp173 kanega]$root
20
root [0] .x roothist.C
Print() 関数の結果が出力される
root [1] ntuple -> Draw("x"); //ファイル中で生成した ntuple ポインタから
Draw メソッドを呼び出す
window に x の一次元ヒストグラムが表示される。
-----------------------------------------------------------------------細かいことは [7] などを参照してもらえればよい。グラフの方は
----------------------------------------------------------------------[kanega@phnp173 kanega]$emacs rootgraph.C
rootgraph.C============================================================
{
#include <fstream>
const int max=500;
float tid[max], pid[max],step[max],x[max],y[max],z[max],stepleng[max],
trackleng[max],de[max],kine[max];
ifstream data("geant.dat");
int index = 0;
data >> tid[index] >> pid[index] >> step[index] >> x[index] >> y[index]
>> z[index] >> kine[index] >> de[index] >> stepleng[index]
>> trackleng[index];
while(!data.eof()){index++;
data >> tid[index] >> pid[index] >> step[index]
>> x[index] >> y[index] >> z[index] >> kine[index]
>> de[index] >> stepleng[index] >> trackleng[index];
}
cout << index << endl;
//ここはうまくいっているかのテスト
cout << tid[0] << endl;
data.close();
}
=========================================================================
[kanega@phnp173 kanega]$root
21
root [0].x rootgraph.C
37
//index 数のテスト
1
//tid
root [1]graph = new TGraph(index,x,y);
//グラフのポインタ作成
//A:軸をグラフの周りに書く
root [2]graph->Draw("AP");
P:マーカーでプロットする
X-Y のグラフが表示される。
-------------------------------------------------------------------------これはかなり不細工なファイルなので、このとおりに使うのはいかがなものかと思う。しかし、これでヒスト
グラム、グラフを出すことができる。
ちなみにグラフの装飾はグラフィカルに操作した方が速いと思うので、グラフの window でマウスの右ク
リックを押し、SetAttibute... みたいなものがあるので、それを実行すると別 window に色々変更できるもの
(マーカーの大きさや色、軸など) があるので、見やすいように設定すればよい。
X-Z
500
500
400
400
Z[mm]
Y[mm]
X-Y
300
300
200
200
100
100
-2000
-1000
0
1000
2000
0
3000
-2000
-1000
0
1000
2000
3000
X[mm]
X[mm]
図 4 exampleN01 の X-Y のグラフ
図 5 exampleN01 の X-Z グラフ
22
4 Geant4 を GUI で使う
Geant4 は GUI ソフトウェアを通して、使うこともできる。それが GAG、GGE、Momo などで、これら
は java を使って書かれている。これらの情報やダウンロードはホームページ [4] を参照してくれればよい。
ざっと流れを言うと jSDK を Sun Microsystems の java 関連のページ [6] からダウンロード、インストール
を行って、環境変数を設定し、java コマンドで GAG などを実行するという感じである。
4.1 Java2 標準環境のインストール
今回、J2SDK*3 は rpm 形式でインストールした。
sdk のインストール------------------------------------------------------ディレクトリ/home/kanega/download/に j2sdk-1_4_2_10_linux-i586.rpm.bin
をダウンロードした。
[kanega@phnp173 kanega]$cd download
[kanega@phnp173 download]$chmod a+x j2sdk-1_4_2_10-linux-i586.rpm.bin
[kanega@phnp173 download]$./j2sdk-1_4_2_10-linux-i586.rpm.bin
:使用許諾の同意など
[kanega@phnp173 download]$su
Passward:xxxxxxxxxxx
[root@phnp173 download]#rpm -iv j2sdk-1_4_2_10-linux-i586.rpm
.................
[root@phnp173 download]#exit
------------------------------------------------------------------------
4.2 環境変数の設定
環境変数は PATH と、必須ではないものの CLASSPATH の設定も影響しているので、これも設定する。
ここで注意として元々 Linux に付属している java コマンドではなく上でインストールした java を起動させる
ため PATH の記述に工夫がいる。
環境変数の設定-----------------------------------------------------------
[kanega@phnp173 kanega]$emacs .bash_profile &
emacs 中=================================================================
...........................
*3
J2SDK は Java2SoftwareDevelopmentKit のことで開発環境と呼ばれているもの。他に JRE(JavaRuntimeEnvironment)
がある。
23
...........................
PATH=/usr/java/j2sdk1.4.2/bin;${PATH}
export PATH
========================================================================
一度ログアウト
-------------------------------------------------------------------------
4.3 実際に起動してみる
GAG を使う---------------------------------------------------------------ディレクトリ/home/kaenga/foobar/に GAG-1.4.1.jar をダウンロード
[kanega@phnp173 kanega]java -cp foobar/GAG-1.4.1.jar gag &
------------------------------------------------------------------------他も同様に実行できる。具体的な使い方はホームページ [4] などを参考にして欲しい。
5 おわりに
上で見てきたことが主に Geant4 の具体的なコードの使い方以外の設定である。後は検出器の構成や、物理
プロセス、粒子の定義などのコードの書き方を調べればよい。それはホームページ [2] のリンク、Documment
の Application Developers Guide や KEK のホームページの Geant4 講習会 2003 [5] 解説や使い方が載って
いるので参考にして欲しい。あとは具体的に何がしたいのか、そしてその目的に対してどう対処すれば良いの
かを考えていくのが一番の理解になると思う。また example のコードを見るのも勉強になると思うので目的
がなかったらとりあえずコードを眺めてみるのも一つの手だと思う。
24
参考文献
[1] CLHEP http://proj-clhep.web.cern.ch/proj-clhep/
[2] Geant4 Home Page http://wwwasd.web.cern.ch/wwwasd/geant4/geant4.html
[3] Geant4 Ritumeikan University Group Home Page at KEK http://geant4.kek.jp/GEANT4/vis/
[4] Geant4 GUI and Environment at Naruto http://erpc1.naruto-u.ac.jp/ geant4/
[5] Geant4 講習会 2003 http://geant4.kek.jp/g4users/tutorial03/
[6] Java Technology http://java.sun.com/
[7] ROOT Which Even Monkeys Can Use Y.shirasaki O.Tajima H11 11/4
http://www.pp1.phys.chiba-u.jp/ hoshina/lectures/Geant4Lecture2003/doc/root.ps
[8] Dis45 ユーザーのための ROOT 入門 猿にも使える ROOT:番外編
藤井惠介 高エネルギー加速器研究機構 H15 11/27
http://www.pp1.phys.chiba-u.jp/ hoshina/lectures/Geant4Lecture2003/doc/main.pdf
25