C++ e Root Alexandre Suaide aula 4.

Slides:



Advertisements
Apresentações semelhantes
Alexandre Suaide aula 1.
Advertisements

... para pessoas que não sabem c++
... para pessoas que não sabem c++
Alexandre Suaide aula 2.
Como se familiarizar com seu banco de dados usando o SPSS
WINDOWS Sistemas Operacionais PLATAFORMA TECNOLÓGICOS
Sumário Aula n.º 18 Formatações Tamanho Cor Parágrafos Alinhamento
Criar uma nova apresentação
coloca todas as letras no formato de maiúscula.
Alexandre Suaide Aula 3.
Prof. João Paulo de Brito Gonçalves
Modo Gráfico x Modo Texto
Programação para Engenharia I
Processos no Unix e Linux
Como se familiarizar com seu banco de dados Como se familiarizar com seu banco de dados usando o SPSS Profa. Suzi Camey Depto de Estatística - UFRGS.
PowerPoint 6ª série.
Linguagem C Strings.
Folha de Cálculo TIC 10.
Revisão da Linguagem C.
Introdução a Programação JAVA
Estrutura de Dados em Java
Comandos para navegação no Sistema de Arquivos
TECNOLOGIAS DA INFORMAÇÃO E COMUNICAÇÃO
Folha de cálculo Conceitos básicos Criação de uma folha de cálculo
INTRODUÇÃ A COMPUTAÇÃO ENG. CIVIL
Alocação Dinâmica de Memória Professor Mário Dantas
Microsoft Office Excel
Fundamentos da Informática
JAVA: Conceitos Iniciais
Treinamento do Microsoft® Access® 2010
VISÃO GERAL DO APLICATIVO.
Aula prática 8 Ponteiros Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 6 Vetores e Matrizes
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Análise de modelos matemáticos por meio de simulações computacionais
FOLHA DE CÁLCULO.
Aula prática 6 Vetores e Matrizes
Tarefa 02 Visual Studio 2005 Visual C# Programa Hello World.
Linguagem de Programação JAVA
Introdução a aplicativos Java
Tecnologias da Informação e Comunicação
Word Prof. Gláucya Carreiro Boechat
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
09/04/2017 Linux Comandos básicos.
Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.
Informática Básica – Unidade 2
Regressão Linear.
Acabias Marques Luiz. I - Introdução ao Ruby Parte 1 – Introdução a linguagem  O que é Ruby  Instalação  O IRB  Operadores Aritméticos  Tipos de.
UNIDADE 4: Processamento de texto
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition Capítulo 10: Interface de Sistemas de Arquivos.
Introdução ao MATLAB 5.3 para Hidrólogos
CAD AutoCAD Mouse Menu de barras.
SQLite Banco de Dados II.
VBA - Introdução Pontifícia Universidade Católica de Goiás
MatLab (Matrix Laboratory)
Acabias Marques Luiz. III – Variáveis, constantes e executáveis Parte 1 – Introdução a linguagem  Variáveis e Constantes  Atalhos na manipulação de.
Editor de Texto do Dosvox
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.
C++ e Root Alexandre Suaide aula 1.
Programação Computacional Aula 8: Entrada e Saída pelo Console Prof a. Madeleine Medrano
Programação Computacional Aula 9: Meu primeiro programa em C
Projeto Operador de Computador
MatLab (Matrix Laboratory)
Linguagem de Programação
Tipo Abstrato de Dados (TAD) Estrutura de Dados Professor: Rodrigo Alves Sarmento Professor: André Cypriano.
Noções básicas de editores de texto Profª Juliana Schivani MÍDIAS EDUCACIONAIS.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Tutorial Webnode Criando site 1. Registrando Acesse o endereço: e preencha os dados solicitados e clique em Registre-se e crie.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
Transcrição da apresentação:

c++ e Root Alexandre Suaide aula 4

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)

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

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

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

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

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

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)

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

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

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

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 }

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? 

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 #

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.

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

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

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

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)

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?

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.5103 peak->Integral(0,10)/h->GetBinWidth(23); 535.103 E no segundo? peak->SetParameters(f->GetParameters()+5); 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

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

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

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