中村研実験室のDAQシステムが動作しているかを確認する手順を書いたおぼえがき。ここでは、線源を使わず宇宙線を測定することを考え、検出器からの信号は、十分に少ないと仮定する。取得したデータはANAPAWでヒストグラムにする。babarl DAQについては、を参照。
(書いたことをあまり見直していないので、間違いがたくさんあると考えられる。)
使用する装置は、次のとおり。ADCは、CAMAC Crateのステーションナンバー3番(左から3番目のところ)に入っていると仮定する。
| 種類 | 略称 | 品番/品名 | 備考 |
|---|---|---|---|
| パソコン | PC | ||
| CAMAC クレート | CAMAC Crate | CAMAC moduleの入れ物 | |
| クレートコントローラ | Crate Ctrl. | ||
| ハイボルサプライ | HV | ||
| ゲート&ディレイジェネレータ | Gate Gen. | ||
| Analog to Digital Converter | ADC | ||
| 100ns Delay | 100ns Delay | ||
| ホドスコープ | Det. | 中村研制作 |

NBBQのbabarlDAQモードを用いて、DAQを行う。NBBQ(Neo bb DAQ)とはRTlinuxでない普通のLinux上でも動くお手軽DAQシステム。検出器のテストなどのDead Timeを気にしないDAQに向く。
NBBQの使い方はに書いてあるが、ここでは手順を詳しく書く。また、ステーションナンバー3番にADCを入れたと仮定する。
$ cd ~/ $ mkdir test
$ cd ~/test $ nbbqcpy $ ls # コピーできたか確認 Makefile bbdaq.c def-advme.h evt.c sca.c v775.c v792.h bb-camac.h bbmodules.h def-cc77.h nbbqctrl.h startup.c v775.h bb-cc77.h bbrl.c def-k2915.h nbbqdrv.c stop.c v785.c bb-k2915.h clear.c def-sbs620.h nbbqdrv.h v767.c v785.h bb-vme.h common.h def-vmemm.h nbbqio.h v767.h v792.c
| bbmodules.h |
|---|
#define BBRL
#define MAXBUFF 0x1e00
#define CAMAC /* CAMACを使うことを宣言。 */
#define CAMACINT /* CAMACを割り込みソースにします。(省略可) */
#define CC7700 /* クレートコントローラの選択。K2915 から CC7700 に変更。 */
#define LAMN 3 /* Look At Me モジュールの選択。 */
/* ステーションナンバー3番に入っているADCをLAMとする。 */
#define OPRN 22 /* 今回は使わないので、変更しない。この行、削除しても良い。 */
/* アウトプットレジスタのあるステーションナンバーを指定。 */
#define OPBUSYCL 1 /* アウトプットレジスタを使わない場合は関係ない。この行、削除しても良い。 */
|
| startup.c |
|---|
void startup(void){
crate_define_lam(LAMN); /* crate_define_lam(LAMN)でLAMにするモジュールを指定。 */
control_mod(0,LAMN,0,26); /* control_mod(0,LAMN,0,26)でLAMにするモジュールに対して LAMを許可。 */
/* アウトプットレジスタは使わないため、以下コメントアウト。 */
/* write_data(0,OPRN,0,17,OPBUSYCL); */
}
|
| stop.c |
|---|
void stop(void){
control_mod(0,LAMN,0,9); /* cotrol_mod(0,LAMN,0,9)で念のためLAMモジュールをクリア。*/
control_mod(0,LAMN,0,24); /* control_mod(0,LAMN,0,24)でLAMを禁止。 */
}
|
| evt.c |
|---|
void evt(void){
/* init_event(1)は約束ごとで、evt.cの先頭に書く。おまじない? */
/* init_segment(segid) <−> end_segment() の間にセグメントのデータを記述していく。
segidには、1 や 2 を指定する。セグメントとは、データを保存するスペースのこと?
segidに 1 を指定すると、idが 1 の場所にデータが保存されていく感じ?
後でANAPAWで解析するときに、このsegidを使う。
*/
init_event(1);
init_segment(1);
/* read_segndata(short len,short c,short n,short a,short f)
は、セグメントにlen個データを追加 (aはインクリメントされる)。
すなわち、データファイルの中の、セグメントってところにデータを保存するってこと?
ここで、lenはADCのチャンネル数。16チャンネルなので、16とした。
今回は1チャンネルしか使わないので、1としてもよい。
cは 0 にする。クレートが複数ある場合には 0 以外を書くこともある。
nはADCのステーションナンバーの 3 を指定する。aはよくわからない。
fはCAMACファンクションでデータの読み込みを実行する 0 を指定する。
CAMACファンクションについては、仕様書参照。
*/
read_segndata(16,0,3,0,0);
end_segment();
/* LAMモジュールをクリア。次のデータに備える。 */
control_mod(0,LAMN,0,9);
}
|
| sca.c |
|---|
void sca(void){
/* スケーラは使わないため、ここには何も書かなくてよい。*/
}
|
| clear.c |
|---|
void clear(void){
/* アウトプットレジスタは使わないため、ここには何も書かなくてよい。*/
/* write_data(0,OPRN,0,17,OPBUSYCL); */
}
|
$ make clean $ make
$ nbbqinst
rdfファイルからヒストグラムを作るには、ANAPAWが必要なのでを参考にインストールする。自分のアカウントを作り、そのホームディレクトリにインストールするのがよい。
rdfファイルができたら、ANAPAWをインストールし、ADCで取ったデータをヒストグラムとして表示する。
$ cp ~/test/0001.rdf ~/exp/nbbq $ cd ~/exp/nbbq
| test.ana |
|---|
analys 1 hst1 0, 1,1,1,2, 400, 0.,2000., 'raw 1' |
$ csh $ analogin $ anapaw
ANAPAW> book test.ana ANAPAW> hst1 ANAPAW> ana/loop 0001.rdf ANAPAW/LOOP> start
| 書体 | 意味 | 例 |
|---|---|---|
| AaBbCc123 | 端末の表示する文字。またはコードなど。 | $ You have mail. |
| AaBbCc123 | ユーザーが入力する文字。 端末の表示する文字と区別する。 | $ su password: |
| AaBbCc123 | コマンドの引数やコードの可変部分。 実際の名前や値と置き換える。 | $ rm filename |