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

DAQ(Ge用)のメモ

linuxのインストール

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のインストール

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の設定

アドレスを設定するスイッチ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のドライバ

同も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

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

ANAROOT

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時点でのやることリスト

  • デコーダー。時間の情報とかもあるが、それはどういうことになっている? -> 作った
  • 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を作るか?->作った
  • 1イベントでインタラプトかけているが、これで良い?->まあいいでしょう

データについて

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からがデータ。これは多分

  1. 0x408405c9
  2. 0xd0880000
  3. 0xf79abb81
  4. 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

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に入れることによって時間測定をすることにする。(もったいないけど) これがどこまで正確なのかはよくわからないが、まあとりあえずよいことにする。