Hlavní navigace

ROOT Framework - Tvorba grafů

16. 7. 2004
Doba čtení: 4 minuty

Sdílet

Podíváme se na to, jak se v ROOTu kreslí grafy.

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.

  1. Histogramy
  2. Grafy jednorozměrných funkcí y=f(x)
  3. Grafy dvourozměrných funkcí f(x,y)
  4. Grafy trojrozměrných funkcí f(x,y,z)
  5. Prostorové 3D Grafy z=f(x,y)
  6. 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.

CS24_early

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.

Byl pro vás článek přínosný?

Autor článku