DAQメモ

babirlでデータ収集するまでの道のりです。とりあえず1つのDAQだけで動かす 場合で、複数DAQを用いる場合はまだわかりません。

用語など

DAQのチェックに便利なコマンド

babiconを起動する前に必要なコマンド

以下の手順で行なう。
babinfo
babild -l 1
babies -l 10
をしておく。プロセスが残っている場合はps ax|grep -i babiで確認してkill する。killしてもPIDファイルが残っていると駄目なのでその場合は /var/run/babiesを消す。 babirl/include/userdefine.hを定義したばあいにはそのディレクトリのrun/*。

この後babiconでコントローラ起動します。 ただこれだけではだめで以下の操作が必要。

babicon

helpとうつとコマンド一覧が表示される。 まずEFを登録する。
localhost> seteflist 10 add localhost localhost
Event flagment
 ID Hostname   Nickname   on/off
 10 localhost  localhost  (on)
これだけでは駄目。EFのドライバのパスを設定。
localhost> setesconfig 10 rtdrv /usr/babirl/babidrv
ID      : 10
erport  : 17601
erhost  : localhost
hd1     : 0
hd1dir  : ./
hd2     : 0
hd2dir  : ./
isdrv   : 0(Error in driver dir)
rtdrv   : ./
connect : 0

ID      : 10
erport  : 17601
erhost  : localhost
hd1     : 0
hd1dir  : ./
hd2     : 0
hd2dir  : ./
isdrv   : 1
rtdrv   : /usr/babirl/babidrv
connect : 0
パスがあっていないとisdrvにErrorとでる。/usr/babil/babidrv/以下にはあ らかじめstartup.c/evt.c/stop.c/clear.c/sca.cを編集しておき、コンパイル しておく。 これでnsstaなどができる。ONLINE解析をしたい場合にはさらにUDP Clientを 登録する。
localhost> setclinfo 0 add localhost
UDP Client list
ID  : HOSTNAME
  0 : localhost (SHMID = 0)
ここでの0は自分で決めてよいとおもわれ。 これでANAPAWなどでONLINEデータが見えるはず。 raw dataファイルの保存先はsethdlistで設定できる。 以上の様にbabiconで設定したことはbabirl/init/* に保存され、一旦babicon を終了してもう一度立ち上げた時にも同じ設定になる。

babirlでのISERIES

いまのところVMEクレートを2台読みたい。babildrv.cの中を眺めていると
vme_enable_interrupt();
などとあって、この中は
void sbs620_enable_interrupt(void){
  writeb(SBS620_CLEAR_INTERRUPT,vreg[0].csr + SBS620_LOCAL_COMMAND);
  writeb(SBS620_ENABLE_INTERRUPT,vreg[0].csr + SBS620_INT_CTRL);
}
ここでの0は何番目のcrate controllerかというID。つまり1(というか0)番目。 interruptを掛けるのはは1台なので、これを0番のクレートにすればよい。 なのでstartup.c、evt.cは以下のようにかく。
startup.c
void startup(void){
  /* Startup Function */
  //----------------------------------------------------------
  // define interrupt level of SBS620
  vme_define_intlevel(INTLEVEL);
.
.
.
evt.c
void evt(void){
  /* Event */
  vme_read_intvector();
  init_event();
  //----------------------------------------------------------
  init_segment(MKSEGID(SAMURAI,F1,NEBULAT,V792));
  v7XX_segdata_i(TDCADDR0,TDC_CRATE);
  .
  .
  .
  end_segment();
  //----------------------------------------------------------
  init_segment(MKSEGID(SAMURAI,F1,NEBULAA,V792));
  v7XX_segdata_i(QDCADDR0,QDC_CRATE);
  .
  .
  .
  end_segment();
}
これでめでたく2つのクレートを読む事ができました。

RIDF用ANAPAW

RIDF用のANAPAWをインストール。 ディレクトリ構造を以下の用にした。
exp/ -- test2011aug/ -- analysis/ -- anapaw/ -- src/
     |              |           |         |
     -- himac/      |           |         -- Setup/
     |              |           | 
     |              |           -- user/ -- nebula/
     .              |           |
     .              |           -- src/
     .              |           |
                    |           -- analogin (-> anapaw/Setup/setupanapaw)
                    -- babirl/
                    |
                    .
                    .
                    .
anapaw本体は実験ディレクトリ(test2011aug)の下におく。anapaw本体 は変更しないけど、Setupディレクトリがanapaw以下にあり、これは実験 毎に変更する。setupanapawを実験毎に作っても管理できるけど、ディレクト リで分けたいのでこうした。
cd exp/test2011aug/analysis
source analogin nebula
もしくは
. analogin nebula
で。./analoginはだめ。

MAP file

RIDF版ANAPAWはマップファイルがとてもむずかしい。。。 手作業で作成すると間違えそうというのと、変更する時が来る気がするの でプログラム(mkmap.tar.gz)を最近勉強してい るC++で書いてみた。以下のようなインプットファイル
#
# define common part
#
category 16
name NEBULA
device    2
focal     1
detector 41
#
# GEO SigType  Ch_start ID_start NumOfCh
#   (Tu/Td/..)  (from 0) (from 1)
11 Tu  0   1 15
11 Td 16   1 15
21 Au  0   1 15
21 Ad 16   1 15
を作っておき、
[nebula@nebula01 mkmap]$ ./mkmap temp.txt
16 1  2 1 41 11 0  2 1 41 11 16  2 1 41 22 0  2 1 41 22 16  ;NEBULA-1
16 2  2 1 41 11 1  2 1 41 11 17  2 1 41 22 1  2 1 41 22 17  ;NEBULA-2
16 3  2 1 41 11 2  2 1 41 11 18  2 1 41 22 2  2 1 41 22 18  ;NEBULA-3
16 4  2 1 41 11 3  2 1 41 11 19  2 1 41 22 3  2 1 41 22 19  ;NEBULA-4
.
.
.
という具合です。一応チェック機能をつけました。同じID、Tuなどの情報があっ たり、同じ回路に別の信号が入っていると怒ります。 NEBULA用に作ったけど少し改造すれば汎用的につかえるはず。

Scaler

VMEのスケーラーsis38??をいじる。38??はたくさんあってどれかわからないの で、ManualのGetting startedにならってfirmwareのrevision registerを読ん でみる。 アドレスはdefaultでは0x38000000になっているとの事なので、このアドレス にアクセスしてfirmware番号を読む
[nebula@nebula01 babidrv]$ cmdvme-i 2 -wr 0x38000004
3820010c
3820はModule ID、01がMajor revision、0cがMinor revisionらしいです。 sis3820のmanual、p21をみるとMajor revision 0x01はGeneric SIS3820 32 channel scaler designだそうです。

When there is only 1 accepted event...

Gate signal of QDC or start signal of TDC is not connected. Scaler is probably counts the first event because it is not vetoed by DAQ busy.

スケーラーIDの設定

babiconのコマンドsetscrnameでできる。getscrlistで設定された一覧を見れ る。不要なものを消したい場合はdelscrと思いきや、まだできていない とのこと。/usr/babirl/scr/scrxxx.datを消すとgetscrlistで見た時にいなく なる。この番号はbabidrvのsca.cのinit_ncscaler(xxx)とあわせる必要がある。

AMT TDC (AMT-VME)

結構長くなったので別にした。--> リンク