Closed22

Geant4のインストール

shotakahashotakaha

Geant4

https://geant4.web.cern.ch/

インストール先

  1. MacBook Pro (2018)
    • macOS: Sonoma 14.2.1
    • CPU: Intel Core i5 (2.3 GHz Quad-Core)
    • GPU: Intel Iris Plus
    • Memory: 16GB
    • Homebrew : /usr/local/bin/brew
  2. MacBook Air (2022)
    • macOS: Ventura 13
    • CPU:
    • GPU:
    • Memory:
    • Homebrew: /opt/homebrew/bin/brew
  • 2台のパソコンにインストールする
  • Homebrewのパスが異なるので、パス表記が揺れるかも
shotakahashotakaha

インストールガイド

https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/index.html

  • 以前(10年くらい前)はソースコードを自分でDLし、コンパイルしたが、とても苦労した
  • 現在はパッケージ管理ツールでもインストールできるようになっているみたい
    • 実は、ちょっと前(5年くらい前?)はHomebrewにもフォーミュラがあったが、いまはなくなってしまった
  • 今回はspackを使ったインストールに挑戦してみる
shotakahashotakaha

ソースからビルドする手順

https://geant4-userdoc.web.cern.ch/UsersGuides/InstallationGuide/html/installguide.html#buildandinstall

作業ディレクトリに移動する
$ mkdir ~/geant4
$ cd ~/geant4/ 
(~/geant4) $
ソースコードを準備する
(~/geant4/) $ cp ~/Downloads/geant4-v11.2.0.tar.gz ~/geant4/
(~/geant4/) $ tar xzvf geant4-v11.2.0.tar.gz
ビルド用のディレクトリを準備する
(~/geant4/) $ mkdir build
$ ls -l
geant4-v11.2.0.tar.gz
geant4-v11.2.0/
build/
ビルド用のディレクトリでビルドする
(~/geant4/) $ cd build
(~/geant4/build/) $ cmake -DCMAKE_INSTALL_PREFIX=~/geant4/11.2.0 ../geant4-v11.2.0
ビルドする
(~/geant4/build/) $ make -j8
(~/geant4/build/) $ make install
(~/geant4/build/) $ ls ~/geant4/
geant4-v11.2.0.tar.gz    # DLしたソースコード(削除してもOK)
geant4-v11.2.0/    # 展開したソースコード
build/    # ビルド用ディレクトリ
11.2.0/    # インストール先ディレクトリ(CMAKE_INSTALL_PREFIX)
shotakahashotakaha

Spack

https://spack.io/

  • スパコンなどのHPC向けのパッケージ管理ツール
  • クロスプラットフォーム対応していて、LinuxやmacOSなどでも使える
  • 基本的にソースからコンパイルするため、それなりに時間がかかる
  • 複数のバージョン、設定、プラットフォーム、コンパイラでパッケージをビルドすることができる
  • ビルドしたものすべてを同じマシン上に共存させることができる
shotakahashotakaha

Spackのインストール

https://spack.readthedocs.io/en/latest/getting_started.html

$ brew install curl gcc git gnupg zip
$ brew install spack
  • Homebrewでインストールできる
  • 事前に追加しておいたほうがよいフォーミュラがある
    • gitは他の用途でインストール済みだった
    • curlgcczipも追加したが、OS標準のものを使ってる
    • gnupgはSpack用のパッケージを作成しないので、必要なかったかも
shotakahashotakaha

Geant4のインストール

$ spack install geant4
(ひたすら待つ)

# パッケージ情報を確認
$ spack find -v geant4
-- darwin-ventura-m2 / apple-clang@15.0.0 -----------------------
geant4@11.1.2~ipo~motif~opengl~qt~tbb+threads~vecgeom~vtk~x11 build_system=cmake build_type=Release cxxstd=17 generator=make patches=2979cb7
==> 1 installed package

# パッケージのパスを確認
$ spack find -p geant4
-- darwin-ventura-m2 / apple-clang@15.0.0 -----------------------
geant4@11.1.2  /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/geant4-11.1.2-2b2cxmb4pwpzivdc4hazcw3hbajmenyz
==> 1 installed package
  • オプションをつけずにインストールした
    • コンパイルに30分くらいかかった
    • OpenGLやQtを使いたい場合は、オプションを有効にして別途インストールすればよいはず
  • パスを確認したらHomebrewでインストールしたspackの下にインストールされていた
    • spackのバージョンを更新したら、再インストールが必要になるかもしれない
  • 必要なデータ(geant4-data)も依存パッケージとしてインストールされた
shotakahashotakaha

サンプルを準備する

# 作業ディレクトリを作成
$ mkdir ~/repos/sandbox/g4work/
$ cd ~/repos/sandbox/g4work/

# Geant4のパスを確認
(~/r/s/g4work) $ spack find -p geant4

# サンプルを作業ディレクトリにコピー
(~/r/s/g4work) $ cp -r /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/geant4-11.1.2-2b2cxmb4pwpzivdc4hazcw3hbajmenyz/share/Geant4/examples .

# サンプルの中身を確認
(~/r/s/g4work) $ cd examples
(~/r/s/g/examples) $ ls -1
CMakeLists.txt
GNUmakefile
History
README
README.HowToRun
README.HowToRunMT
advanced/
basic/
extended/
novice
  • 作業用ディレクトリを作成した(~/repos/sandbox/g4work/
  • インストールしたパスの中のshare/Geant4/examples/ディレクトリにサンプルがある
  • これを作業用ディレクトリにコピーした
  • サンプルはbasicadvancedextendedに分かれている
    • 以前noviceだったものが、basicにリネームされ、内容も見直されたみたい
  • とりあえずbasicにあるサンプルを動かせるか確認する
shotakahashotakaha

シェルの設定

まず失敗させてエラーを確認する
$ spack load geant4
==> Error: `spack load` requires Spack's shell support.
  To set up shell support, run the command below for your shell.
  ...
  For fish:
    source /usr/local/Cellar/spack/0.21.1/share/spack/setup-env.fish
  ...  
  • シェルにGeant4関係のパッケージのパスを設定する必要がある(んだと思う)
  • spack load geant4を実行する
  • シェル設定ができてない場合は、エラーが表示される
  • エラーにしたがってsetup-env.fishを読み込ませる
シェル設定し、Geant4を読み込む
$ source /usr/local/Cellar/spack/0.21.1/share/spack/setup-env.fish
$ spack load geant4
$ echo $CMAKE_PREFIX_PATH
  • Fishシェル用のsetup-env.fishを読み込ませた
  • Geant4をロードした
  • $CMAKE_PREFIX_PATHが設定されていた
shotakahashotakaha

シェル設定の詳細

$ source /usr/local/Cellar/spack/0.21.1/share/spack/setup-env.fish
  • このスクリプトの中で設定される環境変数の一覧をChatGPTに聞いてみた
  1. _sp_initializing : スクリプトが再帰的に自身を呼び出すのを防ぐための変数。スクリプトの実行開始時に設定され、処理の最後に削除される。
  2. SPACK_PYTHON : Spackが使用するPythonインタープリタのパス変数
    • 今回は python3(=/opt/homebrew/bin/python3)に設定されていた。
  3. SPACK_ROOT : Spackのインストールディレクトリへのパス変数
    • which python3のパスに設定されていた
    • MBA: /opt/homebrew/Cellar/spack/0.21.1に設定
    • MBP: ~/.local/share/mise/installs/python/latest/bin/python3に設定
  4. SPACK_SHELL : 使用中のシェルの種類を示す変数
    • これは"fish"に設定(ハードコード)されている。
  5. _sp_shell : 内部で利用されるシェルを示す変数
    • これも"fish"に設定されている。
  6. SPACK_SKIP_MODULES : 環境変数が設定されている場合、モジュールの設定ステップはスキップされる。ユーザーが必要に応じてモジュールの自動設定を無効にできる。
  7. MODULE_PREFIX: モジュールシステムがインストールされているディレクトリのパス変数。Spackが設定する。moduleコマンドのラッパー関数によって使用される。
    • 確認したら未設定(見つからなかった)だった。
  8. MODULEPATH : モジュールが検索するディレクトリのリスト。Spackが設定する。
    • 確認したら空欄だった。
  9. SPACK_*で始まるDYLD_* : SPACK_のプレフィックスがついたDYLD_LIBRARY_PATHDYLD_FALLBACK_LIBRARY_PATH
shotakahashotakaha

Geant4の設定

$ spack load --fish geant4
  • --fishオプションをつけて、シェル設定の内容を出力した
  • ここで設定された環境変数の一覧をChatGPTに教えてもらった
  1. ACLOCAL_PATH : Autoconfのマクロを探すためのパス変数。
    • MBA: /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/curl-8.4.0-m7hp2jt6w6zubawptowsumvqxgwekhjm/share/aclocalに設定された。
    • MBP: /usr/local/Cellar/spack/0.21.1/opt/spack/darwin-sonoma-skylake/apple-clang-15.0.0/curl-8.4.0-tn6jxo5o2ler3ndstbhlzd2jormaesjo/share/aclocal に設定された
    • アーキテクチャ - OS - CPU ごとに分かれている
  2. CMAKE_PREFIX_PATH : CMakeがパッケージを探すためのプレフィックスのリスト
  3. DYLD_FALLBACK_LIBRARY_PATH : macOSで見つからなかったライブラリのためのフォールバックパス
  4. Geant4で使用されるデータセットのパス変数
    • G4ABLADATA
    • G4ENSDFSTATEDATA
    • G4INCLDATA
    • G4LEDATA
    • G4LEVELGAMMADATA
    • G4NEUTRONHPDATA
    • G4PARTICLEXSDATA
    • G4PIIDATA
    • G4RADIOACTIVEDATA
    • G4REALSURFACEDATA
    • G4SAIDXSDATA
  5. MANPATH : マニュアルページを探すためのパス変数
  6. PATH : 実行可能ファイルを探すためのパス変数。/opt/homebrew/Cellar/spack/0.21.1/binが追加された。
  7. PKG_CONFIG_PATH : pkg-configがパッケージのメタデータを探すためのパス変数
  8. SPACK_LOADED_HASHES : Spackによってロードされたパッケージのハッシュ値
shotakahashotakaha

サンプルをビルドする手順

https://geant4-userdoc.web.cern.ch/Doxygen/examples_doc/html/README_HowToRun.html

cmakeのインストール
$ brew install --cask cmake
  • cmakeが必要だったのでHomebrewでCaskをインストールした
B1をビルドする
(~/r/s/g4work) $ cd examples/basic/B1

# ビルド用のディレクトリを作成する
(~/r/s/g/e/b/B1) $ mkdir build
(~/r/s/g/e/b/B1) $ cd build

# CMakeでビルドする
(~/r/s/g/e/b/B/build)$ cmake ..
(~/r/s/g/e/b/B/build)$ cmake --build .
[100%] Built target exampleB1
  • B1サンプルをCMakeを使ってビルドする
  • B1ディレクトリの中にビルド用ディレクトリを作成する
    • ディレクトリ名はなんでもよいのでbuildとした
    • このディレクトリの中に移動してCMakeを実行する
  • cmakeの引数はCMakeLists.txtがあるディレクトリを指定する
    • 今回の場合cmake ..となる
    • 現在のディレクトリ(build)にMakefileをはじめ、必要なファイルが作成された
  • cmake --buildの引数はMakefileがあるディレクトリを指定する
    • 今回の場合cmake --build .となる
    • make -j 8でもビルドできる(make installは必要ない)
shotakahashotakaha
  • exampleB1.ccを確認した
  • 引数なし/ありで対話モード/バッチモードを切り替える様になっていた
  • 対話モードではinit_vis.macvis.macを読み込むようになっていた
shotakahashotakaha

サンプルを実行する

# 前からの続き
(~/r/s/g/e/b/B/build) $ ./exampleB1 run1.mac
(~/r/s/g/e/b/B/build) $ ./exampleB1 run2.mac
(~/r/s/g/e/b/B/build) $ ./exampleB1 vis.mac
  • ビルド用ディレクトリ(build)の中に、マクロ(.mac)のサンプルもある
  • ビルドした実行ファイル(exampleB1)の引数に、このマクロを与えて実行する
  • ・・・なんか動いているっぽいが、vis.macはなにも表示されなかった
  • OpenGLを有効にしてGeant4をビルドしてみる
shotakahashotakaha

OpenGLを有効にして再ビルド

$ spack install -j 8 geant4 +opengl
[+] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk (external apple-gl-4.1.0-7zxl4gtxbssrebxhmlybw3hr2jtbhgki)
[+] /Library/Developer/CommandLineTools/SDKs/MacOSX.sdk (external apple-glu-1.3.0-qlgfxf4jnhznzm35ucxxxcyygkfkcnxc)
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/clhep-2.4.6.4-vxupzlxhqgg6dy7v5c6dxvjuumlpj6az
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/nghttp2-1.57.0-l636eprnaph6brbh2lxuomalssi2qcbs
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/zlib-ng-2.1.4-2vspbawpttxcm7tufot74eo75onlephf
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/ncurses-6.4-wxifsbix6xick4zhqpadwqpbjwj6iexz
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/expat-2.5.0-mpf2j3zq2xuqyek66fubnobuwpfdx6fi
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4abla-3.1-zohy2vrjttwsvpdcbgp7upvw3wyp2z5r
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4emlow-8.2-jvpl4zvihulhxlxj7ntvmu4enai73syb
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4ensdfstate-2.3-z4ughquur4a2ycjvllfzobaeo4npcpeh
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4incl-1.0-p5uvyzctvilba553zvlde4u67weqy32g
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4ndl-4.7-jtnt5wt5fnza4ihunenxbg76rwsfbsca
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4particlexs-4.0-xcfhvmgg3tkoxsudvc2452prz7ojo7ux
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4photonevaporation-5.7-mmymywt4nuiihrd6uu54q7ll2zb4ct5v
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4pii-1.3-nogoyjgxjnvjqvrub4ks6nghvyormqot
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4radioactivedecay-5.6-insd4z3fmazyoloowjvp7jvkk4ew4t2o
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4realsurface-2.2-il76qwhy6okjt32jdvts5vbpoj5i7jjo
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/g4saiddata-2.0-ytgdtr2p53vhllkvwdzllnhxdgo3uj75
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/gmake-4.4.1-vskkbu4ps2ur6myydqb2bfcqhn3p362n
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/geant4-data-11.1.0-f5ohhrt2srcwxzsvyazg4qamrux5hu5h
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/curl-8.4.0-m7hp2jt6w6zubawptowsumvqxgwekhjm
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/xerces-c-3.2.4-aj4f3te7v4xucjnok4e5ln4fhhckxggp
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/cmake-3.27.7-q7awqrbrdatxqq5pxc26dtubrx3t7rio
==> Installing geant4-11.1.2-sjyyq7lvwgmtz3tkl2w4hn2fpm6fhh3t [24/24]
==> No binary for geant4-11.1.2-sjyyq7lvwgmtz3tkl2w4hn2fpm6fhh3t found: installing from source
==> Using cached archive: /opt/homebrew/Cellar/spack/0.21.1/var/spack/cache/_source-cache/archive/e9/e9df8ad18c445d9213f028fd9537e174d6badb59d94bab4eeae32f665beb89af.tar.gz
==> Applied patch /opt/homebrew/Cellar/spack/0.21.1/var/spack/repos/builtin/packages/geant4/package-cache.patch
==> geant4: Executing phase: 'cmake'
==> geant4: Executing phase: 'build'
==> geant4: Executing phase: 'install'
==> geant4: Successfully installed geant4-11.1.2-sjyyq7lvwgmtz3tkl2w4hn2fpm6fhh3t
  Stage: 3.24s.  Cmake: 6.74s.  Build: 11m 33.38s.  Install: 23.25s.  Post-install: 7.08s.  Total: 12m 14.10s
[+] /opt/homebrew/Cellar/spack/0.21.1/opt/spack/darwin-ventura-m2/apple-clang-15.0.0/geant4-11.1.2-sjyyq7lvwgmtz3tkl2w4hn2fpm6fhh3t

$ spack find -lv geant4
-- darwin-ventura-m2 / apple-clang@15.0.0 -----------------------
2b2cxmb geant4@11.1.2~ipo~motif~opengl~qt~tbb+threads~vecgeom~vtk~x11 build_system=cmake build_type=Release cxxstd=17 generator=make patches=2979cb7
sjyyq7l geant4@11.1.2~ipo~motif+opengl~qt~tbb+threads~vecgeom~vtk~x11 build_system=cmake build_type=Release cxxstd=17 generator=make patches=2979cb7
==> 2 installed packages
  • インストール済みのパッケージがあるものはスキップされた
  • 全体で12mくらいかかった
  • 2種類のGeant4がインストールされていることを確認した
  • geant4/sjyyq7l+opengl)を使って、シェルのセッションを新しくして、再度サンプルを実行する
shotakahashotakaha
  • 同じ手順でビルドできた
  • vis.macはなにも表示されなかった
  • Qtを有効にしてトライしてみる
shotakahashotakaha

Qtを有効にして再ビルド

$ spack install -j 8 geant4 +qt
...
==> Installing qt-5.15.11-5ikzf36gofdcury3sgf4jzrbqaqkiwmx [58/59]
==> No binary for qt-5.15.11-5ikzf36gofdcury3sgf4jzrbqaqkiwmx found: installing from source
==> Using cached archive: /opt/homebrew/Cellar/spack/0.21.1/var/spack/cache/_source-cache/archive/74/7426b1eaab52ed169ce53804bdd05dfe364f761468f888a0f15a308dc1dc2951.tar.xz
==> Applied patch /opt/homebrew/Cellar/spack/0.21.1/var/spack/repos/builtin/packages/qt/qt5-pcre.patch
==> Applied patch /opt/homebrew/Cellar/spack/0.21.1/var/spack/repos/builtin/packages/qt/qt515-quick3d-assimp.patch
==> Applied patch /opt/homebrew/Cellar/spack/0.21.1/var/spack/repos/builtin/packages/qt/qt5-macos12.patch
==> Applied patch /opt/homebrew/Cellar/spack/0.21.1/var/spack/repos/builtin/packages/qt/qt59-qtbase-qtconfig256.patch
==> qt: Executing phase: 'configure'
==> Error: ProcessError: Command exited with status 3:
==> Warning: Skipping build of geant4-11.1.2-ykv2eqylvbaghtdo54eexn3i65qpyzia since qt-5.15.11-5ikzf36gofdcury3sgf4jzrbqaqkiwmx failed
==> Error: geant4-11.1.2-ykv2eqylvbaghtdo54eexn3i65qpyzia: Package was not installed
==> Error: Installation request failed.  Refer to reported errors for failing package(s).
  • Qtに関するパッケージが追加でインストールされた
  • だけどQtのインストールには失敗した
    • configureでエラーがでているっぽい
shotakahashotakaha

Motifを有効にして再ビルド

$ spack install -j 8 geant4 +motif
  • これもmotifのビルドに失敗した
shotakahashotakaha
  • ビジュアライズ系がうまくいかないのでひとやすみ
  • VRML(.wrlファイル)に書き出して、オンラインサービスで確認するのがいいかも
shotakahashotakaha

(ひとまず)まとめ

  • spackを使ってGeant4本体はインストールできるが、可視化ツール(Qt)を有効にできない
  • シミュレーションの過程/結果をインタラクティブに確認したい場合は、通常のインストールがよい
  • シミュレーションをひたすら実行したいだけなら問題ないのかもしれない
    • スパコン上でビルドして実行してみたい
shotakahashotakaha

実行時エラー:no LC_RPATH's found

$ ./bin/Application_Main   
dyld[7796]: Library not loaded: @rpath/libG4Tree.dylib
  Referenced from: <ECA6C6F9-F3CE-3F83-BA3C-2191F7D130C1> ~/repos/sandbox/g4work/g4tutorial2024-1.0.1/P09_Scoring1/WaterBox_CBS/bin/Application_Main
  Reason: no LC_RPATH's found
zsh: abort      ./bin/Application_Main
  • make install./binに実行ファイルを作成した
  • そのファイルを実行するとno LC_RPATH's fondというエラーがでた
    • ビルド用のディレクトリで実行すればOK
  • 最初の行にLibrary not loaded: @rpath/libG4Tree.dylibとあるように、原因はmacのダイナミックライブラリのパス設定にあるっぽい
shotakahashotakaha

CMakeLists.txtを修正

#----------------------------------------------------------------------------
# RPATH settings
set(CMAKE_MAXOSX_RPATH TRUE)
set(G4LIB "$ENV{HOME}/geant4/11.2.1/lib")
set(CMAKE_BUILD_RPATH ${G4LIB})
set(CMAKE_INSTALL_RPATH ${G4LIB})
set(CMAKE_BUILD_WITH_INSTALL_RPATH TRUE)
  • CMakeLists.txtにRPATHの設定を追加した
  • ライブラリのパスは(ほぼ)直打ちした
  • add_executableなどより前に設定する必要があった
このスクラップは2ヶ月前にクローズされました