Geant4

Mały wstęp
Czym jest Geant4?
Budowa Geant4
Wymagane umiejętności programistyczne
Instalacja

Mały wstęp

Nie istnieje wiele programów które umożliwiałyby kompleksową symulację propagacji przez materię. Częściej tworzone są aplikacje które zajmują się konkretnym rodzajem promieniowania. Jedną z takich kompleksowych aplikacji jest Geant4. Na jego przykładzie postaram się przedstawić czym są programy symulujące propagację promieniowania przez materię. Wybrałem ten projekt z kilku względów:

Czym jest Geant4?

Zanim przystąpię do bliższej prezentacji tego projektu pragnę zaznaczyć, że więcej informacji znajduje się na stronie www Geant4 http://wwwinfo.cern.ch/asd/geant4/geant4.html.

Geant4 jest zestawem narzędzi służących do symulacji propagacji cząstek w materii. Skrót GEANT pochodzi od "GEometry ANd Tracking" co jednoznacznie określa że Geant posiada możliwość określania geometrii detektora i śledzenia cząstek w nim propagujących. Projekt ten znajduje zastosowanie w eksperymentach fizyki wysokich energii i fizyki jądrowej, medycynie, fizyce akceleratorów oraz astrofizyce.

Geant4 powstał w CERN'ie. CERN jest jednym z największych ośrodków naukowych zajmujących się fizyką jądrową. Skupia pracowników naukowych z całego świata. Więcej informacji o CERN'ie można uzyskać na stronie www: http://www.cern.ch. Projekt Geant rozwijany jest od dawna. Poprzednia wersja - Geant3 - była napisana w języku Fortran. Język ten był powszechnie stosowany przez fizyków od wielu lat. Zresztą jego kolejne wersje nadal są stosowane. W roku 1994 zgłoszono propozycję by napisać nowy program korzystający z obiektowych możliwości języka C++. Pierwsza oficjalna wersja została zaprezentowana w roku 1998. W pracach nad tym projektem uczestniczy wielu fizyków i programistów z licznych instytutów i uniwersytetów zajmujących się eksperymentami fizyki wysokich energii. Instytucje te reprezentują wiele krajów europejskich, Japonię, Kanadę i USA. W współpracy uczestniczą osoby zajmujące się fizyką jądrową, akceleratorami, astrofizyką oraz medycyną. [2]

Poniżej wymienione są najważniejsze aspekty symulacji detektorów dla których Geant4 zapewnia odpowiednie narzędzia.

Korzystając z tych narzędzi można zbudować aplikację odpowiadającą konkretnemu problemowi.

[2]

Budowa Geant4

Geant4 jest defacto zestawem bibliotek napisanych w języku C++. Korzystając z klas w nich zawartych możemy przygotować aplikację symulującą konkretny detektor lub wykonującą inne zadania. Geant4 wykorzystuje w pełni obiektowość języka C++. Dzięki temu sposób implementacji jednego modułu nie zależy od sposobu implementacji pozostałych. Istotny jest tylko sposób komunikacji między nimi. Oznacza to że zmieniając np. sposób w jaki obliczane są przekroje czynne nie musimy zmieniać tego w jaki sposób z nich korzystamy. Umożliwia to łatwą adaptację modułów do potrzeb użytkowników, czy implementację nowych modeli fizycznych. Przy czym należy zauważyć że mechanizm dziedziczenia obecny w języku C++ powoduje że zmiany w istniejącym kodzie są zbędne lub minimalne.

Przy projektowaniu tak dużej aplikacji jak Geant4 niezbędne jest podzielenie go na mniejsze logiczne części. Sprawia to że projekt jest dobrze zorganizowany i łatwy do rozwijania. Gdy logiczne części są zdefiniowane tak by były niezależne od siebie, mogą być rozwijane równolegle. W metodologii projektowania zorientowanego obiektowo autorstwa Grady'ego Booch'a wykorzystuje się kategorie klas jako logiczne części. Kategoria klas zawiera klasy które są ze sobą ściśle powiązane. Związek między klasami należącymi do różnych kategorii jest luźny i polega na wykorzystaniu jednej klasy przez drugą. Zależności między kategoriami przedstawia się na "class category diagram". Poniżej przedstawiony jest taki diagram dla Geant4. Każdy prostokąt oznacza kategorię klas. Linie zaś określają zależności między kategoriami. Kółeczko na końcu linii wskazuje kategorię która wykorzystuje kategorię na przeciwnym końcu linii. [3]

The Geant4 class category diagram
[3]

Ponad tymi znajdują się kategorie niezbędne do opisu śledzenia cząstek oraz procesów fizycznych którym podlegają.

Wyżej znajdują się:

Możliwość używania powyższych kategorii oraz łączenia ich z zewnętrznymi interfejsami zapewniają kategorie: visualization, persistency oraz interfaces.

[2][3]

Wymagane umiejętności programistyczne

Użytkowników Geant4 można podzielić na:

Instalacja

Ponieważ instalacja i praca z Geant4 nie zawsze jest intuicyjna poniżej znajduje się algorytm który powinien umożliwić uruchomienie i wygodną pracę z tym pakietem. Celem który sobie postawiłem jest uruchomienie przykładu Novice 3.

Instalację Geant4 przeprowadziłem na komputerze o procesorze Intel Pentium III pod kontrolą systemu Mandrake Linux 8.2. Korzystałem z Geant4 w wersji: 4.5.0, biblioteki CLHEP w wersji: 1.8.0 oraz pakietu DAWN w wersji: 3.85c. Powłoką którą używałem był bash. W przypadku innych powłok część poleceń może ulec zmianie. Informacje tu zawarte powinny być możliwe do wykorzystania na innych systemach Linux'owych czy Unix'owych. Więcej informacji o instalacji pod Linux'em czy pod Windows'ami zamieszczone jest w dokumentacji projektu [6][3].

Aby zainstalować Geant4 niezbędne są źródła Geant4 oraz źródła biblioteki CLHEP (CERN Library for High Energy Phisics). Niezbędny jest także kompilator C++ najlepiej gcc i Standard Template Library. STL jest jednak najczęściej instalowana razem z gcc. W Mandrake'u niezbędne będą zainstalowane pakiety: gcc, gcc-c++, gcc-cpp. Inne biblioteki takie jak OpenGL, Motif czy programy takie jak DAWN nie są niezbędne, jednak znacznie zwiększają możliwości pakietu i ułatwiają pracę z nim.

  1. CLHEP

    Najpierw należy zdobyć źródła biblioteki CLHEP. Znaleźć je można pod adresem: http://cern.ch/clhep

    Następnie wykonujemy następujące polecenia ($ - znak zachęty powłoki):
    $ tar xvzf clhep-1.8.0.0.tgz
    $ cd CLHEP
    $ ./configure
    $ make
    $ su
    # make install
    # cd /usr/local/lib
    # ln -s libCLHEP-g++.1.8.0.0.a libCLHEP.a
    # exit

    W tym momencie biblioteka CLHEP powinna być zainstalowana w katalogu /usr/local/lib jako CLHEP. Oczywiście można zainstalować ją w innym katalogu, wymagać to jednak będzie zmiany konfiguracji Geant4.
  2. GEANT4

    Teraz należy zdobyć źródła Geant4. Znajdują się one pod adresem: http://cern.ch/geant4.

    Aby korzystać z graficznego interfejsu użytkownika w systemie powinny być zainstalowane pakiety:
    lesstif i lesstif-devel (otwarta implementacja biblioteki Motif)
    Aby korzystać z wizualizacji przy pomocy OpenGl niezbędny jest pakiet libMesaGLU1-devel.

    źródła należy rozpakować do katalogu geant4 w katalogu domowym:
    $ cd ~
    $ tar xzvf geant4.5.0.tar.gz
    $ mv geant4.5.0 geant4

    Następnie można przejść do konfiguracji i instalacji:
    $ cd ~/geant4
    $ ./Configure -install
    Teraz można wciskać enter przy pojawiających się pytaniach, oprócz następujących przypadków gdy należy odpowiedzieć: y [enter].

    • Do you want to build 'global' compound libraries? - (duża biblioteka zamiast wielu małych)
    • pytanie o XM_SESSION - (gui)
    • pytanie o OPENGLX_DRIVER - (wizualizacja)
    • pytanie o DAWN_DRIVER - (wizualizacja)
    • pytanie o VRML_DRIVER - (wizualizacja)

    Program zacznie się budować co może potrwać kilka(naście) godzin.

    Gdy skończy można dokonać końcowej konfiguracji.
    $ ./Configure
    $ cd config/sys
    $ cp Linux-g++.gmk .gmk
    $ cd ~/geant4/source
    $ make libmap

    W pliku ~/geant4/env.sh należy w przedostatniej linii zmienić $HOME na $HOME/geant4

    W tym momencie pakiet Geant4 został zainstalowany w katalogu $HOME/geant4. Można już zbudować większość przykładów i je uruchomić.

    Przed pracą z Geant4 (a właściwie przed kompilacją programów na nim opartych) należy zawsze wykonać:
    $ cd ~/geant4
    $ . env.sh
    Spowoduje to ustawienie odpowiednich zmiennych powłoki niezbędnych do poprawnej kompilacji przykładów i innych aplikacji korzystających z możliwości Geant4. Ustawienia te spowodują że przykłady będą miały graficzny interfejs użytkownika. Jeśli nie podoba nam się to możemy je uruchomić z plikiem wsadowym, co uniemożliwi włączenie interfejsu użytkownika. Możemy też skompilować je z interfejsem użytkownika korzystającym z terminalu. Aby uzyskać ten efekt należy, przed kompilacją, wydać następujące komendy:
    $ export G4UI_USE_XM=""
    $ export G4UI_USE_TCSH=1

  3. DAWN

    Jeśli nie mamy programu do zrzutów grafik z ekranu, chcemy otrzymać wizualizację w postaci pliku postscriptowego lub nie chcemy zajmować się ustawieniem kamery podczas symulacji, należy zainteresować się programem DAWN - Drawer for Academic WritiNgs. Ma on miły graficzny interfejs użytkownika i oprócz zapisu do plików postscriptowych potrafi do wizualizacji wykorzystywać OpenGL (chociaż z tym miałem problemy)

    Na początek należy zdobyć źródła tego programu. Są one dostępne pod adresem: http://geant4.kek.jp/~tanaka.

    Następnie przystępujemy do instalacji:
    $ tar xvzf dawn_3_85c.tar.gz
    $ cd dawn_3_85c
    $ make clean
    $ make guiclean
    $ ./configure
    Skrypt ten będzie nam zadawał pytania. Poniżej zamieszczone są odpowiedzi na nie:
    1: g++
    2: -O3 (duże o)
    3: wish
    4: -I/usr/include
    5: -L/usr/lib
    6: -I/usr/include
    7: -I/usr/include/GL
    8: -L/usr/lib
    9: 0
    10: /usr/local/bin
    11: 4
    12: n

    W pliku Makefile znajdującym się w katalogu dawn_3_85c należy w linii zaczynającej się od OPENGL_LIB = dopisać: -L/usr/lib -L/usr/X11R6/lib

    Następnie wykonujemy:
    $ make
    $ su
    # make install
    # exit

    W tym momencie powinniśmy być szczęśliwymi posiadaczami programu DAWN. DAWN pracuje na plikach z rozszerzeniem "prim" np: "g4_00.prim". Pliki te są tworzone przez Geant4 pod warunkiem że została uruchomiona wizualizacja przy pomocy DAWN, co zapewnia komenda Geant4 "/vis/open DAWNFILE".

  4. Przykład

    Teraz można przejść do przykładu Novice 3. Jest on szczególnie interesujący gdyż zapewnia interfejs użytkownika i wizualizację a przy tym jest prosty.

    $ cd ~/geant4
    $ . env.sh
    $ cd examples/novice/N03
    $ make
    $ cp ../../../bin/Linux-g++/exampleN03 .
    $ ./exampleN03
    Idle> /run/beamOn
    Idle> exit

    W ten sposób uruchomiliśmy pierwszy program korzystający z możliwości Geant4. Zapraszam do zapoznania się z przykładami, przeczytania plików README dołączonych do każdego z przykładów, no i oczywiście do przestudiowania dokumentacji [3].