1 Oprogramowanie w eksperymentach fizyki Wykład 3, Paweł Staszel
2 2 1. Obiekty (klasy) danych 2. Kontenery danych (data containers) 3. Moduły – obiekty operujące na danych 4. Kontenery modułów (module containers) 5. Konstruowanie programów (rekonstrukcja śladów) używając modułów → klasa typy singleton: MainModule 6. Struktura programu głównego: bratmain Plan
3 3 Kontenery danych (Data Containers) abc – kontenery danych: klasy do kompleksowego przechowywania danych (dla całego zdarzenia, tzn. wszystkich układów detektora) Dla każdego poziomu danych (raw, rdo, ltr, gtr) używany jest ten sam kontener (w sensie typu (klasy)). Zmienia się tylko typ przechowywanych obiektów (hity, ślady, itd.) BrDataTable, BrEventNode, BrEvent.
4 4 Kolekcje (Collections) Kolekcja to grupa odnoszących się do siebie obiektów – zadanie kolekcji to ułatwienie operowania na wielu elementach (obiektach). 1. W ROOT-cie kolekcje to polimorficzne kontenery grupujące wskaźniki to typu TObject, oznacza to, że: 2. → mogą przechowywać obiekty dziedziczące z TObject → zwracają wskaźniki do typu TObject, który następnie jest rzutowany (cast) na właściwy podtyp (klasy pochodnej). 2. Kolekcje są dynamiczne: jeśli to konieczne mogą zwiększać swój rozmiar 3. Kolekcje są potomkami (dziedziczą z) TObject, dlatego same mogą być składowymi elementami kolekcji. → daje to możliwość zagnieżdzania kolekcji danego typu w kolekcji innego (dowolnego) typy do dowolnego poziomu, → uzyskujemu struktury o wymaganym stopniu złożoności.
5 5 Kolekcje, c.d. 4. Kolekcje nie władają obiektami – przechowują jedynie wskaźniki do obiektów. Ten obiekt może być elementem wielu kolekcji. 5. Jeżeli usuwamy (delete) kolekcje, obiekty nie są usuwane. W takich przypadkach można “zmusić” kolekcje do usunięcia należące do niej obiekty aby np. uniknąć wycieku pamięci. 6. kontenery mogą przechowywać heterogeniczne kolekcje obiektów → za prawidłowe rzutowanie obiektów typu TObject na odpowiedni typ pochodny odpowiada użytkownik (czyli programista). 7. Kolekcje uporządkowane (Ordered Collections, Sequences) – pozwalają na przechowywanie obiektów (wskaźników) w porządku zgodnym z kolejnością dodania ich do kolekcji.
6 6 Schemat dziedziczenia kolekcji w ROOT-cie
7 7 TobjArray: kolekcja, która wspiera tradycyjną semantykę wektorową poprzez przeładowanie operator[]. Do poszczególnych elementów możemy odnosić się używając indeksu. void objArr->Add(TObject* obj); TObject* obj = objArr->At(i); //pobieranie obiektu z i-tej pozycji
8 8 Wykonywanie pętli (looping) po sekwencjach Określenie typu (klasy) przechowywanego obiektu: Metoda iteracji (looping) z wykorzystaniem klasy TIter:
9 9 Kontenery używanie w BRAT-ie BRAT data containers) abc – “kontenery” do przechowywania danych: BrDataTable, BrEventNode, BrEvent. BrEvent: BrEventHeader:
10 10 BrEventNode:
11 11 BrEventNode – główne funkcje
12 12 BrDataTable:
13 13 Uwaga: ekstra zadanie na dzisiejsze ćwiczenia 1. skompilować własną wersję banapp-a (--prefix=/home/student_oef/ ImieNazwisko/install) 2. w../banapp/corrections/efficiency/EfficiencyFinderModule.cxx odnaleźć funkcję Event(BrEventNode* inNode, BrEventNode* outNode) 4. na stronie dokumentacji klas BRAT-a ( http://www4.rcf.bnl.gov/~brahmlib ) umożliwiającą wylistowanie składników kontenera typy BrEventNode (inNode and outNode) 5. Wykorzystać tą funkcje w Event (...). 6. Wybrać dowolną tablicę (BrDataTable) i przeglądnąć jej składniki
14 14 Używanie kontenerów w programie: (BrBfsTrackingModule)
15 15 Używanie kontenerów w programie (c.d.): (BrBfsTrackingModule)
16 16 BRAT moduły brat/modules – klasy, które przetwarzają dane: dig -> rdo -> tory lokalne -> tory globalne -> dst -> zrekonstruowane zdarzenia fizyczne. abc – BrModule – klasa bazowa dla każdego modułu, BrModuleContainer – kasa która zapewnia odpowiednią kolejność wywoływania funkcji modułów. Setup obiektu tej klasy definiuje proces (job) będący fragmentem analizy/rekonstrukcji danych.
17 17 BrModule- stanowi schemat dla każdego pochodnego modułu
18 18 Schemat blokowy analizy dla pojedynczego modułu konstruktor + „set-ersy” tworzenie (book-owanie) histogramów globalnych wczytanie globalnych parametrów z bazy danych itd. dla danego runu: tworzenie (book-owanie) histogramów, wczytanie parametrów z db, itd. obróbka danych zdarzenie po zdarzeniu – tworzenie nowych struktur i zapisanie ich w tablicy wyjściowej (outNode) operacje konieczne po zakończeniu analizy run-u operacje końcowe
19 19 BrModuleContainer- schemat kolejnego wywołania modułów dane podstawowe: hity, dane kalibracyjne zrekonstruowane dane fizyczne, tory+pid=cząstki, globalna informacja o zdarzeniu: parametr zderzenia, pozycja vertex-u