Introdução a ROOT Miguel Reis Orcinha LIP / IST IST - Lisboa 14 Julho 2016
O que é o ROOT ROOT é uma plataforma de processamento de dados nascida no CERN. ROOT é um pacote de bibliotecas de C++ que permite: Resolver problemas de matemática geral Fazer análise estatística Armazenar e organizar dados de forma muito eficiente Desenhar figuras de diferentes naturezas Desenvolver aplicações gráficas Desenhar geometrias complexas Simular fenómenos físicos Adicionalmente ROOT contém um interpretador de código que permite resolver pequenos problemas do dia-a-dia de forma muito eficaz. 2
O que é OOP Object Oriented Programming (OOP) é um paradigma de programação baseado no conceito de objectos. Estes objectos armazenam e organizam informação, estabelecendo relações entre si. O foco destes programas está nas hierarquias dos objectos e nas interacções que estes têm entre si. Conceitos como herança e polimorfismo são alicerces destas linguagens de programação. 3
Organização do ROOT 4
Utilização do ROOT como biblioteca O ROOT pode ser usado como uma biblioteca de C++. A ferramenta root-config facilita a vida. 5
Utilização do ROOT como interpretador Código C++ pode ser corrido directamente no interpretador do ROOT, permitindo o seu uso no dia-a-dia como uma muito poderosa calculadora. 6
Utilização do ROOT como interpretador Para além de interpretar e executar linhas de código on-the-fly, ROOT permite ainda correr ficheiros com funções que ele interpreta e executa a pedido do utilizador. 7
Utilização do ROOT como interpretador Carregamento das funções para memória Execução das funções Funções que chamam funções 8
Estrutura de uma macro de ROOT Dentro ainda da ideia de pragmatismo, é possível ainda desenvolver pequenas funções (macros) que correm imeditamente com o comando: root <macro_name> Este método é em tudo semelhante ao anterior mas o ficheiro que demos ao ROOT é imediatamente carregado para a memória e a função cujo nome é idêntico ao do ficheiro é imediatamente corrida. 9
Estrutura de uma macro de ROOT 10
O histograma TH1D Um dos alicerces da análise estatística é o histograma. Um histograma é um tipo de gráfico que organiza os dados pela frequência com que estes ocorrem. No ROOT, o histograma unidimensional está desenvolvido na classe TH1. O TH1D corresponde a um histograma em que a altura de cada bin tem uma precisão double. Em termos de funções, são todos iguais! 11
Criação e preenchimento de um TH1D 12
Criação e preenchimento de um TH1D Bin modificado! 13
Ambiente gráfico e o TCanvas Torna-se mais fácil falar de gráficos quando há um ambiente gráfico onde desenhar os histogramas que acabámos de criar. Para tal foi implementado uma classe de janela gráfica TCanvas. 14
Desenho de um histograma Trabalhar com o Tcanvas passa sempre pelos seguintes passos: Criação do canvas Plot das figuras no canvas Salvar a imagem presente no histograma (opcional) 10 9 8 MyHisto myhisto Entries 102 Mean 4.763 Std Dev 2.099 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10 15
Manipulação de histogramas O histogram pode ser criado com muitas opções. 7 MyHisto2 myhisto2 Entries 101 Mean 9 Std Dev 5.477 6 5 4 3 2 1 0 2 4 6 8 10 12 14 16 18 220 200 180 160 140 120 100 80 60 40 20 hgaus hresult Entries 1200 Mean 0.6703 Std Dev 1.794 0 5 4 3 2 1 0 1 2 3 4 5 16
Utilidade da manipulação de histogramas 3 10 ] 1.7 [m -2 sr -1 sec -1 GV 14 12 10 8 6 (a) AMS-02 Flux R ~ 2.7 4 2 0 1 10 3 10 Rigidity [GV] 2 10 Protons 3 10 http://dx.doi.org/10.1103/physrevlett.114.171103 17
Cosmética do desenho MyHisto Y 10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 10 X 18
Cosmética do desenho Line Color kgreen +4 +3-1 +2-2 -5 kyellow +1-3 -6 0-1 -2-3 -4-5 -6-7 -8-9 kspring 0 +1 +2 +3 +4-1 +10 0 kteal -8 0 +10 +9 +8 +7 +6 +5 +4 +3 +2 +1 +7 +8 +9-4 -3-2 -1-5 -4-3 -2-7 -6-5 kcyan +4 +5 +6 ROOT Color Wheel -9-8 -10 +1 +2 +3-9 -8-7 -6-10 -9-8 -7-6 -5-4 -3-2 -1 0 +1 +2 +3 +4-4 -7-9 -10 +1 korange 0-1 -2-3 -4-5 -6-7 -8-9 kgray +2 +3 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +10 +9 +8 +7 +6 +5 +4 +3 +2 +1 kwhite kblack -9-8 -7-6 -5-4 -3-2 -1 0 kazure +4-1 -5-8 -10-6 -7-8 -9 +3 +2 +1 +3-2 -6-9 +2-3 -2-3 -4-5 +6 +5 +4-10 -7 +1-8 -9-4 +9 +8 +7 kred 0-5 -6-7 0-1 kpink +10-1 -2-3 -9-8 -7-6 -5-4 -3-2 -1 0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10-10 -9-8 -7-6 -5-4 -3-2 -1 0 +1 +2 +3 +4 kblue -4 +4 +3 +2 +1 0 kviolet kmagenta Line Width Line Style 19
A função unidimensional TF1 A TF1 é a classe que define uma função unidimensional que só é função de uma variável X. sin(x) sin(x) 1 0.5 0 0.5 1 0 1 2 3 4 5 6 7 8 9 10 X 20
Manipulação da TF1 A TF1 pode ser definida com parâmetros. [0]*sin([1]*x) sin(x) 1 0.5 0 0.5 1 0 1 2 3 4 5 6 7 8 9 10 X 21
Acesso a dados à C++ Aqui se vê o exemplo de como desenhar scatter plots. Data 9 8 7 6 5 4 3 2 1 2 4 6 8 10 X 22
Acesso a dados usando TGraph Novamente, numa filosofia de simplicidade, se se quiser fazer rapidamente um desenho de um conjunto de dados, pode usar um dos vários constructores do TGraph para o fazer. Data 9 8 7 6 5 4 3 2 1 2 4 6 8 10 X 23
Análise de dados MyHisto Number of hits 8 7 6 5 4 3 2 1 µ = 4.686275 σ = 2.388618 0 0 1 2 3 4 5 6 7 8 9 10 X 24
Ajuste de funções a histogramas Números gerados segundo: Number of hits 20 18 16 14 f(x) =Ae 1 2( x µ ) 2 µ =0 =1 MyHisto 12 10 8 6 4 2 0 5 4 3 2 1 0 1 2 3 4 5 X 25
Ajuste de funções a histogramas Como podemos ver pelo output do programa, conseguimos ajustar razoavelmente o nosso modelo aos dados. f(x) =Ae 1 2( x µ ) 2 µ =0 =1 26
Geração de Aleatórios MyHisto Number of hits 125 µ = 5.021295 σ = 2.909372 120 σ_exp = 2.886751 115 110 105 100 95 90 85 0 1 2 3 4 5 6 7 8 9 10 X Uma média e desvio padrão próximos do esperado para a distribuição uniforme. 27
A área do círculo P circ P quad = r2 (2r) 2 = 4 Y 1 MyHisto 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 π ~ 3.128000 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 X 28
Guardar o resultado num TFile O ROOT tem o seu próprio formato de ficheiros (.root) nos quais é possível guardar qualquer tipo de objecto C++ (pertencente ao ROOT ou não). 29
Ler um TFile Da mesma maneira que lemos, podemos escrever. 30
O objecto TTree O ROOT tem um objecto que funciona como uma tabela de dados. 31
Ler dados de uma TTree A leitura funciona de uma forma muito semelhante. Y 1 MyHisto 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 X 32
TBrowser 33
Agradecimentos Obrigado! 34