ようやく Geant4 + CAD で optical photon がまともに使えるようになった

2010 年 2 月にG4TessellatedSolid を使った場合に optical photon の tracking に bug があると報告したのですが、2 ヶ月かかってようやく修正版のコードを作成してもらえました。担当の方は企業に勤めているそうで、時間を割くのはなかなか難しかったでしょうが、bug 報告に付き合って頂いて感謝です。

さて、これまでの問題は次のような流れでした。

  1. CAD や ROOT から GDML に変換した場合に使われる G4TessellatedSolid というクラスを使って geometry を構築する
  2. optical photon を使ったモンテカルロを行う
  3. photon が G4TessellatedSolid の境界面で正しく屈折や反射を起こさない

これは G4TessellatedSolid の境界面で発生する丸め誤差の影響が主原因です。屈折や反射を行ったあとに、その photon が境界面に「乗っているか」を調べるのですが、「乗っている」状態の判定をする際に幾何計算の過程で丸め誤差が発生し、「乗っていない」という判定が発生する場合があります。そうすると、本来は結晶の内部で全反射するべき photon が、何も起きずに結晶外に逃げてしまうという状況になっていました。

新しい 2 つのコード、G4TriangularFacet.ccG4TessellatedSolid.cc を $G4INSTALL/source/geometry/solids/specific/src の中の古いものと置き換えて、再度 build し直せば動きます。

$ cd $G4INSTALL
$ ./Configure -build