【2024年最新】Geant4をM2 Macに入れる

プログラミング初心者の理系大学院生が大量のエラーに苦戦しながらGeant4(ver 11.2.2)をMacに入れてビルドするまでをまとめました。Macユーザーは特にHomebrewを用いて色々インストールする人が多いと思うのですが、現時点ではそれだけでは全くうまくいかないので、それも含めて書いていこうと思います。

## 1. Homebrewのインストール
Geant4を使うためには、Geant4以外にもさまざまなライブラリを導入しないといけません。毎回それぞれのサイトに飛んで、インストーラーをとってきてビルドするのはあまりに手間なのでHomebrewを使いましょう。これは欲しいライブラリを指定すると勝手にインストールからビルド、果てはPATHの設定まで全部やってくれる優れものです。
~~ただ新しいものしか入れないので後々説明するエラーが出るのは全部こいつのせいで起こります~~
Homebrewのインストールは簡単で、シェルスクリプトを開き

```zsh:zsh
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```

を実行するだけです。

また、Homebrew自身のpathを登録しておきましょう。

```zsh:zsh
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
source ~/.zshrc
```

## 2. ライブラリのインストール

必要なライブラリは
- cmake
- gcc
- qt5(Geant4では最新のqt6は非対応)
- xerces-c
- ROOT

になります。これをHomebrewでインストールします

:::note warn
注意
Qtだけはエラーの原因なので、別でインストールします。
:::

```zsh:zsh
brew install cmake gcc xerces-c root
```

Qtですが、2024/10/30現在、Homebrewで

```zsh:zsh
brew install qt@5
```

を実行すると、Qt5(ver5.15.15)がインストールされます。ところが、このバージョンだとGeant4には新しすぎてうまく回りません。従って、別の手段を用いて古いQt5をインストールします。

エラーなくコマンド入力に戻って来られたら次に進みましょう。

## 3. Command Line Toolsのインストール
Geant4はC++のtoolkitとして作成されています。Macに限らず、PCがC++を扱うために、特にコンパイルやビルドを行うためにはコンパイラ等が必要です。Mac向けにこれらをまとめたのが**Command Line Tools for Xcode**です。既にROOTを入れた人はご存知と思います。

最新バージョンをインストールするときは

```zsh:zsh
xcode-select --install
```

と入力するだけで完了です。
が！これらの最新バージョンは往々にしてROOTやGeant4には対応していないものです。そこで、Apple Developperの公式ページから古い版をインストールします。

https://developer.apple.com/download/all/?q=Command%20Line%20Tools

私の環境ではCLT ver15.3を入れてうまくいきました。

## 4. (補足)Qt5のインストール
Geant4を実行する際、検出器群や粒子を可視化しながら処理を行うモードにできるのですが、そこでのビジュアル周りの処理を担当するライブラリがQtになります。これを入れないと検出機の配置が正しいかもわからないし、粒子の飛跡をその場で追うこともできません。

古いバージョンのQtをダウンロードする方法はいろんな方があれこれ紹介しているのですが、結局公式をあたるのが一番早いです

:::note warn
注意
Qt online installerはEducational Licenceの登録が必要です。
https://www.qt.io/qt-educational-license
:::

ライセンスの登録が終わったら、下記のサイトからオンラインインストーラーをダウンロードします。

https://www.qt.io/download-thank-you

ダウンロードが完了したらインストーラを起動し、指示通り進めてください。

![Screenshot 2024-10-31 at 0.33.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922783/82192786-21a4-f4b4-c830-38ec28f34eca.png)

ここはどっちでもいいです。自分の情報あんまり見られたくないなーって人はDisableにするといいと思います。

![Screenshot 2024-10-31 at 0.34.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922783/5065def0-b16f-9dfe-597f-3f4986c95df0.png)

ここでQtをインストールしたいディレクトリを選んでください。ぶっちゃけどこでもいいですが、pathを忘れないような場所、かつうっかり消したりしないようなところだといいですね。"Custom Installation"を選択したまま次へ進みます。

![Screenshot 2024-10-31 at 0.35.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922783/babce2dc-db80-6381-e26c-813d42ee099d.png)

ここ大事です。ここではQtのどの製品をインストールするか選べるのですが、今欲しい旧版のQtは **セキュリティの都合でこの画面には載っていません。** とはいえ欲しい人の気持ちもわかってくれていて、"Archive"を選択して再度フィルターをかけると

![Screenshot 2024-10-31 at 0.36.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922783/2acd84c7-bfe7-2733-85b8-f39a12bd9e28.png)

"Qt"欄の一番下に出てきます。こいつを選択して、あとは誘導通りに進めれば完了です。

## 5. Geant4のインストール
ここまででGeant4のための環境整備が完了しました。ここからは実際にGeant4をインストールします。

やり方は大きく分けて2つあり、
- `git clone`を用いる
- `curl`等を用いて直接ダウンロード

があります。どちらでも構いませんがここでは後者の方で話を進めていきます。

ますはDownloadディレクトリに移動し、そこに最新版のGeant4のソースファイルをインストールします。

```zsh:zsh
cd ~/Downloads
curl -O https://cern.ch/geant4-data/releases/geant4.11.2.2.tar.gz
tar -xzvf geant4.11.2.2.tar.gz
```

公式ページから直接ダウンロード、解凍するのもいいと思います。

https://geant4.web.cern.ch/download/11.2.2.html

解凍が完了したら、Geant4のビルド先を作っておきます。

```zsh:zsh
mkdir ~/geant4-build
cd ~/geant4-build
```

## 6. Geant4のビルド
ここから実際にインストールしたgeant4をビルドしていきます。ビルドに使うのは先ほどインストールした**cmake**です。
ビルド先のディレクトリに入り、以下のコマンドを実行します。

```zsh:zsh
cmake -DCMAKE_PREFIX_PATH=~/Qt/5.15.9/macos \    #Qtのqmakeがある場所
      -DGEANT4_USE_QT=ON \
      -DGEANT4_BUILD_MULTITHREADED=ON \
      -DGEANT4_INSTALL_DATA=ON \
      -DCMAKE_INSTALL_PREFIX=~/geant4-install \
      ~/geant4    #展開したソースファイルの場所
```

色々追加のオプションをかけていますが、「可視化もマルチスレッド処理もできるようなgeant4を作ってね！」というわけです。

:::note warn
注意
QtにはQt/(ver)/clang_64というディレクトリにもqmakeが存在しますが、こちらはIntel製CPU向け(x86_64)で書かれているので、Apple Mチップ(arm64)には向きません。CMAKE_PREFIX_PATHには必ずmacosの方を選びましょう。
:::

特にエラーなく作業が完了したら、いよいよビルドします。

```zsh:zsh
make -j$(sysctl -n hw.ncpu)    #ビルドに全スレッドを使う
```

このビルドにはかなり時間がかかります(10~20分くらい)。特にエラーなく完了したら、最後

```zsh:zsh
make install
```

をしてgeant4の基本設定は完了です！
最後に、Geant4の場所をpathに追加して

```zsh:zsh
echo "source ~/geant4-install/bin/geant4.sh" >> ~/.zshrc
source ~/.zshrc
```

を行えばGeant4が使えるようになります。

実際にビルドがうまくいっているかを確認するために、デフォルトで入っている例題ファイルをビルドしてみれるかどうかみてみましょう。

```zsh:zsh
mkdir ~/geant4-example
cd ~/geant4-example
cp -r ~/geant4-install/share/Geant4-11.2.2/examples/basic/B1 .
cd B1
mkdir build
cd build
cmake ..
make -j$(sysctl -n hw.ncpu)
./exampleB1
```

これでうまくいけば謎の3D画面が出てきて、ものが置かれている様子がわかるはずです。

![Screenshot 2024-10-31 at 1.13.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3922783/ad2506ae-81b2-ffaa-bf88-31ddc16c93f4.png)

ここまでくれば完成です。

## Appendix 1. Qt周りのエラー
最初はROOTのTFileとGeant4でメモリ管理周りの連携がうまくいかなくて色々ライブラリを消したりもう一回入れたりしながら様子を見ていたのですが、`brew upgrade`した後のGeant4本体のビルドで

```cmake:zsh
n file included from /Users/(username)/geant4/source/visualization/ToolsSG/src/G4ToolsSGQtGLESViewer.cc:28:
/Users/(username)/geant4-build/source/G4ToolsSG_autogen/include/moc_G4ToolsSGQtGLESViewer.cpp:16:2: error: "This file was generated using the moc from 5.15.15. It"
   16 | #error "This file was generated using the moc from 5.15.15. It"
      |  ^
/Users/(username)/geant4-build/source/G4ToolsSG_autogen/include/moc_G4ToolsSGQtGLESViewer.cpp:17:2: error: "cannot be used with the include files from this version of Qt."
   17 | #error "cannot be used with the include files from this version of Qt."
      |  ^
/Users/(username)/geant4-build/source/G4ToolsSG_autogen/include/moc_G4ToolsSGQtGLESViewer.cpp:18:2: error: "(The moc has changed too much.)"
   18 | #error "(The moc has changed too much.)"
      |  ^
```

どうやらここで書かれている"moc"ファイルがGeantで対応できないほど色々変わってしまったのでこのままだとビルドできないよ、という警告でした。