... para pessoas que não sabem c++

Slides:



Advertisements
Apresentações semelhantes
Programação em Java Prof. Maurício Braga
Advertisements

Programação em Java Prof. Maurício Braga
Alexandre Suaide aula 1.
... para pessoas que não sabem c++
Alexandre Suaide aula 2.
Capítulo 1 – Conceitos Básicos 1 Segunda-feira, 22 de Outubro de 2007 UNIBRATEC – Ensino Superior e Técnico em Informática Aula 15 – Tipos de Dados Avançados.
LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS INTRODUÇÃO AOS APLICATIVOS JAVA Prof. Thiago Pereira Rique
Prof. Thiago Pereira Rique
Comandos do Linux SO II.
Alexandre Suaide Aula 3.
Um novo sistema de aquisição de dados para o Laboratório Pelletron/LINAC Alexandre A. P. Suaide Alexandre A. P. Suaide.
Programação para Engenharia I
Processos no Unix e Linux
PROGRAMAÇÃO MODULAR (com uso de subprogramas)
Expressões, controle de fluxo, wrappers e strings Profa
LPG - I: Alocação Dinâmica de Memória - Ponteiros
Ponteiros em C.
LPG - I: Ponteiros e Vetores/Matrizes UDESC - SBS
Linguagem C Funções.
Linguagem C.
Escola Secundária c/ 3º CEB da Batalha
2002/2003 Programação Orientada para Objectos 1 Aula 4 Memória, unidade básica de memória e conceito de endereço Ponteiros Relação de ponteiros com matrizes.
Revisão da Linguagem C.
Classes e objetos P. O. O. Prof. Grace.
Estrutura de Dados em Java
Folha de cálculo Conceitos básicos Criação de uma folha de cálculo
Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012.
Alocação Dinâmica de Memória Professor Mário Dantas
JAVA: Conceitos Iniciais
Introdução a linguagem Python
Introdução a Computação e Cálculo Numérico
Unidade I: “Dê um mergulho rápido”
Classes Revisando: –Forma de implementação de estruturas específicas –Atributos (grupos de dados) –Métodos (conjuntos de procedimentos)
Aula prática 9 Alocação Dinâmica Monitoria de Introdução à Programação
Aula prática 13 Orientação a Objetos – C++ Parte 1
Aula prática 8 Ponteiros Monitoria de Introdução à Programação.
Ameliara Freire O comando de entrada de dados é utilizado quando desejamos fornecer um valor para um nosso programa. Os dispositivos.
Programação Avançada Prof. Natalia Castro Fernandes
IAED Tagus, 2009/2010 Introdução à Programação em C (I)
PROGRAMAÇÃO ESTRUTURADA II
Seminário 1: Revisão de C
UNIDADE 5 ESTRUTURAS DE DADOS HOMOGÊNEAS
Java Bytecode Software Básico Mitsuo Takaki.
Professor: Márcio Amador
Paradigmas da Programação – Semestre 1 – Aula 9 Professor: Eduardo Mantovani )
09/04/2017 Linux Comandos básicos.
Capítulo V – Comandos de Entrada e Saída 5.1 – Equipamentos de entrada e saída 5.2 – Saída no vídeo-texto 5.3 – Entrada pelo teclado 5.4 – Entrada e saída.
Uso de parâmetros na linha de comando. Parâmetros da função main:
Algumas notas sobre a linguagem de programação C
Programação I Aula 3 (Entrada de Dados) Prof. Gilberto Irajá Müller Última atualização 11/3/2009.
Aula Prática 4 Monitoria IP/CC (~if669).
Aula Prática 3 Funções Monitoria Introdução à Programação.
Aula Prática 3 Monitoria IP/CC (~if669). Relembrando Padronização Comentários Identação Significado em nomes de variáveis Depuração de Erros.
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.
M ÉTODOS DA C LASSE S TRING. FUNÇÕES COM STRING Uma string é um tipo texto que corresponde à união de um conjunto de caracteres. Em Java, as strings são.
Programação I Aula 1 Prof. Gilberto Irajá Müller Última atualização 2/3/2009.
Monitoria de Sistemas Inteligentes IF684
Aula Prática 3 Funções Monitoria Introdução à Programação.
Conceitos Básicos e Manipulação de Objetos
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.
C++ e Root Alexandre Suaide aula 4.
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
MatLab (Matrix Laboratory)
Linguagem de Programação
Programação II Arquivos Autoria: Ernani Santos Modificação: Clebson Oliveira Adaptação: Claudia Boeres.
Aula Prática 6 Ponteiros Monitoria  Quando declaramos uma matriz:  tipo meuArray[tam];  O compilador aloca a matriz em uma região de memória.
Java Básico Lab Ruddá Beltrão | Cristian Costa.
Introdução à Orientação a Objetos em Java Prof. Gustavo Wagner (Alterações) Slides originais: Prof. Tiago Massoni Desenvolvimento de Sistemas FATEC-PB.
Transcrição da apresentação:

... para pessoas que não sabem c++ Alexandre Suaide aula 1

O ROOT é tudo que você precisa ... O que é o ROOT? O ROOT é tudo que você precisa ... Conjunto de bibliotecas para análise de dados e desenvolvimento de aplicativos Histogramas, gráficos, análise em geral, simulação, IO, desenvolvimento de aplicativos, etc Poderoso interpretador c++ (Cint) Você pode rodar um programa em c++ linha por linha no prompt de comando Interface gráfica poderosa (mas não é o Origin) ... mas ao mesmo tempo não é muita coisa. O usuário tem que saber programar um pouco...

Organização das aulas Aula 1 Comandos (realmente) básicos do ROOT Um pouco de c++ para usuários de ROOT Criando objetos simples (histogramas, gráficos, etc) Manuseando gráficos e histogramas. A interface gráfica Funções e ajustes de gráficos Aula 2 Análise de dados no Pelletron ScanRoot e PelTools Macros Inovando sem perder a classe. Debug, memory leaks e administrando objetos

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 macro na memória .x para carregar e executar um macro .h para um help Note que esse tipo de texto será utilizado sempre que for algum comando para ser digitado no computador

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

O ROOT é realmente um interpretador c++ Exemplo de algo bem básico ... Tipos de variáveis C++ double, float, long int, int, short int, char, etc. No ROOT Double_t, Float_t, Long_t, Int_t, Short_t, Char_t, etc. A diferença vem do fato que as variáveis em c++ dependem da plataforma (em termos de tamanho) Ex: int (i386 = 4 bytes, Solaris = 8 bytes) ... Enquanto os tipos definidos no ROOT têm tamanho fixo, independente de plataforma root [0] float a = 10; root [1] float b = 20; root [2] cout << “a + b = “ << a + b << endl; a + b = 30 root [3] for(int i = 0; i<3; i++) cout << “i = “ << i <<endl; i = 0 i = 1 i = 2

Um pouco de c++ só para não ficar totalmente perdido Comentários /* comentário de bloco */ // comentário de linha IO básico: cout/cin cout << “Ola. 1 + 1 = “ << 1 + 1 << endl; int idade; cout <<“Quantos anos voce tem? “<<endl; cin >> idade; Loops for ( parâmetros do loop ) { comandos } do { alguma coisa } while ( condição ); while ( condição ) { alguma coisa } for(int i=0;i<10;i++) cout << i << endl; Condições if ( condição ) { alguma coisa } else { outra coisa } == (igual), != (diferente), || (or), && (and), ! (not) if (i==0) cout << “É zero “<<endl; else cout <<“Não é zero “<<endl;

É a descrição de algum conceito abstrato Classes possuem membros Um pouco mais de c++ Classe É a descrição de algum conceito abstrato Classes possuem membros Membros podem ser variáveis ou funções. Os membros podem ser públicos, privados ou protegidos. O usuário tem acesso somente aos membros públicos Classes podem derivar de outras classes. Objeto É a “coisa” real criada na memória do computador que tem uma estrutura definida pela classe Ponteiro Contém o endereço de um objeto na memória É uma espécie de atalho para uma certa região de memória do computador

Classes possuem interface Como o usuário só tem acesso aos membros públicos, não importa como as coisas são feitas internamente. A interface é muito importante e define o nível de facilidade com o qual o usuário interage com o objeto

Criando (... e destruindo) objetos... Parâmetros para criação do objeto Criando objetos no stack O objeto h deixa de existir quando a função termina void exemplo_obj_1() { TH1F h("hist","histograma",100,0,10); h.SetLineColor(1); h.Draw(); } Construtor do objeto Criando objetos no heap (new e delete) Objetos no heap são acessados com ponteiros O objeto h só deixa de existir com o delete h; void exemplo_obj_2() { TH1F* h = new TH1F("hist","histograma",100,0,10); h->SetLineColor(1); h->Draw(); }

Construindo objetos... Múltiplos construtores (polimorfia) As funções de uma classe que possuem o mesmo nome da classe são os construtores. A função ~NOME é o destrutor class TH1F : public TH1, public TArrayF { public: TH1F() TH1F(const char* name, const char* title, Int_t nbinsx, Axis_t xlow, Axis_t xup); Int_t nbinsx, const Float_t* xbins); Int_t nbinsx, const Double_t* xbins); TH1F(const TVectorF& v); TH1F(const TH1F& h1f); virtual ~TH1F(); virtual void AddBinContent(Int_t bin); virtual void AddBinContent(Int_t bin, Stat_t w); ...

Alguns padrões no código do ROOT facilita a aprendizagem Classes Começam com T TBrowser, TH1F Tipos Terminam com _t Int_t Membros de classes Começam com f fSize Funções membros Começam com maiúsculo Get(), SetSize() Constantes Começam com k kRed Variáveis estáticas Começam com g gROOT, gSystem Membros estáticos Começam com fg fgTokenClient

Gráficos e histogramas Trabalhando com o 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

Histogramas de 1 dimensão (TH1) 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 (TH2) 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 (float) para os vetores com os dados ex, ey são ponteiros (float) para os vetores com os erros

Um exemplinho 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 }

Personalizando histogramas e gráficos As propriedades dos objetos podem ser alteradas através dos métodos implementados na definição das classes Pode-se fazer: h1->SetFillColor(2); // muda a cor de preenchimento h1->SetLineWidth(1.3); // muda espessura da linha h1->GetXaxis()->SetTitle(“legenda X”); // muda legenda do eixo X ... Além disso, o ROOT possui uma interface gráfica bastante amigável Botão da esquerda Arrasta objetos de um lugar para outro Botão do meio Muda a janela gráfica onde os gráficos serão desenhados Botão da direita Acessa menus e propriedades dos objetos onde o mouse está localizado.

Acessando propriedades dos objetos clicando com o botão direito do mouse

Mudando propriedades dos gráficos/histogramas

Fazendo ajustes simples

O ROOT possui uma classe para IO. TFile Ok, fiz meus gráficos, histogramas, etc... Como que eu os gravo em um arquivo? O ROOT possui uma classe para IO. TFile TFile *f = new TFile(“NOME”,”opções”); Um exemplo... Gravando histogramas void exemplo_TFile_write() { TRandom *r = new TRandom(); TH1F *h1 = new TH1F("hist1","Exemplo TH1",50,0,10); TH2F *h2 = new TH2F("hist2","Exemplo TH2",50,0,10,50,0,5); for(int i = 0;i<2000;i++) h1->Fill(r->Gaus(5,1)); h2->Fill(r->Gaus(5,1), r->Gaus(3,0.5)); } TFile *f = new TFile("teste.root","NEW"); h1->Write(); h2->Write(); f->Close(); delete f; IMPORTANTE!!!

Abrindo e lendo objetos de um arquivo Usando o prompt root [0] TFile *f=new TFile("teste.root"); root [1] TH1F *h1=f->Get("hist1"); root [2] h1->Draw(); Usando a interface gráfica (browser) new TBrowser(); Esse comando cria um objeto do tipo TBrowser. Arquivos abertos aparecem na pasta ROOT Files

Trabalhando melhor com janelas gráficas (TCanvas) Como criar uma janela gráfica vazia root [0] TCanvas *c = new TCanvas(“nome”,”Titulo”,400,300);

Um exemplo. Mostrando histogramas de várias formas void exemplo_TCanvas() { TFile *f = new TFile("teste.root"); TH2F *h1 = f->Get("hist1"); TH2F *h2 = f->Get("hist2"); TCanvas *c = new TCanvas(); c->Divide(2,2); c->cd(1); h2->Draw(); c->cd(2); h2->Draw("colz"); c->cd(3); h1->Draw(); c->cd(4); gPad->SetFillColor(11); gPad->SetLogy(); } gPad é um ponteiro interno do ROOT que sempre aponta para o objeto TPad atual.

Fazendo ajustes mais complexos – Criando funções A interface gráfica do ROOT permite ajustes simples (Gaussiana, polinômios, etc). 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.

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

Ajustando um histograma void exemplo_Fit() { TFile *f = new TFile("teste.root"); TH2F *h1 = f->Get("hist1"); TF1 *f1 = new TF1("func","[0]*exp(-0.5*pow((x-[1])/[2],2))"); for(int i=0;i<3;i++) f1->SetParameter(i,1); h1->Fit(f1,"Q"); h1->SetFillColor(23); for(int i=0;i<3;i++) cout <<"Parametro "<<i <<" = "<<f1->GetParameter(i) <<" +- "<<f1->GetParError(i)<<endl; } cout <<"Chi2 = "<<f1->GetChisquare() <<" NDF = "<<f1->GetNDF()<<endl; root [0] .L exemplo.C root [1] exemplo_Fit() Parametro 0 = 159.659 +- 4.41171 Parametro 1 = 5.00271 +- 0.0223727 Parametro 2 = 0.987987 +- 0.0160371 Chi2 = 24.7388 NDF = 30

Na próxima aula ... Análise de dados no Pelletron scanroot e PelTools Vamos explorar o ROOT um pouco mais a fundo Macros Definindo novas classes Compilando para tornar a execução mais rápida Como corrigir problemas (debug)

Como conseguir mais informação Site do ROOT http://root.cern.ch Documentação das classes http://root.cern.ch/root/Reference.html Alguns documentos interessantes (root, c++) Incluindo essas aulas http://dfn.if.usp.br/~suaide/pelletron/links.htm Download ROOT (+scanroot e PelTools) http://dfn.if.usp.br/~suaide/pelletron/download.htm