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

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

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

Apresentações semelhantes


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

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

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

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

5 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

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 <<endl; i = 0 i = 1 i = 2

7 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 = “ << << 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;

8 É 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

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

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

12 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

13 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

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

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

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(); } 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<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 = Parametro 1 = Parametro 2 = Chi2 = NDF = 30

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 Documentação das classes Alguns documentos interessantes (root, c++) Incluindo essas aulas Download ROOT (+scanroot e PelTools)


Carregar ppt "... para pessoas que não sabem c++"

Apresentações semelhantes


Anúncios Google