Beruflich Dokumente
Kultur Dokumente
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
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
Anlise
Ferramentas bsicas I/O, ferramentas grficas, mtodos de clculo Nvel mais fundamental. Interface com S.O.
Comandos bsicos
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
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]: _
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; }
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 ( 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; }
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);
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
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 = ""); ... };
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
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(); }
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
ScanRoot (e SPMRoot) Como usar a interface Como processar os dados adquiridos com o SPMRoot