Mac HighSierra に Geant4 をインストールした

## 概要
Mac High Sierra (10.13.06) に 現時点(2018.9.15)の最新バージョンのGeant4(v10.4)をQt付きでインストールしました。

ここでは、Geant4のビルドに必要なものをHomebrewを使ってインストールします。
（Homebrewのインストール方法は後述。）

ちなみに、Qtを入れる理由は、Qtを使うとジオメトリーをぬるぬる動かながら確認できるからです。ジオメトリのスクショとかもかっこいいアングルから取れるので、おすすめです。

ちなみにこのサイトでは、**インストールとは、サンプルコードを動かすところまで**という考え方で作成しているので、サンプルコードを動かすところまで書いてあります。

## インストール環境
- Mac OS High Sierra 10.13.6

## インストールするGeant4バージョン
- Geant4 10.04 (2018.9.15時点で最新バージョン）

## 参考URL
インストールの大筋の流れはaximovさんのページを参考にしました。
- [1] [Geant4 インストール @aximov (2017年12月04日投稿)](https://qiita.com/aximov/items/3387e4cba7040f2acfe2)
また、cmake時のオプションの解説についてはこちらのブログを参考にしました。
- [2] [LionにGeant4 9.5を入れた　oxon 2012-6-12](http://oxon.hatenablog.com/entry/20120606/1338914278)
最後にちょっと詳細の確認のため、公式(CERN)の Geant4 Installation Guideも参考にしました。
- [3] [CERN Geant4 Installation Guide](http://geant4-userdoc.web.cern.ch/geant4-userdoc/UsersGuides/InstallationGuide/html/index.html)

## 1. 事前インストール
### 1.1. Homebrew
Homebrew公式サイト → [https://brew.sh/](https://brew.sh/)

Homebrewは下の一行でインストールできます！（とても簡単）
すでにインストール済みの方は飛ばしてください。


```Terminal
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```


### 1.2. Cmake
Homebrewを使ってインストールします。

```Terminal
brew install cmake
```
### 1.3. Qt

こちらもHomebrewを使ってインストールします。（おそらく）Qt5が自動的にインストールされるはずです。

```Terminal
brew install qt  
```


ちなみに、Geant4でcmakeするときにQt5関連でエラーが起きてしまう(エラー例: [[4]](https://github.com/OSGeo/homebrew-osgeo4mac/issues/151)[5](https://github.com/Homebrew/homebrew-core/issues/8392))。それを回避するために、pathを通しておく必要があります。

pathの通し方は人によりけりですが、.bash_profileを使っている方は、.bash_profileに以下の4つのpathを追記してください。

```~/.bash_profile
export PATH=/usr/local/opt/qt/bin:$PATH
export LDFLAGS="-L/usr/local/opt/qt/lib":$LDFLAGS
export CPPFLAGS="-I/usr/local/opt/qt/include":$CPPFLAGS
export PKG_CONFIG_PATH=/usr/local/opt/qt/lib/pkgconfig:$PKG_CONFIG_PATH
```

.bash_profileの編集が終わったら、忘れずに.bash_profileを再読み込みしてください。

```Terminal
source ~/.bash_profile
```


（おまけ）cmake時のエラー例：
[4] [「mac Found unsuitable Qt version "" from NOTFOUND, this code requires Qt 4.x Call Stack (most recent call first)」](https://github.com/OSGeo/homebrew-osgeo4mac/issues/151)
このエラーは、まずGeant4がデフォルトではQt4を探しに行っていることにより発生したエラーだと思われます。このエラーは上の4つのpathを通せば解決できました。
[5][「qt5: cmake find_package(Qt5Core) doesn't work when linked to /usr/local」](https://github.com/Homebrew/homebrew-core/issues/8392)
このエラーは、Qtのリンクに問題があるということで、このページでは結局homebrewのオプションを追加してそれを解決しようとしているのですが、意味はありませんでした。普通に上の4つのpathを通せばこのエラーはなくなりました。

## 2. Geant4インストール

今回は、最新バージョンGeant4を、以下のディレクトリにビルドします。  

- Geant4バージョン：10.04.p02 (2018.9.15時点で最新)
- ソースファイルのビルド先： /path/to 

上の二つは任意ですので、自分のインストール状況に合わせて、ディレクトリパスやGeant4バージョンを置き換えて呼んでくだされば大丈夫です。（ただし、Geant4のバージョンによっては、異なるエラーが生じますので、あらかじめご了承ください）

### 2.1. Geant4ソースファイルのダウンロード

Geant4公式サイトのダウンロードページから、ダウンロードします。
[https://geant4.web.cern.ch/support/download](https://geant4.web.cern.ch/support/download)

Source files > GNU or Linux tar format, compressed using gzip をダウンロードします（下図の赤枠）。

<img width="954" alt="geant4_download.png" src="https://qiita-image-store.s3.amazonaws.com/0/287890/ed8ff471-7fd0-3048-594c-17a1b5064791.png">

### 2.2. Geant4ソースファイルの移動

Geant4のインストール先は、参考URL[[1]](https://qiita.com/aximov/items/3387e4cba7040f2acfe2)にならって、/path/toのディレクトリを作ってそこにインストールします。（もしホームディレクトリ以下に作るときは、これから出てくるsudoは省いて問題ないです）

#### 1) /path/to ディレクトリの作成

```Terminal
sudo mkdir /path
sudo mkdir /path/to
```

#### 2) Geant4ソースファイルの移動・展開

ダウンロードしたGeant4ソースファイルは、ローカルのダウンロードに保存されているはずなので、それを先ほど作成した/path/toに移し、展開します。

```Terminal
cd /path/to
sudo mv ~/Downloads/geant4.10.04.p02.tar.gz .
sudo tar zxvf ~/Download/geant4.10.04.p02.tar.gz
```
tarで展開すると、geant4.10.04.p02というファイルが生成されます。

#### 3) 展開したファイル名の変更・ビルド用のディレクトリの作成

ソースファイルを展開して生成されたgeant4.10.04.p02を**geant4.10.04.p0-install**、ビルド用のディレクトリを新たに**geant4.10.04.p0-build**として作成します。

```Terminal(/path/to)
sudo mv geant4.10.04.p02 geant4.10.04.p02-install
sudo mkdir geant4.10.04.p02-build
```

2.2以降のソースファイルのビルドは全てこの**geant4.10.04.p0-build**で行いますので、そのディレクトリに移動しておきます。

```Terminal(/path/to)
cd geant4.10.04.p02-build
```

### 2.3. cmake

以下のようにcmakeします。

```Terminal
sudo cmake -DCMAKE_INSTALL_PREFIX=/path/to/geant4.10.04.p02-install/ -DGEANT4_INSTALL_DATA=ON -DGEANT4_USE_QT=ON /path/to/geant4.10.04.p02-install/
```
オプションは次の通りです。（オプションの説明は[[2]](http://oxon.hatenablog.com/entry/20120606/1338914278)と[[3] "Geant4 Build Options"](http://geant4-userdoc.web.cern.ch/geant4-userdoc/UsersGuides/InstallationGuide/html/installguide.html#geant4buildoptions)を参考にしました。）

- **CMAKE_INSTALL_PREFIX**：インストールディレクトリ、Geant4ライブラリ、ヘッダーおよびサポートファイルがインストールされるディレクトリの設定（絶対パスとして指定）
- **GEANT4_INSTALL_DATA=ON**：中性子などの追加データをインストール(ON)
- **DGEANT4_USE_QT=ON**：Qtの使用をON
- **最後の引数(ノーフラグ)**は、ソースディレクトリへのパス（相対パスも使用可能）。

### 2.4. make & make install
あとはビルドするだけです。それなりに時間がかかります（~30分）。

```Terminal
sudo make install
sudo make
```

### 2.5. 環境変数などの設定

#### 1) geant4.shの実行
2.3のビルドは問題なく通るはず。あとは環境変数を設定するだけ。
ソースファイルに入っているgeant4.shを実行する必要があるので、.bash_profileに以下を追記しておく。

```~/.bash_profile
source /path/to/geant4.10.04.p02-install/bin/geant4.sh
```

#### 2) サンプルコードのパス通しの省略 （オススメ！）
あと、これからサンプルコードを動かすときにcmakeで常にソースコードへのpathを通す必要があるので、その手間を省くために、Geant4用のcmakeとして、**gcmake**を以下を設定しておくと便利です（独自法）。

```~/.bash_profile
alias gcmake='cmake -DGeant4_DIR=/path/to/geant4.10.04.p02-install/lib/Geant4-10.4.2/'
```

## 3. サンプルコードを動かす

### 3.1. サンプルコードをローカルにコピー

とりあえず、サンプルコードを適当な場所（ここではホームディレクトリ）にgeant4-examplesとして持ってきます。

```Terminal
cd ~
sudo cp -r /path/to/geant4.10.04.p02-install/examples/basic geant4-examples
```

### 3.2. ディレクトリのオーナーの変更

これをしないと、このディレクトリ内での作業がsudoつけないとできないので不便です。

```Terminal
sudo chmod -R 777 geant4-examples 
```

### 3.3. ビルドディレクトリの作成

今回はB1でビルドしてみますので、geant4-examplesでB1-buildディレクトリを作成します

```Terminal
cd geant4-examples 
mkdir B1-build
```

### 3.4. サンプルコードのビルド

サンプルコードのビルドの際には、ビルド用ディレクトリに移動しておきます。
そこで、```gcmake (ソースコード)```を実行します。

```Terminal
cd B1-build
gcmake ../B1
make
```

ここではB1をビルドするので、ソースコードはB1です。
（gcmakeに関しては、2.5の(3)を参照してください。もしgcmakeが嫌だったら、以下を代わりに実行します。）

```Terminal
cmake -DGeant4_DIR=/path/to/geant4.10.04.p02-install/lib/Geant4-10.4.2/ ../B1
make
```

### 3.5. サンプルコードの実行

3.4.でmakeが無事に通ると、実行ファイル**exampleB1**が生成されるので、実行します。

```Terminal
./exampleB1
```

<img width="1234" alt="Screenshot 2018-09-15 20.47.41.png" src="https://qiita-image-store.s3.amazonaws.com/0/287890/8d4162ba-b58d-d2fb-9671-8c6845cf03b3.png">

上のような図が出れば成功です

---
以上になります。
もし質問があれば気軽にご連絡ください！

(2018.9.15作成)