東京工業大学 >
大学院理工学研究科 >
基礎物理学専攻 >
中村研究室 >
メンバー >
Takayuki Sako >
SOLDIRAs manualSimulator Of Large Detector for Incident cosmic RAysSOLDIRAsのマニュアル的なページ。という建前のただの自分用のメモ。 なお、このページは常に最新バージョンについて記述している。昔のバージョンのマニュアルは存在しない。 ソースダウンロードページ(パス付き)現在の最新バージョンは Ver. 0.4110114a 開発途上のものから使えそうな部分を抜き出したもの。β版の手前のα版。多分永久にα版。 更新履歴
動作条件
目的と原理SOLDIRAsは任意の大きさ・個数・材質の直方体および円柱状の物体に宇宙線(ミューオン)が入射したとき 物体内部でのエネルギー損失を計算するプログラムである。言語はFORTRAN 77。プログラム内部での物理的な原理については卒論のAppendix.Bを参照のこと。 ただし、現行のVer. 0.3xは卒論時のものとかなり異なる。卒論と変わってないのは以下の項である。
※ B.5 ランダウ分布の近似式はSOLDIRAsには組み込んでいない。 ※ Cern libraryのVavilov 分布のうちSOLDIRAsに組み込んであるのはG115である。 ※ Ver. 0.3xにはRIBFの建物及び周辺の土壌の影響を入れていない。これは最終的なエネルギー損失分布にほとんど影響を与えないためである。 ジオメトリの設定が面倒臭い。 使い方tarを解凍。ディレクトリの構造をいじってはいけない。
tar zxvf SOLDIRAs_Vxxxxxx.tar.gz
Makefile中のCern libraryへのリンクを各自の環境に合わせて修正。 config中のパラメータを適切に設定。 コンパイル
make
実行
./main
運が良ければ動く。運が悪かった人は自分でどうにかしてください。動作確認はgfortran-4.4@Ubuntu9.10のみで行っている。 実行時の端末の様子。
***** ERROR in HBOOK2 : Not enough space in memory : ID= 31
***** ERROR in HBOOK2 : Not enough space in memory : ID= 32 SOLDIRAs101 comment 10000 8174 340 296 20000 16205 662 578 30000 24271 941 823 40000 32320 1237 1091
このときmainを実行後、主に次のファイルが出力される。 その他出力ファイルの詳細はここを参照。
ディレクトリの構造シミュレーション時にユーザーがいじる必要があるのは基本的に太字のみ。
クラスターEnergy lossや検出器への入射位置といった情報は検出器、建造物ごとに一つの配列で処理される。 ここで、便宜上一つの配列で表現する検出器や建造物の塊のことをクラスターと呼称する。 SOLDIRAsでは全ての検出器を計五つのクラスターで定義する。
単位プログラム内部では基本的に以下の単位にしたがって動いている。
NumberOfDetectors.inc検出器の数とトラッキングする粒子の数を定義する。 このファイルはコンパイル対象。書き換えたら必ずコンパイルする。
configコンパイル後の実行ファイルが直接configを読みに行く。したがってこの設定ファイル中の数値を変更しても再度コンパイルする必要はない。勝手な改行禁止。行数は厳密に指定されている。 一方、スペースは気にする必要がない。見やすいようにスペースを自由に加えても問題なし。 また、既定の数を越えて一行に記述した場合オーバーした分は自動的にコメントアウト扱いになる。 以下、各パラメータとデフォルトで入力されている数値の説明。
GNUPLOTによる可視化
gnuplot> load './filename.plt'
RIBFFASTMODE / REALMODEFASTMODEconfigでFASTMODEをONにしたとき実行するモード。このモードでは全検出器を覆う直方体を設定し、その中にミューオンの通過する点をランダムに決めて、そこから各検出器を通過するかどうかを判定する。これは想定した直方体の形・大きさが検出器全体とほぼ同じという近似が成り立つときのみ実行し得る。つまり、各検出器が同じサイズでかつ1箇所に集まっている場合このモードを使える。一方で、各検出器のサイズが検出器毎に大きく異なり、分散して設置されている場合このモードでは誤差が大きくなる。 simSOLIDvisualizedをONにするとGNUPLOTで可視化したときに黒い線で直方体が表示される(下図)。この直方体が全検出器を覆っていることを確認しなければならない。 以下の例では緑のVETOを覆っていない。したがってVETOのみの入射を考慮に入れていないことになる。 REALMODEconfigでFASTMODEをOFFにしたとき実行するモード。全検出器を覆う半球面上から粒子を発生させる。FASTMODEに比べて正確になるが、実行に時間がかかる。 simSPHEREvisualizedをONにするとGNUPLOTで可視化したときに黒い線でミューオンの初期位置を表す半球面が表示される(下図)。この半球面が全検出器を覆っていることを確認しなければならない。この半球は大きいほど実行結果が正確になる。 REALMODE_SOLIDvisualizedをONにするとGNUPLOTで可視化したときにオレンジの線でミューオンが必ず通過すべき直方体(REALMODE_SOLID)が表示される(下図)。 REALMODE_SOLIDが全検出器を覆っていることを確認しなければならない。また、大きさが小さいほど実行速度が速くなる。 トラブルシューティングhbkのバグ?出力されるヒストグラムのデータサイズが大きくなりすぎると
Not enough space in memory :
と表示されることがある。
この場合はmain.fを書き換えてNWPAWの値を大きくする。
もしくはmain.fを書き換えて出力するヒストグラムの数を減らせばOK.
ZEBULA関係のエラー環境によっては出力されたhbkをPAWで読み込んだ際にZEBULA関係のエラーが出てPAWが落ちるかもしれない。 このような場合はmain.fの中のNWPAWの値を小さくする。 ただし、この場合はhbkの中に格納可能なヒストグラムの数が減る。 詳しくはここ。詳しくないけど。ISNANが存在しないISNANという関数はNAN(非数)かどうかを判定する。が、一部の環境ではこれが組み込まれていなくてコンパイルできない。 というよりもむしろ一部の環境にしか組み込まれていない。ver. 03101012以降、最初からISNANに相当する関数を組み込んでおり、この問題は発生しない。 gnuplotに怒られるconfig中でterminalnameをwxtではなくX11にする。X11でダメな場合はgnuplotを起動して 最初に表示される
Terminal type set to 'xxx'
の'xxx'を入力する。ちなみにgnuplot上で
gnuplot> set terminal
と打つとgnuplotで利用可能なterminal typeの一覧が表示される。
"windows"にすればwindows版gnuplotでも正しく動作する(gnuplot Version 4.2 patchlevel 4 @ Windows Vista Ulitimate SP2で動作確認)。
データ形式出力ファイルのデータ形式.hbkPAWもしくはANAPAWで読むためのファイル。もしくはmain.fの最後に
call HPRINT(ID)
と書いておけばPAWなどを使わなくても実行後に端末にヒストグラムが表示される。
詳しくはこのあたり
.txtconfigで設定した値と実行結果が入っている。実行結果 :
.geo/geometry に生成される。各検出器について直方体であるときに頂点座標が記述されている。 gnuplotで読み込むと直方体として表示される。 円柱の場合には生成されない。ファイル名は
filename claster ID .geo
.tra/track に生成される。trackNOmax以下のイベントについて各検出器への入射/出射位置が直交座標系で記述されている。データ形式は
side ID x y z
上下段いずれかyが大きい方が入射位置、小さいほうが出射位置。
side ID x y z ファイル名は
filename claster trackNO _ detectorNO .tra
参考文献[1] William R.Leo "Techniques for Nuclear and Particle Physics Experiments: A How-to Approach second revised edition" Spriger備考ファイル管理その他の都合上設定したコードネーム"SOLDIRAs(ソルディラス)"の元ネタはとあるゲームの粒子兵器。 でも、発音も綴りも少しだけ変えてあるのでたどり着くことは多分無理。「ソルディラス」で検索するとなんか出てくるがこれは関係ない。 むしろ検索して初めて知った。 |