ちなみに、この文書読むまえに「とりあえず使ってみる」を読んで下さい。ここでは、e391a libraryを使うための設定と環境変数MY_TOP_DIRが設定されていることを前提としています。
E391aにおいて、いろいろなことをシミュレーションを使ってstudyしたい場合、e391a libraryにある標準的なシミュレーションgsim-e391aをつかってKLをいくつか崩壊させ、吐き出されたHBOOKファイルを解析につかうことができます。しかし一方で、gsim-e391aではやっていない過程や、デフォルトでは書き出されない物理量がほしくなった場合、自分なりのシミュレーションを作る必要が出てきます。
ここでは、$MY_TOP_DIRの下に新しいプログラムを作る手順を説明します。
まず、$MY_TOP_DIR/srcの下に移動してください。ここには、
合計 16k -rw-r--r-- 1 kensh users 378 May 6 01:21 Makefile -rw-r--r-- 1 kensh users 11 May 6 02:01 PACKAGES drwxr-xr-x 2 kensh users 4.0k May 6 01:21 config drwxr-xr-x 5 kensh users 4.0k May 6 01:22 gsim-e391aといったファイルがあると思います。
一番簡単なのが、確実に動いているgsim-e391aから少しずつ自分のあったプログラムに変えていく方法です。今回は、まずgsim-e391aと全く同じプログラムを違う名前で作るところを説明します。
まず、gsim-e391aディレクトリを別名のディレクトリにコピーし、新しいプログラムとして登録します。新しいプログラム名はgsim-myとします。
[hoge@justice]> cp -r gsim-e391a gsim-my
[hoge@justice]> echo gsim-my >> PACKAGES
ここで、分かると思いますが新しいプログラムの登録は、PACKAGESファイルにそのプログラムの名前を追加することで行なわれます。
次に、gsim-myのMakefileを書き換えます。gsim-my/src/MakefileのMAINSという行とLINK_ARGSという行を下の用に変更します。
MAINS = gsim-my gxsim-my LINK_ARGS = -L$(MY_LIB_DIR)/so -L$(MY_LIB_DIR) -L$(E391_LIB_DIR)/so \ -L$(E391_LIB_DIR) -l$(PACKAGE) -lgsim-general -lTupleManager \ $(CLHEPLIB) -L$(CERNLIB_DIR) -lgeant321 -lpawlib -lgraflib \ -lgrafX11 -lpacklib -lmathlib $(CERN_LAPACK) -ljetset74 \ $(X11LIB) $(SYSLIB) gxsim-my:-ldlまた、gsim-my/src/の下でgsim.ccとgxsim.ccのファイル名をそれぞれgsim-my.ccとgxsim-my.ccに書き換えて下さい。
[hoge@justice]> cd gsim-my/src
[hoge@justice]> mv gsim.cc gsim-my.cc
[hoge@justice]> mv gxsim.cc gxsim-my.cc
これで後はmakeするとgsim-myがインストールされます。
[hoge@justice]> cd $MY_TOP_DIR/src/gsim-my
[hoge@justice]> gmake
このあとは、自分でソースコードを書き換えて、自分の目的にあったプログラムをつくって下さい。
ただ、gsim-e391aにはそこで使われている関数がすべてgsim-e391a/srcの下にはありません。(特に最近のe391a libraryでは。)何か書き換える必要のある関数が、gsim-e391a/src/*.cc等に書かれていない場合は、$E391_TOP_DIR/src/sim/gsim/gsim-generalから取ってくる必要があります。
ちなみにmakeは、srcディレクトリ以下で行なう必要があります。$MY_TOP_DIR/src/でgmakeするとそれ以下にあるすべてのプログラム(PACKAGESファイルに書かれているもの)がインストールされます。gsim-myだけインストールしたいときには、$MY_TOP_DIR/src/gsim-my/の下でgmakeしてください。
これで、自分のシミュレーションプログラムを作ることができました。めでたし。 (2002/05/06, kensh)