A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

C++ e Root Alexandre Suaide aula 4.

Apresentações semelhantes


Apresentação em tema: "C++ e Root Alexandre Suaide aula 4."— Transcrição da apresentação:

1 c++ e Root Alexandre Suaide aula 4

2 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)

3 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 objetos classe

4 Criando e destruindo objetos
Parâmetros para criação do objeto 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; Construtor do objeto

5 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

6 Como iniciar o programa  Digite root Como sair do ROOT Digite .q
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

7 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

8 Gráficos e histogramas no ROOT
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)

9 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 do ROOT root [0] .L teste.C root [1] exemplo_TH1();

10 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();

11 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

12 Um exemplo de gráfico void 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 }

13 Gráficos a partir de tabelas de dados
O 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? 

14 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 #

15 O ROOT possui classes para definir funções. TF1, TF2 e TF3 Uso
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.

16 O fim de um comando só ocorre quando se coloca o ;
Um exemplo simples O fim de um comando só ocorre quando se coloca o ; 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(); }

17 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);

18 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 Exemplo TLegend *l = new TLegend(0.67,0.75,0.87,0.87); l->AddEntry(g,”dados”,”p”); l->AddEntry(f,”ajuste”,”l”); l->Draw();

19 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 – Gaussiana polN – polinômio de grau N (N = 0...9) landau – distribuição de Landau expo – exp([0]+[1]*x)

20 Outro exemplo de fit (com histogramas) [0]*exp([1]*x)+gaus(2)+gaus(5)
Vamos ajustar o histograma h->Fit(f); Como extrair informações da função ajustada que não seja pela tela?

21 Outro exemplo de fit (com histogramas) [0]*exp([1]*x)+gaus(2)+gaus(5)
Qual o Х2red do ajuste? f->GetChisquare()/f->GetNDF(); 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); peak->Integral(0,10)/h->GetBinWidth(23); E no segundo? peak->SetParameters(f->GetParameters()+5); 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

22 Como obter informações
Vários tutoriais de ROOT em Referências e documentação do ROOT Página principal do root Documentação sobre as classes do root Tutoriais com exemplos simples, passo a passo Como resolver problemas comuns

23 Como criar e preencher histogramas Gráficos e funções Ajustes de dados
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

24 Histogramas, gráficos e funções Como utilizá-los mais a fundo
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


Carregar ppt "C++ e Root Alexandre Suaide aula 4."

Apresentações semelhantes


Anúncios Google