Linuxユーザ
最近のLinuxディストリビューションであれば特に問題ありません。 SL3、RedHat ES4/5クローン (SL4/5, CentOS等)、openSUSE、Ubuntu等で動作確認されています。gccなどの開発環境をインストールしておいてください。gccのバージョンは、3.2.3移行が必要です。gccバージョン4系の方がより高いパフォーマンスが得られます。Intel Core2等の64bit環境(X64)でも問題なく動作します。
1. 講習会用パッケージのダウンロード、展開
ここから、講習会用パッケージ(
$ 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の場合
-
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を消すの?
静的ライブラリと共有ライブラリが同じディレクトリ内にあると、リンカは共有ライブラリを優先的に利用します。この場合、アプリケーション実行時に動的に関数などの割当てを行うことになります。この際、ライブラリの場所をシステムの規則に従って探します。通常は、
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ユーザは
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ビットライブラリが
まず、X11関連のライブラリが入っているディレクトリを確認してください。OpenGL関連のライブラリ(
それでは、Geant4のビルドを開始します。コンパイルが終ったら、
$ 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>
ここで、
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
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関係でライブラリが見つからないと怒られるかもしれません。慌てず、いつもの処方箋で、
XLIB_LIB = -L/usr/X11R6/lib64
では、テストしてみます。まずは、dawnのGUIフロントエンドであるDAWN_GUIを立ち上げてみます。Tcl/Tkが必要です。次にdawnを使って表示させてみます。DAWNのオブジェクトは、primファイルという独自のファイル形式で記述されます。
$ ./DAWN_GUI (Exitで終了) $ ./dawn primitives.prim
続いて、同様に、dawncut、davidをインストールします。
$ cd /opt/heplib/vistools/dawncut_1_54a/ $ make ... $ cp dawncut ../../bin/ $ cd /opt/heplib/vistools/david_1_36a/ $ make ... $ cp david ../../bin/
これらは、
VMRLviewの動作確認
VRMLviewは、3Dオブジェクトの記述形式のVRMLをサポートするビューワです。ここからダウンロードできます。今回は、すでにパッケージの中にインストール済みですので、動作確認するだけです。
$ /opt/heplib/bin/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版使うとちゃんと動作します。
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を既にインストールしている場合は、
% setenv ROOTSYS /opt/heplib/ROOT/pro (csh) # export ROOTSYS=/opt/heplib/ROOT/pro (bash)
では、ROOTを立ち上げてみます。ROOTのsplash画面が立上がり、コマンドプロンプト待ち受け状態になります。TBrowserを表示させてみます。無事、ROOTのオブジェクトブラウザが立上がれば成功です。
$ 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
以上で終了です。ご苦労さまでした。