BELLEの計算機環境 - 東京大学

BELLEの計算機環境
の計算機環境
樋口岳雄
東京大学大学院理学系研究科物理学専攻
BELLEの計算機と仲良く暮らす
の計算機と仲良く暮らす
Webサーバー
サーバー
BELLE実験のホームページ
実験のホームページ
http://bsunsrv1.kek.jp
困り事の相談
http://bsunsrv1.kek.jp/HyperNews/get/belle.html
BELLEの計算機環境で困ったことがあったときは、
「ホワイトボード」に質問を投稿すると返事がもらえることが
ある
メイリングリスト
BELLE ML
[email protected]
BELLEグループの全員に配送されるメイリングリスト
無闇に使わない
中尾さんに相談すると登録してもらえる
その他のメイリングリスト
自分が加入する detector sub group のリーダーに相談する
と登録してもらえる
KEK-B計算機
計算機
ログイン
大学の計算機など、BELLE外部からログインできる計算機
bsunsrv1.kek.jp
bws01.kek.jp、bws02.kek.jp、bws03.kek.jp … bws14.kek.jp
bgate.kek.jp、bgate1.kek.jp
ログインには必ず SSH を使う
通信が暗号化されるため、ネットワークを盗聴されても安心
example% slogin bgate.kek.jp –l username
どうしても SSH が使えないとき
bsunsrv1、bgateおよびbgate1は telnet でもログイン可能
KEK-B計算機
計算機
ファイルコピー
KEK-B計算機にファイルをコピーしたり、KEK-B計算機からファ
イルを持ってくるには、 scp を使う
example% scp [email protected]:file.dat file.dat
scp ができる計算機は、外部からログインができる計算機と
同じ
どうしても scp が使えないとき
bsunsrv1、bgateおよびbgate1は ftp でのアクセスも可能
KEK-B計算機
計算機
FB-LOCAL計算機
計算機
ログインサーバーの内側に存在
外部のネットワークからは直接ロのグインができない
各 detector sub group 用の計算機群
bwgsvd.fblocal.kek.jp、bwgcdc.fblocal.kek.jp …
普段は自分が所属するグループの計算機を使うようにする
筑波実験棟の1階などの計算機群
bws101.fblocal.kek.jp、bws102.fblocal.kek.jp …
筑波実験棟にオフィスがある人が優先的に使える
ディレクトリのポリシー
/???data と /???home
/svddata や /cdcdata など
各 detector sub group 取り決めに従って自由に使ってよい
/net/bwg???/???data のように指定しないとアクセスで
きない場合がある
/b0?
テープデバイスにつながっているディレクトリ
非常に大きなデータを保存したいときはここに保存する
無闇にアクセスすることは避ける
ディレクトリのポリシー
/belle 以下
/belle/cern/pro
CERNライブラリ
/belle/belle/日付け
日付け
BELLEのデータ解析用ソフトウェア
日付けはバージョンを示す
/belle/dst/nfs/実験番号/イベントタイプ
BELLE実験のデータ
/belle/local
BELLEローカルのコマンドやインクルードファイルなど
バッチジョブの使用法
ジョブの投入
bsub [ –q queue ] [ options … ] command …
queueはバッチキューの種類で、省略するとeとみなされる
example% bsub –q l ./basf_run.sh
Job <123456> is submitted to queue <l>.
=================================================================
See /jspool/whoami/bwgdaq.1000.out. and .err for the result.
They will not be sent by e-mail.
They will be removed after 2weeks, over 200MB after 3days.
They will not be backed up.
=================================================================
バッチキューの種類
e
l
実行実時間が30分以内で終わるジョブ
用
実行の優先順位がきわめて高く、ほに
待機しているジョブがあってもそれを追
い抜いて実行される
指定を省いたときのデフォルト
許可されている実行時間がもっとも長
い
実行実時間が3日、CPU時間が28日を
超えることはできない
bwg???
m
実行実時間が4時間以内で終わるジョ
ブ用
a
実行実時間が2日以内、CPU時間が7
日以内のジョブ用
mキューと同じ優先順位
実データの解析以外に使ってはいけな
い
自分の所属するdetector sub groupの
計算機を使ってデータ解析を行うため
のキュー
各sub groupの方針に従うこと
たとえはbwgdaqのキューは使って
はいけない!
バッチジョブの使用法
ジョブの取り消し
bkill jobid
bjobsコマンドで取り消したいジョブのIDを調べる
実行中のジョブでも待機状態になっているジョブでも取り消せ
る
ジョブの終了
正常終了、実行時間の時間切れによる強制終了、ユーザー
による取り消しなどによってジョブが終了すると、その旨を通
知するメイルが来る
バッチジョブの使用法
ジョブを見る
bjobs [ -u all ] [ options … ]
ほかの人のジョブの様子も知りたいとき
example% bjobs
JOBID USER
STAT QUEUE
123448 whoami
RUN
e
123449 whoami
RUN
e
123455 whoami
PEND m
123456 whoami
PEND l
FROM_HOST
bws04
bws04
bwgdaq
bwgdaq
EXEC_HOST
bwg03
bcs07
JOB_NAME
SUBMIT_TIME
./test.sh Apr 21 00:02
./test.sh Apr 21 00:03
*ration.sh Apr 21 00:15
*sf_run.sh Apr 21 02:17
RUNは実行中、PENDは待機
長いコマンド名のときは
表示が切り詰められる
ジョブのID
バッチジョブの使用法
実行中のジョブの覗き見
bpeek jobid
実行結果のチェック
/jspool/usernameディレクトリ以下にジョブの標準出力
と標準エラー出力が保存されている
もっとも新しいジョブの出力を見るコツ
コツ
example% cd /jspool/whoami
example% ls –lrt *.out
-rw-r—-r-1 whoami
1620187 Apr 12 10:57 bwgdaq.98765.out
-rw-r—-r-1 whoami
340020 Apr 19 22:33 bwgdaq.4321.out
-rw-r—-r-1 whoami
2805916 Apr 21 04:06 bwgdaq.1000.out
一番最後のファイルを見る
get_packages_egcs
最新のBELLEモジュールを取得
モジュールを取得
最新の
BELLEのソフトは定期的にバージョンが更新されているが、
次の更新のタイミングを待たずに最新のモジュールを取りた
いときは、get_packages_egcsコマンドを使う
get_packages_egcs module1 [ module2 … ]
example% mkdir –p belle/src
example% setenv MY_TOP_DIR `pwd`/belle
example% source /belle/local/etc/cshrc_general
example% cd belle/src
example% get_packages_egcs limpid
If you do not know the password, call Katayama@+81-298-64-5326
Enter Password: ***************
:
:
Run make to build libraries/executables
example% make
解析ことはじめ
樋口岳雄
東京大学大学院理学系研究科物理学専攻
BASFを使った解析の入門
を使った解析の入門
BELLEのデータ
のデータ
RUN#123
データ構成
ランに関する情報
EVT#001
ラン番号
ランの開始時刻
ラン開始時の加速器の状況
そのランで使用したトリガー条件
EVT#002
EVT#003
EVT#004
イベントに関する情報
そのランに属する情報が、
それぞれのe+e– の衝突イベントごとに
独立に記録される
イベント番号
各検出器が検出したヒットに関する情報
各検出器が検出したヒット
最初はヒット信号の羅列だけが格納されている
BELLEのデータ処理手順
のデータ処理手順
解析はイベントごとに独立
反応はe+e– の衝突イベントごとに独立
データ処理・解析の手順
最初のデータは信号の羅列 … raw data
Reconstruction
ヒット信号の羅列を使い易く加工
ヒット信号の較正
荷電粒子の種類を同定
粒子の飛跡などから運動量を再構成 … mini DST
Analysis
各collaboratorごとの目的に添った解析
ごとの目的に添った解析
User Analysis
Analysis Routine
Routine
User
データ処理・解析の流れ
Track Reconstruction
Reconstruction
Track
イベントデータ
イベントデータ
EVT#12345
EVT#12345
Particle Identification
Identification
Particle
処理するデータの読み取り
処理した結果の書き出し
Detector Calibration
Calibration
Detector
reconstruction
実行順序
Data Formatting
Formatting
Data
analysis
次のイベントへ
…繰り返し
BELLEのデータ処理
のデータ処理
イベントごとの繰り返し
同じデータ処理・解析手順を、すべてのイベントについて、イ
ベントごとに繰り返す
分担処理の徹底 – モジュール化
個々のプログラムの挙動は…
データを読む
データ処理・解析をする
データを保存する
ほかのプログラムとの関係はデータの受け渡しのみ
Pantherを使用する
Pantherの話
の話
BELLEの標準データバンク
の標準データバンク
データバンクとその内部のデータ構造・フォーマットを定義
データバンクにアクセスする関数を提供
すべてのデータ処理・解析プログラムはPantherを使用
利用したいデータはPantherを使ってバンクにアクセス
処理結果はPantherを使ってバンクに格納
データはイベントごとに保存
検出器のヒット信号など、イベント単位での処理に意味があ
るデータの保存に最適
HBOOKの話
の話
ヒストグラムデータの保存ライブラリ
高エネルギー物理学実験における現在の標準
CERNライブラリによって提供される
HBOOK形式で保存されたデータはPAWと呼ばれるライブラ
リによって内容を調べられる
データはイベントの区切りを持たない
全イベントを解析して再構成した J/ψ 中間子の質量分布を
見たいときなどのように、個々のイベントにはあまり意味がな
く、集合としてのデータの分布に意味がある場合に最適
HBOOKの話
の話
Tuple
データ構造をセットで記憶できる
再構成した J/ψ 中間子の質量とその運動量などのように、デー
タをセットで保存できる
データ構造は任意に指定が可能
柔軟なデータ処理
運動量がPz < 1.0 GeV/c を満たすJ/ψ 中間子についてのみ、
その質量をプロットする、といったことが、プロットを作る段階で
可能
ヒストグラムよりもデータが詳細
データの値がそのまま保存される
メモリの使用量は増える
BASFとは
とは
BASF – BELLE Analysis Framework
BELLEにおけるデータ処理の特徴を生かして、解析が簡単
に行えるように支援するソフトウェア
イベントごとのループ処理
プログラムのモジュール化を支援
ヒストグラムの保存を支援
Pantherをさらに使い易くする機能
SMPマシンで複数のCPUを使いこなす機能
厳密にはBASFよりも低いレベルでBASFを支えるFPDAというソ
フトウェアの機能である
起動と終了
起動
シェルのプロンプトで
example%
basf
と入力すると起動する。正しく起動されると
basf>
と表示され、BASFはユーザーからの入力待ちの状態となる。
終了
BASFのプロンプトで
basf> terminate
と入力する。
はじめの一歩
BASFへの入力
への入力
basf>
basf>
basf>
basf>
basf>
basf>
basf>
basf>
basf>
モジュールを「実行順序」に登録
path add_module main mymodule
initialize
おまじない
histogram define myhisto.hbook
process_event mydat.panther 1000
処理するイベント数
terminate
Pantherデータのファイル名
終了
ヒストグラムを保存する
ファイル名
モジュールを書く
// mymodule_event.cc
#include <iostream>
#include “event/BelleEvent.h”
#include “tuple/BelleTupleManager.h”
おまじない path add_module で実行
終了時に実行
#include “basf/module.h”
#include “basf/modue_dscr.h”
#include “panther/panther.h”
class MyModule : public Module {
public:
MyModule();
~MyModule();
public:
void init(int*);
void term();
おまじない initialize で実行
コマンド terminate で実行
ラン開始のデータを読むごとに実行
void begin_run(BelleEvent*,int*);
void end_run(BelleEvent*,int*){}
void event(BelleEvent*,int*);
最重要!!
最重要
イベントごとのデータ処理用関数
void hist_def(void);
void disp_stat(const chat*){}
};
コマンド histogram define で実行
メンバ関数ひとめぐり
初期化のときに実行したいことを書く
通常、initialize コマンドは1回だけ呼ばれる
関数の引数についてはあまり気にしない
void
MyModule::init(int *status)
{
std::cout << “Hello BASF” << std::endl;
}
void
MyModute::term()
{
std::cout << “Good bye” << std::endl;
}
終了のときに実行したいことを書く
MyModule::init()でfopen()などをしたなら
ここでfclose()するとよい
begin run レコードをみつけるたびに実行される
この関数の中では begin run レコード中のデータ、
すなわちラン番号やラン開始時刻のデータなどが
利用できる
void
MyModule::begin_run(BelleEvent *evt, int *status)
{
std::cout << “BEGIN RUN RECORD” << std::endl;
}
メンバ関数ひとめぐり
class MyModule : public Module {
……
private:
BelleTuple *n_psi, *n_kshort, *n_b0;
BelleHistogram *h_tmp;
};
// ヒストグラムと tuple の定義
void
MyModule::hist_def(void)
{
extern BelleTupleManager *BASF_Histogram;
BelleTupleManager *bt;
histogram define で指定したファイルに
MyModule::hist_def()で定義した
ヒストグラムと tuple が保存される
n_psi
= bt->ntuple(“PSI”,
“PX PY PZ MASS”);
n_kshort = bt->ntuple(“KSHORT”, “PX PY PZ MASS”);
n_b0
= bt->ntuple(“B0”,
“DELTAE MBC”);
h_tmp
}
= bt->histogram(“TMP”, 100, 0.0, 200.0);
メンバ関数ひとめぐり
ヒストグラムと tuple の定義
n_psi
= bt->ntuple(“PSI”,
“PX PY PZ MASS”);
n_kshort = bt->ntuple(“KSHORT”, “PX PY PZ MASS”);
n_b0
= bt->ntuple(“B0”,
“DELTAE MBC”);
tuple名
h_tmp
各tuple内の
データ構造
= bt->histogram(“TMP”, 100, 0.0, 200.0);
ヒストグラム名
ヒストグラムの
分割数
下端
上端
メンバ関数ひとめぐり – 中枢
void
MyModule::event(BelleEvent *evt, int *status)
{
……
イベントのデータを読み込むたびに実行される
n_psi->column(“PX”,
n_psi->column(“PY”,
n_psi->column(“PZ”,
n_psi->column(“MASS”,
n_psi->dumpData();
p_psi.x());
p_psi.y());
p_psi.z());
p_psi.mag());
tupleのデータ構造に変数をセット
……
h_tmp->accumulate( tmpvar );
tupleの保存
……
*status = status_of_analysis;
}
ヒストグラムに値を投入
このモジュールの処理結果をstatusに代入すると、あとで活用できる
使う予定がなければ無理に代入せずともよい
モジュールを作る
// mymodule.cc
……
// in mymodule_event.cc
class MyModule : public Module {
……
};
……
作るモジュール名が “mymodule” の例
完全に同じことを書く
extern “C” Module_descr*
mdcl_mymodule(void)
{
MyModule *m = new MyModule;
Module_descr *d = new Module_descr( “mymodule”, m );
return d;
}
作りたいモジュール名を書く
モジュールを作る
ディレクトリポリシー
…/belle/src/mymodule/
モジュール名
mymodule.soが参照する
解析ルーチンの実体
src/
ソースコード置き場
mymodule_event.ccなどを置く
mymodule/
インクルードファイル置き場
lib/
libmymodule.a と
so/libmymodule.soが置かれる
basf_if/
mymodule.soのソース置き場
mymodule.ccなどを置く
BASFモジュールの本体
中身はほとんど空っぽ
bin/
mymodule.soが置かれる
モジュールを作る
example%
example%
example%
example%
example%
example%
example%
example%
example%
example%
example%
example%
example%
mkdir –p …/belle/src
cd …/belle
setenv MY_TOP_DIR `pwd`
cd …/belle/src
source /belle/local/etc/cshrc_general
setenv LD_LIBRARY_PATH ${MY_TOP_DIR}/lib/so:${LD_LIBRARY_PATH}
cp –r $BELLE_TOP_DIR/src/config .
~nakadair/public/bin/make_template mymodule
cd config
./configure
cd ../mymodule
vi src/mymodule_event.cc
make
作っているモジュール名をmymoduleから変える場合は、
直すべき個所に注意
必要に応じて編集
J/ψ recon.
module_n
module_3
module_2
module_1
pathの
の概念
yes
B 0 recon.
解析のpath
解析の
J/ψ がある?
no
イベントを捨てて
次のイベントへ
モジュールの実行順序を定義
pathは複数用意でき、それらをつなげることが可能
pathは最後のモジュールの実行statusを値に持つ
前のpathのstatusに応じて次につなげるpathを変えられる
C言語のif文だと思えばよい
解析のpath
解析の
main path
BASFが最初にかならず実行するpath
BASFコマンド
path add_module main module_1 module_2 …
path add_module main … module_n
path add_module main rec_jpsi
main path に次々とモジュールを付けたしている様子
はじめの一歩の例では、main
path に mymoduleのみを登録していた
はじめの一歩
解析のpath
解析の
main以外の
以外のpath
以外の
まず好きなpath名でpathを作る
path create next
作ったpathにモジュールを登録
path add_module next rec_b0
解析のpath
解析の
path条件の設定
条件の設定
BASFコマンド
path add_condition main >:0:next
path add_condition main ==:0:KILL
main pathに対する条件設定
main pathの最後に実行されたモジュールのstatusが
条件判定の対象となる
今の例ではrec_jpsiモジュール
条件判定式
C言語の比較演算子が使える
条件が満たされたときに実行するpath名
“KILL”は「途中で止める」という意味の
特殊なpathシンボル
解析のpath
解析の
pathの
の値とモジュールのstatus
値とモジュールの
Module::event()で設定したstatusがpathの値となる
今の例では…
main pathの最後のモジュールが rec_jpsi である
main pathの値が1以上ならばnext path につながる
モジュール rec_jpsi の中で再構成したJ/ψ中間子の個数を
statusにセットするとよい
void
RecJpsi::event(BelleEvent *evt, int *status)
{
……
*status = number_of_reconstructed_jpsi;
}
シミュレーション
シミュレーションの意義
解析ルーチンのテスト
プログラム開発のためのテストデータ
物理的な結果の予測
粒子の再構成においてはどのくらいの効率が期待できるか、な
どを実験データを手にする前に予測できる
バックグラウンドの予測
再構成された粒子が本物なのか偽者なのか、実際のデータで
は神様しかわからないが、シミュレーションならばわかる
再構成された粒子全体のうちの何%が偽者なのか?
シミュレーション
粒子生成モジュール
QQ98
BELLEでもっとも一般的な粒子生成モジュール
物理法則に従って粒子の崩壊をシミュレートする
検出器シミュレーションモジュール
GSIM
標準的な検出器シミュレーター
実行はきわめて遅い
FSIM
GSIMほどの正確さはないが、きわめて高速
おおざっぱな解析結果を得たい場合や、解析の方針を立てた
い場合に最適
Particle Identification
Identification
Particle
Track Reconstruction
Reconstruction
Track
User Analysis
Analysis Routine
Routine
User
処理するデータの読み取り
処理した結果の書き出し
Detector Calibration
Calibration
Detector
QQ/GSIMが生成した
が生成した
イベントデータ
Data Formatting
Formatting
Data
シミュレーションの流れ
Detector Simulation
Simulation
Detector
粒子生成
検出器シミュレーション
実行順序
Particle Generation
Generation
Particle
次のイベントへ
…繰り返し
シミュレーション
BASFコマンド
コマンド
path
path
path
path
path
path
add_module
add_module
add_module
add_module
add_module
add_module
粒子生成モジュール
main
main
main
main
main
main
initialize
qq98
…
gsim
…
…
mymodule
検出器のシミュレーション
モジュール
コマンド自体はおなじみのものばかり
generate_event 100
terminate
発生させるイベント数
データファイルをプロセスするのではなく、
イベントを作るためのコマンド
データの保存
データ保存の意義
BASFのpath中のどこかのモジュールに変更やバグがあった
とき、それより後のモジュールの結果は無意味となる
とくに、自分の解析モジュールは変更・バグがとても多いはず
pathの途中でこまめにデータを保存しておけば、そこまでの
部分については、再びBASFでデータ処理する必要がない
たとえば…
たとえば
QQ98の段階で粒子生成を止めてデータを保存
GSIMの段階でシミュレーションを止めてデータを保存
Reconstructionを行ったところでデータを保存
解析は最後にReconstruction部分が保存したデータを使う
データの保存
BASFが
が保存するデータ形式はPanther形式
形式
保存するデータ形式は
BASFが保存するデータはPanther形式なので、
process_event
コマンドによってBASF自身によって処理できる
ふたたびPantherの話
の話
ふたたび
Pantherテーブル
テーブル
Pantherデータのデータ構造を定義したファイル
$BELLE_TOP_DIR/share/tables/?????.tdf
データの内容に応じていろいろなファイルがある
QQ98の出力データの形式はhepevt.tdfで定義されている
Reconstructionの結果はmdst.tdfの定義に従って出力される
ひとつのファイル中に、複数のデータ構造が定義されている
mdst.tdfの中には27個のデータ構造が定義されている
ランに関すること、SVDの出力、CDC、ACC、…などなど
ふたたびPantherの話
の話
ふたたび
$BELLE_TOP_DIR/share/tables/mdst.tdf
Define_table MDST_Run_Head 1
Integer
version
Integer
data_type
“MDST v.2.00. Run header (not ready at present)
“Mini-DST version no.”
“Data type.
=1:Read data; =2:GSIM; =3:FSIM.”
Integer
exp_no
“Experiment no.”
Integer
run_no
“Run no.”
End_of_define_table MDST_Run_Head
……
Define_table MDST_Run_End 1 “Run trailer (not ready at present)
Integer
exp_no
“Experiment no.”
Integer
run_no
“Run no.”
End_of_define_table MDST_Run_End
……
Define_table MDST_Event 1
Integer
Integer
:
:
exp_no
run_no
“Event header.
The info. is extracted from Belle_Event table.”
“Experiment no.”
“Run no.”
このファイルでは、「reconstructionの結果」に関係するデータの
データ構造が定義されている
データの保存
BASFコマンド
コマンド
path add_module main qq98
initialize
table savebr belle_begin_run
table save belle_event
table save GEN_HEPEVT
output open qq98-result.panther
generate_event 100
output close
terminate
データの保存先
ファイル名
データ保存のときの
おなじまい
保存するPantherの
データ構造を指定
QQ98の出力は
GEN_HEPEVT
というデータ構造
データの保存
table save GEN_HEPEVT
GEN_HEPEVTはhepevt.tdfの中で定義されている
hepevt.tdfの中のデータ構造をすべて保存したいときは、
table save hepevt_all
と書いてもよい
mdst.tdfには27個の定義が入っているが、
table save mdst_all
という簡易記法を使うといちいち書かずに済むので便利
データの保存
J/ψ skim
module_n
module_3
module_2
module_1
pathの活用
の活用
yes
データを保存して
次のイベントへ
J/ψ がある?
no
イベントを捨てて
次のイベントへ
Reconstructionモジュールのpathの最後にJ/ψの再構成を
行うモジュールを付け加える
J/ψが見つかったらreconstructionしたデータを保存し、さも
なければデータを捨てたい
記憶領域の節約
あとで無駄な解析をしなくて済む
データの保存
BASFコマンド
コマンド
path add_condition main >:0:EXIT
path add_condition main ==:0:KILL
“EXIT”は、データを保存してpathの実行から抜けるための
特殊なpathシンボル
table save で指定したすべてのテーブルが保存される
“KILL”は、データを保存せずにpathの実行から抜けるため
の特殊なpathシンボル (既出)
パラメータを渡す
モジュールのパラメータ
モジュールには実行時にパラメータを渡すことができる
粒子の運動量のthresholdを渡す
データファイルのファイル名を渡す…など使い道はいろいろ
BASFコマンド
コマンド
module put_parameter module PARAM¥var
パラメータ名
そのモジュールがどういうパラメータを取るかについては
情報を入手してよく研究しておかなくてはいけない
パラメータの値
バックスラッシュ(円記号)
パラメータを渡す
QQ98にパラメータを渡す例
にパラメータを渡す例
path add_module main qq98
module
module
module
module
put_parameter
put_parameter
put_parameter
put_parameter
qq98
qq98
qq98
qq98
CONTROL_FILE¥belle_bb98.cont
DECAY_TABLE¥decay.dec
USER_TABLE¥my_original_decay.dec
DUMP_EVENT¥1
initialize
generate_event 100
terminate
初期化はモジュールにパラメータを
渡してから行うべきである
パラメータを調べる
BASFコマンド
コマンド
module inquire_parameter module
QQ98の
のパラメータを調べる例
basf> path add_module main qq98
basf> module inquire_parameter qq98
7
パラメータの総数
CONTROL_FILE¥QQ control file¥S¥80¥/belle/belle/…
DECAY_TABLE¥QQ standard decay table¥S¥80¥/belle/belle/…
DECAY_EVENT_TABLE¥QQ standard decay table¥S¥80¥/belle/belle/…
LUND_TABLE¥QQ Lund decay table¥S¥80¥/belle/belle/…
USER_TABLE¥QQ User decay table¥S¥80¥(undefined)
SAVE_BANKS¥Save outputs in BBS banks¥L¥4¥1
DUMP_EVENT¥Event Dump¥L¥4¥0
パラメータの現在の値
パラメータ名 パラメータの簡単な説明 パラメータの型 パラメータのバイト数
パラメータを受け取るモジュール
// libmymodule.cc
class MyModule : public Module {
……
public:
int m_someflag;
double m_cutval;
char m_datafile[80];
};
パラメータはpublicでなくてはいけない
// mymodule.cc
extern “C” Module_descr*
mdcl_mymodule(void)
{
MyModule *m = new MyModule;
パラメータを定義する関数
Module_descr *d = new Module_descr( “mymodule”, m );
d->define_param(“FLAG”, “some flag”, &m->m_someflag);
d->define_param(“CUTVAL”, “cut threshold”, &m->m_cutval);
d->define_param(“DATA”, “data file name”, 79, m->datafile);
return d;
}
パラメータ名
パラメータの簡単な説明
パラメータのサイズ
(char[] 型のときのみ必要)
もっと速く – CPUを複数使う
を複数使う
BASFコマンド
コマンド
nprocess set ncpu_to_use
たとえばCPUを4つ持つ計算機では4以下を指定する
計算機が持っているCPUの個数よりも大きい数を指定すると
逆に遅くなる
無闇に大きくするとほかの人が迷惑するのでほどほどに
環境変数
環境変数BASF_NPROCESSに数字をセットしても同等
注意
bwg???以外のバッチジョブに投入するときは指定しないこと
細かいテクニック
module register module
モジュールは実行したくないのでpathには入れないが、モ
ジュール内の関数などを使いたいときに必要なコマンド
とくにQQ98は登録が必要なケースがあるので注意
module display module keyword
指定したモジュールのModule::disp_stat()が呼ばれ
る
引数にはkeywordがchar*型の変数として渡される
付録 – BASF スクリプトの参照先
BELLE_TOP_DIR
現在の最新は /belle/belle/b20000408_1025
Particle Generation
$BELLE_TOP_DIR/docsrc/examples/qq98/test.script
Detector Simulation
$BELLE_TOP_DIR/docsrc/examples/gsim200004/test.script
Reconstruction
$BELLE_TOP_DIR/docsrc/examples/recon200004/test.script
Analysis
$BELLE_TOP_DIR/docsrc/examples/anal20004/test.script
特別付録 – dBASFへ
へ
dBASF – Distributed BASF
BASF/FPDAはひとつのSMPマシン上で複数のCPUを使って
高速化するソフトウェアであった
dBASFはこのフレームワークを拡張
複数の計算機を並行に活用し、データ処理のさらなる高速
化を目指すプロジェクトである
現在鋭意開発中
興味のある方は月に1回開かれているDAQ sub groupのミーティ
ングにご参加ください