Kinoko Module Driver リファレンス

CAEN V792 / V792N

種別VME 電荷積分型 ADC
製造者CAEN (http://www.caen.it)
参照名CAEN-V792 / CAEN-V792N
読み出しread() / blockRead()
サービス要求ポーリング

読み出しアクション

read(int channel_bit_mask)
read(ReadoutChannelList channel_list)
引数に指定したチャンネルからデータを読み出し,indexed 型のデータとしてストリームに送り出す.

チャンネルに 32 (V792) または 16 (V792N) を指定すると,イベントカウンタの下位 12 ビットを返す.チャンネルに 33 または 17 を指定すると,イベントカウンタの上位 12 ビットを返す.

blockRead()
モジュールのバッファ上にあるデータを block 型のデータとしてストリームに送り出す.

waitData()
モジュールからデータが読み出せるようになるまでシーケンスの実行を停止する.

clear()
モジュールのデータクリアを実行する(バッファ上のデータとイベントカウンタのクリア)

enable(int channel_bit_mask) / disable(int channel_bit_mask)
指定されたチャンネルの KILL ビットを設定(解除)する.使わないチャンネルを disable() しておくと動作がかなり速くなるはず.

resetEventCounter()
イベントカウンタをリセット.

readEventCounter(Register event_counter)
イベントカウンタの値を引数のレジスタに返す.

readEventCounterOfThisEvent(Register event_counter)
最後の read() で読んだデータに対応するイベントカウンタの値を引数のレジスタに返す.

setThreshold(int channel, int threshold)
指定されたチャンネルにゼロサプレッション用のスレッショルドを設定する.threshold 値は,A/D 変換後の値で指定.

setEventTrigger(int number_of_events)
サービスリクエストを出すイベント数を指定.ここで設定した数のイベントを記録するとサービスリクエストを発行する.

setFastClearWindow(int length)
Fast Clear Window の長さを指定.10bit が有効で,T = length/32 + 7 (us) のウィンドウが設定される.最大値は 38.5us.

setPedestalCurrent(int pedestal_current)
ペデスタル電流を設定.詳細はマニュアル参照 (Iped Register).

enableZeroSuppression() / disableZeroSuppression()
設定したスレッショルド値以下のデータに対するゼロサプレッションを有効(無効)にする.

enableOverflowSuppression() / disableOverflowSuppression()
オーバーフローサプレッションを有効(無効)にする.

enableEmptyEventRecording() / disableEmptyEventRecording()
デジタイズされたデータのないイベントでも記録する(しない)ように設定する.

読み出しスクリプト例

datasource VmeAdc
{
    int base_address = 0x07920000;
    int readout_channels = #0..#3;

    VmeCrate crate;
    VmeController controller("SBS-620");
    VmeModule adc("CAEN-V792N");
    
    crate.installController(controller);
    crate.installModule(adc, base_address);

    on run_begin {
        // 読み出さないチャンネルは disable() しておくと実行が速くなる
	adc.disable(~readout_channels);  

        // 以下の設定は必要に応じて
        adc.disableZeroSuppression();
        adc.disableOverflowSuppression();
        //adc.setThreshold(0, 200);
	//adc.setEventTrigger(16);
    };

    Register triggered_events, digitized_events;
    DataRecord event_info;

    on trigger(adc) {
        // indexed 型データとして読み出す
        adc.read(readout_channels);

        // block 型データとして読み出す.少しは速い?
	//adc.blockRead();

        // イベントカウンタの読み出し (必要なら)
        adc.readEventCounter(triggered_events);
        digitized_events.add(1);
	event_info.fill("triggered_event_count", triggered_events);
	event_info.fill("digitized_event_count", digitized_events);
	event_info.send();
    }
}