ファイルフォーマット
Cosmo-Zのデータファイルは図1に示すような構造になっています。
ファイルにはファイルヘッダと呼ばれるヘッダ構造があり、その後ろにチャンクと呼ばれるデータの塊が複数個並んでいます。
図1 Cosmo-Zのデータファイル構造
ファイルヘッダ
ファイルヘッダは448バイト固定(平成29年1月時点)であり、図2のような情報が格納されています。複数バイトにまたがる値はリトルエンディアンで格納されます。
図2 ファイルヘッダの構造
- MagicNumber・・・ファイルの種類を表す
- 0x20c5・・生データ
- 0x21c5・・低レートパルスデータ(イベント波形データ)
- n_boards・・ボードの数。ADCチャネル数÷8。拡張ボード3枚挿しの場合は4
- start_unixtime・・計測開始時刻がtime_t型で入る
- end_unixtime・・計測終了時刻がtime_t型で入る
- chmask・・どのチャネルをキャプチャしたかがビットマスクで入る
- iteration・・チャンクの数を表す。現時点では1に固定
- triginfo・・TRIGINFOレジスタの設定値が格納される
- adccommand・・ADCCOMMANDレジスタの設定値が格納される
- original_name・・最初に設定したファイル名が設定される。ヌル終端文字列
文字コードはSJISまたはUTF-8 - comment・・ファイルに付与されたコメント
文字コードはSJISまたはUTF-8 - chx_adc_offset・・ADCの値に加算されたオフセット値(通常は0)
- chx_adc_mult・・ADCの値に乗算されたゲイン補正値(通常は0)
固定小数点で、xx.yy と表現される。xx、yyともに8bit - chx_adc_delay・・そのチャネルに追加された遅延のクロック数
- chx_adc_trig・・そのチャネルのトリガ情報
チャンク構造(生データ)
生データが格納されたチャンクの構造は図3のようになっています。
図3 チャンクの構造(生データ)
- MagicNumber・・0xc0c5
- time48_high,middle,low・・・計測開始時刻を、FPGA起動時から10ns単位で表したタイムスタンプ
- length・・データ数。実際のデータサイズは、length×チャネル数×2バイトとなる。
- xadc・・計測開始時のFPGAの電圧や温度など
- chx_pedestal・・各チャネルの値の最頻値
- gps_time、gps_10ns、gps_maxcount・・・計測開始時のGPS時刻情報
計測データは16bitで表現され、各チャネルごとに256ワードずつ記録されます。
例えば、CH1,2,7を記録した場合、図4のような構造で記録されます。
図4 生データの構造(CH1,2,7を計測の場合)
チャンクヘッダ(低レートパルス/イベント計測モード)
低レートパルスのデータは、1つのチャンクに数多くの波形データが含まれています。チャンクヘッダは図5のようになっています。
図5 生データの構造(CH1,2,7を計測の場合)
- MagicNumber・・0xc0c5
- time48_high,middle,low・・・計測開始時刻を、FPGA起動時から10ns単位で表したタイムスタンプ
- length・・データ長。
- xadc・・計測開始時のFPGAの電圧や温度など
- chx_pedestal・・各チャネルの値の最頻値
- min_y,max_y,max_x・・・全てのイベント波形を解析した結果のx,yの最大値、最小値
オフセット128以降には、トリガ発生時の波形が格納されています。イベントの数と1つのイベントのデータ長は可変長です。
各イベントのデータには24バイトのヘッダが付き、図6のような構造をしています。
図6 イベントデータの構造
各データの意味を図7に示します。このような波形が入力され、トリガが発生したとき、Cosmo-Zはトリガ発生時点よりも前(プレトリガ)の時刻から波形を記録します。
ペデスタルレベルとは、イベントが発生していない状態でのADCの値を示しています。これは波形のヒストグラムを測り、最頻値から求めています。
イベントが発生すると、トリガ長、トリガ期間中の波形の総和=面積、データ長、最大値などを記録します。
図7 イベントデータの構造
データは可変長で、データ長はオフセット2に書かれています。1つ1つのデータは16bit幅で、リトルエンディアンで、LSB方向に詰められています。