イベントスキムの方法
Last update:2002/7/31
スキムというのは、解析する効率をあげるため興味のあるイベントだけを抽出することです。
100000 イベントのうち,かならず 99000 は基本的な条件で削除できるのであれば,
99000 の無駄なループは不要,というのがそもそもの発想です.
("スキム"って Belle 実験の俗語かな?)
(1) 少なくとも最終的な解析結果は、スキムする前のオフィシャルなファイルで出して下さい。
結果が同じかも絶対に確認してください。
(2) スキムしたファイルサイズと元のファイルサイズを比較して、
0.1-1% 以下の大きさになっていない場合は、スキムの条件を変更するか
変更できないのであればスキムをあきらめてオフィシャルなファイルを
使用してください。例えば、60GB のファイルを 30GB 程度の大きさに
しても人数を考えるとディスクスペースは損をしている可能性があります。
(3) 最終的にできるファイルサイズは 350MB 以下に押さえてください.
それ以上大きいとエラーが出る可能性があります.
(経験的には 400MB ぐらいまでは大丈夫ですが,安全のため 350MB 程度で見積もってください.)
(4) paw の拡張子 f77 では動きません.理由は不明です.したがって,拡張子 f を使ってください.
必要なファイル
ここから取る.
展開すると skim というディレクトリ以下に
skimcopy.f
skimcp.kumac
skimdoit.f
skimend.f
skimend.f77
skiminit.f
skiminit.f77
skimnt102.inc
skimnt109.inc
skimscan.f
ができる.
方法
(1) まず上記のファイルを自分の解析 kumac のあるディレクトリにコピーする.
ただし,スキム用のディレクトリがあったほうが便利な上,
自分の解析ディレクトリが汚くなるのはイヤなはず.
というわけで,解析ディレクトリーをコピーして,そのコピーした方を
スキム用のディレクトリと考えてそこに上記のファイルをコピーする.
(2) 自分の kumac ファイルに加えること -- その1
次のように nt/loop でイベントを回していると思います。
nt/loop 102 tthbb.f
これを次のように変更してください。
call skiminit.f(-1)
cd //EVENT
nt/loop 102 tthbb.f
call skimend.f(-1)
3行ほど加えます。ここで、//EVENT というのは自分の解析で
使っている ntuple が存在する PAW の中のディレクトリです。
つまり、chain を使っている場合は、"//第一引数"で、
h/file を使っている場合は、"//LUN第一引数" です。
(詳細) skiminit(-1) で 109 番に ATLAS Japan ID=102 と
同じ構造の ntuple ができます。
skimend(-1) で 109 番にスキムしたイベントのデータを
書き込みます。ここで、tmp_skim.ntpl が出来ます。
また高速版は、
call skiminit.f77(-1)
cd //EVENT
nt/loop 102 tthbb.f77
call skimend.f77(-1)
です。.f という拡張子を .f77 に変更します。もし、同一の kumac に
他の .f という記述があるならそれも .f77 にしてください。
/tmp/skiminit_31975.f: In function `skiminit':
/tmp/skiminit_31975.f:61: warning:
CALL HBNAME(IDNTEV,'EVINFO',NRUN,
1
/tmp/skiminit_31975.f:96: (continued):
CALL HBNAME(IDNTEV,'MISC',PMISS,'
2
Argument #3 of `hbname' is one type at (2) but is some other type at (1)
[info -f g77 M GLOBALS]
というメッセージは問題ありません。
(3) 自分の kumac ファイルに加えること -- その2
一番最後に
exec skimcp.kumac
を加えて下さい。
(詳細) 109 番から 102 番に番号を変更して、skim.ntpl を作成する。
tmp_skim.ntpl は自動的に削除される。
(4) 自分の解析ファイルに加えること -- その1
atlfastb と jetcorr という修正用関数の前に
call skimscan
を加えて下さい。他の修正用関数を含めてそれ以前にこれを呼んで下さい。
(詳細) その時点での ntuple 変数の内容を解析には影響を与えない領域にコピーする。
(5) 自分の解析ファイルに加えること -- その2
スキムしたいイベントがあったら、
call skimdoit(0)
call HCDIR('//EVENT', ' ')
を呼んで下さい。もちろん、各イベントに1度だけです。
(呼んだ数だけ保存されるので注意が必要です。)
これは修正用関数の後でも構いません。
また,//EVENT を //event とするとうまく動きません.
また、ここの //EVENT は (2) で使ったものと同一のものにしてください。
(詳細) 3 で保存した内容を ntuple に書き込む。
したがって、修正用関数の影響を受けていない情報が保存される。
(6) 自分の解析ファイルに加えること -- その3
include 'skimscan.f'
include 'skimdoit.f'
をインクルードする。
以上で通常通り解析を行なうとスキムファイル skim.ntpl ができます.
最後に skim.ntpl の名前を変更して使って下さい。
解析
オフィシャルな ntuple ファイルではなく,スキムファイルを読み込むように
設定を直して通常通り解析すれば,完全に同じ結果が出てくるはずです.
万が一,同じ結果が出てこない場合はよく手続きを確認してください.
少しの違いも許されません.
イベントディスプレイ(atscan)のためのスキム
状況にもよりますが,修正用関数の後のジェット用の分布を見たい場合は,
上記の方法の (4) の部分を次のように変更する必要があります.
(4') 自分の解析ファイルに加えること -- その1
atlfastb と jetcorr という修正用関数の後に
call skimscan
を加えて下さい。他の修正用関数を含めてそれ以降にこれを呼んで下さい。
この手続きでできたスキムファイルは,
絶対に解析では使ってはいけません.
(これを解析の中で単純に使うと修正用関数を2回使ったことになり,正しい結果が得られません.
もちろん,修正用関数を使わないのであれば同じ結果になります.
ここで言っている(?書いている)内容が分からない場合は,指示に従いましょう.)
バグ,質問,要望
メール下さい.特にもっと簡単な方法を知っている場合は教えてください.
Go to the main page
jtanaka