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

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

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

Apresentações semelhantes


Apresentação em tema: "... para pessoas que não sabem c++ Alexandre Suaide aula 1."— Transcrição da apresentação:

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

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

3 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

4 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

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

6 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 <

7 Um pouco de c++ só para não ficar totalmente perdido IO básico: –cout/cin cout << Ola = << << endl; int idade; cout <> 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 <

8 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

9 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

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

11 Construindo objetos... Múltiplos construtores (polimorfia) class TH1F : public TH1, public TArrayF { public: TH1F() TH1F(const char* name, const char* title, Int_t nbinsx, Axis_t xlow, Axis_t xup); TH1F(const char* name, const char* title, Int_t nbinsx, const Float_t* xbins); TH1F(const char* name, const char* title, 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);... As funções de uma classe que possuem o mesmo nome da classe são os construtores. A função ~NOME é o destrutor

12 Alguns padrões no código do ROOT facilita a aprendizagem ClassesComeçam com TTBrowser, TH1F TiposTerminam com _tInt_t Membros de classesComeçam com ffSize Funções membrosComeçam com maiúsculo Get(), SetSize() ConstantesComeçam com kkRed Variáveis estáticasComeçam com ggROOT, gSystem Membros estáticosComeçam com fgfgTokenClient

13 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

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

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

16 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

17 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 }

18 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: 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. 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...

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

20 Mudando propriedades dos gráficos/histogramas

21 Fazendo ajustes simples

22 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!! !

23 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

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

25 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(); h1->Draw(); } gPad é um ponteiro interno do ROOT que sempre aponta para o objeto TPad atual.

26 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.

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

28 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 SetParameter(i,1); h1->Fit(f1,"Q"); h1->SetFillColor(23); for(int i=0;i<3;i++) { cout <<"Parametro "<

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

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


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

Apresentações semelhantes


Anúncios Google