適用事例とスクリーンショット

KamLAND 実験データ収集システム

KamLAND Detector KamLAND 実験は,原子炉から飛来する超低エネルギーの反ニュートリノを観測することにより,ニュートリノ振動現象を精密に検証することを主な目的としています. ニュートリノのターゲットに 1000 トンの液体シンチレータを使い,そこから出る光を 1850 本の光電子増倍管(PMT)で検出します.KamLAND 検出器は,かつてカミオカンデ検出器があった場所,神岡鉱山内の地下 1000m の位置に設置されています.

KamLAND 実験ホームページ: http://www.awa.tohoku.ac.jp/KamLAND/


電子回路

KamLAND 実験では,独自に開発したデータ収集電子回路 (Front-End Electronics; FEE) を使用しています.これは 9U の VME のカードで,一つのカードに 12 個の PMT を接続できます.KamLAND 実験ではおよそ 200 枚の FEE を 20 枚づつ 10 台の VME クレートに分けて使用しています.

KamFEE 拡大 KamFEE layout

FEE は,接続される全ての PMT の信号の波形を記録します.サンプリング間隔はおよそ 1.5ns (DAC により可変)で,サンプル幅は 10bit, サンプル数は 128 です.最大ゲインのアンプを使った場合,120 uV/count 程度で記録されます.一つの波形データのサイズは,ヘッダなどを含めて,256 byte になります.

PMT の信号は,ディレイやアンプなどを通ったあと,ATWD (Analog Transient Waveform Digitizer) と呼ばれる ASIC に送られ,ここで波形のキャプチャおよびデジタイズなどが行なわれます.また,各チャンネルには,ヒット判定用にディスクリミネータが付けられいます.

KamFEE diagram

ATWD は,内部にコンデンサのアレイを持っており,ここに波形をアナログのまま保持することができます.PMT の信号はこのコンデンサのアレイに常に記録されつづけ,ある時点で過去に遡って読み出すことができます.ディスクリミネータがヒットすると,その時点で記録が止まり,記録されている波形が保持されます.この状態でグローバルなトリガが発行されると,波形のデジタイズが開始されます.デジタイズに要する時間は 25 us です.175 ns 以内(可変)にグローバルトリガが来なかった場合,保持していた波形は破棄され,再び波形の記録が開始されます.

デジタイズされたデータは,ボード上のメモリに記録されます.メモリサイズは,現在のところ,32MB です.このメモリサイズは,超新星爆発時に予想される短時間の大量のデータを全て記録できるように設定されました.

A/D 変換中のデッドタイムを避けるため,ATWD は全てのチャンネルに 2 系統づつ用意されています.これらは交互に使用され,これにより A/D 変換に伴うデッドタイムは事実上無視できるレベルになります.

PMT の信号は,1 p.e. (photo electron) レベルの小さなものから,ミューオンスポレーションによる 100000 p.e. 以上の大きなものまで広い範囲にわたります.この全ての範囲に対して波形を精度良く記録するため,PMT の信号は 3 つに分けられ,それぞれ異なったゲインのアンプにわたされます.ゲインはそれぞれ 20 倍,4 倍,0.5 倍で,これらの全てが独立の ATWD 入力チャンネルに接続されています.デジタイズはゲインの高いチャンネルから順に行なわれ,そのチャンネルのデータがレンジの上限に達していた場合のみ,よりゲインの低いチャンネルのデジタイズが行なわれるようになっています.

ボード上には,複数の Digital to Analog Converter (DAC) があり,ディスクリミネータのスレッショルドや ATWD のサンプリング間隔など,ほとんど全てのパラメータを VME から設定できるようになっています.また,ATWD のサンプリング間隔やアンプゲインなどを較正するためのセルフキャリブレーションの機能をもっており,VME からのコマンドによりこれらのキャリブレーションを自動で行なうことができるようになっています.さらに,波形記録とは独立に,ディスクリミネータのヒットレートを記録するレジスタをもっており,これにより PMT のシングルレートをモニタできるようになっています.

トリガ回路

データ収集電子回路 (Front-End Electronics; FEE) の各 PMT チャンネルに付けられたディスクリミネータがヒットすると,ディスクリミネータは 125 ns のパルスを出力します.各ボードごとにこのパルスの整数和が取られ,5bit のヒット情報としてトリガ回路に送られます.KamLAND 実験ではおよそ 200 枚の FEE を使用しているので,トリガ回路には 200 組の 5bit ヒット情報が入力されることになります.

トリガ回路は,これらのヒット情報に基づいてトリガを発行します.トリガ回路は,通常はヒット数やそのパターンに基づいて物理事象を判断し,ヒットがあったチャンネルのみをデジタイズするように指示するグローバルトリガと呼ばれるものを発行します.一方で,キャリブレーションのために全チャンネルを強制的にデジタイズする Forced Acquisition トリガや,ある特殊なコントロール(タイマのリセットなど)を行なうための特殊なトリガを発行することもできるようになっています.

Trigger Electronics

トリガ回路には,GPS が接続されており,全ての時間情報はこの GPS に同期されるようになっています.トリガ回路は 40 MHz のシステムクロックを持っており,はじめにこのシステムクロックを GPS の時刻と同期させます.この 40MHz クロックは全ての FEE に分配され,共有されています.FEE はこのクロックを数え,時間情報としています.FEE がトリガを受け取ると,デジタイズした波形データにトリガを受け取った瞬間の時間情報を付加します.後に,この時間情報をもとにイベントの再構築が行なわれます.

トリガ回路には,VME の Input Latch モジュールが接続されています.トリガ回路は,これを介してトリガレコードを計算機に送ります.トリガレコードは各トリガごとに作成され,発行したトリガのタイプや時刻,PMT のヒット数などが記録されます.また,トリガには波形記録を伴わない History トリガというものもあり,トリガ回路自身によって,時刻と PMT ヒット数のみが記録されます.History トリガでは波形記録を伴わないため,データサイズが小さく,このため超低スレッショルドのデータ取得ができるようになっています.

さらにトリガ回路には,計算機側からコマンドやパラメータを受け取るために,VME の Output Register モジュールも接続されています.ランの開始時には,この Output Register を介して,計算機からトリガ回路に動作モードやスレッショルドなどのパラメータがロードされます.ランの開始や終了も,やはりこの Output Register を介した計算機の指示により行なわれるようになっています.

データ収集計算機とネットワーク

KamLAND 実験では,およそ 200 枚の Front-End Electronics (FEE) カードを使用しています.これらは,20 枚ごとに 1 つの VME クレートに接続されており,全体で 10 台の VME クレートを FEE のために使用しています.さらに,これに加えて,トリガシステム用に 1 台と,メインの FEE のバックアップ用に用意された MACRO 実験からもらった電子回路用に 4 台の VME を使用しており,全部で 15 台の VME を使用しています.

それぞれの VME クレートは,SBS Technologies 社の VME-PCI ブリッジ Model-620 を介して,1 対 1 で PC に接続されています.したがって,データ読み出し用に 15 台の PC を使っていることになります.Model-620 は,VME と PCI の接続に光ファイバを使っているので,データ収集電子回路と計算機系は電気的には完全に分離されています(電源系統もかなり手前で分岐している).

DAQ Computers and Networks 拡大

データ収集用の PC (フロントエンド PC) 上では,OS として Linux が動作しています.VME のデバイスドライバは,Kinoko に含まれている vmedrv です.実験の初期には Vine Linux 2.5 (kernel 2.0) を使用していましたが,現在では RedHat Linux 8.0 (kernel 2.2) を使っています.データ収集系自体は,どちらのシステムでも全く同じように安定に動作しました.フロントエンド PC 単体では,10MB/sec 以上のスピードでデータを読み出すことができます.

各フロントエンド PC は,100base-T (100Mbps) のイーサネットでネットワークスイッチに接続されています.このスイッチは 1000base-T (1Gbps) のコネクタを持っており,これが別の 1000base-T スイッチに接続されています.この 1000base-T のネットワークには,オンライン解析やデータ表示,データ記録用の PC (バックエンド PC) が接続されています.フロントエンド PC で読み出された全てのデータはこのバックエンド PC に一度集められ,記録・解析・表示などが行なわれます.

バックエンドには,現在では PC と Linux (RedHat 8.0) が使われていますが,以前は IBM の RS/6000 と AIX 4.3 オペレーティングシステムが使われていました.Kinoko は,このような異種混在環境でも全く同じように動作します(ただしバイトオーダ変換のためのオーバーヘッドがかかることがあります).

ネットワークやディスクはときどき不安定になることもありますが,順調に動作しているときは,20 MB/sec から 30 MB/sec 程度のデータを処理する能力があります(ディスク単体では 100 MB/sec 以上のスピードで記録できます).なお,現在の KamLAND の通常ランのデータ量は, 3 MB/sec から 5 MB/sec 程度で,かなり余裕をもった運用になっています.さらに高い性能が必要なら,ネットワーク構成を変えたり,ディスク記録を並列にするなどの方法により,5 倍程度の性能向上をする余地があります.

コンポーネント配置

KamLAND 実験のデータ収集系は以下のコンポーネント群から構成されます.
TriggerCollector [KinokoCollector w/ KamTrigger.kts]
トリガエレクトロニクスのコントロールとトリガデータレコードの読み出しを行ないます.

FbeCollector [KinokoCollector w/ KamAtwd.kts]
データ収集電子回路(Berkeley エレクトロニクス)のコントロールとデータの読み出しを行ないます.

FmeCollector [KinokoCollector w/ KamWfd.kts]
バックアップ用に用意されたデータ収集電子回路(MACRO エレクトロニクス)のコントロールとデータの読み出しを行ないます.

Transporter [KinokoTransporter]
バックエンド側のPCでフロントエンドからのデータを受け取り,次のバッファに転送します.バッファがネットワーク越のアクセスができないため必要になっています.

Buffer [KinokoBuffer]
フロントエンドPCからの15本のデータストリームを融合し,記録用と表示用の2つのデータストリームに分けて送り出します.

TriggerDataAnalyzer [KamTriggerDataAnalyzer]
オンラインデータ表示用に,トリガデータの簡単な解析を行ないます.

OnlineDataAnalyzer [KamOnlineDataAnalyzer]
オンラインデータ表示用に,ウェーブフォームデータの簡単な解析を行ないます.

TriggerDataFilter [KinokoDataFilter]
データストリームからトリガデータだけを抽出し,下流に送ります.

Viewer [KinokoViewer w/ KamViewer??.kvs]
収集中のデータをリアルタイムで画面に表示します.また,必要に応じてアラームの発行なども行ないます.

Compressor [KamDataCompressor]
データを圧縮します.KamLAND のデータはウェーブフォームなので,圧縮が効率的に働きます.

Recorder [KinokoDataRecorder]
データをディスクに記録します.

Controller [KinokoController w/ KamLAND.kcml]
コントロールパネルからのユーザのコントロールをシステムに伝達します.

Logger [KinokoLogger]
ログの表示と記録を行ないます.

Reporter [KinokoReporter]
ランサマリの自動生成を行ないます.

オンラインデータ解析を行なう OnlineDataAnalyzer/TriggerDataAnalyzer とデータ圧縮を行なう DataCompressor は,KamLAND 実験のために開発したカスタムコンポーネントです.それ以外のコンポーネントは全て Kinoko 標準のものを使用しています.

これらのコンポーネントは以下のように各計算機に配置されています.

Component Deployment 拡大

フロントエンド PC では,ハードウェアアクセスに余計な負荷をかけないようにするために,データ読み出しとバックエンド PC へのデータ転送以外の処理はしないようにしています.

バックエンド PC に送られたデータは,一度バッファに全て集められます.このバッファで,ストリームは記録系と表示系の2つに分けられます.記録系のストリームに送られたデータは,コンポーネント KamDataCompressor で圧縮され,KinokoRecorder コンポーネントによりファイルに書き出されます.データ圧縮は,冗長部分の削除とハフマン符合化により行なわれ,60% から 70% の圧縮率を実現しています.

表示系に送られたデータは,KamTriggerDataAnalyzer および KamOnlineDataAnalyzer によりオンライン表示用のデータに変換されます.ここで計算される値は,各フロントエンド PC からのデータ量,トリガレート,各 PMT のヒットレートとシングルレートなどです. これらのうち,特にトリガデータは現場でのトラブルシューティングなどで役に立つので,バッファ(Buffer2)により分岐させて独立のデータファイルに記録しています.ストリームからトリガデータだけを抽出するために KinokoDataFilter が使われています.

DataAnalyzer コンポーネントにより計算された表示用データは,KinokoViewer の各コンポーネントに分配されます.全てのビューアコンポーネントをバッファに直接接続させることも可能ですが,データ量が比較的多くバッファの負荷が大きくなってしまうため,ここではビューアの ChainedDataConsumer の機能を用いて,各ビューアコンポーネントを直列に接続しています.

上記のコンポーネントに加え,コントロール用の PC には,KinokoController, KinokoLogger, KinokoReporter の各コンポーネントが配置されています.

Kinoko の KamLAND 実験への適用

Kinoko を KamLAND 実験に適用するにあたって,KamLAND 用に開発したものは以下のとおりです.
モジュールドライバ類
KamLAND FEE 用 KinokoModuleDriver (module-KamLAND_ATWD.hh/.cc)
基本的に,BlockRead() を実装しただけですが,モジュールのメモリ管理が若干複雑なため,少し長めになっています.また,この電子回路はレジスタや DAC により動作をコントロールできるので,スクリプトからこの機能を使うために,ReadRegistry() と WriteRegistry() が実装されています.書き込み先が DAC の場合,D/A 変換に要する時間を待たなければならないので,WriteRegister() には DAC へ書き込みを行なう場合に短いディレイが入るようになっています.

MACRO 実験からもらった電子回路用 KinokoModuleDriver (module-MACRO_WFD.hh/.cc)
BlockRead() と Clear() が実装されています.モジュールが若干かなり込み入った構造をしているので,コードも若干かなり複雑になっています.モジュールはハードウェアによるゼロサプレスの機能をもっており,そのスレッショルドなどが VME 側から設定できるようになっています.ただし,この機能は手順が込み入っているので,モジュールドライバでは MiscControl を使って SetThresholds() を定義しています.

スクリプト類
読み出しスクリプト (KamAtwd.kts / KamTrigger.kts / KamWFD.kts)
FEE およびトリガ用の読み出しスクリプトです.動作パラメータをコントロールパネルおよび SQL データベースから取得し,デバイスにロードして,ランを開始するようになっています.いくつかのパラメータは意図的にスクリプト中にハードコーディングされています.特殊なキャリブレーションなどには,それ用のスクリプトを使うことを想定しており,実際にキャリブレーションを行なう人たち自身によって独自のスクリプトが作成・メンテナンスされています.

ビュースクリプト (KamViewer??.kvs)
KamLAND 実験では,合わせて4つのビューアを使っており,それに対応して4つのビュースクリプトがあります.ビューアで表示しているのは,各 VME クレートからのデータ量,いくつかの代表的なトリガに対するトリガレート,各トリガにおける PMT ヒット数のヒストグラム,データ量やトリガレートの長期変動,超新星爆発モニタなどです(スクリーンショット参照).データレートやトリガレートなどに対しては「正常値」の範囲が設定されており,異常の場合にはアラームを発行できるようになっています.

コントロールパネルスクリプト (KamLAND.kcml)
コントロールパネルは,ランパラメータの設定とコントロールを行ないます.基本的に,Construct / Start / Stop / Quit の各アクションと,スクリプトやランパラメータを指定する入力フィールドからなります(スクリーンショット参照).通常のランや定期的なキャリブレーションにおいて,入力ミスが多いため,ワンクリックで全てのフィールドを適切に設定するボタン(One-Click Configuration)がツールバー上に用意されています.One-Click Configuration の機能は,KCML のローカルアクションスクリプトの機能を用いて実装されています.

KCOM スクリプト (KamLAND.kcom)
100 以上にのぼるコンポーネントを全て配置・結合させるためにかなり長大なものになってしまいました(このへんは将来改善したいところです).ただし,構造的には SmallKinoko と大差ありません.起動に要する時間をなるべく短縮するため,"asynchronous" や "oneway" が積極的に利用されています.また,KinokoReporter を用い,各ランの終了後に XML 形式のランサマリを自動で生成するようにしています.

カスタムコンポーネント類
KamTriggerDataAnalyzer (KamTriggerDataAnalyzer.hh/.cc)
特殊フォーマットで書かれたトリガレコードを解読し,Kinoko の "indexed" や "tagged" に変換するコンポーネントです.KinokoDataProcessor をベースに作成されています.indexed や tagged 形式になったトリガレコードのデータは,ビュースクリプトで直接扱うことができるようになります.

KamOnlineDataAnalyzer (KamOnlineDataAnalyzer.hh/.cc)
FEE から得られたデータをもとに,ビューアで表示するデータを計算するコンポーネントです.KinokoDataProcessor をベースに作成されています.出力ストリームに流すデータが多岐にわたっているため,それらを複数のデータソースに分けて出力します.通常,1 つのデータソースに 1 つのコンポーネントが対応しますが,ここでは,KinokoCompositeDataProcessor の機能を使うことにより,1 つのコンポーネントで複数のデータソースを持てるようにしています.

KamDataCompressor (KamDataCompressor.hh/.cc)
KinokoRecorder の直前に入ってデータを圧縮するコンポーネントです.やはり KinokoDataProcessor をもとに作成されています.冗長データの削除,ペデスタルの差し引き,およびハフマン符号化による圧縮を行ないます.これによりデータサイズは圧縮前の 40% から 30% 程度になります.

スクリーンショット

コントロールパネル
control panel 拡大
Viewer 1
viewer1 拡大
Viewer 2
viewer2 拡大
Viewer 3
viewer3 拡大
Viewer 4
viewer4 拡大