Warsztaty GEANT4 oparte na materiałach treningowych (SLAC)

Warsztaty 7:  Wyniki symulacji 2


    Proszę:



Na dzisiejszych zajęciach zajmiemy się implementacją własnej klasy G4SensitiveDetector oraz G4Hit. Zamierzamy zapisać na dysk informacje o  energii i pozycji (zmienne składowe klasy G4Hit) fotonów wchodzących w obszar logiczny przypisany do SensitiveDetector'a

Ć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ć.


 Rozwiązanie

Po uruchomieniu programu SensitiveDetector będzie dopisywał energie i pozycje fotonów padających na sferę otaczającą tarczę berylową do pojemnika typu wektor (HitCollection). Pojemnik ten będzie jednak zerowany przed rozpoczęciem procesowania kolejnego przypadku. Aby zachować tę informację powtórzymy
wszystkie operacje z poprzednich warsztatów:

Ć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

  Rozwiązanie

Ć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.


 Rozwiązanie


Ć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 korzystać z formatu ROOT wewnątrz GEANT'a należy:
      1. utworzyć plik wynikowy
      2. utworzyć ntuple (metoda CreateNtuple)
      3. w metodzie MyRun::RecordEvent wypełnić ntuple (metoda FillNtupleDColumn)
      4. w metodzie MyRunAction::EndOfRunAction zapisać ntuple do pliku (metoda Write) i zapisać plik na dysk (metoda CloseFile)

Proszę sprawdzić czy program się kompiluje i poprawnie wykonuje


 Rozwiązanie




Po skompilowaniu i uruchomieniu programu, powinien pojawić sie plik  tree.root
  Zawarte w nim informacje o fotonach można obejrzeć  i/lub zapisać w formacie graficznym np. pdf za pomocą :

1. Graficznego interfejsu użytkownika
      Uruchamiamy program ROOT

root
root [0]  TBrowser t;                   // otwiera przeglądarkę
     w przeglądarce   "klikamy"  na plik tree.root
                                  a  następnie "klikamy" na obiekt ntuple
                                  a następnie "klikamy" na kolejne zmienne

2.  Bardziej zaawansowanej przeglądarki (umożliwiającej dokonywanie selekcji przypadków i tworzenie histogramów 2d i 3d
       Uruchamiamy program ROOT

root
root [0]  TBrowser t;                   // otwiera przeglądarkę
        w przeglądarce   "klikamy"  na plik tree.root
                                    a  następnie "klikamy" prawą myszą na obiekt ntuple wybierając z menu opcje StarViewer 

3.  Makra poleceń root'a
     Oferuję pomoc w pisaniu makr potrzebnych do analizy wyników symulacji.