LHC のための Event Generator (演習) - GR@PPA での matched-event generation -
2009 年 9 月 2 日
in "GRACE school 2009", KEK, 2009.8.31 - 2009.9.3

本演習では initial-state ME-PS matching を実装した GR@PPA 2.8 (開発版) を動かしてみます。公開版は多少異なるものになると思います。

1. インストール

1.1 download

適当な directory に GR@PPA-2.8-school package を download して展開。
    > wget http://research.kek.jp/people/odaka/grace-school2009/GR@PPA-2.8-school.tgz
    > tar zxf GR@PPA-2.8-school.tgz
Package 内に移動すると下記の directory/file があるはず。
    > cd GR@PPA-2.8-school
    > ls
    basesv5.1  Config.perl  diboson  grckinem  lib        VERSION-2.8-school  zjets
    chanel     diagrams     example  inc       proc.list  wjets
それぞれの内容は以下の通り。
    VERSION-2.8-school: (text) version 番号の表示。中身はこの package の履歴
   
proc.list: (text) Process number のリスト
   
diagrams: (dir) 各 process の Feynman diagram (PS file) が収納されている
    lib
: (dir) library 収納用。初期状態では空
   
Config.perl: (Perl script) 設定用 script
   
grckinem: (dir) GR@PPA の framework
   
wjets, zjets, diboson: (dir) 各 process の martix element 計算 package
    basesv5.1: (dir) BASES/SPRING package
   
chanel: (dir) CHANEL package
    inc
: (dir) include file を収納
    example
: (dir) 実行のためのプログラム例を収納

1.2. build/install

まず、Config.perl の最初の部分を編集する。
    > vi Config.perl
例として書かれているのは 64-bit Linux での設定。
    $fc="g77";            Fortran 77 compiler
    $fopt="-I. -m32";     Fortran compiler option
    $cc="gcc";            C compiler
    $copt="-m32";         C compiler option
    $ldflags="";          Loader (linker) option
    $ar="ar";             Archiver
最 近の Intel/AMD の CPU はほとんどが 64 bit であるが、64-bit mode では BASES で時間表示が上手く行かないという不具合がある。これ以外に大きな不具合は無いと思うが、安全のために 32-bit mode で build する指定をしている (-m32)。ここでは使わないが CERNLIB を使用する場合は 32-bit mode の方が無難。-I. は include file を source directory からも探せという指定。これらは各自の環境に応じた設定が必要。環境によっては下記変数の設定が必要な場合もある。
    $mdfuncs="";
少し下の方に外部ライブラリの設定がある。これらは sample program で使われるものなので後で設定しても良い。今回は不要。

編集が終わったら Config.perl を実行。
    > ./Config.perl
proc.list 内の記述を参照しながら、インストールされている process packege をチェックし、Makefile や process 依存の routine を作成する。下記の様な出力が得られれば成功。
    Operating system: linux
    Date: 2009/8/31(Tsu) 12:52:42
    process: [w0j] was detected in wjets/w0j ...
    process: [w1j] was detected in wjets/w1j ...
    process: [z0j] was detected in zjets/z0j ...
    process: [z1j] was detected in zjets/z1j ...
    process: [ww0j] was detected in diboson/ww0j ...
    process: [ww1j] was detected in diboson/ww1j ...
    process: [zw0j] was detected in diboson/zw0j ...
    process: [zw1j] was detected in diboson/zw1j ...
    process: [zz0j] was detected in diboson/zz0j ...
    process: [zz1j] was detected in diboson/zz1j ...
   
    Read process list...
    Version : Date: Wed Mar  5 15:25:40 JST 2008
     was detected...
    [w0j]:[100] pp(bar) -> W -> 2f
          [421] qq -> W -> 2f (ELWK2)

    [w1j]:[101] pp(bar)->W(2f) + 1 jet
          [422] qg -> W(2f) + q (ELWK2,QCD1)
          [423] qq -> W(2f) + g (ELWK2,QCD1)
    [z0j]:[110] pp(bar)->Z/gamma*->2f
          [500] qq -> Z/gamma* -> 2f (ELWK2)
    [z1j]:[111] pp(bar)->Z/A(2f)+ 1jet
          [501] qg->Z/A(2f) + q (ELWK2,QCD1)
          [502] qq->Z/A(2f) + g (ELWK2,QCD1)
    [ww0j]:[120] pp(bar)->W+(2f)+W-(2f)
           [551] qq -> W+(2f)+W-(2f) (ELWK4)
    [ww1j]:[121] pp(bar)->W+(2f)+W-(2f)+ 1jet
           [555] qg -> W+(2f) + W-(2f) + q
           [556] qq -> W+(2f) + W-(2f) + g
    [zw0j]:[130] pp(bar)->Z/A(2f)+W(2f)
           [552] qq -> Z/A(2f) + W(2f)(ELWK4)
    [zw1j]:[131] pp(bar)->Z/A(2f)+W(2f)+ 1jet
           [557] qg -> Z/A(2f) + W(2f) + q
           [558] qq -> Z/A(2f) + W(2f) + g
    [zz0j]:[140] pp(bar)->Z/A(2f)+Z/A(2f)
           [550] qq -> Z/A(2f)+Z/A(2f)(ELWK4)
    [zz1j]:[141] pp(bar)->Z/A(2f)+Z/A(2f)+ 1jet
           [553] qg -> Z/A(2f)+Z/A(2f) + q
           [554] qq -> Z/A(2f)+Z/A(2f) + g
    100 -> 421
    101 -> 422 423
    110 -> 500
    111 -> 501 502
    120 -> 551
    121 -> 555 556
    130 -> 552
    131 -> 557 558
    140 -> 550
    141 -> 553 554
    done...
    Next to do: type make; make install; make example.
      Go to an example directory after that.
      Type make, then you get an example program ready to run.

上記出力にある様に、make, make install, make example を実行。
    > make
    > make install
    > make example
make で compile と library (archive) の作成が行われ、make install で作成された library が lib directory にコピーされる。make example で example directory 内の Makefile 作成等の設定を行う。

2. 実行

2.1. イベント生成

2.1.1. LHC 条件での W 生成

実行例の directory に移動。
    > cd example/generate
W 生成用の sample program をコピーして build。
    > cp w1j_matched/* .
    > make

この sample program (grappa.f) は、元々は生成した event に対して簡単な解析を行って histogram を作成する様に成っている。histogram 作成には CERNLIB に含まれる HBOOK を用いている。しかし、本講習では CERNLIB をインストールする事が難しいということなので関係する行を全て comment out してある。CERNLIB を利用できる環境にいる人は、行頭に "Ch" の付いた行の "Ch" を取り除いて有効にしてみよう。これで基本的な histogram を作成できる。この場合、Config.perl で CERNLIB の path を指定していないと make でエラーに成る。その様な場合は Config.perl の編集からやり直しても良いが、この directory の Makefile を編集して CERNLIB の path を指定してやるだけでも正常に make できる。HBOOK 以外の histogramming tool を使える人はそれを使っても良いだろう。基本的な機能しか使っていないので置き換えは簡単なはず。

make が正常に終了したら実行 module を起動する。
    > ./grappa
起 動が上手く行くと、まず W + 0 jet process の BASES が実行され、それが終了すると W + 1 jet process の BASES が実行される。BASES は 2 steps に分かれており、前半では乱数分布の最適化が行われ、後半で最適化された分布での積分精度の向上が図られる。GR@PPA の matched generation では、前半部では PDF を使った通常の cross section 計算を行い、後半部では PDF の代わりに QCDPS を用いた積分を行う。QCDPS では付加的な event weight が発生するので試行回数を増加させる必要がある。この version では後半の試行数を自動的に 10 倍にしている。このために後半の実行時間は前半に比べて大幅に増加する。BASES が終了すると直ちに SPRING が実行され unweighted events の生成が行われる。正常終了すると最後に cross section などの summary が書き出される。生成された event (1,000 events) は lhaext... というファイルに書き出される。この例では ASCII text 形式で出力しているので、lhaext... の中身は lessemacs で見る事ができる。必要ならば編集も可能。

Histogram 作成を有効にしている場合は terminal 出力の最後に histogram が出力される。histogram は HBOOK 形式で hist.hbook というファイルにも出力される。ファイル中の histogram は PAW で見る事ができる。grappa.f の中を見ればどんな histogram が作成されているか分かる。
    > paw
    PAW> hist/file 1 hist.hbook
    PAW> option logy
    PAW> hi/pl 1
    PAW> hi/pl 2
    PAW> option liny
    PAW> hi/pl 3
    PAW> ...
    PAW> quit

Terminal 出力をよく見たい場合は、出力をファイルに redirect して emacs などで見た方が良い。
    > ./grappa > log
    > emacs log &

2.1.2. LHC 条件での Z 生成

Z 生成用の sample program をコピーして build、実行。Histogram を作成するときは、ファイル名が重複するので前回の histogeam ファイルを消去した後に実行する。
    > cp z1j_matched/* .
    > make
   (> rm hist.hbook)
    > ./grappa > log
W 生成のときと同様にして terminal 出力や histogram をチェックする。

2.1.3. 生成条件の変更

upinit.f, grcpar.F を編集すれば生成条件を変更できる。beam energy、process 選択、decay mode などの物理的な条件は upinit.f で変更する。BASES table の再利用、energy scale の設定、NCALL などの BASES/SPRING 設定変更は grcpar.F で行う。生成 event 数や出力ファイル名は grappa.f (main program) で設定している。生成時の解析内容も grappa.f 内に coding されている。

2.2. PYTHIA での処理

GR@PPA では 4.6 GeV 以下の energy scale の parton shower、hadronization、decay などの simulation を行っていない。これらは PYTHIA や HERWIG に任せる事に成る。ここでは上で生成した event に PYTHIA でこの様な simulation を付加する事を行ってみる。

まず、PYTHIA の sample directory に移動する。
    > cd ../lharead/pythia
W 生成用の sample program をコピーして build。
    > cp w1j_matched/* .
    > make
こ の directory に PYTHIA 6.421 の source file もコピーしてあるのでその compile も行われる。公開版では PYTHIA の source file は含まないはずなので、その場合は別途 souce file を compile してその path を Makefile に指定する事に成る。Config.perl で指定しても良い。make が正常に終了したら実行。
    > ./pymain > log

PYTHIA の設定変更、解析内容の変更は pymain.f を編集して行う。入力 event ファイルは lharead.control.txt で指定する。他のファイルは変更してはならない。この sample program でも histogramming 部分は comment out されている。"Ch" を取り除いて有効にすれば、histogram が hist.hbook に書き出される。その場合は、当然の事なが、CERNLIB の path を Makefile に指定する必要がある。

引き続いて、下記の様にすれば Z 生成 events の処理を行う事ができる。
    > cp z1j_matched/* .
    > make
   (> rm hist.hbook)
    > ./pymain > log

3. 練習問題

example/generate 内のファイルを編集して diboson 生成 event を generate せよ。Diboson には W+W-, WZ, ZZ があるが、どれか一つで良い。これらの matrix element は既にインストールされている。example/lharead/pythia/vv1j_matched に PYTHIA での処理の sample program を用意しているので、これで生成した event をチェックできる。

GR@PPA の diboson 生成は W や Z の decay まで matrix element に含んでいるので、0 jet では 4 体生成、1 jet では 5 体生成に成り、計算に非常に時間がかかる。Terminal を実行 process から解放したい場合は
    > ./grappa > log &
で起動して background process にしてやる。

Remote host に login して作業している場合は実行中に logout してしまいたい場合もある。Batch job が利用できる場合はそれで良いが別の方法もある。例えば run という名前で下記の内容の shell script を作成する。
    #!/bin/sh
    ./grappa >& log
これで
    > nohup ./run &
として起動すれば logout しても process は動き続ける。

4. 発展問題

問題 (1):W や Z の decay mode を変更してみよ。cross section や生成される粒子は reasonable か?

問題 (2):各 process で、W や Z の decay product (electron など) の pT、pseudorapidity などを求めよ。Histogramming tool が無い場合は値を書き出すだけでも良い。

問題 (3):今回の例題では PDF に built-in の CTEQ6L1 を用いている (example/generate/Cteq61Pdf.f)。GR@PPA は PDFLIB や LHAPDF の PDF も使用できる (ただし、matched generation では LO PDF に限定)。設定変更は inc/define.h で行う。最後の行の "CTEQ6" を "CERNPDFLIB" や "LHAPDF" に変更する。この変更はインストール時の最初の make の前に行う。

PDFLIB 内の CTEQ5L や LHAPDF 内の CTEQ6L1 を試してみよ。

この変更に伴って example/generate/upinit.f の変更も必要に成る。変更方法は code を見てもらえれば明らかだと思う。また、この変更に伴って PDFLIB や LHAPDF のインストールも必要に成る。PDFLIB は CERNLIB に含まれる。最新の LHAPDF は shared object を使用する様に成っているので、実行時に環境変数 PATHLD_LIBRARY_PATH の設定も必要。

以上