A script to run many Marlin jobs
written by Taikan Suehara
International Center for Elementary Particle Physics (ICEPP),
The University of Tokyo
From acfa-sim-j mailing list

========================================================================================

Marlinをたくさんのファイルに走らせるスクリプト
runMarlinを整理しましたのでメモを書いておきます。

用意したスクリプトは3種類、
jlclogin2:/home/suehara/bin/
runMarlinS/M/Lです。
runMarlinM: 1ファイルごとに1ジョブを分散投入
runMarlinL: 1(以上)ファイルを複数のCPUで分割計算: Large DST用
runMarlinS: 分散せず1CPUで多ファイルを計算: 解析等軽作業用

5つの環境変数を取ります。

# runMarlin variables
export RM_BASEDIR=/home/suehara/lciodata/FullSM
export RM_DETECTOR=ILD_00
export RM_SUBMIT=/home/suehara/bin/submit2
export RM_SETUPSH=/home/suehara/ilcsoft/ilcsoft_setup06.sh
export RM_DETDIR=/home/suehara/ilcsoft/analysis/xml/detector

一つ目はbasedirでinput/outputファイルはこの中に配置します。
二つ目はdetectorです。ILD_00でよいでしょう。LDCPrime_02Scも使えます。
三つ目はsubmitコマンドです。
オリジナルのsubmit2を使っていますがsubmitでも動くと思います。
四つ目はilcsoftのsetupスクリプトを書いてください。
五つ目は支障がなければ上の通り指定してください。

runMarlinたちは以下のパラメータをとります。
Usage: runMarlinM xml listfile inputdir outputdir nstart nstop ncpu sleep
Usage: runMarlinL xml listfile inputdir outputdir nstart nstop neventstart neventstop neventperiod ncpu sleep
Usage: runMarlinS xml listfile inputdir outputdir nstart nstop

xml: steeringファイル名
steeringファイル内の、
%%INPUT%%, %%OUTPUT%%はinput, outputファイル名に置き換わります。
outputには拡張子はつきません(inputの拡張子がそのまま残っています)
ので%%OUTPUT%%.slcio, %%OUTPUT%%.root
のように自分で拡張子をつけてください。
$RM_DETDIR/(detector).xml
に書いてあるエントリは勝手に置き換わるので注意してください。
(ILD_00, default設定の場合はB-field,gear fileとneural net fileが置き換わります。)

listfile: プロセスしたいファイル名かリストしてあるファイル名。
lsで作ってください。パスは不要。

inputdir: basedir/inputdirにlistfileのファイルたちがあるとみなします。

outputdir: basedir/outputdirに結果を書き出します。

nstart: listfileの何行目からはじめるか。頭からはじめる場合は1。

nstop: listfileの何行目まで実行するか。wc -l listfile以内の値にしてください。

ncpu: 使用するcore数。上限に達するとどれかが終わるまで待ちます。
runMarlinSは分散投入しないのでありません。

sleep: job投入間隔[sec]。20-30以上を指定してください。
あまり短くすると、submitだと同じところに投げてしまい、submit2だと
CPU usage モニタ用のソケット数があふれて死にます。
(<10job程度ならいっぺんに投げても平気です)
runMarlinSは分散投入しないのでありません。

neventstart: runMarlinLでは一つのファイルをイベント数で分割します。
このパラメータはprocess開始イベント数です。

neventstop: process終了イベント数を指定します。

neventperiod: 1jobで投入するイベント数です。

runMarlinLはsteeringファイルの%%SKIP%%というところを現在のイベント数で
置き換えます。
runMarlinLで使うsteeringファイルには


  
  

(neventperiod=1000の場合)
などとしておいてください。
MaxRecordNumberは置き換えないのですみませんが自力で書いてください。

不明な点があればお知らせください。