ようやく Geant4 + CAD で optical photon がまともに使えるようになった
2010 年 2 月にG4TessellatedSolid を使った場合に optical photon の tracking に bug があると報告したのですが、2 ヶ月かかってようやく修正版のコードを作成してもらえました。担当の方は企業に勤めているそうで、時間を割くのはなかなか難しかったでしょうが、bug 報告に付き合って頂いて感謝です。
さて、これまでの問題は次のような流れでした。
- CAD や ROOT から GDML に変換した場合に使われる G4TessellatedSolid というクラスを使って geometry を構築する
- optical photon を使ったモンテカルロを行う
- photon が G4TessellatedSolid の境界面で正しく屈折や反射を起こさない
これは G4TessellatedSolid の境界面で発生する丸め誤差の影響が主原因です。屈折や反射を行ったあとに、その photon が境界面に「乗っているか」を調べるのですが、「乗っている」状態の判定をする際に幾何計算の過程で丸め誤差が発生し、「乗っていない」という判定が発生する場合があります。そうすると、本来は結晶の内部で全反射するべき photon が、何も起きずに結晶外に逃げてしまうという状況になっていました。
新しい 2 つのコード、G4TriangularFacet.cc と G4TessellatedSolid.cc を $G4INSTALL/source/geometry/solids/specific/src の中の古いものと置き換えて、再度 build し直せば動きます。
$ cd $G4INSTALL $ ./Configure -build