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
© Copyright 2024 Paperzz