Hatena::ブログ(Diary)

にいくらの日記

2011-07-11

発生する粒子のエネルギーをマクロで与える

先日Co-60線源を作ったけど、今度は検出器全体の検出効率のエネルギー依存を調べてみようと思った。一番簡単な方法は、いろいろなエネルギーのガンマ線を等方的に発生させてピークの数を見ればよいはず。

この場合、いちいちソースに粒子のエネルギーを書いてエネルギー毎にコンパイルするのは面倒なので、マクロで粒子のエネルギーを決定する方が良い。例えばこんなマクロを書く。

/gun/energy 0.5 MeV
/run/beamOn 10000000
/gun/energy 1.0 MeV
/run/beamOn 10000000
/gun/energy 1.5 MeV
/run/beamOn 10000000
/gun/energy 2.0 MeV
/run/beamOn 10000000

/run/energyというコマンドが粒子のエネルギーの再設定コマンド。だがこれが動かない。どうも、マクロよりもvoid UserPrimaryGeneratorAction::GeneratePrimaries(G4event* anEvent) は後から呼ばれるので、ここで粒子のエネルギーを定義していると上書きされてしまうらしい。

というわけで、このGeneratePrimaries内のエネルギー設定の関する部分をコメントアウトすると、エネルギーを後からマクロで決める事が出来るようになる。この場合、逆にエネルギーを定義しないで粒子を発生させてもエネルギー0になるので注意。ちゃんとUserRunAction.ccあたりでrun毎に違うrootファイルに書き込むようにしておけば、エネルギー毎のrootファイルが出来るはず。

さすがにノートパソコンでgeantのシミュレーションをするのは無理があるかな。ファンが勢いよく回ってる。。

(追記)

example/extended/radioactivedecay/rdecay01/

に Co60.mac というのがあるのを発見。geant4には既にdecay schemeが入ってるのかな?あとで調べてみる。

(追記終わり)

2011-06-29

プロジェクトの名前変更

GEANT4で何か新たにシミュレーションをするときは、大抵誰かの書いたものやサンプルをベースにすると思う。僕も今やっているシミュレーションは、ベースの部分は他の人からもらった。

もらった時点でのメインプログラムの名前は、GeBGO.cc。GermaniumとBGOの組み合わせなのだからこんな名前なんだけど、最終的な目的のガンマ線検出器アレイの名前はすでにあって、ORGAMという。The Orsay Gamma array projectの略らしい。

The Orsay Gamma array project (PDF)

GEANT4のファイル名を見ると、たとえばsrc/ディレクトリはこんな感じ。

$ ls src/
GeBGOAnalysis.cc
GeBGOCalorimeter.cc
GeBGOEventAction.cc
...

このGeBGOの部分をOrgamにしたい、と思いshell scriptを書いてみた。プログラム内の関数名などでもこの名前を使っているので、grepで探して変更するようにしてある。

#!/bin/bash 

before=GeBGO
after=Orgam

for i in `ls $before*`
do
    mv $i $(echo $i | sed -e "s/$before/$after/")
done

for file in `grep -l $before *.cc *.hh GNUmakefile`
do
    sed -i .org "s/$before/$after/g" $file
done

rm -f *.org

適当なプログラムで細かいエラー処理とかはしてないけど、とりあえずincludeとsrcディレクトリにコピーして動かしたらほぼ問題なくコンパイル出来た。

もうすこしエレガントな方法もある気がするが、動いたので良しとする。sedって名前は知ってたけど初めて使った。


GEANT4でCo-60線源を作る

最近GEANT4のシミュレーションを始めた。ガンマ線の応答を調べたいので、とりあえずCo-60標準線源を作ってみた。線源はUserPrimaryGeneratorAction.ccで定義する。

...
#include "G4RandomDirection.hh"
...

UserPrimaryGeneratorAction::UserPrimaryGeneratorAction(UserDetectorConstruction* myDC)
{
  G4int n_particle = 1;
  particleGun = new G4ParticleGun(n_particle);

  G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
  G4ParticleDefinition* particle = particleTable->FindParticle("gamma");
  
  particleGun->SetParticleDefinition(particle);
  particleGun->SetParticleMomentumDirection(G4ThreeVector(0.*cm,0.*cm,1.*cm));
  particleGun->SetParticleEnergy(1.0*MeV);
}

UserPrimaryGeneratorAction::~UserPrimaryGeneratorAction()
{
  delete particleGun;
}

void UserPrimaryGeneratorAction::GeneratePrimaries(G4Event* anEvent)
{
  G4ThreeVector g1direction = G4RandomDirection();
  G4ThreeVector g2direction = G4RandomDirection();

  particleGun->SetParticleEnergy(1.33*MeV);
  particleGun->SetParticlePosition(G4ThreeVector(0.*cm,0.*cm,0.*cm));
  particleGun->SetParticleMomentumDirection(g1direction);
  particleGun->GeneratePrimaryVertex(anEvent);

  particleGun->SetParticleEnergy(1.17*MeV);
  particleGun->SetParticlePosition(G4ThreeVector(0.*cm,0.*cm,0.*cm));
  particleGun->SetParticleMomentumDirection(g2direction);
  particleGun->GeneratePrimaryVertex(anEvent);
}

ガンマ線はisotropicに原点 (0,0,0) から放出される。初めは等方ランダム放射を自分で定義していたけど、G4RandomDirection.hhというのを使うのが楽みたい。あと、コンストラクタで定義するn_particleは1のままにしておく。2本同時に出るんだからと2にしたら、全部でガンマ線が4本同時に放出されてしまった。

この方法で他の標準線源も作れるとおもうけど、branching ratioとかいれなきゃならないのでちょっと面倒。いろんな人がやってるはずなので誰かソース公開していないものかと探してみたけど見つからなかった。そのうち気が向いたら作って公開するかも。

2010-06-02

GEANT4 install log on ubuntu 10.04

GEANT4をインストールしました。基本的にはこちらのサイトの簡易日本語訳みたいなものです。

404 Not Found

CLHEPのインストール

まず、CLHEPというものをインストールする必要があります。以下から最新版のソースをダウンロードします。現時点での最新版は2.0.4.6でした。

http://proj-clhep.web.cern.ch/proj-clhep/DISTRIBUTION/clhep.html

素直にディレクトリ構造などは上記のサイトに従うことにします。まずはソースを展開。

$ mkdir ~/CLHEP
$ tar zxvf clhep-2.0.4.6.tgz -C ~/CLHEP
$ cd ~/CLHEP/2.0.4.6.CLHEP/

ソースをコンパイルしてインストール。

$ ./configure --prefix ~/CLHEP
$ make -j2
$ make install

configureで指定したディレクトリに以下のファイルがあることを確認します。

  • ~/CLHEP/bin
  • ~/CLHEP/include
  • ~/CLHEP/lib

これでCLHEPのインストールは終了です。CLHEPにあるドキュメントにはmake checkをしろとあるらしいのですが、わからないなならやらなくてよい、とのこと。余計なことはしない。

GEANT4の入手

以下からGEANT4の最新版を手に入れます。現時点での最新版は4.9.3p01でした。

http://geant4.web.cern.ch/geant4/support/download.shtml

同様にディレクトリを作ってソースを展開。

$ mkdir ~/geant4
$ tar zxvf geant4.9.3.p01.tar.gz -C ~/geant4
$ cd geant4/geant4.9.4.p01/

必要に応じて追加のデータファイルをインストールします。とは言っても、どれが必要かよくわかってないので全部入れることにします。

  • G4ABLA.3.0.tar.gz
  • G4EMLOW.6.9.tar.gz
  • G4NDL.3.13.tar.gz
  • G4RadioactiveDecaly.3.2.tar.gz
  • PhotonEvaporation.2.0.tar.gz
  • RealSurface.1.0.tar.gz

それぞれをdataというディレクトリを作ってそのなかに展開します。

$ mkdir data
$ tar zxvf xxx.tar.gz -C ~/geant4/geant4.9.3.p01/data

イニシャルビルド

これからのミスは非常に面倒なことになる可能性があるので、落ち着いてコーヒーでも飲みながら(もしくはワインでも飲みながら)確実にやりましょう、とのことです。

まず、これまでにGEANT4などをインストールしてある人は環境変数を全部削除しておきましょう。僕の場合さっきUbuntuをクリーンインストールしたばかりなので空っぽなはず。一応確認。

printenv | grep G4

なんか出て来たら環境変数を決めてる場所を削除してgeant関係のなにかがないことを確認してから作業をはじめます。僕も昔インストールしたときの.bashrcの設定が残ってたので削除した。

で、Configure。

$ cd ~/geant4/gean4.9.3.p01/
$ ./Configure -build

基本的にはいはい、とEnterを押していれば良いみたいなのですが、以下の部分だけはちゃんとオプションを指定する必要があるそうです。

Could not find CLHEP installed on this system!
Please, specify where CLHEP is installed: ~/CLHEP

Enable building of the X11 OpenGL visualization driver? [n] y [ENTER]

Enable building of the X11 RayTracer visualization driver? [n] y [ENTER]

で最後にこんなメッセージが出て来たら、ENTERを押してコンパイルを開始します。

Press [ENTER] to start installation of use a shell escape to edit config.sh: [ENTER]

これでコンパイルが始まります。結構時間かかるので放置してたらエラーで停止してました。こんなエラーメッセージが出てました。

############################################################
# It looks like you had errors during Geant4 installation   
# (or interrupted installation)!				  
# Please check log file:				      	  
# /home/megumi/geant4/geant4.9.3.p01/.config/bin/Linux-g++/g4make.log					  
############################################################

ログを見るとエラーでライブラリが足りないと書いてあります。たとえばこんな感じ。

/usr/bin/ld: cannot find -lXi
collect2: ld returned 1 exit status
make[2]: *** [/home/megumi/geant4/geant4.9.3.p01/lib/Linux-g++/libG4OpenGL.so] Error 1

ライブラリが足りないみたいです。対処法は必要なパッケージをapt-getなどでインストールします。僕の環境で必要だったのは以下の二つ。

$ sudo apt-get install libxmu-dev libxi-dev

余談ですが、必要なライブラリを探すのはapt-fileというのが便利みたいです。

libxmu...の パッケージが入っているか確認する。

こんな時、apt-file をインストールしておくと便利かもしれない。

$ sudo apt-get install apt-file
$ sudo apt-file update

libXmuを探す。

si@ubuntu:~$ sudo apt-file search libXmu
[sudo] password for si: 
ia32-libs: /usr/lib32/libXmu.so.6
ia32-libs: /usr/lib32/libXmu.so.6.2.0
ia32-libs: /usr/lib32/libXmuu.so.1
ia32-libs: /usr/lib32/libXmuu.so.1.0.0
libxmu-dev: /usr/lib/libXmu.a
libxmu-dev: /usr/lib/libXmu.so
libxmu6: /usr/lib/libXmu.so.6
libxmu6: /usr/lib/libXmu.so.6.2.0
libxmu6-dbg: /usr/lib/debug/usr/lib/libXmu.so.6.2.0
libxmuu-dev: /usr/lib/libXmuu.a
libxmuu-dev: /usr/lib/libXmuu.so
libxmuu1: /usr/lib/libXmuu.so.1
libxmuu1: /usr/lib/libXmuu.so.1.0.0
libxmuu1-dbg: /usr/lib/debug/usr/lib/libXmuu.so.1.0.0
Ubuntu日本語フォーラム / コンパイル時の/usr/bin/ld: cannot find -lXmuについて

これでもう一回./Configure -buildをします。

$ ./Configure -build

今度はひたすら[Enter]を押しつづければよいです。正しくインストールできれば、以下のようなメッセージが最後に表示されるはずです。

####################################################
# Your Geant4 installation seems to be successful!  
# To be sure please have a look into the log file:  
# /home/megumi/geant4/geant4.9.3.p01/.config/bin/Linux-g++/g4make.log				  
####################################################

これでインストール終了。使い方とかはまたそのうち気が向いたから書きます。