Exercise-1
ここでは、インストール作業の確認とGeant4についているnovice exampleを使って、Geant4のアプリケーション構築から、 プログラムの実行までの一連の流れを理解してもらいます。
作業環境
どのディレクトリでも構いませんが、ここでは、
$ 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の人はすでに環境変数が定義済なので、スキップして構いません。
ここから、設定ファイルスクリプトをダウンロードし、作業ディレクトリに展開します。
$ 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
それでは、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プログラムの実行は、コマンドライン上で、インタラクティブにコマンドを実行する方法と
実行するコマンド群をマクロファイルに書いて、バッチモードで走らすことができます。
バッチモードで実行するには、次のようにします。
$ cat run1.mac $ ./bin/Linux-g++/exampleN03 run1.mac
続いて、インタラクティブセッションを立ち上げてみます。
OpenGLの画面が立上がり、コマンド入力待ちの状態になります。
"Idle"は、Geant4 kernelの現在のステータスを示しています。
いくつかコマンドを入力してみましょう。マクロファイルの実行には、
$ ./bin/Linux-g++/exampleN03 ... Idle> /vis/viewer/set/viewpointThetaPhi 30 30 deg Idle> /run/beamOn Idle> /control/execute run1.mac Idle> exit
すでに、いくつかのマクロファイルが用意されています。それらを走らせて、 マクロファイルの中身と実行結果を見てみてください。
$ ls *.mac exo1.mac exo2.mac newgeom.mac rndmSeed.mac run1.mac run2.mac vis.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 <--- !!!

他の可視化ツールの利用
これまでは、OpenGLの可視化ドライバを利用してきました。他の可視化ツールも使ってみましょう。
/vis/open OGLIXの部分を変更して、試してみましょう。
- OGLIX : OpenGL
- VRML2FILE : VRMLファイル
- DAWNFILE : DAWNファイル
- HepRepXML : HepRepファイル
VRML
DAWN
primファイルは、以下のようにコマンドラインからでも同様に処理できます。
$ dawn g4_00.prim

HepRep
$ unzip scene-0.heprep.zip
