GEANT4. Leszek Adamczyk. Przykład budowy aplikacji Interfejs użytkownika Wizualizacje

Podobne dokumenty
Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

GEANT4. Leszek Adamczyk. Interfejs użytkownika -2 Geometria -2

Katedra Elektrotechniki Teoretycznej i Informatyki. wykład 12 - sem.iii. M. Czyżak

GEANT4. Leszek Adamczyk. Geometria detektora

Pracownia komputerowa. Dariusz wardecki, wyk II

MentorGraphics ModelSim

Wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Praca w środowisku Visual Studio 2008, Visual C

Ćwiczenie 1. Przygotowanie środowiska JAVA

tworzenie katalogów Aby utworzyć nowy katalog wpisz: mkdir katalog1 Ta komenda utworzy katalog o nazwie katalog1.

1 Podstawy c++ w pigułce.

Pracownia Komputerowa wykład III

Część 4 życie programu

Cwiczenie nr 1 Pierwszy program w języku C na mikrokontroler AVR

Zofia Kruczkiewicz, ETE8305_2 1

Architektury Usług Internetowych. Laboratorium 2. Usługi sieciowe

Administracja sieciowymi systemami operacyjnymi III Klasa - Linux

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

PRACOWNIA INFORMATYCZNA BASH - PODSTAWOWE INFORMACJE

trainxx tramxx

Programowanie Systemów Wbudowanych

Pracownia Komputerowa wykład III

Trochę o plikach wsadowych (Windows)

Wprowadzenie do języka Java

SYSTEMY OPERACYJNE I SIECI KOMPUTEROWE. Tryb konsolowy ćwiczenie b

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Laboratorium 1. I. Zainstaluj program Eclipse (wersja C/C++ w odpowiednim systemie operacyjnym

Środowisko programistyczne GEANT4

Podstawy programowania, Poniedziałek , 8-10 Projekt, część 1

Język JAVA podstawy. wykład 1, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

I - Microsoft Visual Studio C++

Wstęp do systemów wielozadaniowych laboratorium 03 Praca w powłoce UNIX-owej

Podstawy wykorzystania bibliotek DLL w skryptach oprogramowania InTouch

Wstęp do systemów wielozadaniowych laboratorium 02 Praca w systemie plików

Podział programu na moduły

Powłoka I. Popularne implementacje. W stylu sh (powłoki zdefiniowanej w POSIX) W stylu csh. bash (najpopularniejsza) zsh ksh mksh.

BASH - LINIA POLECEŃ. Bioinformatyka 2018/2019

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Tablet bezprzewodowy QIT30. Oprogramowanie Macro Key Manager

Wstęp do Programowania, laboratorium 02

Zajęcia nr 1 Podstawy programowania. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

System operacyjny UNIX Ćwiczenie 1. Podstawowe polecenia systemu Unix

PARADYGMATY PROGRAMOWANIA Wykład 4

1 Podstawy c++ w pigułce.

Bloki anonimowe w PL/SQL

ALGORYTMY I STRUKTURY DANYCH

Co nie powinno być umieszczane w plikach nagłówkowych:

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

ISO/ANSI C - funkcje. Funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje. ISO/ANSI C - funkcje

Bash - wprowadzenie. Bash - wprowadzenie 1/39

Sieci i systemy operacyjne I Ćwiczenie 1. Podstawowe polecenia systemu Unix

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Powłoka bash. Kurs systemu Unix 1

Instytut Teleinformatyki

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

Wprowadzenie do biblioteki klas C++

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Ćwiczenia 2 IBM DB2 Data Studio

Programowanie I. O czym będziemy mówili. Plan wykładu nieco dokładniej. Plan wykładu z lotu ptaka. Podstawy programowania w językach. Uwaga!

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 26 marca kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 40

Adam Wójs <adam[shift+2]wojs.pl> git --wprowadzenie

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Programowanie w języku C++

Laboratorium Informatyka (I) AiR Ćwiczenia z debugowania

Zakład Systemów Rozproszonych

Podstawy programowania skrót z wykładów:

Pobieranie argumentów wiersza polecenia

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie obiektowe zastosowanie języka Java SE

System plików - wprowadzenie. Ścieżki dostępu. Informatyka ćw 1

Systemy operacyjne. Instrukcja laboratoryjna. Ćwiczenie 1: Polecenia systemu UNIX/LINUX. Opracował: dr inż. Piotr Szpryngier

Zad. 5: Sterowanie robotem mobilnym

Mikrokontroler ATmega32. Język symboliczny

Zad. 6: Sterowanie robotem mobilnym

Temat zajęć: Tworzenie skryptów powłoki systemu operacyjnego.

Wykład 4: Klasy i Metody

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Instrukcja korzystania z Virtual Box-a i SQLPLUS-a

Stosowanie poleceń związanych z zarządzaniem plikami oraz katalogami: nazwa_polecenia -argumenty ścieżka/ścieżki do katalogu/pliku

Wykład 8: klasy cz. 4

Instrukcja instalacji winbgim

Uruchamianie programów w systemie Linux, potoki, strumienie, procesy, alias

ANALIZA DANYCH SHOWERA. Narzędzia na wiązkę dla Shower Operatora

Ćwiczenie 9 Linux - operacje systemu plików

Wstęp do informatyki. stęp do informatyki Polecenia (cz.2)

Podstawy Programowania.

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

Programowanie Proceduralne

Argumenty wywołania programu, operacje na plikach

Projektowanie klas c.d. Projektowanie klas przykład

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Automatyzacja kompilacji. Automatyzacja kompilacji 1/40

Transkrypt:

GEANT4 Leszek Adamczyk Przykład budowy aplikacji Interfejs użytkownika Wizualizacje

Ćwiczenie 1 Proszę zalogować się na serwer fatcat ssh <user>@fatcat.ftj.agh.edu.pl Ustawić zmienne środowiskowe cd <g4work> ; source.g4work.env Skopiować zmodyfikowany przykład (N03) cp -r ~adamczyk/g4work/n03. Wyświetlić zawartość katalogu N03 cd N03; ls -R

.: GNUmakefile examplen03.cc include src./include: ExN03DetectorConstruction.hh ExN03EventAction.hh ExN03PhysicsList.hh ExN03PrimaryGeneratorMessenger.hh ExN03SteppingAction.hh Katalog deklaracji klas ExN03DetectorMessenger.hh ExN03EventActionMessenger.hh ExN03PrimaryGeneratorAction.hh ExN03RunAction.hh ExN03SteppingVerbose.hh./src: ExN03DetectorConstruction.cc ExN03EventAction.cc ExN03PhysicsList.cc ExN03PrimaryGeneratorMessenger.cc ExN03SteppingAction.cc Katalog definicji klas ExN03DetectorMessenger.cc ExN03EventActionMessenger.cc ExN03PrimaryGeneratorAction.cc ExN03RunAction.cc ExN03SteppingVerbose.cc Dobry zwyczaj: nazwy plików są jednocześnie nazwami klas które deklarują lub definiują a te zawierają nazwy klas bazowych poprzedzone wspólnym przedrostkiem charakterystycznym dla danego projektu.

GNUmakefile Plik reguł dla programu make, służącego do automatyzacji kompilacji programów name := examplen03 G4TARGET := $(name) G4EXLIB := true Nazwa pliku z programem głównym ifndef G4INSTALL G4INSTALL =../../.. endif.phony: all all: lib bin include $(G4INSTALL)/config/binmake.gmk visclean: rm -f g4*.prim g4*.eps g4*.wrl rm -f.dawn_* make visclean Usuwa pliki graficzne

examplen03.cc #include "G4RunManager.hh" #include "ExN03DetectorConstruction.hh" #include "ExN03PhysicsList.hh" #include "ExN03PrimaryGeneratorAction.hh" #include "ExN03RunAction.hh" #include "ExN03EventAction.hh" #include "ExN03SteppingAction.hh" int main() { // Construct the default run manager // G4RunManager * runmanager = new G4RunManager; Deklaracje klas używanych w programie głównym Utworzenie runmanagera wraz z wywołaniem jego konstruktora

// Set mandatory initialization classes // ExN03DetectorConstruction* detector = new ExN03DetectorConstruction; runmanager->setuserinitialization(detector); // G4VUserPhysicsList* physics = new ExN03PhysicsList; runmanager->setuserinitialization(physics); Utworzenie i zarejestrowanie do RunManagera klas użytkownika // Set user action classes // G4VUserPrimaryGeneratorAction* gen_action = new ExN03PrimaryGeneratorAction(detector); runmanager->setuseraction(gen_action); // ExN03RunAction* run_action = new ExN03RunAction; runmanager->setuseraction(run_action); // ExN03EventAction* event_action = new ExN03EventAction(run_action); runmanager->setuseraction(event_action); // G4UserSteppingAction* stepping_action = new ExN03SteppingAction(detector, event_action); runmanager->setuseraction(stepping_action);

// Initialize G4 kernel // runmanager->initialize(); Inicjalizacja jądra GEANT4 // Start a run G4int numberofevent=3; runmanager->beamon(numberofevent); Procesowanie 3 przypadków // Job termination // Free the store: user actions, physics_list and detector_description are // owned and deleted by the run manager, so they should not // be deleted in the main() program! delete runmanager; } return 0; Usunięcie runmanagera wraz z wywołaniem jego destruktora

Kompilacja i wykonanie programu Kompilacja make Wykonanie programu../bin/linux-g++/examplen03 Uwaga: Aby wykonać skompilowany program podczas następnej sesji należy ustawić zmienne środowiskowe w przeciwnym razie program może źle działać (source.g4work.env)

Interfejs użytkownika (UI) Jakakolwiek zmiana w poprzednim przykładzie wymaga ponownej kompilacji programu. Aby tego uniknąć sterowanie wykonaniem programu może być przekazane bezpośrednio użytkownikowi poprzez tzw. interfejs użytkownika Najprostszym interfejsem jest klasa G4UIterminal wyprowadzona z abstrakcyjnej klasy bazowej G4UIsession G4UIterminal zapewnia interakcyjny tekstowy sposób wydawania poleceń UI

Ćwiczenie 2 Proszę przekazać sterowanie programem z ćwiczenia 1 bezpośrednio do użytkownika W pliku examplen03.cc proszę dodać deklaracją klasy G4UIterminal (plik nagłówkowy) Zamiast polecenia runmanager->beamon() proszę przekazać sterowanie do UI G4UIsession * session = new G4UIterminal; session->sessionstart(); delete session; Następnie proszę skompilować i uruchomić program examplen03

Polecenia interfejsu użytkownika Polecenie składa się z: katologu polecenia /run/beamon 3 polecenia parametrów Parametr może być typu logicznego, liczbą całkowitą, rzeczywistą lub ''ciągiem znaków'' Parametry oddzielamy spacją Parametry można omijać (przyjmowana jest wtedy wartość domyślna) Używamy! gdy pierwszy parametr ma wartość domyślną a drugi zadaną np. /dir/command! 2

Katalogi poleceń Idle> ls Command directory path : / Sub-directories : /control/ UI control commands. /units/ Available units. /geometry/ Geometry control commands. /tracking/ TrackingManager and SteppingManager control commands. /event/ EventManager control commands. /cuts/ Commands for G4VUserPhysicsList. /run/ Run control commands. /random/ Random number status control commands. /particle/ Particle control commands. /process/ Process Table control commands. /N03/ UI commands of this example (można zdefiniować własne) /gun/ Particle Gun control commands. /material/ Commands for materials Commands : Idle>

Opis dostępnych poleceń Opis dostępnych poleceń można uzyskać: W formacie tekstowym (na standardowym wyjściu) /control/manual [directory] W formacie html (jeden plik na każdy podkatalog) /control/createhtml [directory] Lista w budowanych poleceń GEANT4 znajduje się w przewodniku dla twórców aplikacji (Rozdział 7.1)

Makra Makra są plikami tekstowymi zawierającymi polecenia interfejsu użytkownika Polecenia w makrze muszą posiadać pełną ścieżkę dostępu # oznacza komentarz Makra można wykonać na dwa sposoby z poziomu interfejsu użytkownika lub innego makra :Idle> /control/execute <nazwa_makra> z poziomu kodu c++ G4UImanager * UI = G4UImanager::GetUIpointer(); UI->ApplyCommand(''/control/execute <nazwa_makra>'');

Aby móc raz skompilowanym programem sterować interakcyjnie lub bez naszego udziału w zależności od aktualnej potrzeby można przekazać programowi głównemu parametr(y) np. nazwę makra do wykonania: int main(int argc, char** argv) {...... if(argc==1) { // tryb interakcyjny G4UIsession* session = new G4UIterminal; session->sessionstart(); delete session; } else { // tryb nieinterakcyjny G4UImanager* UI = G4UImanager::GetUIpointer(); G4String makro = argv[1]; G4String command= ''/control/execute '' + makro; UI->ApplyCommand(command); }

Ćwiczenie 3 Proszę wprowadzić modyfikacje z poprzedniej transparencji w programie głównym examplen03.cc Skompilować program Utworzyć makro np. run.mac zawierające polecenie /run/beamon 3 Proszę wykonać to makro z poziomu interfejsu użytkownika../bin/linux-g++/examplen03 Idle> /control/execute run.mac Idle> exit oraz w trybie nieinterakcyjnym../bin/linux-g++/examplen03 run.mac

Aliasy Aliasy definiujemy za pomocą polecenia /control/alias [nazwa] [wartość] np. Idle> /control/alias bo ''/run/beamon Wartość aliasu jest zawsze traktowana jak ciąg znaków Alias jest automatycznie definiowany podczas wywołania poleceń /control/loop i /control/foreach Alias może być używany jako składnik polecenia wywoływanego z poziomu interfejsu użytkownika lub wewnątrz makra. Do tego celu używamy nazwy aliasa w nawiasach pisanych np. Idle> {bo} 3

Pętle Polecenia /control/loop i /control/foreach wykonują makro więcej niż raz: /control/loop [makro] [alias] [pocz] [końc] [krok] [alias] alias którego wartość zmienia się przy każdym wywołaniu makra od [pocz] o [krok] Idle> /control/loop run.mac Ekin 2. 10. 2. /control/foreach [makro] [alias] [lista] [alias] alias do kolejnych wartości z [lista] [lista] musi być ograniczona ( ) Idle> /control/foreach run.mac Ekin 1. 7. 10. w makrze run.mac np.: /gun/energy {Ekin} GeV

Jeśli system operacyjny (Linux) zawiera C-shell lub TC-shell'a to można używać bardziej przyjaznego interfejsu użytkownika. G4UIsession*session=new G4UIterminal (new G4UItcsh); Kompilacją możemy sterować za pomocą zmiennych środowiskowych np. G4UI_USE_TCSH #include G4UIterminal.hh ; #if defined(g4ui_use_tcsh) #include G4UItcsh.hh ; #endif... #if defined(g4ui_use_tcsh) G4UIsession * session= new G4UIterminal(new G4UItcsh); #else G4UIsession * session= new G4UIterminal; #endif

Ćwiczenie 4 Proszę zmodyfikować program główny aby korzystał ze zmiennej środowiskowej G4UI_USE_TCSH w celu ewentualnego użycia terminala typu TC-shell oraz go skompilować Proszę zmodyfikować makro run.mac aby za pomocą polecenie Idle> /control/loop Ekin 2 10. 2. wykonać makro dla różnych energii cząstek pierwotnych np. w run.mac: /gen/energy {Ekin} GeV /run/beamon 3

G4UIterminal Tekstowy interfejs użytkownika posiada wbudowane polecenia charakterystyczne dla Unix'a: cd, pwd, ls history pokazuje poprzednio wykonane polecenia!historyid ponowne wykonanie polecenia Klawisze strzałek i backspace (tylko tcsh) help <polecenie> - opis i składnia polecenia exit zakończenie pracy Powyższe polecenia dostępne tylko interakcyjnie, nie mogą być wykonane z poziomu programu w c++ ani wewnątrz makra

Wizualizacje Wizualizacje umożliwiają: Produkowanie wysokiej jakości rysunków np. do publikacji Są narzędziem do wykrywania błędów w geometrii detektora (np. nakładanie się obszarów) Daje możliwość interaktywnego uzyskiwania informacji o wizualizowanych obiektach(pędy, depozyty) Daje możliwość uzyskiwania szybkich odpowiedzi podczas analizy: trajektorii, hitów, geometrii

Co można wizualizować? Dane symulacyjne: - części detektora - trajektorie cząstek - depozyty energii (hity) Inne obiekty zdefiniowane przez użytkownika: - linie proste/łamane np. osie współrzędnych - teksty (opisy/komentarze/nazwy...)

Programy do wizualizacji GEANT 4 posiada interfejsy obsługujące siedem zewnętrznych programów do wizualizacji: OpenGl OpenInventor HepRep DAWN VRML RayTracer ASCIITree Różne programy odpowiadają różnym potrzebom Lista poleceń wydawanych z poziomu GEANT4 jest taka sama dla wszystkich programów

Programy do wizualizacji Nie ma jednego programu spełniającego wszystkie nasze wymagania. Trzy będziemy używać podczas zajęć: OpenGl Daje możliwość uzyskiwania szybkich odpowiedzi podczas analizy: trajektorii, hitów, geometrii HepRep Jest narzędziem do wykrywania błędów w geometrii detektora (np. nakładanie się obszarów) Daje możliwość interaktywnego uzyskiwania informacji o wizualizowanych obiektach(pędy.,,,) DAWN Produkuje wysokiej jakości rysunki np. do publikacji

Programy do wizualizacji Pięć interfejsów niewymagających zewnętrznych bibliotek jest zawsze dostępnych w każdej instalacji GEANT'a HepRep Dawn VRML RayTracer ASCIITree Pozostałe wymagają instalacji bibliotek i ustawienia zmiennych środowiskowych podczas kompilacji jądra GEANT4

Sterowanie wizualizacją Niezależnie od interfejsu, kod źródłowy pozostaje w zasadzie taki sam Wizualizacje realizujemy albo za pomocą poleceń interfejsu użytkownika lub z poziomu kodu c++. Na zajęciach ograniczymy się do poleceń UI Niektóre interfejsy działają bezpośrednio w G4 OpenGL, OpenInventor, RayTracer i ASCIITree Przy pracy z innymi GEANT4 produkuje pliki umożliwiające wizualizacje za pomocą innych aplikacji : HepRep, DAWN, VRML Można korzystać z kilku interfejsów w tym samym czasie (np. OpenGL/DAWN)