Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico...

24
Alexandre Suaide aula 4 c++ e Root

Transcript of Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico...

Page 1: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Alexandre Suaideaula 4

c++ e Root

Page 2: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Programa

• Aula 1– Introdução ao c++ e ROOT– c++ básico

• Aula 2– Ponteiros/referências– Usando ponteiros cálculo de cinemática

• Aula 3– Classes e objetos– ROOT como ferramenta de programação/análise

• Aula 4– Classes e objetos no ROOT

• Aula 5– Análise de dados no Pelletron (ScanROOT)

Page 3: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Classes e objetos em c++

• Classes são os moldes para criação de um objeto em c++

• Objetos são entidades concretas (espaço em memória) criados e organizados com estrutura definida pelas classes

classe

objetos

Page 4: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Criando e destruindo objetos

• Criando objetos no stack void exemplo_obj_1() { TH1F h("hist","histograma",100,0,10); h.SetLineColor(1); h.Draw(); }

– O objeto h deixa de existir quando a função termina

• Criando objetos no heap (new e delete) void exemplo_obj_2() { TH1F* h = new TH1F("hist","histograma",100,0,10); h->SetLineColor(1); h->Draw(); }

– Objetos no heap são acessados com ponteiros– O objeto h só deixa de existir com o delete h;

Parâmetros para criação do

objeto

Construtor do objeto

Page 5: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

ROOT• Conjunto de bibliotecas escritas em c++ cuja finalidade é

permitir o desenvolvimento de técnicas de simulação, aquisição e análise de dados– As bibliotecas seguem a filosofia de programação orientada

a objeto• A interface com o usuário se faz de três modos

– Prompt de comando• Interpretador c/c++ (CINT)

– Permite total acesso a funcionalidade do ROOT e c++– O prompt de comando atua como um compilador em

tempo real. – Interface gráfica

• Permite manipulação de objetos gráficos (histogramas, gráficos, objetos, menus, etc)

– Compilador c++ (gcc em Linux e VC em windows)• Permite compilar programas avançados e criar novos

programas específicos, utilizando a funcionalidade do ROOT

– ScanRoot, SPMRoot• Necessita conhecimento de c++ para fazer bom proveito do

sistema

Page 6: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Comandos básicos

• Como iniciar o programa – Digite root

• Como sair do ROOT– Digite .q

• Estranho, mas como o ROOT é um interpretador c++, os comandos internos do mesmo têm que ser diferenciados. Assim, todos os comandos do ROOT começam com “.”. Os comandos mais importantes, alem do .q são– .L para carregar um programa (macro) na

memória– .x para carregar e executar um programa– .h para um help dos comandos disponíveis

Page 7: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

A interface do ROOT

• Use a tecla TAB para obter ajuda• root [0] b = new TB <TAB>• root [1] b = new TBrow<TAB>• root [2] b = new TBrowser(<TAB>• Útil para descobrir a lista de métodos• Descobrir também lista de parâmetros

Page 8: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Gráficos e histogramas no ROOT

• Gráficos e histogramas– O ROOT possui uma quantidade enorme

de classes para tratar objetos gráficos– Histogramas

• TH1 – Histogramas de 1 dimensão– TH1I, TH1S, TH1F, TH1D, ... (estabelece a

precisão do eixo)• TH2 – Histogramas de 2 dimensões• TH3 – Histogramas de 3 dimensões

– Gráficos• TGraph – Gráficos de X e Y simples• TGraphErrors – Gráficos com barras de erro

– Funções• TF1 – Função de 1 variável F=F(x)• TF2 – Função em 2 variáveis F=F(x,y)

Page 9: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Histogramas de 1 dimensão

• Criando um Histograma de 1 dimensão– TH1F *h = new TH1F(“nome”,”título”, Nbins, Xmin, Xmax);– TH1F h (“nome”,”título”, Nbins, Xmin, Xmax);

void exemplo_TH1() { TRandom *r = new TRandom(); TH1F *h1 = new TH1F("histograma","Exemplo histograma",50,0,10); for(int i = 0;i<2000;i++) { float x = r->Gaus(5,1); h1->Fill(x); } h1->Draw(); }

Para rodar esse exemplo, assim como os Seguintes, salve-o em um arquivo, por Exemplo, teste.C e digite, no prompt doROOT

root [0] .L teste.Croot [1] exemplo_TH1();

Page 10: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Histogramas de 2 dimensões

• Muito similar ao TH1– TH2F *h = new TH2F(“nome”,”título”, NbinsX, Xmin, Xmax, NBinsY, Ymin,

Ymax);– TH2F h (“nome”,”título”, NbinsX, Xmin, Xmax, NbinsY, Ymin,Ymax);

void exemplo_TH2() { TRandom *r = new TRandom(); TH2F *h2 = new TH2F("h","Exemplo Th2",50,0,10,50,0,5); for(int i = 0;i<2000;i++) { float x = r->Gaus(5,1); float y = r->Gaus(3,0.5); h2->Fill(x,y); } h2->Draw(); }

Page 11: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Gráficos X-Y

• Criar gráficos a partir de uma tabela é como tirar doce da mão de criança...

• TGraph e TGraphError– ... = new TGraph(N,x,y);– ... = new TGraphErrors(N,x,y,ex,ey);

• Onde– N = número de pontos– x, y são ponteiros para os vetores com os

dados– ex, ey são ponteiros para os vetores com os

erros

Page 12: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Um exemplo de gráficovoid exemplo_TGraph(){ float x[] = {1,2,3,4,5,6}; float y[] = {0.1,0.3,0.5,0.7,0.9,1.1}; float ex[] = {0.1,0.1,0.1,0.1,0.1,0.1}; float ey[] = {0.02,0.03,0.02,0.04,0.03,0.05}; TGraphErrors *g = new TGraphErrors(6,x,y,ex,ey); g->SetMarkerStyle(20); // para circulo g->Draw("AP"); // A desenha os eixos, P desenha pontos}

Page 13: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Gráficos a partir de tabelas de dadosO arquivo dados.dat contém 3 colunas, x, y, ey. No prompt do ROOT, digite

Root [1]: TGraphErrors *g = new TGraphErrors(“dados.dat”,"%lg %lg %lg");Root [2]: g->Draw(“AP”);

Simple, isnt´t it?

Page 14: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Como trabalhar diretamente com os atributos de um gráfico?

TCanvas *c1 = new TCanvas(“canvas”,”janela de grafico”,600,600);c1->SetLogy();

TGraphErrors *g = new TGraphErrors(“teste.dat”,"%lg %lg %lg");g->Draw(“AP”);

g->SetTitle(“Electrons from heavy quarks decay”);g->SetMarkerStyle(20);g->SetMarkerColor(2);g->SetLineColor(2);

TAxis* Y = g->GetYaxis();Y->SetTitle(“1/(2#pi p_{T}) d^{2}N/dp_{T}d#eta”);Y->SetTitleSize(0.03);Y->SetLabelSize(0.03);Y->SetTitleOffset(1.4);

TAxis* X = g->GetXaxis();X->SetTitle(“p_{T} (GeV/c)”);X->SetTitleSize(0.03);X->SetLabelSize(0.03);

Letras gregas e outros caracteres especiais de LaTEX podem ser obtidos com a mesma

sintaxe do LaTEX, substituindo \ por #

Page 15: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Criando funções

• O ROOT possui classes para definir funções.– TF1, TF2 e TF3

• Uso– TF1 *f = new TF1(“nome”,”formula”,min,max);

• A fórmula deve ser escrita usando a sintaxe padrão de c++.– Parâmetros variáveis devem vir entre

brackets• [0], [1], etc

– As variáveis são x, y e z• Alguns métodos interessantes

– SetParameter(), GetParameter(), GetParError(), GetChisquare(), Eval(), etc.

Page 16: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Um exemplo simples

void exemplo_Func(){ TF1 *f1 = new TF1("func", "[0]*exp(-x/[1])*sin([2]*x)", 0,6.28); f1->SetParameter(0,1); f1->SetParameter(1,3); f1->SetParameter(2,6); f1->Draw();}

O fim de um comando só ocorre quando se coloca o

;

Page 17: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Fazendo ajustes de funções• Vamos utilizar o nosso bom e velho gráfico do slide anterior• Método mais simples de ajuste: utilizar TF1

TF1 *f = new TF1(“f”,”[0]*pow(1+x/[1],-[2])”,0,15);f->SetParameter(0,1);f->SetParameter(1,1.5);f->SetParameter(2,9);g->Fit(f);

BABApow ),(

Page 18: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Adicionando legenda aos gráficos

• Utilize a classe TLegend– TLegend *l = new TLegend(xmin,ymin,xmax,ymax);

• Os valores são fração do tamanho da janela gráfica e não coordenadas reais nos graficos

– l->AddEntry(objeto,”label”,”modo de exibição”);• Modos de exibição

– l = linha– p = ponto– f = cor de preenchimento

• ExemploTLegend *l = new TLegend(0.67,0.75,0.87,0.87);l->AddEntry(g,”dados”,”p”);l->AddEntry(f,”ajuste”,”l”);l->Draw();

Page 19: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Outro exemplo de fit (com histogramas)

• Vamos criar um histograma fajuto TF1 *f = new TF1(“f”,”[0]*exp([1]*x)+gaus(2)+gaus(5)”,0,10);f->SetParameter(0,40);f->SetParameter(1,-0.3);f->SetParameter(2,20);f->SetParameter(3,4.3);f->SetParameter(4,0.2);f->SetParameter(5,56);f->SetParameter(6,8);f->SetParameter(7,0.2);

TH1F* h = new TH1F(“hist”,”teste”,100,0,10);for(int i=0; i<8000; i++) h->Fill(f->GetRandom());h->Draw();

Funções pré-definidas. O Root possui algumas funções pré-definidas,

tais como:

gaus – GaussianapolN – polinômio de grau N (N = 0...9)landau – distribuição de Landau

expo – exp([0]+[1]*x)

Page 20: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Outro exemplo de fit (com histogramas) [0]*exp([1]*x)+gaus(2)+gaus(5)

• Vamos ajustar o histogramah->Fit(f);

• Como extrair informações da função ajustada que não seja pela tela?

Page 21: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Outro exemplo de fit (com histogramas) [0]*exp([1]*x)+gaus(2)+gaus(5)

• Qual o Х2red do ajuste?

f->GetChisquare()/f->GetNDF();1.36299

• Qual o número de contagens no primeiro pico?TF1 *peak = new TF1(“peak”,”gaus(0)”,0,10);peak->SetParameters(f->GetParameters()+2);peak->Draw(“same”); peak->Integral(0,10);53.5103peak->Integral(0,10)/h->GetBinWidth(23);535.103

• E no segundo?peak->SetParameters(f->GetParameters()+5);peak->Integral(0,10)/h->GetBinWidth(23);1349.11

Essa é uma operação com ponteiros. Se você checar a documentação do ROOT verá que o

método GetParameters() retorna um Double_t* que indica a posição na memória onde os parâmetros estão guardados. O +2 indica o deslocamento dentro dessa

memória

Caso operações com ponteiros incomodem, pode-se fazer na força bruta:

peak->SetParameter(0,f->GetParameter(2));peak->SetParameter(1,f->GetParameter(3));peak->SetParameter(2,f->GetParameter(4));

Integral, por definição, inclui o tamanho do canal. Caso o canal não

tenha tamanho == 1, deve-se ter

cuidados extras

Page 22: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Como obter informações

• Vários tutoriais de ROOT em– http://www.dfn.if.usp.br/~suaide/pelletron/

• Referências e documentação do ROOT– http://root.cern.ch

• Página principal do root– http://root.cern.ch/root/Categories.html

• Documentação sobre as classes do root– http://root.cern.ch/root/Tutorials.html

• Tutoriais com exemplos simples, passo a passo– http://root.cern.ch/root/HowTo.html

• Como resolver problemas comuns

Page 23: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Resumo

• Root é uma coleção de classes para análise de dados com um interpretador c++

• ROOT– Como criar e preencher histogramas– Gráficos e funções

• Manipulando atributos de gráficos– Ajustes de dados

Page 24: Alexandre Suaide aula 4 c++ e Root. Programa Aula 1 –Introdução ao c++ e ROOT –c++ básico Aula 2 –Ponteiros/referências –Usando ponteiros  cálculo de.

Próxima semana

• Histogramas, gráficos e funções– Como utilizá-los mais a fundo

• Projeções• Ajustes • Cortes• Etc.

• ScanRoot (e SPMRoot)– Como usar a interface – Como processar os dados adquiridos com

o SPMRoot