Ćwiczenie 1
Należy
wyprowadzić własną klasę MyPhotonHit
z klasy bazowej G4VHit
której zmiennymi składowymi będą informacje które chcemy zapisać
czyli energia i położenia fotonu wchodzącego w
obszar SensitiveDetectora.
Dodatkowo należy zaimplementować metody umożliwiające bezpieczny
odczyt oraz zapis tych wielkości z klas zewnętrznych .
Implementacja tej klasy została omówiona na wykładzie. Proszę
skopiować gotową implementację do swojego obszaru
roboczego.
Wskazówki:
Proszę skopiować pliki MyPhotonHit.hh
oraz MyPhotonHit.cc do odpowiednich
katalogów.
Proszę przeanalizować każdą linijkę tych plików. W razie
niejasności proszę zadawać pytania.
Proszę skompilować program.
Ćwiczenie 2
Drugim
krokiem
jest
wyprowadzenie własnej klasy MyPhotonSD z klasy
bazowej G4VSensitiveDetector
której zadaniem jest zapisywanie wymaganych
informacji (hitów)
w odpowiednich kolekcjach hitów. Implementacja tej klasy została omówiona na wykładzie.
Proszę skopiować gotową implementację do swojego obszaru
roboczego.
Wskazówki:
Proszę skopiować pliki MyPhotonSD.hh
oraz MyPhotonSD.cc do odpowiednich
katalogów.
Proszę przeanalizować każdą linijkę tych plików. W razie
niejasności proszę zadawać pytania. Opis klasy bazowej G4VSensitiveDetector
Proszę skompilować program.
Ćwiczenie 3
Aby
detektor zaczął rejestrować fotony(hity) pozostaje jedynie
utworzyć SensitiveDetector
oraz przypisać do niego jakiś obszar logiczny.
Wskazówki:
- Możemy to zrobić np. w funkcji SetupScoring() klasy MyDetectorConstruction.
- Parametrem funkcji SetupScoring
jest wskaźnik do obszaru logicznego . Przypiszmy ten obszar
do SensitiveDetectora.
- Uwaga jeden obszar logiczny nie może być przypisany do dwóch SensitiveDetector'ów
(aktywnym będzie ostatni SensitiveDetector
)
Proszę skompilować program i go uruchomić.
Ćwiczenie 4
Obiekt klasy G4Event
zawiera informacje o HitsCollection
oraz o HitsMap.
Wskaźniki do tych obiektów przechowywane są w obiekcie klasy G4HCofThisEvent.
W aplikacji My
spodziewamy się istnienia jednej HitsMap związej z licznikiem fotonów oraz jednej HitsCollection związanej
z kolekcją fotonów.
Proszę uzyskąc unikalny numer identyfikacyjny wektora HitsCollection
stowarzyszonego z kolekcją fotonów.
Wskazówki:
- Unikalny numerem identyfikacyjny danej kolekcji lub mapy
przydzielany jest przez managera G4SDManager
można go uzyskać za pomocą funkcji GetCollectionID("nazwaSD/nazwaC"), gdzie nazwaSD to nazwa SensitiveDetectora a nazwaC to nazwa HitsCollection.
- Numer identyfikacyjny
potrzebny będzie w metodzie RecordEvent ale nie warto go uzyskiwać dla
każdego przypadku wewnątrz tej metody. Proszę uzyskać ten
numer w konstruktorze klasy MyRun i uczynić go składnikiem klasy tak aby był dostępny dla
wszystkich metod składowych klasy MyRun.
-Proszę skierować na konsolę uzyskany numer
identyfikacyjny HitsCollection
stowarzyszonej z kolekcją fotonów.
- Proszę sprawdzić czy program się kompiluje i poprawnie
wykonuje
Ćwiczenie 5
Znając numer identyfikacyjny kolekcji fotonów proszę dla każdego przypadku wysłać na konsolę informacje o zawartości tej kolekcji (zmiany w funkcji RecordEvent).
Wskazówki:
- Wskaźnik do obiektu klasy G4HCofThisEvent
można uzyskać za pomocą metody GetHCofThisEvent() klasy G4Event
.
- Obiekt klasy G4HCofThisEvent
zawiera wskaźniki do wszystkich HitsCollection oraz HitsMap.
- Konkretny wskaźnik można uzyskać za pomocą metody GetHC(id) , gdzie id jest
unikalnym numerem identyfikacyjnym danej kolekcji lub
mapy.
- Funkcja GetHC
zwraca wskaźnik do klasy bazowej G4VHitsCollection natomiast same kolekcje są
obiektami klasy pochodnej (szablonowej) G4THitsCollection
dlatego należy dokonać jawnego rzutowania wskaźnika klasy bazowej
na wskaźnik G4THitsCollection<MyPhotonHit>.
- Metoda entries() zwraca
ilość
fotonów (hitów) w kolekcji fotonów.
- Proszę sprawdzić czy program się kompiluje i poprawnie
wykonuje.
Ćwiczenie 6
Oprócz
wysyłania wyników na konsole proszę zapisać je w postaci
4-wymiarowego wektora (e,x,y,z) do pliku w formacie
ROOT'a (tzw. ntuple).
Wskazówki:
- Aby otworzyć plik do zapisu, utworzyć ntuple, wypełnić
ntuple, zapisać ntuple do pliku i zamknąć plik będziemy
korzystać z dwóch klas ROOT'a
TNtuple
- klasa ntupli
(n-wymiarowych wektorów o wartościach typu float)
TFile
- klasa plików w
formacie ROOT'a
- Proszę sprawdzić czy program się kompiluje i poprawnie
wykonuje