Geant4を使いこなすためのスタートラインに立つためには

世の中に落ちている文書は原子核の人にとっては先を行きすぎていて、まったく意味不明ということがよくある。 そこで、スタートラインに立つための項目をリストアップしてみる。 以上三つでGeant4をこねくり回すためのスタートラインに立てると思います。
北里大の講習会で公開していたsample codeは非常にわかりやすいので超おすすめです(ただ一部変更しないとコンパイルは通らないかもしれません)。
講習会ではこの内容を3日でやったようですが、多分初心者なら一ヶ月かかっても普通だと思います。
そこから先はGeant4に付属しているexampleや僕が公開している中性子検出器のシミュレーションコードを参考に拡張できるはずです。
オブジェクト指向を本当の意味で理解するのはたぶん原子核屋には無理ですし、あらかじめ完璧に理解しておく必要はありません。
Geant4を使っていると何となく体に染み付いてくるかもしれません。


もっとも、Geant4をブラックボックスとしてほんのちょこっとだけ使うというのならここまでしなくても使えますが...

Geant4はtoolkit

Geant4はシミュレータではなくてtoolkitであるということを理解している上の方は少ない。
「Geant4によるシミュレーション」というのは「量子力学により原子核の反応を計算した」というぐらいに意味が無いstatementである。
なので、Geant4というtoolkitの枠組でどのような物理モデルを用い、何を考慮したかというのが明確になって初めてシミュレータとして自立する。
その行為がuser srcを書くことであり、ある意味user srcごとにシミュレータとして名前をつけて良いのである。
たえば初音ミクを使った楽曲に「supercell feat. 初音ミク」とつけるように「neutron simulator feat. Geant4」とかにしたりwww(feat.の使い方がおかしいとか言わない)
ただし、gamma線のシミュレーションなどはほっといても本質的に同じ様なcodeを書くことになるので省略して「Geant4によるシミュレーション」と言っているだけである。

Geant4の難しさ

主な難しさは「高エネ・海外」と「原子核・国内」という畑の違いから生まれていると思われる。
もっともGeant4の開発者の多くは日本人みたいですが(始めたのも日本人?)。
最近の学会の発表を見ているとgamma線のシミュレーションはほとんどGeant4でやられているので、畑の違いというのは時間が解決してくれるかな?

c++の難しさ

c++はcの延長と思われがちで、確かにそうなのだが、cは「習うより慣れろ」が通用するのに対して
c++は「習った上で慣れろ」と言うべきでしょうか、習わずに慣れることができる言語とは到底思えません。
これはなぜかというと、cやfortran77はごく自然にcodeを順番に追っていくことができます(手続き型プログラミング)。
一方c++では「開発を楽にするため」(これは一年のほとんどをプログラムに時間をかけている原子核の研究者にとっては重要なファクター)に、
オブジェクト指向、より具体的にはポリモーフィズムや動的に型を判定する(動的型付けというと違う意味になるらしい)ことで、
codeの流れが人間が決めたルールの上でコントロールされるため、そのルール・概念を知らないと理解しようがありません。
比喩を使うなら、ニュートン力学はちゃんと習わなくても演習問題が解けますが、特殊相対論になるとその概念を理解しない限り演習問題は解けません。
古典力学と量子力学の違いと考えてもいいでしょう。
プログラム自体が構造を持っているということはそのぐらい隔たりがあるので、どうか体育会系のノリでc++をやらないで、ちゃんと勉強する時間を作るようにしてください。

ユーザーの使い方を考える

と、とりあえず上げてみた。
で、実際にシミュレーションをやった経験からすると、どうせ上の人は初めはブラックボックスでいいとかいいながら、
後からそれどこまであってるのー?とかちゃんと細かいところを追えとか言われる。
上に言われなくとも、よくわからず出てきた結果を公に披露できるほどこの業界は適当ではない
(企業なら責任を作った人に押し付けれるのでそれがまかり通るが)。
ということで結局上の要求全てを満たすuser codeでないと最終的にだめなのである。
そこで、以下の二つのuser srcの公開を提案する。

1. 固定のinput, 固定のoutput

表題のタイプは旧来のよくあるシミュレータをデフォルト状態で使用するのと同じである。
これは、特定の検出器に特化したuser srcと文書を用意してシミュレータとして完成したものを配布すれば実現できる。

この様なuser srcはブラックボックスとしてとりあえずそれっぽい結果を出せるようにして、
初めの一歩の閾値を下げることになる(Geant4は動かすだけでもlinux初心者な学生には辛い)。
ただし、この様な思想でかかれたcodeを発展させて先にすすむのは大間違いで、
と、いろいろ問題がある。
そこで、次のステップとして次に示すuser srcも合わせて公開することを考える。

2. 半固定のinput, 一般的なoutput

input(beamのenergyとか)はGeant4が標準で提供しているG4UIdirectoryを使ってインタラクティブに変更できるようにする。
outputはGeant4が計算した「protonが45.3nsのときに2MeVエネルギーを落とした」というようなstep情報をすべてfileに吐くようにする。
これにもう少し細かい仕様を付け加えるとシンチレータを使う検出器などはGeant4のuser src部はDetectorのgeometoryを除いて
基本的に同じcodeとなり管理が楽、つまりむだな労力やバグを減らすことができる。


と、以上書いてみたが、実際に公開して見せるのが一番なのでそのうちちゃんと実現する。