ROOT を使った光線追跡のソフトを公開した

何ヶ月か前ですが、ROBAST というソフトを公開しました。ROot BAsed Simulator for ray Tracing の略です。主には宇宙線望遠鏡の開発者を対象とした、光線追跡 (ray tracing) のソフトです。ROOT に慣れている人であれば、誰でも簡単に使えると思います。


▲ 大気 Cherenkov 望遠鏡で使われる光学系の例。球面の分割鏡で放物面を形成。

鏡とレンズと遮蔽の 3 要素からなり、ROOT の geometry library を使うことでかなり自由な光学の simulation をすることができます。Geant4 optical と機能として被っているんですが、向こうは使いこなすのが面倒なのと、Geant4 って誰でも使えるわけではないので、ROOT で簡単に使えるというのは大きな利点です。Geant4 ってちょっと大げさなんですよね、光線追跡やりたいだけだと。

ただ、乱反射やレンズ境界面での反射、レンズ内での吸収といった機能は実装していないので*1、そこらへん欲しい人は Geant4 のほうがいいかもしれない。また、光学系の最適化は市販ソフトのほうが色々と使い勝手が良いです。

光線追跡をやりたいときに頻出する基本的な幾何学形状として、回転対称な多項式の非球面というのがあります。この曲面は任意の直線との交点が解析的に求まらないため、自分で計算をして交点を求めるのが結構面倒です。近似計算の漸近解を求める手法を使います*2。ROOT の geometry library には、当然ですがこんな形状は入っていないため、この部分を追加で実装しました。ROOT で汎用的な光線追跡をしたい場合、ほとんど肝の部分はこの非球面の取り扱いだと言っても過言ではありません。粒子 (光線) の追跡自体は ROOT がやってくれるため、後は屈折や反射といった高校数学の範囲の計算をチョロチョロと数百行書いただけで、簡単な光線追跡のソフトが出来上がります。

単純な光学系の光線追跡や最適化であれば、ZEMAX のような市販ソフトを使ったほうが早いのですが、宇宙線望遠鏡には分割鏡が出てきたり、鏡の形状が不連続だったりと、市販ソフトでは扱えない、もしくは扱いにくい変なものを計算する必要があります。また、CORSIKA のような宇宙線大気シャワー (air shower) の simulation と接続したりする必要があり、最終的に ROOT で解析するので、ROOT を基にして自作ソフトを書いたほうが色々と楽なわけです。

現在は CTA というガンマ線望遠鏡の開発に携わっているため、その光学系の評価や Monte Carlo に使えないかと計画しています。近日中に Winston cone の形状も取り入れる予定なので、宇宙線望遠鏡の light guide の設計なんかにも使えるようになるでしょう。

ROOT を使って光線追跡やりたい人なんて宇宙線業界以外にいないでしょうし、そういう人たちはどうせ顔見知りなので、ここに書いても新規利用者は出ないでしょうが、知らない誰かの役に立つかもしれないので書いておきました。

*1:実装自体はすごい簡単なのでそのうちやると思います。

*2:式によってはうまく収束しない。