Você está na página 1de 29

Alexandre Suaide aula 1

Ferramentas para anlise de dados Paradigma 1 Ferramentas prontas para executar tarefas especficas para anlise de dados
Origin Excel MathCad Mathematica DAMM SCAN Etc

Paradigma 2 Ferramentas que permitem cada usurio criar o prprio ambiente de anlise de dados
Linguagens de programao PAW ROOT

A flexibilidade limitada ao que cada programa oferece

A flexibilidade muito elevada custo de uma interveno maior do usurio

Objetivos

Iniciar as pessoas que no so familiares com o uso intensivo de programao para anlise de dados Fornecer a base da linguagem e filosofia de objetos C++ e ROOT Esclarecer dvidas sobre as ferramentas especficas construdas para o Pelletron ScanRoot e SPMRoot 3 seminrios C++ e ROOT (bsico) ROOT (anlise) e ScanRoot ScanRoot e sendo criativo com o Root

Por que ROOT?


Uma anlise slida se constri a partir de mtodos confiveis que no imponham limitaes criatividade do pesquisador
Interface entre o usurio e as ferramentas de anlise Ferramentas de visualizao e manipulao grfica

Anlise

Ferramentas bsicas I/O, ferramentas grficas, mtodos de clculo Nvel mais fundamental. Interface com S.O.

Ento, o que ROOT?


Conjunto de bibliotecas escritas em c++ cuja finalidade permitir o desenvolvimento de tcnicas de simulao, aquisio e anlise de dados As bibliotecas seguem a filosofia de programao orientada a objeto A interface com o usurio se faz de trs 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 grfica Permite manipulao de objetos grficos (histogramas, grficos, objetos, menus, etc) Compilador c++ (gcc em Linux e VC em windows) Permite compilar programas avanados e criar novos programas especficos, utilizando a funcionalidade do ROOT ScanRoot, SPMRoot Necessita conhecimento de c++ para fazer bom proveito do sistema

Comandos bsicos

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 tm que ser diferenciados. Assim, todos os comandos do ROOT comeam com .. Os comandos mais importantes, alem do .q so .L para carregar um programa (macro) na memria .x para carregar e executar um programa .h para um help dos comandos disponveis

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 mtodos Descobrir tambm lista de parmetros

Meu primeiro programa em c++


Tipo de retorno da funo Nome da funo. Para ser executada com o comando .x deve ter o mesmo nome do arquivo void hello() Arquivo hello.C { cout << Hello Alex << endl; return; }

Utilize o seu editor de textos favorito (vi, nedit, emacs, etc.) Entre no root e digite root [0]: .x hello.C Hello Alex root [1]: _

Separao de comandos so feitas atravs do ;

Funes ou blocos de programas so encapsulados com { }

Variveis em c++
As variveis em c++ tm tamanho definidos de acordo com o compilador c++ do sistema operacional (ex: int em i386 tem 4 bytes enquanto em solaris, 8)
O root define tipos similares com tamanho fixo para manter compatibilidade entre sistemas diferentes

Tipo
Vazio (0) Byte (1) Curto (2) Inteiro (4) Longo (8) Real (4) Dupla (8)

C++
void char short int long float double

Root
Char_t Short_t Int_t Long_t Float_t Double_t

Fortran
CHARACTER*1 INTEGER*2 INTEGER*4 INTEGER*8 REAL*4 REAL*8

Nomes de variveis so sensveis a maisculo/minsculo Em c++ vetores so definidos utilizando [ ] e so indexados a partir do 0 Em fortran utiliza-se ( ) e os vetores so indexados a partir do 1

Exemplos de variveis No existem variveis pr-definidas, como no FORTRAN Em compensao, variveis podem ser definidas em qualquer ponto do programa
Exemplos de definio de variveis int a; Definio simples int i,j,k; Definio mltipla float pi=3.1415, r0=1.2; Definio c/inicializao double a[10], b[5][20]; Definio de vetores float c[5] = {1,2,3,4,5}; Definio c/inicializao float d[3][2] = {{1,2,3},{4,5,6}}; char texto[20] = testando;

Comentrios e IO bsico
Comentrios
/* comentrio de bloco */ // comentrio de linha

IO bsico Uso dos operadores >> (puxar) e << (empurrar) cout/cin (vdeo e teclado)
cout << Ola. 1 + 1 = << 1 + 1 << endl; int idade; Muda de linha cout << Quantos anos voce tem? ; cin >> idade; int altura, peso; cout << Qual a sua altura e peso? ; cin >> altura >> peso;

Loops
for ( cond. inicial; condio de teste; alterao) { comandos }
for(int i=0; i<10; i++) { int a = i*i; cout << i << * << i << = << a << endl; }

do { alguma coisa } while ( condio de teste );

while ( condio de teste ) { alguma coisa }


int i = 0; while (i<10) {

int i = 0; do { int a = i*i; cout << i << * << i << = << a << endl; i++; } while (i<10);

int a = i*i; cout << i << * << i << = << a << endl; i++;
}

if ... then ... else


Condies
if ( condio ) comando; else outroComando;
O comando else opcional

if ( condio ) { comando1; comando2; if (a<10) cout << a menor que 10 << endl; } else cout << no menor que 10 << endl; else if(a>10 && a<20) cout <<a entre 10 e 20<<endl; { comando1; if(a!=10) cout <<a diferente de 10<<endl; comando2; } Operadores condicionais == (igual), != (diferente), || (or), && (and), ! (not), etc.

Funes em c++ Funes permitem a compactao de um programa, fazendo com que blocos repetitivos sejam tratados de forma isolada
tipo nome(parametros) { comandos; return valor; }

Exemplo: clculo da rea de um retngulo


float area(float lado1, float lado2) { float a = lado1*lado2; return a; } float l1,l2; cout << Entre os lados do retngulo ; cin >> l1 >> l2; cout << A rea desse retngulo << area(l1,l2) <<endl;

Polimorfismo
Uma caracterstica interessante em c o polimorfismo. possvel definir funes com mesmo nome mas parmetros distintos. O c se encarrega de decidir qual funo chamar. Exemplo: clculo da rea de um retngulo e quadrado
float area(float lado1, float lado2) { float a = lado1*lado2; return a; } float area(float lado) { float a = lado*lado; return a; } ... float area1 = area(10,20); float area2 = area(10);

Linguagens orientadas a objetos. Classes em c++


Classe a descrio de algum conceito abstrato Classes possuem membros
Membros podem ser variveis ou funes. Os membros podem ser pblicos, privados ou protegidos. O usurio tem acesso somente aos membros pblicos

Classes podem derivar de outras classes. Objeto a coisa real criada na memria do computador que tem sua estrutura definida pela classe Ponteiro Contm o endereo de um objeto na memria
uma espcie de atalho para uma certa regio de memria do computador

Objetos possuem interfaces com os usurios


Um objeto uma entidade totalmente independente do resto do programa No me importa como as coisas so feitas internamente A interface muito importante e define o nvel de facilidade com o qual o usurio interage com o objeto

Para saber os mtodos (funes) acessveis de um objeto devese olhar a sua definio (classe). Os mtodos pblicos so acessveis Os mtodos com o mesmo nome da classe so denominados construtores e so utilizados para criar o objeto
class TGraph : public TNamed, public TAttLine, public TAttFill, public TAttMarker { Classes das quais esse objeto tambm faz parte. Mtodos pblicos dessas public: classes tambm so acessveis TGraph(); TGraph(Int_t n); construtores TGraph(Int_t n, const Int_t* x, const Int_t* y); TGraph(Int_t n, const Float_t* x, const Float_t* y); Mtodos TGraph(Int_t n, const Double_t* x, const Double_t* y); diversos Double_t GetErrorX(Int_t bin); Double_t GetErrorY(Int_t bin); Double_t GetCovariance(); void SetTitle(const char* title = ""); ... };

Acessando e criando objetos

Criando e destruindo objetos


Criando objetos no stack
void exemplo_obj_1() { TH1F h("hist","histograma",100,0,10); h.SetLineColor(1); Construtor do h.Draw(); objeto } Parmetros para criao do objeto

O objeto h deixa de existir quando a funo 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 so acessados com ponteiros O objeto h s deixa de existir com o delete h;

Grficos e histogramas no ROOT Grficos e histogramas O ROOT possui uma quantidade enorme de classes para tratar objetos grficos Histogramas
TH1 Histogramas de 1 TH1I, TH1S, TH1F, preciso do eixo) TH2 Histogramas de 2 TH3 Histogramas de 3

dimenso TH1D, ... (estabelece a dimenses dimenses

Grficos Funes

TGraph Grficos de X e Y simples TGraphErrors Grficos com barras de erro TF1 Funo de 1 varivel F=F(x) TF2 Funo em 2 variveis F=F(x,y)

Histogramas de 1 dimenso
Criando um Histograma de 1 dimenso TH1F *h = new TH1F(nome,ttulo, Nbins, Xmin, Xmax); TH1F h (nome,ttulo, 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 dimenses
Muito similar ao TH1
TH2F *h = new TH2F(nome,ttulo, NbinsX, Xmin, Xmax, NBinsY, Ymin, Ymax); TH2F h (nome,ttulo, 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(); }

Grficos X-Y Criar grficos a partir de uma tabela como tirar doce da mo de criana... TGraph e TGraphError ... = new TGraph(N,x,y); ... = new TGraphErrors(N,x,y,ex,ey); Onde N = nmero de pontos x, y so ponteiros para os vetores com os dados ex, ey so ponteiros para os vetores com os erros

Um exemplo de grfico
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 }

Criando funes O ROOT possui classes para definir funes. TF1, TF2 e TF3 Uso TF1 *f = new TF1(nome,formula,min,max); A frmula deve ser escrita usando a sintaxe padro de c++. Parmetros variveis devem vir entre brackets
[0], [1], etc

As variveis so x, y e z Alguns mtodos 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(); }

O fim de um comando s ocorre quando se coloca o ;

Como obter informaes Vrios tutoriais de ROOT em


http://www.dfn.if.usp.br/~suaide/pelletron/links.htm

Referncias e documentao do ROOT http://root.cern.ch


Pgina principal do root

http://root.cern.ch/root/Categories.html
Documentao 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

Resumo

Root uma coleo de classes para anlise de dados com um interpretador c++ C++ Pequena introduo dos conceitos mais bsicos Comandos mais comuns Classes e objetos ROOT Como criar e preencher histogramas Grficos e funes

Prxima semana

Histogramas, grficos e funes Como utiliz-los mais a fundo


Projees Ajustes Cortes Etc.

ScanRoot (e SPMRoot) Como usar a interface Como processar os dados adquiridos com o SPMRoot

Você também pode gostar