Geant4 インストール

# Geant4 をインストールしよう

[「おためし Geant4」](https://qiita.com/aximov/items/1831c2e580a489fc5083) で書きましたが，Geant4 を試すだけなら仮想環境というお手軽な手段があります。しかし，仮想環境は一般にパフォーマンスが出ません。他にも Azure で動いた実績のある Docker イメージという手段もありますが，これはそれこそ書き終えたコードを回し続けるプロダクション環境用として使うべきでしょう（いちいち可視化するためのものでもないので）。

したがって，ユーザーアプリケーションを開発する段階では Geant4 を手元にインストールする必要があります。

## インストール手順

[Geant4 初心者講習会](https://wiki.kek.jp/display/geant4/Geant4+Japanese+Tutorial+for+Detector+Simulation+2017)の資料に日本語でインストール手順を解説したものがありますし，[英語のドキュメント](http://geant4-userdoc.web.cern.ch/geant4-userdoc/UsersGuides/InstallationGuide/html/)が充実していますので，改めて書くことによる利益はあまりないかもしれませんが，以下にインストール手順の概要と僕が実際に引っかかった箇所を記しておきます。

### 1. サポートされている環境

Geant4 開発者の多い CERN ではもともと Scientific Linux が開発されていることもあり，公式にサポートされている環境の筆頭には Scientific Linux があがっています。Scientific Linux は RHEL ベースのディストリビューションですので，同様に RHEL ベースである CentOS がサポートされています（KEKが配布している仮想イメージは CentOS に Geant4 をインストールしたものです）。他にも macOS 10.9 以降，Windows 7 以降などでサポートされています。僕は公式にはサポートされていない Ubuntu 16.04 にインストールしたものを使っていますが，今のところ大きな問題は起きていません。要は C++11 が使える GCC がインストールできる環境であれば基本的に問題はないようですが，ユーザー人口分布を考えるとせめて 64bit 環境のほうが 32bit 環境より好ましいと個人的には思います。

### 2. Geant4 をビルドするために必要なもの

Geant4 をインストールするためには，ソースコードからコンパイルする必要があります。誰かがビルドしたバイナリを使ってもいいのですが，他人がビルドしたものが自分の環境でも同様に動くとは限りません。参照するライブラリのバージョンがずれたりすることが考えられます。

Geant4 をビルドするには，

- Geant4 のソースコード
- CMake
- C++コンパイラ（[OSによって異なる](http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/ch01s02.html)）
- Linux と macOS では Make 

が必要です。

Linux の各ディストリビューションではそれぞれのパッケージマネージャによって CMake などをインストールしておくのが好ましいです。使っているディストリビューションが古すぎて要求される CMake のバージョンを満たせない場合には，手作業で CMake をダウンロードしてきてインストールすることになります。

加えて，可視化をするためには

- Qt（きゅーと）もしくは X11
- OpenGL

が必要です。Ubuntu なら Qt は特に苦労なく用意できたと記憶していますが，OpenGL を入れるには確か `mesa-dev` みたいな名前のパッケージを入れる必要があったと思います。Linux で OpenGL を入れようとすると日本語情報自体が少なく，「mesa は使うべきでない」という情報も目にした気がしますが，[このへん](https://en.wikibooks.org/wiki/OpenGL_Programming/Installation/Linux) を読むととりあえず mesa を入れておけばよさげです。

他の機能を使いたい場合はもっと必要なものがありますが，あとから入れても問題ないのでとりあえず飛ばします。

### 3. ビルドする

「そもそもビルドってなんやねん」という方に少しだけ説明させていただくと，プログラムはCPUが解釈可能な機械語で書かれたバイナリファイルである必要がありますが，機械語が書ける人間は稀なので，なんらかのプログラミング言語で書かれたソースコードから機械語プログラムに変換する必要があります。このソースコードから機械語へ変換する作業を（実際にはソースコード以外のものも引っ張ってくるのですが）コンパイルとかビルドとか言うのだと思います。間違っていたら編集リクエストをください。

さて，実際にビルドするときは自分の権限が及ぶディレクトリにインストールすることを念頭においてください。たとえば `/home/あなたのなまえ` みたいな場所をあなたのホームディレクトリと言いますが，ホームディレクトリは確実にあなたの権限が使えます。root パスワードを知らなかったりあなたが sudoers の一員でなかったりするかぎりでは，ホームディレクトリ以下のどこかわかりやすいところにインストールしたほうがいいと思います。

具体的にビルドの手順です。以下では公式ドキュメントにならいインストール先を `/path/to/geant4.バージョン.-install` とします（これは文字通りの場所ではありません。あなたの望むインストール先に読み替えてください）。

`geant4.バージョン.tar.gz` というような名前のソースコードファイルをダウンロードして `/path/to/geant4.バージョン` に解凍してください。コマンドラインなら `tar zxfv ダウンロードしたファイル名` みたいに打てば展開されます。

ビルドする場所は実はどこでもいいのですが，わかりやすいようインストール先の近くの `/path/to/geant4.バージョン-build` をビルド場所にします。この名前のディレクトリはまだないと思いますので，以下のコマンドで作成します。

```shell-session
$ mkdir /path/to/geant4.バージョン-build
```

CMake によって Makefile をつくります。

```shell-session
$ cd /path/to/geant4.バージョン-build
$ cmake -DCMAKE_INSTALL_PREFIX=/path/to/geant4.バージョン-install \
  -DGEANT4_INSTALL_DATA=ON \
  -DGEANT4_USE_QT=ON \
  /path/to/geant4.バージョン
```

`-DCMAKE_INSTALL_PREFIX=` はインストール先を指定する引数を示すオプションです。

`-DGEANT4_INSTALL_DATA=` は Geant4 のデータセットをダウンロード&インストールするかどうかを示すオプションです。多分使うと思います。

`-DGEANT4_USE_QT=ON` は Qt と OpenGL を用いて可視化するオプションです。

他のオプションは[公式ドキュメント](http://geant4.web.cern.ch/geant4/UserDocumentation/UsersGuides/InstallationGuide/html/ch02s03.html)にまとまっています。

たとえば僕は次のようなオプションを付けています。

```shell-session
$ cmake -DCMAKE_INSTALL_PREFIX=/usr/local/geant4/geant4.10.05.p01-install \
-DGEANT4_INSTALL_DATA=ON \
-DGEANT4_USE_QT=ON \
-DGEANT4_BUILD_MULTITHREADED=ON \
-DGEANT4_BUILD_CXXSTD=14 \
~/workspace/geant4.10.05.p01
```

cmake が終わりましたか？それでは make しましょう。

```shell-session
$ make -jN
```

`N` にはCPUのコア数*2くらいを入れるとよいという説がありますが，あまり大きくない好きな数字を入れてみて下さい。

ビルドが終わりましたか？ではインストールしましょう。

```shell-session
$ make install
```

終わりです。

### オプション付け忘れた

可視化オプション付け忘れたとか，GDML使いたくなったという場合，以下のように CMake しなおしてから また Make します。

```shell-session
$ cd /path/to/geant4.バージョン-build
$ cmake -Dおぷしょん=ON .
$ make -jN
```

何度も make しなおす場合は [ccache](https://ccache.samba.org/) を使うと幸せになれるかもしれません。