BABIRL でのデータ収集に対応するため、ANAPAW を改造しました。それに伴っていくつか変更点があります。ここでは、変更した点やポリシーなどをまとめておきます。
データフォーマットについては、以下のページを参考にしてください。
バイナリデータを解析して、各検出器群のあるチャンネルのADCやTDCの値を抜き出します。バイナリデータの中でひとつのデータを特定するためには、segment id, geometry (virtual station number), channelという3つの数値が必要になります。(コインシデンスレジスタなどはこの限りではありませんが。)これらの数値のうち、segment id, geometry はデータ収集システムで定義されています。データを特定するこれらの数値をわかりやすくするために、マッピングを行います。マッピングでは、category id, detector id, data type という識別子に変換を行います。
バイナリデータの解析とマッピングは、データ収集に使用したモジュール毎に準備された、dec_xxx というルーチンをつかって行います。この関数自体は、実験毎に異なることはほとんどありませんが、どう呼び出すかということを決める必要があります。
この呼び出しを決めているルーチンが、sortrawdata です。
sortrawdata 関数を呼び出すことによって、rawdata という配列にデータが格納されます。rawdata の参照のしかたは、
rawdata(idata,detid,catid) idata : data type detid : detector id catid : category id
です。
直接参照することも可能ですが、補助的に、hitDet(ihit,catid) という配列が準備されています。 hitDet には、そのイベントでデータが存在する detector の id が格納されています。どれだけの検出器がなったかは nHitDet(catid) という配列を参照することで知ることができます。つまり、
catid = 1 do id=1,10 Araw = rawdata(1,id,catid) enddo
とするかわりに
catid = 1 do ihit=1,nHitDet(catid) id = hitDet(ihit,catid) Araw = rawdata(1,id,catid) enddo
として参照することが可能になります。これによって、全ての detector id をチェックする必要がなくなりますので、解析速度もぐんとアップします
マッピングでは、segment id, geometry, channel によってデータを特定し、それがどの category のどの detector のどの data type に対応するかを ANAPAW に教えます。この書き方は以下のとおりです。
category detector segment1 geometry1 channel1 segment2 geometry2 channel2 ...
category id, detector id はすぐにわかると思います。data type は segment id, geometry, channel が書いてある順番に依存します。一組目が data type = 1, 二組目が data type = 2 のようになります。つまり、グループが何列目にあるかということが data type の番号に対応します。
dec_xxx 自体はなくなっていませんがその関数を呼び出している部分が異なります。この過程に関連するルーチンは以下のとおりです。