Linuxユーザ

最近のLinuxディストリビューションであれば特に問題ありません。 SL3RedHat ES4/5クローン (SL4/5, CentOS等)、openSUSEUbuntu等で動作確認されています。gccなどの開発環境をインストールしておいてください。gccのバージョンは、3.2.3移行が必要です。gccバージョン4系の方がより高いパフォーマンスが得られます。Intel Core2等の64bit環境(X64)でも問題なく動作します。

1. 講習会用パッケージのダウンロード、展開

ここから、講習会用パッケージ(g4tut07-package.tar.gz)をダウンロードしてください。ファイルを展開する場所は、どこでも構いません。このドキュメントでは、 $G4TUT_BASE と表記します。ここでは、 /opt 以下にインストールしていきます。以下、/optの部分は、各自の環境に置換えてください。

$ cd /opt
$ tar zxvf /パッケージのパス/g4tut07-package.tar.gz
...

$ ls heplib
CLHEP/  Geant4/  ROOT/  Wired/  bin/  vistools/

Note: シェルのコマンド表記は、以下の様にします。(t)csh、bash以外のシェルをKYな?人は、勝手にやってください。

  • $ : bash、csh共通
  • % : (t)cshの場合
  • # : bashの場合

これで、$G4TUT_BASE/heplib/ 以下にファイルが展開されます。各ディレクトリの構成は以下のようになります。

  • CLHEP/ : CLHEPのソース、ライブラリ
  • Geant4/ : Geant4のソース、ライブラリ、データファイル
  • ROOT/: ROOTのソース、ライブラリ、実行ファイル
  • Wired/: Wiredイベントディスプレイ (Javaのjarファイル)
  • bin/: Geant4の可視化ツールのコマンド
  • vistools/: Geant4の可視化ツールのソース

2. CLHEPのインストール

まずは、CLHEPのインストールです。CLHEPは、バージョン1.9系と2.0系があり、今のところ、Geant4では両方のバージョンをサポートしています。今回は、2.0系の最新版である2.0.3.1を使います。

$ cd /opt/heplib/CLHEP/src
$ tar zxvf ../tarballs/clhep-2.0.3.1.tgz
...

$ cd 2.0.3.1/CLHEP
$ ./configure --prefix=/opt/heplib/CLHEP/2.0.3.1
...

% make |& tee make.log        (csh)
# make 2>&1 | tee make.log    (bash)
...

$ make install
...

$ cd /opt/heplib/CLHEP/2.0.3.1/lib
$ ls
libCLHEP-2.0.3.1.a                     libCLHEP-Matrix-2.0.3.1.a
libCLHEP-2.0.3.1.so*                   libCLHEP-Matrix-2.0.3.1.so*
libCLHEP-Cast-2.0.3.1.a                libCLHEP-Random-2.0.3.1.a
libCLHEP-Cast-2.0.3.1.so*              libCLHEP-Random-2.0.3.1.so*
libCLHEP-Evaluator-2.0.3.1.a           libCLHEP-RandomObjects-2.0.3.1.a
libCLHEP-Evaluator-2.0.3.1.so*         libCLHEP-RandomObjects-2.0.3.1.so*
libCLHEP-Exceptions-2.0.3.1.a          libCLHEP-RefCount-2.0.3.1.a
libCLHEP-Exceptions-2.0.3.1.so*        libCLHEP-RefCount-2.0.3.1.so*
libCLHEP-GenericFunctions-2.0.3.1.a    libCLHEP-Vector-2.0.3.1.a
libCLHEP-GenericFunctions-2.0.3.1.so*  libCLHEP-Vector-2.0.3.1.so*
libCLHEP-Geometry-2.0.3.1.a            libCLHEP.a@
libCLHEP-Geometry-2.0.3.1.so*          libCLHEP.so@

$ rm libCLHEP.so

Note: 何で、libCLHEP.soを消すの?

静的ライブラリと共有ライブラリが同じディレクトリ内にあると、リンカは共有ライブラリを優先的に利用します。この場合、アプリケーション実行時に動的に関数などの割当てを行うことになります。この際、ライブラリの場所をシステムの規則に従って探します。通常は、/usr/lib などのシステム固有のディレクトリがサーチパスに含まれます。CLHEPの場合、ライブラリは、ユーザの勝手なディレクトリにインストールされていて、デフォルトではサーチパスに含まれていません。LD_LIBRARY_PATH を指定してサーチパスを追加することもできますが、ユーザ固有の共有ライブラリを LD_LIBRARY_PATH で管理することは、大抵の場合、無用な混乱を招きます。ですので、ここでは、あっさりと共有ライブラリのリンクを消去しときます。共有ライブラリが必要になる場合もありますが、その時は、 libCLHEP-2.0.3.1.so で指定します。

3. Geant4のインストール

それでは、Geant4のインストールを行います。まずは、ソースコードを展開します。

$ cd /opt/heplib/Geant4
$ tar zxvf tarballs/geant4.9.0.p01.gtar.gz
...

$ ls
data/  geant4.9.0.p01/  tarballs/

次に、Geant4をビルドするための環境変数を設定します。cshユーザはg4build.csh、bashユーザはg4build.sh というファイルを作成して、その中で定義します。それぞれ、以下の様にファイルを作成します。

cshユーザの場合

% cat g4build.csh
setenv G4SYSTEM Linux-g++
setenv G4INSTALL /opt/heplib/Geant4/geant4.9.0.p01
setenv CLHEP_BASE_DIR /opt/heplib/CLHEP/2.0.3.1

setenv G4VIS_BUILD_OPENGLX_DRIVER  1
setenv G4VIS_BUILD_RAYTRACERX_DRIVER 1

setenv G4VIS_USE_OPENGLX             1
setenv G4VIS_USE_RAYTRACERX_DRIVER   1
setenv G4UI_USE_TCSH  1
bashユーザの場合

# cat g4build.sh
export G4SYSTEM=Linux-g++
export G4INSTALL=/opt/heplib/Geant4/geant4.9.0.p01
export CLHEP_BASE_DIR=/opt/heplib/CLHEP/2.0.3.1

export G4VIS_BUILD_OPENGLX_DRIVER=1
export G4VIS_BUILD_RAYTRACERX_DRIVER=1

export G4VIS_USE_OPENGLX=1
export G4VIS_USE_RAYTRACERX_DRIVER=1
export G4UI_USE_TCSH=1

環境変数を読込みましょう。環境変数がちゃんと定義されているか確認します。

% source g4build.csh    (csh)
# . g4build.sh          (bash)

$ printenv | grep G4
G4SYSTEM=Linux-g++
G4INSTALL=/opt/heplib/Geant4/geant4.9.0.p01
G4VIS_BUILD_OPENGLX_DRIVER=1
G4VIS_BUILD_RAYTRACERX_DRIVER=1
G4VIS_USE_OPENGLX=1
G4VIS_USE_RAYTRACERX_DRIVER=1
G4UI_USE_TCSH=1

Note: 64ビット環境の場合

64ビット環境の方は、少し確認が必要です。x86_64のアーキテクチャ上での64ビット環境では、32ビット互換となっていて、64ビットOSの下でも、少ないオーバヘッドで、32ビットのバイナリも動作できます。32ビットのアプリケーションは、32ビット用のライブラリとしかリンクできないので、システムには、32ビットライブラリと64ビットライブラリが用意されています。今の所、大抵のディストリビューションでは、32ビットライブラリが lib/ 、64ビットライブラリがlib64/ に納められるようになっています。/lib/や/usr/lib/に関しては、作られる実行ファイルが32ビットか64ビットによって、リンカは適切なライブラリのディレクトリ( lib/ or lib64/)を参照するようになっています。しかし、X11のライブラリは、/usr/X11R6/lib/などに入っているため、自動的に判別してくれません。この問題の解決のため、最近のディストリビューション(openSUSE 10.2)の中には、X11のライブラリを/usr/lib/ 以下に納めてしまうものもあります。

まず、X11関連のライブラリが入っているディレクトリを確認してください。OpenGL関連のライブラリ(libGL.so, libGLU.so)が入っているディレクトリも確認してください。これれが、/usr/X11R6/lib64/にある場合は、config/sys/Linux-g++.gmk の該当箇所を 以下の様に修正します。

X11LIBS := -L/usr/X11R6/lib64 -lXmu -lXt -lXext -lX11 -lSM -lICE (X11が該当する場合)

OGLLIBS := -L$(OGLHOME)/lib64 -lGLU -lGL (OpenGLが該当する場合)

それでは、Geant4のビルドを開始します。コンパイルが終ったら、make.log を見て、エラーがないことを確認してください。(エラーを確認するために、LANGをCとかに設定しておいた方がいいかもしれません。)

$ cd /opt/heplib/Geant4/geant4.9.0.p01/source/
% setenv LANG C               (csh)
% make |& tee make.log        (csh)

# export LANG=C               (bash)
# make 2>&1 | tee make.log    (bash)
...

$ make incudes
...

4. Geant4の動作確認

では、exampleプログラムを動かして、動作チェックしてみます。チェックするのは、exampleN01とexampleN03です。ここでは、プログラムの内容に関しては気にせず、ただ動作確認するだけです。まずは、exampleN01からやってみます。以下の様にして、プログラムをコンパイルします。無事コンパイルできれば、成功です。

$ cd /opt/heplib/Geant4/geant4.9.0.p01/examples/novice/N01
$ 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 /opt/heplib/Geant4/geant4.9.0.p01/tmp/Linux-g++/exampleN01/libexampleN01.a ...
ar: creating /opt/heplib/Geant4/geant4.9.0.p01/tmp/Linux-g++/exampleN01/libexampleN01.a
Compiling exampleN01.cc ...
Using granular libraries ...
Linking exampleN01 ...
... Done!

では、実行してみます。exampleN01は、テキストのアウトプットを出すだけなので、結果をリダイレクトして保存します。結果をリファレンス出力と比較してみます。ここで、同じ結果がでてくれば成功ですと言いたいとこですが、どうやら少々違うようです(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 /opt/heplib/Geant4/geant4.9.0.p01/examples/novice/N03
$ make
Making dependency for file exampleN03.cc ...
Making dependency for file src/ExN03SteppingVerbose.cc ...
Making dependency for file src/ExN03SteppingAction.cc ...
Making dependency for file src/ExN03RunAction.cc ...
Making dependency for file src/ExN03PrimaryGeneratorMessenger.cc ...
Making dependency for file src/ExN03PrimaryGeneratorAction.cc ...
Making dependency for file src/ExN03PhysicsList.cc ...
Making dependency for file src/ExN03EventActionMessenger.cc ...
Making dependency for file src/ExN03EventAction.cc ...
Making dependency for file src/ExN03DetectorMessenger.cc ...
Making dependency for file src/ExN03DetectorConstruction.cc ...
Compiling ExN03DetectorConstruction.cc ...
Compiling ExN03DetectorMessenger.cc ...
Compiling ExN03EventAction.cc ...
Compiling ExN03EventActionMessenger.cc ...
Compiling ExN03PhysicsList.cc ...
Compiling ExN03PrimaryGeneratorAction.cc ...
Compiling ExN03PrimaryGeneratorMessenger.cc ...
Compiling ExN03RunAction.cc ...
Compiling ExN03SteppingAction.cc ...
Compiling ExN03SteppingVerbose.cc ...
Creating/replacing object files in /opt/heplib/Geant4/geant4.9.0.p01/tmp/Linux-g++/exampleN03/libexampleN03.a ...
ar: creating /opt/heplib/Geant4/geant4.9.0.p01/tmp/Linux-g++/exampleN03/libexampleN03.a
Compiling exampleN03.cc ...
Using granular libraries ...
Linking exampleN03 ...
... Done!

では、実行します(Xの環境が必要です)。なにやら出力がされて、プロンプトの待ち受け状態になります。ここで、OpenGLの画面がポップアップされ測定器の絵が描けていれば成功です。

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

*************************************************************
 Geant4 version Name: geant4-09-00    (29-June-2007)
                      Copyright : Geant4 Collaboration
                      Reference : NIM A 506 (2003), 250-303
                            WWW : http://cern.ch/geant4
*************************************************************


***** Table : Nb of materials = 13 *****

 Material: Aluminium     density:  2.700 g/cm3   temperature: 273.15 K  pressure:   1.00 atm  RadLength:   8.893 cm 
   --->  Element: Aluminium ( )   Z = 13.0   N =  27.0   A =  26.98 g/mole  ElmMassFraction: 100.00 %  ElmAbundance 100.00 %

 Material: liquidArgon     density:  1.390 g/cm3   temperature: 273.15 K  pressure:   1.00 atm  RadLength:  14.065 cm 
   --->  Element: liquidArgon ( )   Z = 18.0   N =  40.0   A =  39.95 g/mole  ElmMassFraction: 100.00 %  ElmAbundance 100.00 %

 Material:     Lead     density: 11.350 g/cm3   temperature: 273.15 K  pressure:   1.00 atm  RadLength:   5.612 mm 
   --->  Element: Lead ( )   Z = 82.0   N = 207.2   A = 207.19 g/mole  ElmMassFraction: 100.00 %  ElmAbundance 100.00 %


...

#
# At end of each run, an automatic flush causes graphical output.
#/run/beamOn 1
# When you exit Geant4, you will find a file called scene-0.heprep.zip.
# Unzipping this will give you three separate HepRep files suitable for
# viewing in WIRED.
# The first file will contain just detector geometry.
# The second file will contain the detector plus one event.
# The third file will contain the detector plus ten events.
Idle> 

ここで、/run/beamOnとタイプします。するとシミュレーションが始って、イベントディスプレイには、トラックの飛跡が表示されます。exitで終了します。

Idle> /run/beamOn 
/run/beamOn

phot:  Total cross sections from Sandia parametrisation. 
      Sampling according PhotoElectric model

compt:  Total cross sections has a good parametrisation from 10 KeV to (100/Z) GeV
      Sampling according Klein-Nishina model
      tables are built for  gamma
      Lambda tables from 100 eV  to 100 GeV in 90 bins.
...


Idle> exit

exN03 exN03-2 

Note: 測定器の絵が表示されない!!

最新のディストリビューションを使っている人は、不幸にも測定器の絵が表示されないかもしれません。OpenGLライブラリの問題でしょうか。今後のディストリビューションのリリースでは改善されることに期待しましょう。でも、これでは仕事ができないので、対処法を紹介しときます。

GPU搭載の場合

まず、自分のパソコンのグラフィック環境を確認します。最近のノートパソコンでは、NVIDIAなどのGPUを搭載しているものも出てきました。NVIDIAのグラフィックカードを搭載している場合は、NVIDIAのサイトからドライバを入手して、純正ドライバを使用しましょう。グラフィックパフォーマンスが劇的に向上します。ATI(AMD?)のカードに関しても同様です。

統合チップなどの場合

インテルの統合チップなどを使っている貧乏人は、ちょっと一苦労です。貧乏人のOpenGLライブラリであるMesaの最新版をインストールして、実行時に共有ライブラリを強制的に新しいものにリンクさせます。

Mesa3Dの最新版をダウンロードします。最新版は、7.0.1のようです。SourceForgeのサイトからMesaLibをダウンロードします。インストールする場所はどこでも構いません。

$ mkdir -p /opt/GL
$ cd /opt/GL
$ tar jxvf MesaLib-7.0.1.tar.bz2
$ cd Mesa-7.0.1
$ make linux-x86 or linux-x86-64
...

% setenv LD_LIBRARY_PATH /opt/GL/Mesa-7.0.1/lib   (csh)
# export LD_LIBRARY_PATH=/opt/GL/Mesa-7.0.1/lib   (bash)
これで改善するはずです。

5. 可視化ツールのインストール

DAWNパッケージのインストール

まずは、Geant4の可視化ツールの1つであるDAWNツール群をインストールします。DAWNは強力な3Dレンダラで、ポストスクリプト出力を生成します。DAWNには、以下のツールがあります。

  • dawn: DAWN本体
  • dawncut: DAWNのオブジェクトをある面で切断します。
  • david: DAWNを利用した、ジオメトリ衝突検出

ソースコードを展開します。

$ cd /opt/heplib/vistools
$ tar zxvf tarballs/dawn_3_88a.taz
...

$ tar zxvf tarballs/dawncut_1_54a.taz
...

$ tar zxvf tarballs/dawncut_1_54a.taz
...

まずは、dawnから。makeするだけで大丈夫なはずです。

$ cd /opt/heplib/vistools/dawn_3_88a
$ make
...

$ cp dawn ../../bin/
$ cp DAWN_GUI ../../bin/

64ビット環境の場合、相変らず、X11関係でライブラリが見つからないと怒られるかもしれません。慌てず、いつもの処方箋で、Makefileを書換えます。

XLIB_LIB = -L/usr/X11R6/lib64

では、テストしてみます。まずは、dawnのGUIフロントエンドであるDAWN_GUIを立ち上げてみます。Tcl/Tkが必要です。次にdawnを使って表示させてみます。DAWNのオブジェクトは、primファイルという独自のファイル形式で記述されます。 primitives.prim のファイルには、DAWNでサポートされる形状のサンプルデータが含まれていますので、これを表示してみます。

$ ./DAWN_GUI
(Exitで終了)

$ ./dawn primitives.prim 

dawn_gui dawn_ps

続いて、同様に、dawncut、davidをインストールします。

$ cd /opt/heplib/vistools/dawncut_1_54a/
$ make
...

$ cp dawncut ../../bin/

$ cd /opt/heplib/vistools/david_1_36a/
$ make
...

$ cp david ../../bin/

これらは、$G4TUT_BASE/heplib/bin/以下にインストールしましたので、ここにパスを通しときましょう。

VMRLviewの動作確認

VRMLviewは、3Dオブジェクトの記述形式のVRMLをサポートするビューワです。ここからダウンロードできます。今回は、すでにパッケージの中にインストール済みですので、動作確認するだけです。

$ /opt/heplib/bin/vrmlview

vrmlview

Important: はまる人はやっぱりハマル...

ヘボなディストリビューションだと、LANGの環境がja_JP.UTF-8とかだと、vrmlviewが立上がらないかもしれません。配布のパッケージでは、LANGをPOSIXにして実行しています。

64ビット環境の人は、OpenGLのライブラリがないといって怒られるかもしれません。vrmlviewはバイナリ配布で、これ32ビットアプリなのです。ですので、32ビットのランタイムライブラリが必要になります。OpenGL関連の32ビットライブラリをインストールするのを忘れないでください。

Wired3の動作確認

Wired3は、高エネルギー実験のイベントディスプレイ用に開発されたオブジェクト形式であるHepRepをサポートするビューワです。JAVAで開発されています。レンダリング機能はありませんが、トラック情報をインタラクティブに表示するなど、イベントディスプレイとしての機能が充実しています。

$ java -jar /opt/heplib/Wired/HepRApp.jar

Note: JAVA... orz

JAVAの実装はいろいろあるので、困りものです。ヘボなディストリビューションだと、いろいろ入れるのはいいけど、うまく統率できていないような。SL4.5もそんなディストリビューションの一つです。Sun版使うとちゃんと動作します。

wired3

6. ROOTのインストール

最後に、解析ツールとして、ROOTをインストールします。すでにROOTがインストールされていれは、ここはスキップして下さい。ここでは、最小構成でビルドすることとします。

$ cd /opt/heplib/ROOT/src/5.16.00
$ tar zxvf ../../tarballs/root_v5.16.00.source.tar.gz
$ cd root
$ ./configure linux --prefix=/opt/heplib/ROOT/5.16.00 --etcdir=/opt/heplib/ROOT/5.16.00/etc \
   --enable-soversion --enable-rpath                                (32ビット)
$ ./configure linuxx8664gcc --prefix=/opt/heplib/ROOT/5.16.00 --etcdir=/opt/heplib/ROOT/5.16.00/etc \
   --enable-soversion --enable-rpath                                (64ビット)
$ make
...

$ make install
...

$ cd /opt/heplib/ROOT/
$ ln -s 5.16.00 pro

64ビット環境で、CERNLIBを既にインストールしている場合は、--disable-cern を指定した方がいいかもしれません。64ビット環境でCERNLIBもROOTも動かしたい人は、まずはこちらの情報から。インストールが無事終ったら、$G4TUT_BASE/heplib/ROOT/pro/binへパスを通しときます。環境変数ROOTSYS$G4TUT_BASE/heplib/ROOT/pro にセットします。ROOTSYSの設定は、.cshrc.bashrcに書いておきましょう。

% setenv ROOTSYS /opt/heplib/ROOT/pro    (csh)
# export ROOTSYS=/opt/heplib/ROOT/pro    (bash)

では、ROOTを立ち上げてみます。ROOTのsplash画面が立上がり、コマンドプロンプト待ち受け状態になります。TBrowserを表示させてみます。無事、ROOTのオブジェクトブラウザが立上がれば成功です。.q で終了します

$ which root
/opt/heplib/ROOT/pro/bin/root
$ root
  *******************************************
  *                                         *
  *        W E L C O M E  to  R O O T       *
  *                                         *
  *   Version  5.14/00e     29 March 2007   *
  *                                         *
  *  You are welcome to visit our Web site  *
  *          http://root.cern.ch            *
  *                                         *
  *******************************************

FreeType Engine v2.1.9 used to render TrueType fonts.
Compiled on 14 May 2007 for macosx with thread support.

CINT/ROOT C/C++ Interpreter version 5.16.16, November 24, 2006
Type ? for help. Commands must be C++ statements.
Enclose multiple statements between { }.
root [0] a= TBrowser()
(class TBrowser)73048176
root [1] .q 

root

以上で終了です。ご苦労さまでした。