root iii (i/(i/o+ttree+tntuple (i/o+ttree+tntuple) …stefanek/zfj/root_lecture4_kielce.pdf ·...

37
ROOT – An Object-Oriented Data Analysis Framework Grzegorz Stefanek 1 ROOT III (I/O+TTree+TNtuple) ROOT III ROOT III (I/ (I/ O+TTree+TNtuple O+TTree+TNtuple ) ) Grzegorz Stefanek Jan Kochanowski University

Upload: others

Post on 22-Aug-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 1

ROOT III(I/O+TTree+TNtuple)

ROOT IIIROOT III(I/(I/O+TTree+TNtupleO+TTree+TNtuple))

Grzegorz StefanekJan Kochanowski University

Page 2: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 2

ROOT – operacje I/OStruktura plików ROOT-

pliki ROOT mają

strukturę

katalogu w których podkatalogi i obiekty

zorganizowane w nieograniczoną

ilość

poziomów-

format plików ROOT jest niezależny maszynowo

-

w programach/skryptach plik jest obiektem klasy TFile-

struktura i zawartość

pliku może być

przegłądana

z użyciem

przeglądarki, tzn. obiektu klasy TBrowser-

struktura fizyczna i własności pliku mogą

być

przeglądane

z wykorzystaniem metody TFile::Map()- każdy plik ROOT posiada nagłówek opisujący podstawowe

parametry/własności pliku-

wszystkie klasy zapisane w pliku są

opisane w liście zwanej

StreamerInfo- bezpośredni (nie-sekwencyjny) dostęp do elementów pliku zapewniająklucze (TKeys) będace

obiektami klasy TKey

oraz metoda TFile::Get()

Page 3: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 3

ROOT – operacje I/OStruktura plików ROOTPrzykład:

{char name[10],title[10]; TObjArray

Hlist(0); //utworzenie tablicy histogramów

TH1F *h; //utworzenie wskaźnika do hist// utworzenie 15 histogramów i dodanie do tablicy obiektówfor (Int_t

i=0;i<15;i++) {

sprintf(name,”h%d”,i);sprintf(title,”histogram

nr:%d”,i);

h = new

TH1F(name,title,100,-4,4);Hlist.Add(h);h->FillRandom(”gaus”,1000); }

// otwarcie pliku i zapis tablicy histogramówTFile

f(”histogramy.root”,”recreate”);

Hlist.Write();f.Close();

}

Page 4: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 4

ROOT – operacje I/OStruktura plików ROOT

Otwieranie, przeglądanie plików:Tfile

f(”demo.root”);

Tbrowser

browser;

Sprawdzenie poprawnościotwarcia pliku:Tfile

f(”histogramy.root”);

if(f.IsZombie() {cout<<”Blad

otwarcia pliku”<<endl;

exit(-1);} else

{

……. }

Page 5: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 5

ROOT – operacje I/OStruktura plików ROOTf.Map()

↑ ↑ ↑ ↑ ↑data/czas adres liczba klasa wspólczynnik

pocz. bytow

kompresjirekordu

← nagłowek

← histogramy

← StreamerInfo

Page 6: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 6

ROOT – operacje I/OStruktura plików ROOTNagłówek pliku

zawiera szczegółowe informacje o pliku i pozwala

zidentyfikować

go jako zgodnego z formatem ROOT.

fVersion

pośrednio wskazuje na rozmiar pliku. nfree

i fNbytesFreeopisuje obszar pliku dostepny

do wykorzystania.

Page 7: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 7

ROOT – operacje I/OStruktura plików ROOTStreamerInfo

zawiera szczegółowe informacje o wszystkich klasach

zapisanych w pliku, dostępne przez polecenie Tfile::ShowStreamerInfo.W rzeczywistości polecenie to pokazuje jedynie pierwsza linie opisu.

Page 8: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 8

ROOT – operacje I/OStruktura plików ROOTROOT zawiera zlożony

mechanizm odzyskiwania zawartosci

plików

w przypadku problemów podczas sesji, TFile::Recover()

Metoda TFile::Map() odczytuje informacje sekwencyjnie. Dostęp sekwencjny

jest niewystarczający gdy przeprowadzamy analizę.

Potrzebny jest bezpośredni dostęp do obiektów w pliku z wykorzystaniemkluczy (TKeys) pełniących role indeksów obiektów.

Page 9: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 9

ROOT – operacje I/OStruktura plików ROOT

Metoda TFile::Get() znajduje obiekt o kluczu TKey

o żądanej nazwie, TH1F *h9 = (TH1F*)f.Get(”h9”);

Przykład. (FileKey.C)

{TFile

f(”histogramy.root”);

TIter

next(f.GetListOfKeys());TKey

*key;

while((key=(TKey*)next())) {printf(”key:%s

points

to an object

of class: %s at

%d\n”,

key->GetName();key->GetClassName(),key->GetSeekKey());

} }

Page 10: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 10

ROOT – operacje I/OStruktura plików ROOT

Przykład. (FileKey.C) –

output

Obok listy kluczy występują

też

inne listy:TFile::fFree, TFile::fListHead

Page 11: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 11

ROOT – operacje I/O

Struktura plików ROOT

Page 12: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 12

ROOT – operacje I/O

Struktura plików ROOTObiekt klasy TFile

zachowuje się

jak obiekt klasy TDirectory

(jest katalogiem). Jak w każdym katalogu można wyświetlać

jego zawartość

i tworzyć

podkatalogi. Podczas sesji ROOT cały czas jesteśmy

w katalogu, bierzacy

katalog jest przechowywany w gDirectory.

TFile

f(”histogramy.root”);f.ls(); // wyświetlenie zawartości plikugDirectory->pwd(); // bierzący

katalog

gDirectory->ls(”-m”); // obiekty w pamięcigDirectory->ls(”-d”); // obiekty na dyskugDirectory->GetList()->ls(); // lista obiektow

w pamięci

hist->SetDirectory(newDir); // histogram w nowym kataloguhist->Write(); // zapis obiektu na dyskf->Write(); // zapis wszystkich obiektów na dyskf->Close(); // zamknięcie pliku

Page 13: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 13

ROOT – TTree/TNtupleDla zapisywania dużej liczby obiektów tej samej klasy ROOT udostępnia specjalnie do tego celu przeznaczone klasy TTree

(drzewo) , TNtuple.

Klasa Ttree

została zoptymizowana

w celu ograniczenia zajmowanej przestrzeni dyskowej oraz zwiększenia szybkości dostępu do obiektów w pliku.

TTree

pozwala na przechowanie wszystkich typów (prostych i złożonych)danych: obiektów i tablic obiektów.

TNtuple

jest przeznaczone do przechowywania liczb rzeczywistych.

W Ttree

zapisujemy bufory danych zwane gałęziami i wypełniamy je danymi pełniącymi rolę

liści. Bufory są

zapisywane, gdy zostaną

całkowicie zapełnione.

Obiekty w TTree

nie są

zapisywane pojedyńczo

lecz grupowane i zapisywane grupowo, dlatego pliku tworzone są

mniejsze niż

dla

obiektów zapisywanych pojedyńczo.

Page 14: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 14

ROOT – TTree/TNtupleUżycie TTree

pozwala na znaczące skompresowanie nagłówków obiektów,

całkowity nagłówek jest redukowany z 60 do 4 bajtów.

TTree

optymizuje czas dostępu do pliku. Dane są

zapisywane w gałęziach pliku, a każda gałąź

może być

odczytana niezależnie od wszystkich

pozostałych.

Przykład:

Załóżmy że mamy 1mln przypadków zawierających dane Px, Py, a chcemy policzyć

Px2

+ Py2

dla każdego przypadku i wypełnić

histogram.

Dla danych zapisanych standardowo (bez TTree) należy wykonać:• wczytać

do pamięci każdy przypadek w całości

• pobrać

Px, Py

dla każdego przypadku• policzyć

Px2

+ Py2

• wypełnić

histogram

Musimy to wykonać

1mln razy co jest bardzo czasochłonne, a przecież

niepotrzebujemy całych przypadków.

Page 15: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 15

ROOT – TTree/TNtupleJeśli używamy TTree

z jedną

gałęzią

zawierającą

Px, a drugą

zawierająca

Py. Wówczas możemy przeczytać

wszystkie wartości Px, Py

czytając jedynie gałęzie Px, Py.

Przykład:

Proste drzewo (TTree) , staff.root/

staff.C

/ cernstaff.dat

Cechy skryptu:

• definiuje strukturę

staff_t

opisującą

cechy personelu CERNu• otwiera plik ASCII, tworzy plik ..root oraz drzewo TTree• tworzy trzy gałęzie drzewa /staff, Division, Nation/ wraz z adresami początkowymi liści w oparciu o strukturę

staff_t

• wczytuje dane z pliku ASCII i zapisuje do struktury staff

oraz wypełnia drzewo tree

• zamyka plik ASCII i zapisuje plik ROOT (z drzewem tree) na dysk • f->Write() zapisuje drzewo tree• drzewo jest zapisane w pliku staff.root

Page 16: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 16

ROOT – TTree/TNtupleDostęp do wejść

w ramach drzewa zapewnia metoda TTree::Show.

Przykładowy dostęp do wejścia nr 10:TFile

f(”staff.root”);

T->Show(10);

Page 17: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 17

ROOT – TTree/TNtupleDostęp do struktury drzewa (ilość

wejść, gałęzie, drzewa) zapewnia

metoda TTree::Print.

Przykładowy dostęp do struktury drzewa:T->Print();

Page 18: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 18

ROOT – TTree/TNtuplePrzeskanowanie zawartości wybranych liści w ramach drzewa zapewniametoda TTree::Scan

Przykładowe skanowanie kilku liści w ramach drzewaT->Scan(”Cost:Age:Children”);

Page 19: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 19

ROOT – TTree/TNtupleTTree

Viewer

(przeglądarka drzew).

TTree

Viewer

pozwala na szybkie i proste przeglądanie struktury i własności drzew w plikach.

Uruchamianie:

-

klikniecie myszą

na TTree

i wyselekcjonowanie StartViewer

-

TFile

f(”staff.root”);T->StartViewer()

-

gSystem->Load(”libTreeViewer.so”);new

TTreeViewer();

// start TTree

Viewer

bez pliku

Page 20: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 20

ROOT – TTree/TNtupleTTree

Viewer

(przeglądarka drzew).

->

Panelz listą

drzew

i ich gałęzi

<-

Panel z listązmiennych

i liści

Komendy użytkownika

Opcjerysowania

Nazwahistogramu

Page 21: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 21

ROOT – TTree/TNtupleTTree

Viewer

(przeglądarka drzew).

Zapis sesjido plikuhistorii

PrzekierowanieTTree::Scan

do pliku ASCII

Przełącznikmodu

rysowania

histogramu

Rysowaniewielowy-miarowychhistogramów

Page 22: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 22

ROOT – TTree/TNtupleTTree

Viewer

(przeglądarka drzew).

Pasek ustawianiapoczątku,końca zakresuwejść

↑Nazwa listywejściowej (TList)

↑Nazwa listywyjściowej (TList)

Page 23: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 23

ROOT – TTree/TNtupleTBranch

– gałęzie drzewa

• gałąź

jest elementem drzewa i jest klasy TBranch

• dla dodania gałęzi do drzewa należy uzyć

metody TTree::Branch()

• organizacja gałęzi pozwala na zoptymalizowanie danych dla projektowanego ich użycia

• jeśli dwie zmienne są

niezależne i nie będą

używane razem to powinnybyć

umieszczone w osobnych gałęziach

• jeśli zmienne są

związane (jak np. współrzędne punktów) to należy jeumieścić

w tej samej gałęzi

• każda z gałęzi może być

zapisywana do oddzielnego pliku

• gałęzie mogą

się

znacznie różnic w zależności od tego jakie informacje(listy zmiennych prostych, całe złożone obiekty, zawartość

katalogu,

tablice obiektów) są

w nich zapisane

Page 24: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 24

ROOT – TTree/TNtupleTBranch

– gałąź

z listą

zmiennych

Tworzenie listy:tree->Branch(”EV_Branch”,&event,”temp/F:ntrack/I:nseq:flag/i”);

gdzie EV_Branch

nazwa gałęzi&event

adress

od którego musi być

czytany pierwszy element listy

temp/F –

zmienna typu rzeczywistegontrack/I –

zmienna typu integer

flag/i –

zmienna typu integer

bez znaku

ogólnie trzeci parametr ma postać

<Zmienna>/<Typ>:<Zmienna>/<Typ> gdzie<Typ>= C –

łańcuch znakowy zakończony 0, B,S,I,L

integer

(8,16,32,64 bity)

ze znakiem, b,s,i,l

integer

(8,16,32,64 bity) bez znaku, F,D

liczba rzeczywista (32,64 bity)

Brak oznaczenia typu oznacza poprzedni (w parametrze) typ lub F.

Nazwy liści nie zapewniają

dostąpu

do zmiennych. Zmienne występujące w trzecim parametrze TTree::TBrach

muszą

być

umieszczane w strukturze

(staff.C).

Page 25: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 25

ROOT – TTree/TNtupleTBranch

– gałąź

z listą

zmiennych

Lista może zawierać

całą

tablicę

zmiennych:

Float_t

f[10];

tree->Branch(”fBranch”,f,”f[10]/F”);

w tym tablicę

o zmiennym rozmiarze

TFile

*f = new

TFile(”photon.root”,”recreate”);

Int_t

nPhot;

Float_t

E[500];

TTree* nEmcPhotons

= new

TTree(”nEmcPhotons”,”EMC

Photons”);

nEmcPhotons->Branch(”nPhot”,&nPhot,”nPhot/I”);nEmcPhotons->Branch(”E”,E,”E[nPhot]/F”);

Page 26: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 26

ROOT – TTree/TNtupleTBranch

– gałąź

zawierająca obiekt

Przykład:.L libEvent.so

// biblioteka z definicja klasy Event

TFile

*f = new

TFile(”ObjectFile.root”,”RECREATE”);

TTree

*tree

= new

TTree(”T”,”Object

Tree”);

Event

*event

= new

Event(); // wskaznik

do obiektu klasy Event

tree->Branch(”EventBranch”,”Event”,&event,32000,99);

gdzie EventBranch

nazwa gałęziEvent

klasa obiektu

&event

adres wskaźnika do umieszczanego obiektu 32000 –

standardowy rozmiar bufora (32000 bytes) w tej konfiguracji

99 –

poziom rozszczepienia gałęzi na podgałęzie

Rozszczepienie gałęzi tworzenie podgałęzi dla każdego elementu danych w ramach obiektu. Poziom rozszczepienia może wynosić

0 (1 gałąź),

1 (każdy element danych obiektu ma gałąź), 2,3 …, 99. Im więcej gałęzi ( rozszczepień) tym mniejszy rozmiar bufora.

Page 27: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 27

ROOT – TTree/TNtupleTBranch

– gałąź

zawierająca obiekt

Dwie klasy ROOT dedykowane obiektom : TObjArray, TClonesArray.TObjArray

słuzy

do przechowywania obiektów różnych klas,

TClonesArray

przechowuje obiekty tej samej klasy czyli każdy obiektma ten sam rozmiar.

Dla TObjArray

pamięć

musi być

przydzielana i zwalniana dla każdego Obiektu, TClonesArray

używa ciągle tego samego fragmentu pamięci.

Przykład:

Mamy 100.000 przypadków z 10000 śladów każdy, czyli razem 109

śladów. Używając TObjArray

dla śladów musimy przydzielać/zwalniaćpamięć

109

razy co wymaga kilku godzin. Używając TClonesArray

nie potrzebujemy dodatkowego czasu na manipulowanie pamięcią.

Page 28: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 28

ROOT – TTree/TNtupleTBranch

– gałęzie z katalogów, ze zbiorów elementów (kolekcji)

tree->Branch(„/aFolder”); // tworzy gałąź

z każdego// elementu w katalogu

// zwraca całkowitą

liczbę

gałęzi

tree->Branch(*aCollection, 8000, 99, *col);

gdzie aCollection

wskaźnik do zbioru8000 –

rozmiar bufora

99 –

stopien

rozszczepieniacol

nazwa rozpoczynająca każda gałąź

(col_ )

Metoda Branch

tworzy jedną

gałąź

z każdego elementu kolekcji.Poziom rozszczepienia może być

różny w zależności od tego czy każdy

z elementów kolekcji jest klasy TCollection

czy tez nie.

Page 29: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 29

ROOT – TTree/TNtupleTTree

– przykłady:

1) Prosty przykład zapisu i odczytu z pliku z drzewem –

tree1.CZawiera główna funkcję

tree1 oraz funkcje zapisu tree1w

i odczytu tree1r.Jeśli skrypt nie jest uruchamiany w wersji „batch”

to wyświetla

drzewo w przeglądarce i i TreeViewer.

Metody uruchomienia: >.x tree1.C // uruchamiana cala funkcja

// z wykorzystaniem interpretera

>.x tree1.C++ // uruchomienie po wykonaniu kompilacji// z wykorzystaniem kompilatora

>.L tree1.C // wczytanie skryptu do ROOTa> tree1w() // uruchomienie funkcji ze skryptu> tree1r() // uruchomienie funkcji ze skryptu

t1->SetBranchAddress() –

ustawienie adressu

do zmiennej w drzewiet1->GetEntry() –

pobranie jednego wejścia w drzewie

Page 30: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 30

ROOT – TTree/TNtupleTTree

– przykłady:

2) Bardziej złożony przykład (tree2.C) pokazujący jak:-

jak tworzyć

gałęzie ze struktur C++

-

jak utworzyć

gałąź

z tablicy o stałym rozmiarze-

jak utworzyć

gałąź

z tablicy o zmiennym rozmiarze

-

jak czytać

określone gałęzie-

jak wypełniać

histogramy z gałęzi

-

jak wykorzystać

TTree::Draw

dla prezentacji histogramu 3D

W przykładzie wykorzystywany jest pakiet Geant3, a struktura jest wypełniana przez funkcje Geant3 w każdym kroku w polu magnetyczny (funkcja helixStep). Dla wypełniania drzewa wystarczy metoda TTree::Fill

Tworzenie gałęzi z tablicy o stałym rozmiarze: > t2.Branch(”vect”,gstep.vect,”vect[7]/F”);

Tworzenie gałęzi z tablicy o zmiennym rozmiarze:> t2.Branch(”nmec”,&gstep.nmec,”nmec/I”);> t2.Branch(”lmec”,gstep.lmec,”lmec[nmec]/I”);

Page 31: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 31

ROOT – TTree/TNtupleTTree

– przykłady:

2) Analiza w przykładzie (tree2.C):

Odczyt pojedynczej gałęzi zamiast całej struktury.> TBranch

*b_destep

= t2->GetBranch(”destep”);

Ustawienie adresu do gałęzi destep.> b_destep->SetAddress(&destep);

Użycie metody TTree::GetEntry

dla pobrania zawartości gałęzi.> b_destep->GetEntry(i);

Wypełnienie histogramu wejściami z gałęzi destep.> hdestep->Fill(destep);

Narysowanie histogramu i dopasowanie funkcji Gaussa.> hdestep->Fit(”gaus”);

Dodatkowo rysowana jest trajektoria cząstki z wykorzystaniem trzech wartości zapisanych w wektorze> t2->Draw(”vect[0]:vect[1]:vect[2]”);

Page 32: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 32

ROOT – TTree/TNtupleTTree

3 opcje czytania (GetEntry) przypadków z drzewa:

Event

*event

=0;

T.SetBranchAddress(”event”,&event);

1) Standardowa (rekomendowana)for (Int_t

i=0;i<nentries;i++) {

T.GetEntry(i); }

2) Z wykorzystaniem AutoDeleteTBranch

*branch

= T.GetBranch(”event”);

branch->SetAddress(&event);branch->SetAutoDelete(kTRUE);for (Int_t

i=0;i<nentries;i++) {

T.GetEntry(i);

}

3) Z samodzielnym kasowaniem przypadkufor (Int_t

i=0;i<nentries;i++) {

delete

event;

event

= 0;

T.GetEntry(i); }

Page 33: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 33

ROOT – TTree/TNtuple

Bardziej złożone przykłady drzew w plikach:

-

hsimple.root

(ntuple)

-

tree_01I_shift_pion.root

(analiza efektu „flow”

dla hiperonów Λ)

-

t49run4047.root

(dane eksperymentu NA49 w formacie ROOT)

Page 34: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 34

ROOT – Tekst/LatexTekst może być

dodawany wprost na histogramach (w oknach).

Edytor posiada wbudowany element związany z edycja teksu(toolbar

)

Tekst może być:-

modyfikowany

-

przemieszczany- skalowany-

obracany

Page 35: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 35

ROOT – Tekst/LatexElementy ROOT wykorzystujące Latex:

- tytuły histogramówh->SetTitle(”p_{T} distribution”);

- tytuły osi histogramówh->GetXaxix("p_{T} (GeV/c) ");h->GetYaxis(Nevents);

-

legenda do wykresuTLegend

*legend1=new TLegend(0.25,0.58,0.4,0.8);

legend1->SetFillColor(10);legend1->SetTextFont(72);legend1->SetTextSize(0.045);legend1->SetBorderSize(0);legend1->AddEntry(gr1," #pi^{+}, #pi^{-} ","p");legend1->AddEntry(gr4," K^{0}_{s} ","p");legend1->AddEntry(gr2," p ","p");legend1->AddEntry(gr3," #Lambda ","p");

Page 36: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 36

ROOT – Tekst/LatexElementy ROOT wykorzystujące Latex:

- komentażeTLatex

gty;

gty->SetTextColor(1);gty->SetTextSize(0.04);gty->SetTextAlign(12);gty->SetTextAngle(90);gty.DrawLatex(0.95,0.006,"#Gamma = 2#sigma[GeV]");

-

formuły matematyczne

=

Page 37: ROOT III (I/(I/O+TTree+TNtuple (I/O+TTree+TNtuple) …stefanek/zfj/ROOT_LECTURE4_KIELCE.pdf · 2009. 12. 16. · Grzegorz Stefanek. ROOT – An Object-Oriented Data Analysis Framework

ROOT – An Object-Oriented Data Analysis FrameworkGrzegorz Stefanek 37

ROOT – Tekst/LatexZłożone przykłady wykorzystania Latex’a

w pakiecie ROOT:

latex.Clatex2.Clatex3.C

symbole greckie latex4.Csymbole matematyczne latex5.C