Exercise-1

ここでは、インストール作業の確認とGeant4についているnovice exampleを使って、Geant4のアプリケーション構築から、 プログラムの実行までの一連の流れを理解してもらいます。

Exercise-1の資料( pptx, pdf)。

作業環境

どのディレクトリでも構いませんが、ここでは、$HOME/g4work/とします。 VMWare環境の人は、すでにこのディレクトリが作られているので、ここで作業しましょう。

$ cd 
$ mkdir g4work
$ cd g4work/

ここから、演習コードをダウンロードし、作業ディレクトリに展開します。 VMWareの人はインストール済なので、スキップしてください。

$ tar zxvf (somewhere)/novice.tar.gz
$ ls novice/
GNUmakefile  N01/  N02/  N03/  N04/  N05/  N06/  N07/  README

環境変数の準備

まずは、Geant4を動かすための環境変数の準備をします。 VMWareの人はすでに環境変数が定義済なので、スキップして構いません。 $HOME/profile.d/の中に、geant4.csh (csh), geant4.sh (bash)で必要な環境変数が定義されています。

ここから、設定ファイルスクリプトをダウンロードし、作業ディレクトリに展開します。

$ cd ~/g4work
$ tar zxvf (somewhere)/g4env.tar.gz
$ cd g4env/
ここで各自の環境に合わせて、ファイルを編集し、環境変数を読込みます。

cshの場合
% cat geant4.csh
set g4root=/opt/heplib/Geant4  <--- Geant4のインストール先

setenv G4SYSTEM Linux-g++
setenv G4INSTALL ${g4root}/geant4.9.0.p01
setenv CLHEP_BASE_DIR /opt/heplib/CLHEP/2.0.3.1

setenv G4VIS_USE_OPENGLX 1
setenv G4UI_USE_TCSH 1
setenv G4DAWNFILE_PS_VIEWER gv
setenv G4VRMLFILE_VIEWER vrmlview

setenv G4LEDATA ${g4root}/data/G4EMLOW.4.3
setenv G4NEUTRONHPDATA ${g4root}/data/G4NDL.3.11
setenv G4LEVELGAMMADATA ${g4root}/data/G4PhotonEvaporation.2.0
setenv G4RADIOACTIVEDATA ${g4root}/data/G4RadiativeDecay.3.2
setenv G4ELASTICDATA ${g4root}/data/G4ELASTIC.1.1

unset g4root

setenv PATH ${PATH}:/opt/heplib/bin   <--- 可視化ツールのパス


% source geant4.csh
bashの場合
# cat geant4.sh
g4root=/opt/heplib/Geant4  <--- Geant4のインストール先

export G4SYSTEM=Linux-g++
export G4INSTALL=$g4root/geant4.9.0.p01
export CLHEP_BASE_DIR=/opt/heplib/CLHEP/2.0.3.1

export G4VIS_USE_OPENGLX=1
export G4UI_USE_TCSH=1
export G4DAWNFILE_PS_VIEWER=gv
export G4VRMLFILE_VIEWER=vrmlview

export G4LEDATA=$g4root/data/G4EMLOW.4.3
export G4NEUTRONHPDATA=$g4root/data/G4NDL.3.11
export G4LEVELGAMMADATA=$g4root/data/G4PhotonEvaporation.2.0
export G4RADIOACTIVEDATA=$g4root/data/G4RadiativeDecay.3.2
export G4ELASTICDATA=$g4root/data/G4ELASTIC.1.1

unset g4root

export PATH=$PATH:/opt/heplib/bin   <--- 可視化ツールのパス

# . geant4.sh

環境変数が正しく読込まれているか、確認します。

$ printenv | grep G4
G4SYSTEM=Linux-g++
G4INSTALL=/opt/heplib/Geant4/geant4.9.0.p01
G4VIS_USE_OPENGLX=1
G4UI_USE_TCSH=1
G4DAWNFILE_PS_VIEWER=gv
G4VRMLFILE_VIEWER=vrmlview
G4LEDATA=/opt/heplib/Geant4/data/G4EMLOW.4.3
G4NEUTRONHPDATA=/opt/heplib/Geant4/data/G4NDL.3.11
G4LEVELGAMMADATA=/opt/heplib/Geant4/data/G4PhotonEvaporation.2.0
G4RADIOACTIVEDATA=/opt/heplib/Geant4/data/G4RadiativeDecay.3.2
G4ELASTICDATA=/opt/heplib/Geant4/data/G4ELASTIC.1.1

exampleN01のコンパイルと実行

まずは、makeファイルの中身をのぞいてみましょう。

$ cd ~/g4work/novice/N01
$ cat GNUmakefile
# $Id: GNUmakefile,v 1.1 1999/01/07 16:05:40 gunter Exp $
# --------------------------------------------------------------
# GNUmakefile for examples module.  Gabriele Cosmo, 06/04/98.
# --------------------------------------------------------------

name := exampleN01 <--- 実行ファイル名, main()のファイル名と同じでないとだめ
G4TARGET := $(name)
G4EXLIB := true

G4WORKDIR = .      <--- 実行ファイルの生成先のルートパス
ifndef G4INSTALL
  G4INSTALL = ../../..
endif

.PHONY: all
all: lib bin

include $(G4INSTALL)/config/binmake.gmk

nameは実行ファイル名で、main()を含むファイル名と同名でなければいけません。 G4WORKDIRがカレントディレクトリに設定されています。 実行ファイルは、./bin/$G4SYSTEM(Linux-g++)/exampleN01という名前で生成されます。

それでは、exampleN01をコンパイルして、実行します。

$ make
Making dependency for file exampleN01.cc ...
Making dependency for file src/ExN01PrimaryGeneratorAction.cc ...
Making dependency for file src/ExN01PhysicsList.cc ...
Making dependency for file src/ExN01DetectorConstruction.cc ...
Compiling ExN01DetectorConstruction.cc ...
Compiling ExN01PhysicsList.cc ...
Compiling ExN01PrimaryGeneratorAction.cc ...
Creating/replacing object files in ./tmp/Linux-g++/exampleN01/libexampleN01.a ...
ar: creating ./tmp/Linux-g++/exampleN01/libexampleN01.a
Compiling exampleN01.cc ...
Using granular libraries ...
Linking exampleN01 ...
... Done!

無事成功しました。では、走らせてみます。exampleN01はバッチモードで走りますので、結果を出力して終了します。

$ ./bin/Linux-g++/exampleN01

....
### pop requested out of 0 stacked tracks.
### 0 waiting tracks are re-classified to
     0 urgent tracks and 0 waiting tracks.
NULL returned from G4StackManager.
Terminate current event processing.
Run terminated.
Run Summary
  Number of events processed : 3
  User=0s Real=0.01s Sys=0s
G4 kernel has come to Quit state.

結果をリファレンス出力と比較してみます。ここで、同じ結果がでてくれば成功ですと言いたいとこですが、どうやら少々違うようです(64ビット環境の場合は、同じになります)。浮動小数点の誤差の関係で、32ビット環境の場合、ちゃんと0にならないようです(SSEのオプションをつけてコンパイルすれば解決します)。ということで、ここではこれでよしとします。

% ./bin/Linux-g++/exampleN01 >& a.log          (csh)
# ./bin/Linux-g++/exampleN01 > a.log 2>& 1     (bash)

$ diff a.log exampleN01.out
3c3
<  Geant4 version Name: geant4-09-00-patch-01    (28-August-2007)
---
>  Geant4 version Name: geant4-09-00-patch-01-ref    (28-August-2007)
113c113
<     3 1.06e-13      200        0     1e+03        0      423  2.01e+03   caloBlock Transportation
---
>     3        0      200        0     1e+03        0      423  2.01e+03   caloBlock Transportation
175c175
<     3 -5.94e-15        0      200     1e+03        0      402  2.01e+03   caloBlock Transportation
---
>     3        0        0      200     1e+03        0      402  2.01e+03   caloBlock Transportation
225c225
<   User=0.01s Real=0.01s Sys=0s
---
>   User=0.05s Real=0.17s Sys=0.02s

exampleN03のコンパイルと実行

次に、exampleN03をやってみます。

$ cd ~/g4work/novice/N03
$ make

Geant4プログラムの実行は、コマンドライン上で、インタラクティブにコマンドを実行する方法と 実行するコマンド群をマクロファイルに書いて、バッチモードで走らすことができます。 バッチモードで実行するには、次のようにします。 run1.macがマクロファイルになります。300MeVのミューオンを3イベント生成し、 トラッキングの詳細をダンプしています。

$ cat run1.mac
$ ./bin/Linux-g++/exampleN03 run1.mac

続いて、インタラクティブセッションを立ち上げてみます。 OpenGLの画面が立上がり、コマンド入力待ちの状態になります。 "Idle"は、Geant4 kernelの現在のステータスを示しています。 いくつかコマンドを入力してみましょう。マクロファイルの実行には、 /control/executeコマンドを使います。

$ ./bin/Linux-g++/exampleN03
...

Idle> /vis/viewer/set/viewpointThetaPhi 30 30 deg
Idle> /run/beamOn
Idle> /control/execute run1.mac
Idle> exit

N03-1 N03-2

すでに、いくつかのマクロファイルが用意されています。それらを走らせて、 マクロファイルの中身と実行結果を見てみてください。

$ ls *.mac
exo1.mac  exo2.mac  newgeom.mac  rndmSeed.mac  run1.mac  run2.mac  vis.mac

練習問題

exo1.macのマクロファイルをいじってみましょう。 このマクロでは、ジオメトリをアルミニウム一層だけにしています。 プロセスはe+の対消滅の過程だけが見えるように設定されています。 この要領で、photonのコンプトン散乱だけが見えるようにマクロファイルを設定してください。 実際に、10MeVのphotonを発生させて、このことを確認してください。 (exo1.macmyexo1.macにコピーして、そのファイルを編集しましょう。)

$ cat exo1.mac
...

/N03/det/setNbOfLayers 1
#
/N03/det/setAbsMat Aluminium
/N03/det/setAbsThick 10 cm
#
/N03/det/setGapMat Air
/N03/det/setGapThick  0 cm
#
/N03/det/setSizeYZ   10 cm
#
/N03/det/update
#
/vis/viewer/zoom 1.3
#
/process/list
/process/inactivate msc
/process/inactivate eBrem
/process/inactivate compt     <--- !!! 
/process/inactivate conv
#
/run/particle/setCut 10 cm
/run/initialize
#
/gun/particle e+              <--- !!!
/gun/energy 30 MeV            <--- !!!
Compton

他の可視化ツールの利用

これまでは、OpenGLの可視化ドライバを利用してきました。他の可視化ツールも使ってみましょう。 vis.macの中で、使用する可視化ドライバの選択をしています。

/vis/open OGLIX
の部分を変更して、試してみましょう。
  • OGLIX : OpenGL
  • VRML2FILE : VRMLファイル
  • DAWNFILE : DAWNファイル
  • HepRepXML : HepRepファイル

VRML

/run/beamOnすると、WRL拡張子を持ったVRMLファイル(g4_00.wrl)が生成され、 vrmlviewで処理されます。VRMLビューワは、環境変数G4VRMLFILE_VIEWERで設定できます。

exN03_vrml

DAWN

/run/beamOnすると、PRIM拡張子を持ったVRMLファイル(g4_00.prim)が生成されます。 dawnによって処理されます。コントロールパネルが表示されるので、視点などの設定を行うと、PSファイルを生成し、 ビューワに表示します。ビューワの設定は、gv, gs, displayなどがいいようです。コントロールパネルで設定可能です。

primファイルは、以下のようにコマンドラインからでも同様に処理できます。

$ dawn g4_00.prim
exN03_dawn

HepRep

/run/beamOnすると、zipで圧縮されたファイル(scene-0.heprep.zip)が生成されます。 これを解凍して、Wired3で開きます。

$ unzip scene-0.heprep.zip
exN03_wired