Środowisko programistyczne GEANT4

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

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Środowisko programistyczne GEANT4

Modelowanie Procesów Jądrowych

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wstęp do Programowania 2

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

Programowanie (C++) NI 5

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

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

PARADYGMATY PROGRAMOWANIA Wykład 4

Zaawansowane programowanie w C++ (PCP)

Szablony klas, zastosowanie szablonów w programach

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

PARADYGMATY PROGRAMOWANIA Wykład 2

Zaawansowane programowanie w języku C++ Klasy w C++

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Dzisiejszy wykład. Wzorce projektowe. Visitor Client-Server Factory Singleton

Zaawansowany kurs języka Python

Politechnika Łódzka. Instytut Systemów Inżynierii Elektrycznej. Laboratorium cyfrowej techniki pomiarowej. Ćwiczenie 4

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

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

Wykład 4. Tablice. Pliki

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Szablony funkcji i szablony klas

PARADYGMATY PROGRAMOWANIA Wykład 3

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

Języki i metody programowania Java. Wykład 2 (część 2)

TEMAT : KLASY DZIEDZICZENIE

I - Microsoft Visual Studio C++

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

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

Część 4 życie programu

Aplikacje w środowisku Java

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

Wyliczanie wyrażenia obiekty tymczasowe

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wprowadzenie do programowania i programowanie obiektowe

Programowanie obiektowe

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Projektowanie aplikacji internetowych laboratorium

Kurs WWW. Paweł Rajba.

Funkcje przeciążone, konstruktory kopiujące, argumenty domyślne

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy INNE SPOSOBY INICJALIZACJI SKŁADOWYCH OBIEKTU

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

WYKONANIE APLIKACJI OKIENKOWEJ OBLICZAJĄCEJ SUMĘ DWÓCH LICZB W ŚRODOWISKU PROGRAMISTYCZNYM. NetBeans. Wykonał: Jacek Ventzke informatyka sem.

Wprowadzenie do projektu QualitySpy

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Biblioteka standardowa - operacje wejścia/wyjścia

Konstruktor destruktor Programowanie obiektowe

Język programowania PASCAL

- Narzędzie Windows Forms. - Przykładowe aplikacje. Wyższa Metody Szkoła programowania Techniczno Ekonomiczna 1 w Świdnicy

Programowanie 2. Język C++. Wykład 3.

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

Programowanie w Sieci Internet Blok 2 - PHP. Kraków, 09 listopada 2012 mgr Piotr Rytko Wydział Matematyki i Informatyki

Rozpoznawanie obrazu. Teraz opiszemy jak działa robot.

Operatory na rzecz typu TString

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

Programowanie obiektowe

Programowanie strukturalne

Języki i paradygmaty programowania Wykład 2. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/18

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 4. Karol Tarnowski A-1 p.

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Programowanie obiektowe

Kurs programowania. Wykład 8. Wojciech Macyna

Zaawansowane programowanie w C++ (PCP)

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

Multimedia JAVA. Historia

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Tworzenie własnych komponentów

Środowisko programistyczne GEANT4

Wykład :37 PP2_W9

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie obiektowe

Wykonaj tę czynność, jeśli masz co najmniej trzy awiza dostawy do przetworzenia.

Systemy Rozproszone. Spis treści. Temat projektu: Regułowy system analizujacy logi. autorzy: Rafał Sadłowski, Sebastian Falkus, Michał Różycki

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Zaawansowane aplikacje WWW - laboratorium

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Transkrypt:

Środowisko programistyczne GEANT4 Leszek Adamczyk Wydział Fizyki i Informatyki Stosowanej Akademia Górniczo-Hutnicza Wykłady w semestrze zimowym 2015/2016

Analiza danych GEANT 4 nie ma rozbudowanego systemu analizy danych: Zbyt różnorodne środowisko użytkowników Każda grupa użytkowników ma swoje własne ulubione narzędzie do analizy (ROOT, EXCEL,...) Typowy wynik symulacji to: histogram lub tablica n-wymiarowa (ntuple) gdzie wierszem jest np. przypadek, czastka lub hit a kolumnami wielkości takie jak: depozyt energii, skladowe pędu czastki, pozycja hitu,... GEANT umożliwia zapisanie histogramów i ntupli w wielu formatach (ROOT, XML, CSV,...) Cały kod jest w GEANT4 zatem nie ma potrzeby instalacji dodatkowego oprogramowania do tworzenia plików wynikowych Programy zewnętrzne sa potrzebne do analizy i wizualizacji wyników symulacji.

Analiza danych System analizy danych zawiadamia G4AnalysisMenager. Meneger zapenia: tworzenie plików wynikowych tworzenie i obsługę obiektów klasy histogram oraz ntuple jeden wspólny interfejs szczegóły specyficzne dla każdego formatu sa dla użytkownika niewidoczne obsługe obiektów typu pliki, histogramy oraz ntuple dostęp w dowolnej partii kodu do plików, histogramów lub kolumn ntupli integracje ze środowiskiem GEANT 4 dostęp do obiektów z poziomu interfejsu użytkownika pełna wielowątkowość sumowanie wyników po wszystkich watkach

Histogramy MyAnalysis.hh... #include "g4root.hh" //#include "g4xml.hh" //#include "g4csv.hh" MyRunAction.cc -------------- #include "MyAnalysis.hh" void MyRunAction::BeginOfRunAction(const G4Run* arun) // Create analysis manager G4AnalysisManager* analysismanager = G4AnalysisManager::Instance(); analysismanager->setverboselevel(1); analysismanager->setfirsthistoid(1); // Open an output file analysismanager->openfile("hist.root"); // Creating histograms G4int idphotonflux = analysismanager->createh1("photonflux","photon flow",15,0.,90.); ------------------------------------------------------ void MyRunAction::EndOfRunAction(const G4Run* arun) // Get analysis manager G4AnalysisManager* analysismanager = G4AnalysisManager::Instance(); // Get histogram id not efficient in event loop G4int idphotonflux = analysismanager->geth1id("photonflux"); while( iter!= therun->frunhitsmap.getmap()->end() ) { // Fill histagrams as weighted events analysismanager->fillh1(idphotonflux, (iter->first+0.5)*90./15., *iter->second); } // Save histograms and close file analysismanager->write(); analysismanager->closefile();

Histogramy Identyfikatory Identyfikator histogramu tworzony automatycznie przy jego utworzeniu G4AnalysisManager::CreateH1(); domyślny identyfikator pierwszego histogramu 0 mozna zmienić G4AnalysisManager::SetFirstHistoId(1); 1D, 2D, 3D histogramy numerowane niezaleznie: CreateH1(); CreateH2(), CreateH3(); Nazwa histogramu nie ma nic wspólnego z jego identyfikatorem ale może mieć CreateH1("1","photon flow",15,0.,90.); Oprócz jedno, dwu i trójwymiarowych histogramów można również tworzyć Profile dajace możliwość wizulizacji wartości średniej i odchylenia standardowego wielkości z w funkcji wielkości x lub x, y CreateP1(); CreateP2();

Ntuple: MyRunAction.cc MyRunAction.cc -------------- #include "MyAnalysis.hh" void MyRunAction::BeginOfRunAction(const G4Run* arun) // Create analysis manager G4AnalysisManager* analysismanager = G4AnalysisManager::Instance(); analysismanager->setverboselevel(1); analysismanager->setfirstntupleid(1); // Open an output file analysismanager->openfile("tree.root"); // Creating ntuple analysismanager->createntuple("photoncollection","kolekcja fotonów"); analysismanager->createntupledcolumn("e"); analysismanager->createntupledcolumn("x"); analysismanager->createntupledcolumn("y"); analysismanager->createntupledcolumn("z"); analysismanager->finishntuple(); --------------------------------------------- void MyRunAction::EndOfRunAction(const G4Run* arun) // Get analysis manager G4AnalysisManager* analysismanager = G4AnalysisManager::Instance(); // Save ntuple and close file analysismanager->write(); analysismanager->closefile();

Ntuple: MyRun.cc MyRun.cc -------------- #include "MyAnalysis.hh" void MyRun::RecordEvent(const G4Event* evt) {... G4THitsCollection<MyPhotonHit>* photoncollection = dynamic_cast<g4thitscollection<myphotonhit>*> (hce->gethc(fcollectioni // Get analysis manager G4AnalysisManager* analysismanager = G4AnalysisManager::Instance(); for( G4int i = 0; i< photoncollection->entries(); i++) { float e = (*photoncollection)[i]->getenergy()/mev; float x = (*photoncollection)[i]->getposition().x()/cm; float y = (*photoncollection)[i]->getposition().y()/cm; float z = (*photoncollection)[i]->getposition().z()/cm; } analysismanager->fillntupledcolumn(0,e); analysismanager->fillntupledcolumn(1,x); analysismanager->fillntupledcolumn(2,y); analysismanager->fillntupledcolumn(3,z); analysismanager->addntuplerow();

Polecenia interfejsu użytkownika

G4UImessenger Klasa bazowa G4UImessenger służy do wyprowadzania własnych klas definiujacych polecenia UI. Obiekt takiej klasy powinien być utworzony (zniszczony) przez konstruktora (destruktora) obiektu na który działa dane polecenie (target class); Metody klasy G4UImessenger: Constructor - definicja (+instancja) poleceń UI; Destructor - unicestwienie poleceń UI; SetNewValue(G4UICommand *, G4String NewValue) konwersja NewValue na odpowiedni typ wartości oraz wywołanie odpowiedniej funkcji klasy target GetCurrentValue(G4UICommand *) wywołuje odpowiednia funkcję klasy target i konwertuje wartość parametru na typ G4String

G4UImessenger- Przykład tworzenia polecenia Implementacja polecenia w konstruktorze klasy wyprowadzonej z G4UIMessenger. Przykład: Załóżmy, że chcemy z poziomu UI zmieniać grubość tarczy berylowej. Wyprowadzamy klasę MyDetectorMessenger z klasy bazowej G4UIMessenger MyDetectorMessenger::MyDetectorMessenger (MyDetectorConstruction* detector) :ftarget(detector) { detdir = new G4UIdirectory("/My/"); detdir->setguidance("my detector setup commands."); fbercmd = new G4UIcmdWithADoubleAndUnit("/My/beryllium", this); fbelcmd->setguidance("beryllium target."); fbercmd->setparametername("depth",true); fbercmd->setrange("depth>0. && depth< 40."); fbercmd->setdefaultvalue(15); fbercmd->setdefaultunit("cm"); }

G4UICommand Klasa G4UICommand reprezentuje polecenia UI a G4UIParameter reprezentuje parametry poleceń. GEANT ma szereg gotowych klas wyprowadzonych z klasy G4UICommand w zależności od typu parametrów z nia stowarzyszonych: G4UIcmdWithoutParameter G4UIcmdWithAString G4UIcmdWithABool G4UIcmdWithAnInteger G4UIcmdWithADouble, G4UIcmdWithADoubleAndUnit G4UIcmdWith3Vector, G4UIcmdWith3VectorAndUnit G4UIdirectory Polecenia z innymi typami parametrów należy samemu wyprowadzić z klasy bazowej G4UICommand

G4UICommand - Nazwa parametru Wszystkie klasy typu G4UIcmdWithAxxxx posiadajace parametr maja zaimplementowaną metodę: SetParameterName( const char* name, G4bool par2, G4bool par3=false) Nazwa parametru używana jest w helpie oraz w definicji zakresu parametrów; Jeśli par2=true to polecenie można wydać nie określajac wartości parametru, użyta zostanie wartość domyślna; Jeśli par3=true to aktualna wartość parametru jest przyjęta jako domyślna, w przeciwnym przypadku wartość domyślna należy określić korzystajac z SetDefaultValue

G4UICommand - zakres, jednostka parametru void SetRange (const char* range) dostępna dla poleceń z parametrami numerycznymi. Warunki zapisujemy za pomoca składni c++ cmd->setrange( x>0. && x>y && x+y<z ) void SetDefaultUnit (const char* unit) funkcja dostępna dla poleceń z określona jednostka Po zdefiniowaniu jednostki polecenie nie zostanie zaakceptowane z jednostka o innym wymiarze.

G4UICommand - konwersje String-wartość numeryczna Klasy wyprowadzone z klasy G4UICommand z numerycznymi lub logicznymi parametrami maja wbudowane funkcje do konwersji: String wartość numeryczna: G4booll GetNewBoolValue (const char*) G4int GetNewIntValue (const char*) G4double GetNewDoubleValue(const char*) G4ThreeVector GetNew3VectorValue(const char*) Należy ich używać w funkcji SetNewValue() Jednostka uwzględniana jest automatycznie Wartość numeryczna - String G4String ConvertToString(...) G4String ConvertToString(..., const char* unit) Należy ich używać w funkcji GetCurrentValue()

G4UICommand - Przykład void MyDetectorMessenger::SetNewValue (G4UIcommand* command, G4String newvalue) { if (command == fbercmd) ftarget->setberylliumdepth (fbercmd->getnewdoublevalue(newvalue)); } G4String MyDetectorMessenger::GetCurrentValue (G4UIcommand* command) { if (command == fbercmd) return fbercmd->converttostring (ftarget->getberylliumdepth(),"cm"); }

Błędy implementacji geometrii Obszar fizyczny nie jest całkowicie zawarty w obszarze w którym został umieszczony; Dwa obszary fizyczne umieszczone we wspólnym obszarze maja części wspólne; GEANT nie wykrywa tego typu błędów a jego działanie w ich obecności jest nieprzewidywalne; Istnieja narzędzia pomocne w wykrywaniu niepoprawnej implementacji geometrii: opcjonalny test wykonywamne podczas konstrukcji obszaru fizycznego; testy wykonywane za pomoca poleceń UI narzędzie graficzne (DAVID)

Test podczas teorzenia obszaru fizycznego Konstruktory obiektów klas G4VPVPlacement oraz G4VPVParameterised posiadaja opcjonalny argument sterujacy wykonaniem testu: G4PVPlacement( G4RotationMatrix* Rot, const G4ThreeVector& trans, G4LogicalVolume* CurrentLogical, const G4String& Name, G4LogicalVolume* MotherLogical, G4bool Many, G4int CopyNo, G4bool SurfChk=false ) Jeśli ostatni argument ma wartość logiczna true to podczas tworzenia obszaru fizycznego wykonywany jest test polegajacy na losowej generacji punktów na powierzchni obszaru i sprawdzeniu czy leża one wewnatrz obszaru matki i nie należa do innych obszarów fizycznych; Test zajmuje bardzo dużo czasu.

Testy z poziomu UI Polecenia UI służace do weryfikacji geometrii znajduja się w katalogu /geometry/test Test polega na zdefiniowaniu krzywej (prosta lub okrag) wzdłuż której GEANT transportuje wirtualna czastkę i informuje o błędzie gdy: czastka wchodzi do jednego obszaru przed opuszczeniem poprzedniego a oba obszary sa umieszczone we wspólnym obszarze; czastka poruszajaca się w jakimś obszarze opuszcza jej obszar matkę Możliwe jest zdefiniowanie całej sieci krzywych wzdłuż których przeprowadzany jest test.

Zewnętrzne narzędzie graficzne - DAVID DAVID jest narzędziem graficznym wykorzystujacym opis geometrii detektora zawarty w pliku zapisanym przez interfejs do wizualizacji w formacie DAWNFILE; Należy mieć zainstalowany program DAWN. Oba programy: DAVID i DAWN można ściagn ać z http:/geant4.kek.jp/~tanaka DAVID wizualizuje na czerwono przecinajace się obszary detektora (zapisuje również raport tekstowy)