東京工業大学大学院理工学研究科基礎物理学専攻中村研究室メンバーTakayuki Sako

SOLDIRAs manual

Simulator Of Large Detector for Incident cosmic RAys

SOLDIRAsのマニュアル的なページ。という建前のただの自分用のメモ。
なお、このページは常に最新バージョンについて記述している。昔のバージョンのマニュアルは存在しない。

ソース

ダウンロードページ(パス付き)

現在の最新バージョンは Ver. 0.4110114a
開発途上のものから使えそうな部分を抜き出したもの。β版の手前のα版。多分永久にα版。

更新履歴

  • Ver. 0.4x
    • SOLVisualizerを追加。
  • Ver. 0.3x
    • NEBULAを前提に汎用化。現在はVer. 0.4xへ移行。
  • Ver. 0.2
    • NEBULAのNEUT,VETOのコインシデンスに特化。開発停止。
  • Ver. 0.1
    • 一組のNEUT,VETOに特化。開発停止。

動作条件

  • gfortranが使えること(他のコンパイラでどうなるかは一切確認していない)。
  • Cern library 2006 がインストールされていること(2002などではエラー報告あり)。
ただし、後述するようにconfigのみを書き換える場合コンパイルの必要はない。

目的と原理

SOLDIRAsは任意の大きさ・個数・材質の直方体および円柱状の物体に宇宙線(ミューオン)が入射したとき 物体内部でのエネルギー損失を計算するプログラムである。言語はFORTRAN 77。

プログラム内部での物理的な原理については卒論のAppendix.Bを参照のこと。 ただし、現行のVer. 0.3xは卒論時のものとかなり異なる。卒論と変わってないのは以下の項である。
  • 不安定核二次反応のための大型中性子検出器の開発
    • Appendix.B シミュレーション
      • B.1 宇宙線 Cosmic ray
      • B.2 ミューオンのエネルギー分布
      • B.3 乱数発生器 Random number generator
      • B.4 エネルギー損失 Energy loss
        • B.4.1 Bethe-Bloch fomula
        • B.4.2 Straggling prameter
        • B.4.3 Shulek 関数 Shulek function
        • B.4.4 ランダウ分布 Landau distribution
        • B.4.5 Vavilov 分布 Vavilov distribution
        • B.4.6 ガウス分布 Gaussian distribution
      • B.6 Cern library
        • B.6.1 ランダウ分布 G110
        • B.6.2 Vavilov 分布 G115,G116
      • B.7 減衰長 attenuation length
※ flightlengthの計算方法は抜本的に変更。Ver. 0.3xの計算方法は直方体 [pdf],円柱 [pdf]
※ 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
  • 1,2行目 : NWPAWが小さい時に出力されるエラー。ここを参照。
  • 3行目 : filename
  • 4行目 : コメント。目的などを書いておくと良いかも。
  • 5行目〜 : 一列目:生成した粒子の数を表す。10000ごとに表示される。二列目:RIBFの建造物を通過した粒子の数を表す。三列目:multiplicityの条件を満たした粒子の数を表す。 四列目:トリガーの条件を満たした粒子の数を表す。
以下、config中で設定した出力ファイルの名前をfilenameと設定したものとする。
このときmainを実行後、主に次のファイルが出力される。 その他出力ファイルの詳細はここを参照。
  • filename.hbk : PAWで読む。ヒストグラムが入っている。
  • filename.dat : lessとかで読む。実行結果のテキストデータが入っている。ファイルが巨大化しがちなので注意。
  • filename.txt : lessとかで読む。実行結果のサマリーが入っている。
  • filename.plt : gnuplotから読み込む。gnuplotで可視化。

ディレクトリの構造

シミュレーション時にユーザーがいじる必要があるのは基本的に太字のみ。

SOLDIRAs_Vxxxxxxx
 ├ main.f : メイン。こいつを実行する。
 ├ config : パラメータをここに記述する。
 ├ NumberOfDetectors.inc : 検出器の数とトラッキングする粒子の数
 ├ BUILDtoDETECTOR.f : BULID座標系からDETECTOR座標系へ変換する。建造物中での検出器の配置の仕方を変更した際、このファイル内の設定を変更する。
 ├ AL.f : 検出器中での光の減衰を計算する。
 ├ AUTOframegenerator.f : AUTOflameをONにしたとき自動的に可視化の際の視界の範囲を設定する。あまり役に立たない。
 ├ commonsetting.inc : 検出器クラスターに関する定義。通常いじる必要はない。
 ├ Eloss.f : エネルギー損失を計算する。Density effectを考慮に入れる。
 ├ Elosssimple.f : エネルギー損失を計算する。Density effectを考慮に入れない。
 ├ flightlengthC.f : 円柱内のflightlengthを計算する。
 ├ flightlengthS.f : 直方体内のflightlengthを計算する。
 ├ geogenerator2d.f : 二次元配列型クラスターのジオメトリファイル .geo を生成する。
 ├ geogenerator5d.f : 五次元配列型クラスターのジオメトリファイル .geo を生成する。
 ├ GNUPLOT_OUTPUT.f : gnuplotに読み込ませるためのファイルを生成する。
 ├ Gran.f : ガウス分布に従う乱数の生成。
 ├ Makefile
 ├ med.f : 粒子を生成する(エネルギー、初期位置、方向ベクトル)。
 ├ mt19937.f : Mersenne Twister
 ├ mtcalc.f : 任意の範囲の一様乱数生成。
 ├ runcounter : filenameをAUTONAMEにしたとき読み込むrunの番号。
 ├ NANdetermination.f : NAN判定。ISNANに相当する。
 ├ RIBFconfig : BUILDクラスターの材質およびジオメトリの設定。デフォルトでRIBF加速器棟のパラメータが入っている。
 ├ TRACKFILE.f : トラッキングファイル .tra を生成する。
 ├/geometry
 | ├filenameN101.geo : configの設定に基づいてジオメトリファイルが生成される。
 | ├filenameN102.geo
 |  …
 | └filenameV112.geo
 └/track
   ├filenameN01_01.tra : 粒子の軌跡情報が生成される。
   ├filenameN01_02.tra
    …
   └filenameV40_02.tra

クラスター

Energy lossや検出器への入射位置といった情報は検出器、建造物ごとに一つの配列で処理される。 ここで、便宜上一つの配列で表現する検出器や建造物の塊のことをクラスターと呼称する。 SOLDIRAsでは全ての検出器を計五つのクラスターで定義する。
  • NEUT : Neutron counter。メインの検出器。
  • VETO : VETO。NEUTとのコインシデンスを取るか、取らないか選択できる。
  • FTRIG : Front Trigger。トリガーの生成に使う。
  • BTRIG : Back Trigger。トリガーの生成に使う。FTRIGとの違いはほぼ無い。
  • BUILD : Building。建造物の再現に使う。物質の定義はA,Z,rhoのみ。独自の座標系を持ち、他のクラスターとは別の座標系で定義できる。
各クラスターはx,y,z方向に広がった三次元の長方形配列である。 その為、同一クラスター内で1層目はA個、2層目はB個、…と層ごとに異なる個数の検出器を定義できない。 この場合はy,z方向の検出器の個数を1に固定し、x方向に全検出器を並べて定義する。 ここでx,y,zはIDの定義を楽に行うためだけのものであり、ジオメトリと一切関係ない。したがって、配列の定義上y,z方向を1に固定しても config中で正しくジオメトリの設定を行えば問題ない。

単位

プログラム内部では基本的に以下の単位にしたがって動いている。
長さ cm
エネルギー MeV

NumberOfDetectors.inc

検出器の数とトラッキングする粒子の数を定義する。 このファイルはコンパイル対象。書き換えたら必ずコンパイルする。
変数意味
NO_NEUT integer中性子検出器の全体の数
NO_NEUT_x integer中性子検出器の横方向の数
NO_NEUT_y integer中性子検出器の高さ方向の数
NO_NEUT_z integer中性子検出器のビーム軸方向の数
NO_VETO integerVETOの全体の数
NO_VETO_x integerVETOの横方向の数
NO_VETO_y integerVETOの高さ方向の数
NO_VETO_z integerVETOのビーム軸方向の数
NO_FTRIG integerFTRIGの全体の数
NO_FTRIG_x integerFTRIGの横方向の数
NO_FTRIG_y integerFTRIGの高さ方向の数
NO_FTRIG_z integerFTRIGのビーム軸方向の数
NO_BTRIG integerBTRIGの全体の数
NO_BTRIG_x integerBTRIGの横方向の数
NO_BTRIG_y integerBTRIGの高さ方向の数
NO_BTRIG_z integerBTRIGのビーム軸方向の数
NO_BUILD integerBUILDの全体の数
NO_BUILD_x integerBUILDの横方向の数
NO_BUILD_y integerBUILDの高さ方向の数
NO_BUILD_z integerBUILDのビーム軸方向の数
trackNOmaxintegerトラッキングする粒子の数。

config

コンパイル後の実行ファイルが直接configを読みに行く。したがってこの設定ファイル中の数値を変更しても再度コンパイルする必要はない。
勝手な改行禁止。行数は厳密に指定されている。 一方、スペースは気にする必要がない。見やすいようにスペースを自由に加えても問題なし。
また、既定の数を越えて一行に記述した場合オーバーした分は自動的にコメントアウト扱いになる。
以下、各パラメータとデフォルトで入力されている数値の説明。
変数意味
General
filenamecharacter*11出力ファイルの名前。fortran77が可変長文字列を標準でサポートしないため必ず11文字にする。スペースも使用禁止。もっと長い文字数にする場合ソースを書き換える。
基本的に大文字小文字を区別するが、.hbkだけはHBOOKの仕様?で強制的に全て小文字でファイルが出力される。
"AUTONAME"にすると実行するたびに自動的に"SOLDIRAs101","SOLDIRAs102"…という名前で実行される。run番号が999を越えてはならない。
commentcharacter*80今回実行するシミュレーションの目的などを書いておく。このコメントを見るためにはfilename.txtを参照する。
fortranの仕様上空白を使用できない(空白の手前までしか入力されない)。_などを代用する。
TRACK_STOP_MODEcharacter*2ON : TRACK STOP MODEで実行する。この場合track_stopで指定した数のトリガーが生成された場合、実行を停止し、ファイルを出力する。
OFF : TRACK STOP MODEで実行しない。この場合neventで指定した数の粒子が生成された時点で実行を停止し、ファイルを出力する。
neventinteger一番外側のループの回数。=生成する粒子の数
track_stopintegerBULIDクラスターを通過し、multiplicityの条件を満たし、トリガーが生成される数。
rumseedreal乱数の種
Elimitreal生成するミューオンのエネルギー[GeV]の最大値。この値以下のミューオンをランダムに発生させる。小さくすると高速になる。
multiplicityintegerミューオンが何モジュール以上の検出器を通過したときデータを取るか。例えば2にするとVETO、中性子検出器含め2個以上のモジュールが鳴るとデータを取得する(エネルギー損失分布に反映させる)。
VETOCOINcharacter*2ON : 中性子検出器のmultiplicityをVETOとのコインシデンスを含めたものにする。
OFF : 中性子検出器のmultiplicityをVETOとのコインシデンスを含めないものにする。
このON/OFFはVETOそのもののエネルギー損失の計算には影響しない。つまり、OFFにしてもVETO自体のエネルギー損失は計算する。
x_centerreal生成するミューオンの初期位置を決める半球面の中心値(x)。
基本的に全検出器のx軸方向の中心。
REALMODEの時のみ有効
y_minreal生成するミューオンの初期位置を決める半球面の中心値(y)。
基本的に全検出器の最も高さが低い点。
REALMODEの時のみ有効
z_centerreal生成するミューオンの初期位置を決める半球面の中心値(x)。
基本的に全検出器のz軸方向の中心。
REALMODEの時のみ有効
simRreal生成するミューオンの初期位置を決める半球面の半径。
全検出器を覆える大きさにする。値が大きいほど正確になるが、実行に時間がかかる。
REALMODEの時のみ有効
REALMODE_SOLID
x
realミューオンが必ず通るべき直方体の左下の頂点の位置(x座標)
基本的に全検出器のx軸方向左端。
REALMODEの時のみ有効
REALMODE_SOLID
width
realミューオンが必ず通るべき直方体のx軸方向の長さ
基本的に全検出器の最長部の幅。
REALMODEの時のみ有効
REALMODE_SOLID
y
realミューオンが必ず通るべき直方体の左下の頂点の位置(y座標)
基本的に全検出器のy軸方向下端。
REALMODEの時のみ有効
REALMODE_SOLID
height
realミューオンが必ず通るべき直方体のy軸方向の長さ
基本的に全検出器の高さ。
REALMODEの時のみ有効
REALMODE_SOLID
z
realミューオンが必ず通るべき直方体の左下の頂点の位置(z座標)
基本的に全検出器の最もビーム軸上流の位置。
REALMODEの時のみ有効
REALMODE_SOLID
depth
realミューオンが必ず通るべき直方体のz軸方向の長さ
基本的に全検出器の最大の奥行き。
REALMODEの時のみ有効
FASTMODEcharacter*2 ON : FASTMODEで実行する。
OFF : REALMODEで実行する。
詳しくはここを参照。
sim_x_minreal全検出器を覆う直方体のx軸方向の最小値。
FASTMODEがONの時のみ有効
sim_x_maxreal全検出器を覆う直方体のx軸方向の最大値。
FASTMODEがONの時のみ有効
sim_y_minreal全検出器を覆う直方体のy軸方向の最小値。
FASTMODEがONの時のみ有効
sim_y_maxreal全検出器を覆う直方体のy軸方向の最大値。
FASTMODEがONの時のみ有効
sim_z_minreal全検出器を覆う直方体のz軸方向の最小値。
FASTMODEがONの時のみ有効
sim_z_maxreal全検出器を覆う直方体のz軸方向の最大値。
FASTMODEがONの時のみ有効
TEXT OUTPUT MODEcharacter*2ON : .dat出力を有効にする。
OFF : .dat出力を有効にしない。
Geometry
ACTIVENEUTMIN_xintegerアクティブにしている中性子検出器の横方向(x軸)の最小値。
ACTIVENEUTMAX_xintegerアクティブにしている中性子検出器の横方向(x軸)の最大値。
ACTIVENEUTMIN_x〜ACTIVENEUTMAX_xの検出器にHVが印加されていることに相当する。
ACTIVENEUTMIN_yintegerアクティブにしている中性子検出器の高さ方向(y軸)の最小値。
ACTIVENEUTMAX_yintegerアクティブにしている中性子検出器の高さ方向(y軸)の最大値。
ACTIVENEUTMIN_y〜ACTIVENEUTMAX_yの検出器にHVが印加されていることに相当する。
ACTIVENEUTMIN_zintegerアクティブにしている中性子検出器のビーム軸方向(z軸)の最小値。
ACTIVENEUTMAX_zintegerアクティブにしている中性子検出器のビーム軸方向(z軸)の最大値。
ACTIVENEUTMIN_z〜ACTIVENEUTMAX_zの検出器にHVが印加されていることに相当する。
Nthreal中性子検出器のスレッショルド[Mev]。エネルギー損失がこの値を越えたとき各検出器に入射したものとみなされる。
Nshapereal各中性子検出器の形状。
S : 直方体
C : 横置き円柱
NxrealS : 各中性子検出器の左端の位置(x座標)。1-15までは架台No.1の実データ。16-30は推定値。Nx(:,i+1)=Nx(:,i)+12.2 ここで12.2cmは各中性子検出器左端同士の距離(実測値)の平均値。
C : 底面の中心のx方向の位置
NyrealS : 各中性子検出器の左端の位置(y座標)。0以上の実数
C : 底面の中心のy方向の位置
NzrealS : 各中性子検出器の左端の位置(z座標)。
C : 底面の中心のz方向の位置
NwidthrealS : 各中性子検出器の幅(x軸方向の長さ)。1-15までは架台No.1の実データ。16-30は推定値(1-15の平均)。
C : 円柱のx方向の長さ
NdepthrealS : 各中性子検出器の奥行(z軸方向の長さ)。1-15までは架台No.1の実データ。16-30は推定値(1-15の平均)。
C : 円柱の半径。
NheightrealS : 中性子検出器の高さ(y軸方向の長さ)。
C : ダミー。適当に数字を入れておく。空白だとエラー。
ACTIVEVETOMIN_xintegerアクティブにしているVETOの横方向(x軸)の最小値。
ACTIVEVETOMAX_xintegerアクティブにしているVETOの横方向(x軸)の最大値。
ACTIVEVETOMIN_x〜ACTIVEVETOMAX_xの検出器にHVが印加されていることに相当する。
ACTIVEVETOMIN_yintegerアクティブにしているVETOの高さ方向(y軸)の最小値。
ACTIVEVETOMAX_yintegerアクティブにしているVETOの高さ方向(y軸)の最大値。
ACTIVEVETOMIN_y〜ACTIVEVETOMAX_yの検出器にHVが印加されていることに相当する。
ACTIVEVETOMIN_zintegerアクティブにしているVETOのビーム軸方向(z軸)の最小値。
ACTIVEVETOMAX_zintegerアクティブにしているVETOのビーム軸方向(z軸)の最大値。
ACTIVEVETOMIN_z〜ACTIVEVETOMAX_zの検出器にHVが印加されていることに相当する。
VthrealVETOのスレッショルド[Mev]。エネルギー損失がこの値を越えたとき各検出器に入射したものとみなされる。
Vshapereal各VETOの形状。
S : 直方体
C : 横置き円柱
VpositionxrealS : 各VETOの左端の位置(x座標)。
C : 底面の中心のx方向の位置
VpositionyrealS : 各VETOの左端の位置(y座標)。0以上の実数
C : 底面の中心のy方向の位置
VpositionzrealS : 各VETOの左端の位置(z座標)。
C : 底面の中心のz方向の位置
VwidthrealS : VETOの幅(x軸方向の長さ)。
C : 円柱のx方向の長さ
VdepthrealS : VETOの奥行(z軸方向の長さ)。
C : 円柱の半径。
VheightrealS : VETOの高さ(y軸方向の長さ)。
C : ダミー。適当に数字を入れておく。空白だとエラー。
FTRIG,BTRIGについてもVETOと同様に設定する
Material
ZMreal検出器を構成する物質のZ
AMreal物質のA
ADJreal物質の mean excitation potential [keV]
RHOreal物質の密度 [g/cm3]
-C0realdensity effect correctionの物質依存の定数 -C0 [1]
arealdensity effect correctionの物質依存の定数 a [1]
mrealdensity effect correctionの物質依存の定数 m [1]
X1realdensity effect correctionの物質依存の定数 X1 [1]
X0realdensity effect correctionの物質依存の定数 X0 [1]
AttenuationLengthreal減衰長
GNUPLOT_OUTPUT
AUTOflamecharacter*2ON : gnuplotで可視化する際の表示する空間を自動的に調整する。ただし、あまりあてにならない。
OFF : gnuplotで可視化する際の表示する空間を手動で定義する。以下の6個のパラメーター。
x_0realgnuplotで可視化する際の表示する空間のx軸方向の最小値
AUTOflame : OFF の時のみ有効
xwidthrealgnuplotで可視化する際の表示する空間のx軸方向の長さ。※最大値ではない
AUTOflame : OFF の時のみ有効
y_0realgnuplotで可視化する際の表示する空間のy軸方向の最小値
AUTOflame : OFF の時のみ有効
yheightrealgnuplotで可視化する際の表示する空間のy軸方向の長さ。※最大値ではない
AUTOflame : OFF の時のみ有効
z_0realgnuplotで可視化する際の表示する空間のz軸方向の最小値
AUTOflame : OFF の時のみ有効
zdepthrealgnuplotで可視化する際の表示する空間のz軸方向の長さ。※最大値ではない
AUTOflame : OFF の時のみ有効
view_x_rotrealgnuplotで可視化する際にデフォルトで表示されるx軸方向の角度。
view_y_rotrealgnuplotで可視化する際にデフォルトで表示されるy軸方向の角度。
u_isorealgnuplotで可視化する際に曲面表示のuの分割数。小さくすると荒くなるが軽くなる。
v_isorealgnuplotで可視化する際に曲面表示のvの分割数。小さくすると荒くなるが軽くなる。
terminalnamecharactergnuplotで可視化する際の名前。デフォルトではwxtとなっているが、これで動かない場合LinuxならX11で動くはず。
個人的にはX11よりwxtの方が出力が美しいと思う。
simSOLIDvisualizedcharacter*2ON : FASTMODEの仮想の直方体を表示する。
OFF : FASTMODEの仮想の直方体を表示しない。
simSPHEREvisualizedcharacter*2ON : REALMODEの仮想の半球面を表示する。
OFF : REALMODEの仮想の半球面を表示しない。
REALMODE_SOLIDvisualizedcharacter*2ON : REALMODEの時必ずミューオンが通過すべき直方体(REALMODE_SOLID)を表示する。
OFF : 表示しない。
FAST MODE OPTION
DETECTOR ASSIGNMENT MODEcharacter*2FASOMODEがONのときのみ有効なオプション。
ON : ミューオンの初期位置となる乱数を振る範囲を既存の検出器から選択する。 トリガー検出器を指定するのが効率が良いが、各検出器のサイズが異なる場合、絶対にこのオプションを使ってはならない。体積で規格化していないので確率分布が大幅にずれる。ただし、コード内部で体積による規格化を行っても原理的に正しい確率分布にならない。その点を気にする場合は素直にREALMODEで実行すべし。
OFF : 検出器全体を覆う直方体を一個設定してその中に一様にミューオンの初期位置となる乱数を振る。その直方体のジオメトリ値が前述のsim_x_minなど。
ASSIGN_NOint 初期位置とする検出器の数。最大100。
clustercharacter*1指定する検出器のクラスター N,V,F,Bより指定する。BUILDクラスターは指定できない。
IDint指定する検出器のID(3桁)。configで設定した値。

GNUPLOTによる可視化

gnuplot> load './filename.plt'
デフォルトでは
  • 青 : NEUT
  • 緑 : VETO
  • 黄 : Front Trigger
  • 金 : Back Trigger
  • 紫 : Building
  • 灰 : 宇宙線
  • 赤 : 検出器中の宇宙線
で表示される。可視化することによりジオメトリが正しく設定されているか視覚的に確認できる。

RIBF

RIBF加速器棟。

FASTMODE / REALMODE

FASTMODE

configでFASTMODEをONにしたとき実行するモード。
このモードでは全検出器を覆う直方体を設定し、その中にミューオンの通過する点をランダムに決めて、そこから各検出器を通過するかどうかを判定する。これは想定した直方体の形・大きさが検出器全体とほぼ同じという近似が成り立つときのみ実行し得る。つまり、各検出器が同じサイズでかつ1箇所に集まっている場合このモードを使える。一方で、各検出器のサイズが検出器毎に大きく異なり、分散して設置されている場合このモードでは誤差が大きくなる。
simSOLIDvisualizedをONにするとGNUPLOTで可視化したときに黒い線で直方体が表示される(下図)。この直方体が全検出器を覆っていることを確認しなければならない。 以下の例では緑のVETOを覆っていない。したがってVETOのみの入射を考慮に入れていないことになる。

REALMODE

configで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(非数)かどうかを判定する。が、一部の環境ではこれが組み込まれていなくてコンパイルできない。 というよりもむしろ一部の環境にしか組み込まれていない。
次のバージョンではISNANに相当する関数を予め組み込んでおく予定。
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で動作確認)。

データ形式

出力ファイルのデータ形式

.hbk

PAWもしくはANAPAWで読むためのファイル。もしくはmain.fの最後に
call HPRINT(ID)
と書いておけばPAWなどを使わなくても実行後に端末にヒストグラムが表示される。 詳しくはこのあたり

.txt

configで設定した値と実行結果が入っている。
実行結果 :
  • tortal particle : 全生成粒子数
  • trackNO : トラッキングした粒子数。=multiplicityを満たしたイベント数
  • trackNO_TRIG : 総トリガー数。multiplicityを満たし、かつトリガー条件を満たしたイベント数
  • time : 実行時間[秒]

.geo

/geometry に生成される。各検出器について直方体であるときに頂点座標が記述されている。 gnuplotで読み込むと直方体として表示される。 円柱の場合には生成されない。
ファイル名は
filename claster ID .geo

.tra

/track に生成される。trackNOmax以下のイベントについて各検出器への入射/出射位置が直交座標系で記述されている。
データ形式は
side ID x y z
side ID x y z
上下段いずれかyが大きい方が入射位置、小さいほうが出射位置。
ファイル名は
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(ソルディラス)"の元ネタはとあるゲームの粒子兵器。 でも、発音も綴りも少しだけ変えてあるのでたどり着くことは多分無理。「ソルディラス」で検索するとなんか出てくるがこれは関係ない。 むしろ検索して初めて知った。