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

Podobne dokumenty
Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

GEANT4. Leszek Adamczyk. Geometria detektora

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4

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

Środowisko programistyczne GEANT4

PARADYGMATY PROGRAMOWANIA Wykład 4

Modelowanie Procesów Jądrowych

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

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

Szablony klas, zastosowanie szablonów w programach

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

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

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

Wstęp do Programowania 2

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

TEMAT : KLASY DZIEDZICZENIE

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

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

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

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

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

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.

PARADYGMATY PROGRAMOWANIA Wykład 2

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Wprowadzenie do rysowania w 3D. Praca w środowisku 3D

Podstawy programowania obiektowego

Aplikacje w środowisku Java

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

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

Zaawansowane programowanie w C++ (PCP)

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

Konstruktor kopiujacy

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

EGZAMIN PROGRAMOWANIE II (10 czerwca 2010) pytania i odpowiedzi

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

Programowanie obiektowe Wykład 6. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/14

Plik klasy. h deklaracje klas

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Wykład 5: Klasy cz. 3

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

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

Programowanie obiektowe. Dr hab. Inż. Marta Gładysiewicz-Kudrawiec Pokój 229 A1 Operatory new delete pliki-odczyt

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Kurs WWW. Paweł Rajba.

Programowanie obiektowe

Programowanie (C++) NI 5

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Programowanie obiektowe

Programowanie obiektowe i zdarzeniowe

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

Klasy cd. Struktury Interfejsy Wyjątki

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

Współbieżność w środowisku Java

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

Programowanie obiektowe w C++ Wykład 12

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

JAVA W SUPER EXPRESOWEJ PIGUŁCE

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Multimedia JAVA. Historia

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Informacje ogólne. Karol Trybulec p-programowanie.pl 1. 2 // cialo klasy. class osoba { string imie; string nazwisko; int wiek; int wzrost;

Przeciążenie operatorów

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

Następnie zdefiniujemy utworzony szkic jako blok, wybieramy zatem jak poniżej

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

Zadania z podstaw programowania obiektowego

Wprowadzenie do projektu QualitySpy

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

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Programowanie obiektowe

Szablony funkcji i szablony klas

Abstrakcyjny typ danych

Metody dostępu do danych

Rozdział 4 KLASY, OBIEKTY, METODY

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

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

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

Dynamiczne i wydajne tworzenie interfejsu. Piotr Michałkiewicz

Klasa jest nowym typem danych zdefiniowanym przez użytkownika. Najprostsza klasa jest po prostu strukturą, np

Symulacja działania sterownika dla robota dwuosiowego typu SCARA w środowisku Matlab/Simulink.

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Operatory na rzecz typu TString

Zaawansowane programowanie w C++ (PCP)

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

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Języki i techniki programowania Ćwiczenia 2

Wykład 5 Okna MDI i SDI, dziedziczenie

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy KONSTRUKTORY

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Aplikacje w środowisku Java

Środowisko programistyczne GEANT4

Dziedziczenie. Ogólna postać dziedziczenia klas:

Transkrypt:

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

Polecenia interfejsu użytkownika UI kurier (G4UIMessenger) Obiekt Polecenia (target class) G4UIManager polecenie (G4UICommand) parametr (G4UIparameter) Aby zdefiniować własne polecenie: Obiekty klas zielonych należy intstancjonować Klasę niebieską należy zaimplementować

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

Definicja (instancja) polecenia Implementacja w konstruktorze klasy pochodnej. Przykład: Załóżmy, że chcemy z poziomu UI zmieniać grubość warstwy krzemu detektora krzemowego. Wyprowadzamy klasę BeamTestDetectorMessenger z klasy bazowej G4UIMessenger BeamTestDetectorMessenger::BeamTestDetectorMessenger (BeamTestDetectorConstruction* detector) :ftarget(detector) { detdir = new G4UIdirectory("/detector/"); detdir->setguidance("beamtest detector setup commands."); fsilcmd = new G4UIcmdWithADoubleAndUnit("/detector/silicon", this); fsilcmd->setguidance("geometry of the silicon detector."); fsilcmd->setparametername("width",true); fsilcmd->setrange("width>0. && width< 1."); fsilcmd->setdefaultvalue(0.1); fsilcmd->setdefaultunit("mm"); }

G4UICommand G4UICommand jest klasą reprezentującą 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 nią stowarzyszonych: G4UIcmdWithoutParameter G4UIcmdWithAString G4UIcmdWithABool G4UIcmdWithAnInteger G4UIcmdWithADouble,...AndUnit G4UIcmdWith3Vector,...AndUnit G4UIdirectory Polecenia z innymi typami parametrów należy samemu wyprowadzić z klasy bazowej G4UICommand

Nazwa parametru Wszystkie klasy typu G4UIcmdWithAxxxx posiadające parametr mają zaimplementowaną funkcję: SetParameterName( const char* name, G4bool par2, G4bool par3=false) Nazwa parametru używana jest w help-ie oraz w definicji zakresu parametrów Jeśli par2=true, polecenie można wydać nie określając wartości parametru, użyta zostanie wartość domyślna Jeśli par3=true, aktualna wartość parametru jest przyjęta jako domyślna, w przeciwnym przypadku wartość domyślną należy określić korzystając z SetDefaultValue

Zakres, jednostka, parametru void SetRange (const char* range) dostępna dla poleceń z parametrami numerycznymi warunki zapisujemy za pomocą składni c++ cmd->setrange( x>0. && x>y && x+y<z ) nazwy parametrów muszą być wcześniej zdefiniowane void SetDefaultUnit (const char* unit) funkcja dostępna dla poleceń z określoną jednostką po zdefiniowaniu jednostki polecenie nie zostanie zaakceptowane z jednostką o innym wymiarze. Ewentualnie można zdefiniować wymiar bez określania domyślnej jednostki (SetUnitCategory) Inne funkcje: -SetCandidates (const char* Lista) dostępna dla poleceń których parametrem jest string. -AvailableForStates() określa w jakim momencie symulacji można wydać dane polecenie

Konwersja string-wartość Klasy wyprowadzone z klasy G4UICommand z numerycznymi lub logicznymi parametrami mają 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()

SetNewValue i GetCurrentValue void BeamTestDetectorMessenger::SetNewValue (G4UIcommand* command, G4String newvalue) { if (command == fsilcmd) ftarget->setmonitorwidth(fsilcmd->getnewdoublevalue(newvalue)); } G4String BeamTestDetectorMessenger::GetCurrentValue (G4UIcommand* command) { if (command == fsilcmd) return fsilcmd->converttostring(ftarget->getmonitorwidth(),"mm"); }

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 mają części wspólne. GEANT nie wykrywa tego typu błędów a jego działanie w ich obecności jest nieprzewidywalne. Istnieją narzędzia pomocne w wykrywaniu niepoprawnej implementacji geometrii: - opcjonalny test podczas konstrukcji obszaru fizycznego - testy wykonywane za pomocą poleceń UI - narzędzie graficzne (DAVID)

Test podczas konstrukcji obszaru Konstruktory obiektów klas G4VPVPlacement oraz G4VPVParameterised posiadają opcjonalny argument sterujący wykonaniem testu: G4PVPlacement( G4RotationMatrix* prot, const G4ThreeVector& tlate, G4LogicalVolume* pcurrentlogical, const G4String& pname, G4LogicalVolume* pmotherlogical, G4bool pmany, G4int pcopyno, G4bool psurfchk=false ) Jeśli argument ma wartość logiczną true to podczas tworzenia obszaru fizycznego wykonywany jest test polegający na losowej generacji punktów na powierzchni obszaru i sprawdzeniu czy leżą one wewnątrz obszaru matki i nie należą do innych obszarów fizycznych. Test zajmuje bardzo dużo czasu CPU.

Polecenia UI Polecenia UI służące do weryfikacji geometrii znajdują się w katalogu /geometry/test Test polega na zdefiniowaniu krzywej (prosta lub okrąg) wzdłuż której GEANT transportuje wirtualną cząstkę i informuje o błędzie gdy: - cząstka wchodzi do jednego obszaru przed opuszczeniem poprzedniego a oba obszary są umieszczone we wspólnym obszarze. - cząstka poruszająca się w jakimś obszarze opuszcza jej obszar matkę Możliwe jest zdefiniowanie całej sieci krzywych wzdłuż których przeprowadzany jest test.

Narzędzia graficzne - DAVID DAVID jest narzędziem graficznym wykorzystującym opis geometrii detektora zawarty w pliku zapisanym przez interfejs do wizualizacji - DAWNFILE. Należy mieć zainstalowany program DAWN. Oba programy: DAVID i DAWN można ściągnąć z http:/geant4.kek.jp/~tanaka DAVID wizualizuje na czerwono przecinające się obszary detektora (zapisuje również plik tekstowy)

Testy materiałowe Polecenia UI służące do pomiaru grubości materiału w jednostkach: długości geometrycznej, długości radiacyjnej i średniej drogi swobodnej znajdują się w katalogu: /control/matscan Test polega na zdefiniowaniu prostej wzdłuż której GEANT transportuje wirtualną cząstkę i informuje o grubości materiału jaką cząstka musi przebyć aby opuścić symulowany obszar. Możliwe jest zdefiniowanie całej sieci prostych wzdłuż których przeprowadzany jest test.

Obszar fizyczny - 2 Omówiliśmy klasy G4PVPlacement, G4PVParameterised oraz G4PVReplica Dodatkowe sposoby rozmieszczania obszarów logicznych: G4PVDivision, G4VNestedParameterisation

G4PVDivision G4PVDivision=G4PVReplica+G4PVParameterised Umożliwia podział obszaru matki na szereg identycznych kopii wzdłuż jakiejś z osi. G4PVParameterisation jest automatycznie generowana na podstawie parametrów konstruktora klasy G4PVDivition. Dopuszcza istnienie przerw między skrajnymi córkami a granicami obszaru matki. ndivisions

G4PVDivision G4PVDivision( const G4String& pname, G4LogicalVolume* pcurrentlogical, G4LogicalVolume* pmotherlogical, const EAxis paxis, const G4int ndivisions, const G4double offset ) Rozmiary obszaru córki obliczane automatycznie offset ndivisions

G4PVDivision G4PVDivision( const G4String& pname, G4LogicalVolume* pcurrentlogical, G4LogicalVolume* pmotherlogical, const EAxis paxis, const G4double width, const G4double offset ) Ilość obszarów córek obliczana automatycznie offset width

G4PVDivision G4PVDivision( const G4String& pname, G4LogicalVolume* pcurrentlogical, G4LogicalVolume* pmotherlogical, const EAxis paxis, const G4int ndivisions, const G4double width, const G4double offset ) Określa zarówno ilość jak i rozmiar obszarów córek ndivisions offset width

G4PVDivision Obecnie można podzielić następujące kształty: - G4Box paxis = kxaxis (Y,Z) - G4Tube paxiz = krho (Phi,Z) - G4Cons paxiz = krho (Phi,Z) - G4Trd paxis = kxaxis (Y,Z) - G4Para paxis = kxaxis (Y,Z) - G4Polycone paxiz = krho (Phi,Z) - G4Polyhedra paxiz = krho (Phi,Z)

G4VNestedParameterisation NestedParameterisation umożliwia uzależnienie materiału córki nie tylko od swojego numeru kopii ale również od numeru kopii przodka bądź przodków w przypadku gdy obszary przodków są obszarami powielanymi: (G4PVParameterised, G4PVReplica,G4PVDivision). Wymaga implementacji trzech dodatkowych funkcji: - ComputeMaterials() - zwraca wskaźnik do materiału w zależności od numeru kopii własnej oraz przodków - GetNumberOfMaterials() - zwraca całkowitą liczbę materiałów zwracanych przez ComputeMaterials() - GetMaterial(i) zwraca wskaźnik do i-tego materiału