編集メニュー > 新規作成 編集 コピー 名前の変更 アップロード 添付ファイル一覧 バックアップ

* DAQ(Ge用)のメモ [#u597e711]
#contents

**linuxのインストール [#d79687f3]
Scientific linux をネットワークインストール。
Desktopを選択。

再起動ごDHCPがうまく動かなかったが、/etc/sysconfig/network-scripts/ifcfg-eth0で
 NM_CONTROLLED="no"
 GATEWAY=xxx.xxx.xxx.xxx
 NETMASK=xxx.xxx.xxx.xxx
でつながった。

yumのリポジトリを編集。http://d.hatena.ne.jp/leetmikeal/20130409/1365477385を参考にした。

とりあえずemacsをインストール
 yum install emacs
あとupdate
 yum update
その後
-screen
-gcc
-gcc-c++
-bison
-expat-devel
-libicu-devel
-automake
-a2ps

をインストール。
ROOTのために以下もインストール
-libX11-devel
-libXpm-devel
-libXft-devel
-libXext-devel

ROOTを/usr/local/src/root/root_v5.34.36にインストール
 ./configure --prefix=/usr/local/src/root/root_v5.34.36
とした。
rootを立ち上げるとiostreamがないとか言われたりする。どうもprefixの場所はtarを展開したところではいけないという記事を見つけたので、prefix=/usr/local/lib/root_v5.34.36/として再コンパイル。~/.bashrcは結局以下のようにした。
 #ROOT
 source /usr/local/lib/root_v5.34.36/bin/thisroot.sh
 alias root="root -l"

** babirlのインストール [#f71806f6]
https://ribf.riken.jp/RIBFDAQ/index.php?DAQ%2FManual%2FInstallation#r75f84d8にしたがって行う。
 system-config-firewall-tui
で有効のチェックを外す。
/etc/sysconfig/selinuxで
 #SELINUX=enforcing
 SELINUX=disabled
とする。

yumで以下をインストール
- zlib-devel (入っていた。)
- ncurses-devel
- readline-devel
- expat-devel (入っていた)
- php-xml(web utilityのための他のものは入っていた)
- postgresql
- postgresql-devel

 su
 cd /usr
 tar zxvf babirl160802.tar.gz
 ln -s babirl160802 babirl
 cd babirl
 make

webutilも一応やっておく。
Install of Web Utilitiesをそのままやった。
/home/daq/public_htmlにwebutilをおいた。ブラウザで開くとForbiddenと言われるので、chmod 755 $HOMEとした。

あとはドライバかな?https://ribf.riken.jp/RIBFDAQ/index.php?DAQ%2FDownload#w25313faをみると、
-do not use NBBQ
-install CAEN's official driver
とあるので、CAENのドライバを入れないといけない。
ドライバのダウンロードのためには登録、ログインが必要。登録してあったアカウントでログイン。A2818Drv-1.20-build20161118.tgzを展開。Readme.txtをみると対応するMakefile.x.xをコピーしてmakeしろとあるのでやってみると、
 [daq@daq01 A2818Drv-1.20]$ make
 make -C /lib/modules/2.6.32-642.el6.i686/build M=/home/daq/daq_drivers/aliap_ge/A2818Drv-1.20 LDDINCDIR=/home/daq/daq_drivers/aliap_ge/A2818Drv-1.20/../include modules
 make: *** /lib/modules/2.6.32-642.el6.i686/build: そのようなファイルやディレクトリはありません.  中止.
 make: *** [default] エラー 2
と言われるググるとkernel-develを入れればよいみたい。いれる。
 yum install kernel-devel
再びA2818Drv-1.20でmake。でも同じ。どうも
-/lib/modules/2.6.32-642.11.1.el6.i686
-/lib/modules/2.6.32-642.el6.i686
の2つがあり、前者はbuildのシンボリックリンクが生きている。Makefileの一部を変更する。
 #KERNELDIR ?= /lib/modules/$(shell uname -r)/build                              
 KERNELDIR ?= /lib/modules/2.6.32-642.11.1.el6.i686/build
これでトライ。makeできた。あとはa2818_loadというスクリプトを走らせればドライバがロードされるみたい。rootアカウントでスクリプト走らせると、
 [root@daq01 A2818Drv-1.20]# ./a2818_load
 insmod: error inserting 'a2818.ko': -1 No such device
となってしまう。PCIカードささないとダメですかね?とりあえず今日はここまで。

A2818を取り付ける。ジャンパーはPCIが5Vのようなので3.3Vになっていたのを5Vにする。
2つあるPCIのうち、上側につけると上と同じメッセージ。。。下側のPCIスロットにつけるとerrorがなくなった!どういうこと?とりあえず下側のスロットに挿して使うことにする。a2818_loadのスクリプトはDAQを動かすときに自動的にやりたいが。。。後で考える。

babirlにはoriginal driver + librariesとある。libraryはCAENVMELibか?とりあえずこれをダウンロードして展開。とりあえず/home/daq/daq_drivers/ailap_ge/CAENVMELib-2.50にある。Readmeにしたがって、lib/installを実行する。

次にV2718のドライバを
https://ribf.riken.jp/RIBFDAQ/index.php?plugin=attach&refer=DAQ%2FDownload&openfile=bbcaenvme150709.tar.gzからダウンロード。コピーして、/home/daq/daq_drivers/ailap_ge/bbcaenvmeにおく。これを改造してDAQドライバを作ることにする。とりあえずcmdvmeをコンパイルして、
 [daq@daq01 cmdvme]$ ./cmdvme -wr -bd V2718
 ffff / 65535
とすると、モジュールのLEDが光る!アクセスできているみたい。とりあえず今日はここまでとする。

DAQのPCを実験室のローカルネットワークにおく。ルーターにLANケーブルを挿す。/etc/sysconfig/network-scripts/ifcfg-eth0を編集して/etc/init.d/network restartした。詳細はlogbookで。

webutilがうまくいかないので、とりあえず以下のようなスクリプトを用意した。

 #!/bin/sh
 if [ ! -e /dev/a2818_0 ];then
     echo /home/daq/daq_drivers/ailap_ge/A2818Drv-1.20/a2818_load
     source /home/daq/daq_drivers/ailap_ge/A2818Drv-1.20/a2818_load
 fi
 if [ -e /var/run/babinfo ]; then
     kill `cat /var/run/babinfo`
     rm -f /var/run/babinfo
 fi
 if [ -e /var/run/babild ]; then
     kill `cat /var/run/babild`
     rm -f /var/run/babild
 fi
 if [ -e /var/run/babies ]; then
     kill `cat /var/run/babies`
     rm -f /var/run/babies
 fi
 
 /usr/babirl/bin/babinfo
 sleep 1
 /usr/babirl/bin/babild -l 1
 /usr/babirl/bin/babies -l 21

sleepを入れないとbabiconが立ち上がらない。

**A3400の設定 [#zf390efc]
アドレスを設定するスイッチSW1-3はそれぞれ1,2,3にした。
ロジック信号の論理レベル設定J1は開放でNIM。
これでMIR(Module Identification Register)を読んでみる。
 [daq@daq01 cmdvme]$ ./cmdvme -lr 0x123ffff4
 00003400 / 13312
読めた!0x123がアドレスに対応している。ちなみにFPGAやCPUのversionを読むと、
 [daq@daq01 cmdvme]$ ./cmdvme -lr 0x123fffec
 00000100 / 256
 [daq@daq01 cmdvme]$ ./cmdvme -lr 0x123ffff0
 00000100 / 256
両方とも0x0100を返すが、これはver1.00に対応しているらしい。初めは正しく読めてるかどうかよくわからなかった。。。

**A3400のドライバ [#dd2266bb]
同も16ビットしか使っていないからといって、vwrite16を使うと正しく書き込みできないみたい。全部vwrite32で統一すれば良さそう。

1/13。馬場さんからA3400のドライバをもらった。/home/daq/daq_drivers/ailap_ge/testdrv_A3400においてある。これを少し改造する。libbabies.c仕様にするために、A3400_segdata_libbabiesを作り、
 //    vread32(maddr+A3400_LISTBUFF+dataaddr, (int *)(data+mp));
     vread32(maddr+A3400_LISTBUFF+dataaddr, (int *)(babies_segpt32()));
 //    mp += 2;
 //    segmentsize += 2;
とした。またもらったドライバはインタラプトをLUPOで書けていたので、これをA3400でかけるようにした。とりあえず1イベントでインタラプトをかけることにした。(Geだけなら、ある程度イベントたまったらでもいいけれど。。。)

**caenvmebabies [#y4121da0]
babies/babiesのリンク先はcaenvmebabiesになっている。これの中身を見ると、startup,evt,stop,clearなどが含まれている。A3400ように改造して走らせる。これが走っている状態でbabiconでnsstaすると何か動いているっぽい!RawDataMonitorでも一応何か見える。次はデータ解析コードですかね。

**ANAROOT [#p5c0397e]
v4.5.31をインストール。autogen.sh --prefix=$PWDをやると、
 libtoolize: コマンドが見つかりません
とか言われて途中で止まるので、libtoolをyumでインストール。
autogenを通るけど、今度はxmlでmakeが以下のメッセージで止まる。
 include/TArtBigRIPSParameters.hh:10: error: forward declaration of ‘struct TXMLNode’
 src/TArtBigRIPSParameters.cc:886: error: invalid use of incomplete type ‘struct TXMLNode’

yumでlibxml2-develをインストール。でもダメ。ANAROOT Wikiでこんなのがあったのを思い出す。https://root.cern.ch/build-prerequisitesに必要なものが一覧になっている。とりあえず入っていなかった以下のものをyumで入れる。
- git
- cmake
- gcc-gfortran
- openssl-devel
- pcre-devel
- mesa-libGL-devel
- mesa-libGLU-devel
- glew-devel (利用できませんだった)
- ftgl-devel (利用できませんだった)
- mysql-devel
- fftw-devel
- cfitsio-devel (利用できませんだった)
- graphviz-devel
- avahi-compat-libdns_sd-devel
- libldap-dev  (利用できませんだった)
- python-devel
- python-numpy-devel (利用できませんだった)
- gsl-static
- r-base (利用できませんだった)

これらを何も考えずに入れた後、ROOTをmake clean後configure, makeとした。
これでanarootもmakeできました。

RIBF2DataId.Cでデータを確認するとそれっぽい!とりあえず動くものはできたと思う。
**2017/1/13時点でのやることリスト [#f75f42fe]
- デコーダー。時間の情報とかもあるが、それはどういうことになっている? -> 作った
- A3400でBusyとかも管理している事になっている。これはどうするか?->BUSYはGGで管理するようにした
- 他の人が使いやすくするために、
-- フォルダの整理
-- どう使わせるか?
- 時間情報(TimeStamp)はどうするか?->データには書かれているが、解析でskip
- webutilの整備。DNSがいる?もしくはIP直打ちで出きるように改造?->skip
- thresholdの設定をchごとに。これはコンパイルしなくても言いようにcmdvmeでやるか?->つくった
- gate幅の設定も同様。->~/daq_driver/ailap_ge/a3400_thre.shでやる。
- 今clearしてないように見えるが、よいのか?
- V2718のOutputのカスタマイズ?---スケーラーとかに使いたくなる。->Output registerはできた。あとはVisual scaler用にClock generatorを作るか?
- gate幅の設定も同様。->~/daq_driver/ailap_ge/a3400_thre.shでやる
- 今clearしてないように見えるが、よいのか?->リングバッファなので多分しなくてよい
- V2718のOutputのカスタマイズ?---スケーラーとかに使いたくなる。->Output registerはできた。あとはVisual scaler用にClock generatorを作るか?->作った
- 1イベントでインタラプトかけているが、これで良い?->まあいいでしょう

***データについて [#pa9e42b9]
RawDataモニターで見ると以下のようになっている。
 Segment ly=2 cid=4 size=14	
 
 21	
 
 0x 2100000e 00000015 0000001f
 05c9 4084 0000 d088 bb81 f79a d8a4 60d7 	
 
 SegmentID=0x0000001f
 BIGRIPS (Dev=0)
 FP0 (FP=0)
 PPACQ (Det=0)
 A3100 (Mod=31) 

05c9からがデータ。これは多分
+0x408405c9
+0xd0880000
+0xf79abb81
+0x60d7d8a4

と読むのだと思う。Gated ListモードだとADC1、ADC2、…、TS_HI、TS_LO、ECという順番になっているらしい。(1)、(2)、(3)、(4)の上位ビット3つは010、110、111、011なので、ADC、TS_HI、TS_LO、ECとなっている。これはマニュアルのデータ構造と同じ。ADCだけ読むなら上位3ビットが010で見つければよい。ANAROOTのTArtDecorderA3100::Decodeでは
    igeo = 0;
    for (i=0; i<evtsize; i++) {
      //TArtCore::Info("TArtDecoderA3100","decode %x",evtdata[i]);
      //if(kHeaderMask == evtdata[i]&kHeaderMask){
      if((evtdata[i]&kHeaderMask) == kHeaderMask){
        igeo ++;
        continue;
      }
      else{
        ich = (evtdata[i]&0x0003c000) >> 14;
        TArtRawDataObject *rdata = new TArtRawDataObject(igeo,ich,evtdata[i]&0x1fff);
        rawseg->PutData(rdata);
      }
    }
となっている。kHeaderMaskは0x60000000なので、上位3ビットが011。これはEventCountを示している。(A3200のマニュアルでも同様。A3100は見つけられず。)これ以外に対して、0-12ビット(0x1fff)を取り出してrdataを作っている。ただしTSのデータをはじいているわけではないので、そのまま使ってはいけないみたい。

TArtDecorderA3400を作らないといけない。TArtDecorderFactoryでRegister(TArtDecoderA3100::Instance());としているので、ANAROOT本体をいじらないといけない。これは来週かな?

** V2718のClock generator [#y5a6ee4f]
V2718はClock generatorとしても使用できる。以下のような関数をlibbbcaenvme.cに作った。
 void vme_setoutput_v2718(){
   unsigned short val;
   unsigned int width;
   unsigned int period;
 
   // assignment 
   // ch0: BUSY CLR
   // ch1: START
   // ch2: STOP
   // ch3: Clock (Pulser B)
   // ch4: SCL CLR
   CAENVME_SetOutputConf(BHandle,cvOutput0,cvDirect,cvActiveHigh,cvManualSW);
   CAENVME_SetOutputConf(BHandle,cvOutput1,cvDirect,cvActiveHigh,cvManualSW);
   CAENVME_SetOutputConf(BHandle,cvOutput2,cvDirect,cvActiveHigh,cvManualSW);
   CAENVME_SetOutputConf(BHandle,cvOutput3,cvDirect,cvActiveHigh,cvMiscSignals);
   CAENVME_SetOutputConf(BHandle,cvOutput4,cvDirect,cvActiveHigh,cvManualSW);
 
   // set ch3 for clock generator
   width=4;// 100ns width
   period=40;// 0.1us period -> 10MHz
   CAENVME_SetPulserConf(BHandle,cvPulserB,period,width,cvUnit25ns,
 			0,cvManualSW,cvManualSW);
 
   val = 0x0004;
   CAENVME_WriteRegister(BHandle,cvOutRegSet,val);// PulserB start 
 
 }
SetPulserConfの0はずっと出しつづけるinfinite。これをstart()の中で呼び出すと、Clock generatorとして動かすことができる。今は10MHzという使いづらい周波数になっているがどうにもできない。。。用意されている単位が25ns, 1.6us, 410us, 104msの4通り。この単位で8bit=0-255で指定するので、1kHzとかは作れない。。。とりあえず10Mhzとし、Visual scalerのCarry outを別のchに入れることによって時間測定をすることにする。(もったいないけど)
これがどこまで正確なのかはよくわからないが、まあとりあえずよいことにする。