DAQ 関連のソフトウェアをインストールが終わったら、各々の実験に合わせて、スクリプトを用意する。基本的には、これまでの実験で使われたスクリプトをまとめた GitHub の以下のリポジトリをベースにするのがよいであろう。
ここに、AMANEQ といった FEE 用のレジスタ設定スクリプトのサンプルや、NestDAQ の設定スクリプトのサンプルがある。
まず、リポジトリを GitHub から clone する。
$ cd $HOME/ $ git clone https://github.com/spadi-alliance/exp-config
その後、exp-config 内に入り、自身のセットアップに近いディレクトリをコピーして、自身の実験用のディレクトリを作成する。
$ cd $HOME/exp-config $ ls README.md jparc_e50_blm jparc_t103 raris_bpm rcnp_d202407a rcnp_e585 $ cp -a rcnp_d202407a my_exp $ cd my_exp $ ls fee_scripts run
ちなみに、各ディレクトリ内の run スクリプトには頻繁にアクセスするため、ホームディレクトリにリンクを作っておくと便利であろう。ls コマンドなどで $HOME/run ディレクトリが存在しないことを確認したら、以下のリンクコマンド (ln -s) を実行。
$ ln -s $HOME/exp-config/my_exp/run $HOME/run
そのあと、実験ごとのセットアップ (FEE の台数や IPアドレスなど) に応じて、スクリプトの編集を行う。以下、それぞれのスクリプトの説明と編集方法を記述する。
fee_scripts ディレクトリには、AMANEQ のレジスタ設定を行う以下のスクリプトが用意してある。
config_modules.sh init_hrtdc.sh reset_modules.sh set_hbfstate_on.sh set_hbfthrottling.sh set_selfrecovery.sh set_tdcmask.sh set_totfilter.sh
この中で、実験時に実行するスクリプトは config_modules.sh である。config_module.sh の中身を確認すればわかるが、このスクリプトを実行することで、その他のスクリプトが順次実行される。特に問題がなければ、AMANEQ 電源投入時に config_modules.sh を実行すればよい。なんらかの問題が生じた場合 reset_modules.sh を実行して、モジュールのリセットを行う。これらのスクリプトはパスがベタ書きになっているので、それをすべて書き換えるか、うまく変数を使って書き直すのが良いであろう。さらに、その他のスクリプトの中身をセットアップに合わせてすべて書き換える。各スクリプトの意味と編集方法は、以下の通り。
実験時に実行するスクリプトは config_modules.sh である。このスクリプトの中身は以下のようになっており、
#!/bin/bash $HOME/exp-config/rcnp_d202407a/fee_scripts/init_hrtdc.sh $HOME/exp-config/rcnp_d202407a/fee_scripts/set_tdcmask.sh $HOME/exp-config/rcnp_d202407a/fee_scripts/set_totfilter.sh $HOME/exp-config/rcnp_d202407a/fee_scripts/set_selfrecovery.sh $HOME/exp-config/rcnp_d202407a/fee_scripts/set_hbfthrottling.sh $HOME/exp-config/rcnp_d202407a/fee_scripts/set_hbfstate_on.sh
これを実行することで、その他のスクリプトが順次実行される。特に問題がなければ、システム起動時に config_modules.sh を実行すればよい。現状のディレクトリ構造に合わせて、編集する。パスがベタ書きになっているので、それをすべて書き換えるか、うまく変数を使って書き直すのが良いであろう。
データ収集を行なっている際になんらかの問題が生じた場合 reset_modules.sh を実行して、モジュールのリセットを行う。現状のディレクトリ構造に合わせて、編集する。パスがベタ書きになっているので、それをすべて書き換えるか、うまく変数を使って書き直すのが良いであろう。
#!/bin/bash #low resolution $HOME/exp-config/rcnp_d202407a/hul-common-lib/install/bin/gen_user_reset 192.168.2.160 $HOME/exp-config/rcnp_d202407a/hul-common-lib/install/bin/gen_user_reset 192.168.2.161 ... $HOME/exp-config/rcnp_d202407a/hul-common-lib/install/bin/gen_user_reset 192.168.2.169 #high resolution $HOME/exp-config/rcnp_d202407a/amaneq-soft/install/StrHRTDC/bin/gen_mzn_userreset 192.168.2.169 both
HR-TDC FPGAファームウェアのリセットと、HR-TDC メザニンのリセットを行う。HR-TDC を利用する場合、AMANEQの電源を投入後、一度だけこのスクリプトを実行する必要がある。そうしないと AMANEQ はデータを出力しない。一度実行した後はもう実行する必要はないが、何度実行しても問題はない模様。中身は以下のようになっている。
#!/bin/bash $HOME/exp-config/rcnp_d202407a/amaneq-soft/install/StrHRTDC/bin/write_mzn_register 192.168.2.169 both 0x2010 0x0 1 $HOME/exp-config/rcnp_d202407a/amaneq-soft/install/StrHRTDC/bin/initialize 192.168.2.169 both $HOME/exp-config/rcnp_d202407a/amaneq-soft/install/StrHRTDC/bin/write_mzn_register 192.168.2.169 both 0x2010 0x2 1
バイナリのパスと 192.168.2.169という部分を自身の環境に合わせて編集する。ここで、 192.168.2.169 は HR-TDC の IP アドレスである。HR-TDCが2台以上ある場合は、上記の 3 行をモジュールの台数に合わせて増やせば良い。
TDC の特定の入力チャンネルをマスクするためのスクリプト。マスクとは、覆い隠すことであり、マスクしたチャンネルは入力を受け付けなくなる。設定方法は、マスクしたいチャンネルに bit の 1 を立て、マスクしないチャンネルは 0 を指定する。(別の言い方をすると、入力のチャンネルを enable するには 0, disable するには 1 を指定することになる。) AMANEQの全チャンネルを読みたい場合はすべてのチャンネルに対して 0 を指定すればよい。具体的なスクリプトの中身は以下の通り。
AMANEQ の信号入力部分は差動信号を受け付けるが、ケーブルをつなげないと発振する場合がある。そのため、ケーブルを指していないチャンネルは基本的にマスクする。ちなみに、RBCP のスケーラはこのマスクの設定にかかわらずカウントを行う。
AMANEQ が出力する TDC TOT (time over threshold) データにおいて、設定した時間以上の TOT を持つもののみを出力したい場合、この TOT filter を設定する。設定で与える時間の単位は TOT の LSB (Least significant bit, 最小の時間単位) である。そのため、例えば、LR-TDC の場合、LSB はおおよそ 1 ns であるため、例えば 0xff (=255) と設定すると、TOT がおおよそ 255 ns 以上のTDCデータのみ出力され、255 ns 未満の TDC データは破棄される。HR-TDC の場合、LSB はおおよそ 1 ps であるため、例えば 0x200 (= 512) と設定すると、TOT がおおよそ 512 ps 以上のTDCデータのみ出力され、512 ps 未満の TDC データは破棄される。
AMANEQ に対してバックプレッシャーがかかり、Heart Beat Frame Number Mismatch が生じた場合でも、self recovery が効くように設定する。ちなみに self recovery が効くタイミングは TCP 接続が切れたタイミングである。
Heart Beat Frame throrottling を設定する。ここで、Heart Beat Frame throrottling とは、Heart Beat Frame の間引きを行うことであり、AMANEQ が出力するデータ量を減らしたいときに用いる。2 の累乗 (2, 4, 8, 16) の単位で Heart Beat Frame を間引くことができる。連続読み出しDAQ において、通常はFEEの段階でデータを破棄することはしないので、throttling は有効にしない。ただ、ビーム強度が強い、かつビーム強度を下げられない、もしくは校正用ランなどにおいて、検出器のカウントレートが高く、データがとり切れない場合などにこのthrottling を有効にする。例えば 4 に設定すると、4 つの Heart Beat Frame のうち 1 つの Heart Beat Frame を出力し、3 つの Heart Beat Frame を破棄する。 そのため、AMANEQが出力するデータ量は (Heart Beat Frame Delimiter のデータ量の寄与を無視すれば) ほぼ4分の1になる。
Heart Beat State を ON にするスクリプト。このスクリプトを実行することで AMANEQ は Ready の状態になり、TCPで接続すると、データを返すようになる。
my_exp/run ディレクトリ内のスクリプトは NestDAQ を動かすための各種スクリプトが格納してある。
-
ここで、reset_modules.sh の利用機会について言及しておく。AMANEQから読み出したデータに問題があるといった場合、reset_modules.sh スクリプトを実行し、AMANEQ のソフトウェアリセットを行う。ただ、最新のファームウェアの動作はかなり安定しつつあり、リセットが必要な機会は減ってきている。( 前のHR-TDC のファームウェアバージョンでは、データの読み出しで負荷がかかった場合、Local Heart Beat Frame Mismatch が起きて、リセットが必要になる時があった。)何らかの理由でソフトウェアのリセット効かない場合は、AMANEQのハードウェアリセットスイッチを押す。ちなみに、本多氏曰く、AMANEQ のパワーサイクル (電源 OFF/ON) が有効な場合はあまり考えられず、問題を悪化させるだけであろうとのこと。