Terminologie
graf m. odb. rovinné nebo prostorové znázornění vztahů, postupů, statistických údajů, funčních závislostí.
Jak vidíme z definice, v češtině se výraz grafy používá snad pro všechno. ROOT umí vytvářet několik typů zobrazení, která se v českém jazyce skrývají pod označením graf.
- Histogramy
- Grafy jednorozměrných funkcí y=f(x)
- Grafy dvourozměrných funkcí f(x,y)
- Grafy trojrozměrných funkcí f(x,y,z)
- Prostorové 3D Grafy z=f(x,y)
- Grafy určované jednotlivými body
1D funkce
Výroba grafů funkcí je triviální. Stačí vytvořit objekt typu TFX, který reprezentuje X rozměrnou funkci definovanou v předem stanoveném intervalu, a potom tento objekt nakreslit.
Zadáme dva příkazy:
f1=new TF1("f1","sin(x)/x",-10,10) f1->Draw()
a je to.
2D funkce
Shodné s 1D funkcemi, do hry pouze vstoupil další rozměr. Zkusíme nějakou klasiku, kterou si pamatujeme z gymnázia:
f2=new TF2("f2","sin(x)+cos(y)",-2,5,-3,3) f2.Draw()
3D funkce
sice se v praxi moc nepoužívají, ale ROOT podporuje i je.
f3=new TF3("f3","sin(x*x)+cos(y*y)+z",-2,2,-2,2,-2,2) f3.Draw()
Prostorové grafy
Přehlídku grafů funkcí zakončíme klasikou běžně nazývanou prostorový graf
. Jde o známé Sombrero
generované 2D funkcí, zobrazované v 3D.
f2=new TF2("f2","sin(x*x+y*y)",-2.2,2.2,-2.2,2.2) f2->Draw("surf1")
Funkce s parametry
Definici funkce můžeme rozšířit o parametry. Funkce s parametry se používají především pro fitování. Parametry lze volitelně uzamknout, a zabránit tak jejich změně během fitování.
Obecný polynom třetího řádu nadefinujeme takto:
f1=new TF1("f1","[3]*x^3+[2]*x^2+[1]*x+[0]",-5,5)
nastavíme hodnoty jednotlivých parametrů
f1->SetParameter(3,3) f1->SetParameter(2,1) f1->SetParameter(1,2) f1->SetParameter(0,0) f1->Draw()
Parametrům můžeme dát i jména:
f1->SetParName(0,"c")
ROOT nepočítá hodnotu funkce pro každý zobrazovaný pixel, ale pouze v předem definovaném počtu bodů, které pak spojí přímkou, případně křivkou. Standardně se používá 100 bodů, což je pro 1D funkce plně dostačující.
Podívejte se na rozdíl mezi spojováním bodů křivkou a přímkou:
f1->SetNpx(4) f1->Draw() f1->DrawCopy("CSAME")
Tímto jsme však zdaleka nevyčerpali všechny možnosti, které ROOT pro práci s funkcemi nabízí. Umí počítat derivace, integrály, vzdálenost k nejbližšímu bodu funkce, hledání minima a maxima, vracet náhodné číslo s distribucí podobnou funkci, moment funkce, … Pokud by nám nestačily ROOTovy builtin funkce, lze celou funkci naprogramovat v jazyku C/CINT. Detailní popis třídy TF1 najdete zde.
Interaktivita
Na nakreslené grafy lze klikat pravým tlačítkem myšky, což zobrazí popup menu k objektu, na nějž klikneme. Nejobtížnější je zapamatovat si, kam je potřeba kliknout pro vykonání příslušné operace. Pokud klikneme mimo graf, zobrazí se volby objektu TCanvas. Nejzajímavější volby jsou: přepínání měřítka os mezi logaritmickým a lineárním, zapínání křížového cursoru pro přesnější odečítání hodnot a zapínání pomocné sítě. Po kliknutí na funkci dostaneme TF1 menu pro: změnu rozsahu os, zobrazení derivace nebo integrálu funkce, změnu typu čáry a barvy grafu, změnu počtu bodů, ve kterých je počítána funkce. U 3D zobrazení nebo u 2D funkcí oceníte položku DrawPanel, která zobrazí menu pro přepínání různých druhů stínování. Po kliknutí na osu TAxis lze měnit popisku, typ písma pro zobrazení hodnot, měnit hustotu a velikost rysek pro odečet hodnot a v neposlední řadě použít funkci Unzoom. Zoomovat v grafech i histogramech lze označením námi preferovaného rozsahu na ose za současného držení levého tlačítka.
Grafy určované jednotlivými body
budou asi to, co budeme v praxi používat nejčastěji. V ROOTu jsou tyto grafy řešené pomocí třídy TGraph. TGraf je v terminologii ROOTa definován jako grafický objekt sestavený ze dvou polí, přičemž každé obsahuje minimálně n bodů. ROOT podporuje kromě těchto 1D grafů i 2D grafy pomocí třídy TGraph2D. Stejně jako v případě funkcí lze jednotlivé body spojovat pomocí přímek nebo křivek.
Nejčastěji používanou funkcí, kromě vlastního kreslení, je prokládání jednotlivých bodů funkcí, které se provádí stejně jako u histogramů. V následujícím příkladě byl graf proložen polynomem druhého řádu pomocí volby FitPanel, která se zobrazí po kliknutí pravým tlačítkem na bod. Interaktivita nakresleného grafu je podobná, jako je tomu u grafů zadávaných funkcí. Kromě fitování je tu však i možnost přidávat, ubírat či měnit jednotlivé body.
Program pro nakreslení grafu je zde.
Často potřebujeme pro srovnání nakreslit více funkcí do jednoho obrázku. Tuto operaci provedeme zavoláním methody Draw(„SAME“). V předchozím příkladu byla ještě k vidění methoda DrawCopy. Ta se použije v případě, že potřebujeme do jednoho obrázku vložit již vloženou funkci.
Kód je zde.
Další díl bude věnován zobrazovacímu systému ROOTa: jak zlepšit vizuální kvalitu výstupu a co všechno se dá v grafickém subsystému uživatelsky nastavit.