Ferramentas para análise de dados
• Paradigma 1– Ferramentas
prontas para executar tarefas específicas para análise de dados
• Origin• Excel• MathCad• Mathematica• DAMM• SCAN• Etc
– A flexibilidade é limitada ao que cada programa oferece
• Paradigma 2– Ferramentas que
permitem cada usuário criar o próprio ambiente de análise de dados
• Linguagens de programação
• PAW• ROOT
– A flexibilidade é muito elevada
– custo de uma intervenção maior do usuário
Objetivos deste mini-curso
• Mostrar os fundamentos do c++– Não é um curso de lógica de programação– Programação orientada a objetos
• Introdução ao ROOT– ROOT como ferramenta de programação e
análise de dados• 5 aulas
– Mais ou menos a cada 3 semanas– Ver http://www.dfn.if.usp.br/~suaide
Programa
• Aula 1– Introdução ao c++ e ROOT– c++ básico
• Aula 2– Ponteiros/referências– Classes e objetos
• Aula 3– Classes e objetos– ROOT como ferramenta de programação/análise
• Aula 4– Classes e objetos no ROOT
• Aula 5– Análise de dados no Pelletron (ScanROOT)
C++
• Linguágem nova– 1983 (Introdução) – 1998 (padronização)
• Evolução do c?– Alguns dizem que sim, outros que não– C
• 1971 (introdução), 1989 (padronização)• 1980 (c com classes)
• Muitos compiladores no mercado– Gcc (linux), Borland, Microsoft, etc.
• Cada um com o seu jeito de compilar programas• Vamos utilizar o ROOT como ferramenta de
programação
O que é ROOT? (http://root.cern.ch)Uma análise sólida se constrói a partir de
métodos confiáveis que não imponham limitações à criatividade do pesquisador
Análise
Nível mais fundamental. Interface com S.O.
Ferramentas básicasI/O, ferramentas
gráficas, métodos de cálculo
Ferramentas de visualização e
manipulação gráfica
Interface entre o usuário e as
ferramentas de análise
Então, o que é ROOT?• Conjunto de bibliotecas escritas em c++ cuja finalidade é
permitir o desenvolvimento de técnicas de simulação, aquisição e análise de dados– As bibliotecas seguem a filosofia de programação orientada
a objeto• A interface com o usuário se faz de três 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 gráfica
• Permite manipulação de objetos gráficos (histogramas, gráficos, objetos, menus, etc)
– Compilador c++ (gcc em Linux e VC em windows)• Permite compilar programas avançados e criar novos
programas específicos, utilizando a funcionalidade do ROOT
– ScanRoot, SPMRoot• Necessita conhecimento de c++ para fazer bom proveito do
sistema
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 programa (macro) na
memória– .x para carregar e executar um programa– .h para um help dos comandos disponíveis
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
Estrutura de um programa simples em c++
• Diretivas do pré-processador• Definição de novas classes, se necessário• Protótipos • Variáveis globais (se necessárias)• Função principal (main)• Outras funções
Estrutura de um programa simples em c++
• Diretivas do pré-processador– Comandos que começam com #– São executados SOMENTE durante a fase de
compilação do programa• O compilador realmente substitui as diretivas
para o código apropriado• Ex: #include, #define, #ifdef
• Definição de novas classes, se necessário• Protótipos • Variáveis globais (se necessárias)• Função principal (main)• Outras funções
Estrutura de um programa simples em c++
• Diretivas do pré-processador• Definição de novas classes, se necessário
– O C++ é uma linguagem orientada para objetos– Objetos são definidos através de classes– Caso o usuário queira definir novos tipos de
objetos. • Protótipos • Variáveis globais (se necessárias)• Função principal (main)• Outras funções
Estrutura de um programa simples em c++
• Diretivas do pré-processador• Definição de novas classes, se necessário• Protótipos
– Todas as funções devem ser definidas antes da primeira chamada no código
– Isso muitas vezes é complicado pois uma função chama outra
– O uso de protótipos facilita a vida• Variáveis globais (se necessárias)• Função principal (main)• Outras funções
Estrutura de um programa simples em c++
• Diretivas do pré-processador• Definição de novas classes, se necessário• Protótipos • Variáveis globais (se necessárias)
– Variáveis que podem ser acessadas em todas as funções e classes do programa
– Desaconselhado o uso pois dificulta portabilidade • As vezes é um mal necessário
• Função principal (main)• Outras funções
Estrutura de um programa simples em c++
• Diretivas do pré-processador• Definição de novas classes, se necessário• Protótipos • Variáveis globais (se necessárias)• Função principal (main)
– O programa, quando executado, inicia em uma função especial chamada main()
– No root, esta função especial deve ter o nome do arquivo.
• Ex. Se o arquivo chama teste.c, pode-se ter uma função teste()
• Outras funções
Estrutura de um programa simples em c++
• Diretivas do pré-processador• Definição de novas classes, se necessário• Protótipos • Variáveis globais (se necessárias)• Função principal (main)• Outras funções
– As outras funções que foram definidas através dos protótipos
Exemplo de um programa simples em c++// duas barras significam comentarios#include “file.h” // inclui o arquivo file.h#define PI 3.1415 //definição de uma constante
int func1(int);float area(float, float);
float var1; // variavel global
int main(){ int var2; // variavel local // codigo da funcao main()}int func1(int a){ int var3; // variavel local float var4; // variavel local // codigo da funcao func1}float area(float lado, float altura){ // codigo da funcao area}
Diretivas de pré-compilador
Prototipos de funcoes
Variáveis globais
Função main()
As outras funções do programa
Exemplo de um programa simples em c++// duas barras significam comentarios#include “file.h” // inclui o arquivo file.h#define PI 3.1415 //definição de uma constante
int func1(int);float area(float, float);
float var1; // variavel global
int main(){ int var2; // variavel local // codigo da funcao main()}int func1(int a){ int var3; // variavel local float var4; // variavel local // codigo da funcao func1}float area(float lado, float altura){ // codigo da funcao area}
{ e } definem funções ou blocos de programa.
; significa fim de comando
No c e c++, fim de comando são
representados por ; um comando pode
ocupar várias linhas de código até encontrar o ;
Palavras chave da linguágem
• C– Loops for, do, while – Decisão if, else– Múltipla escolha switch, case, break, default– Dados typedef, enum, struct, union– Desvio goto, return
• C++– Classes class, public, protected, private, inline,
pure, virtual, etc…• Poucas palavras chaves
– O c e c++ dependem de bibliotecas extras para grande parte das tarefas
Meu primeiro programa em c++
• Utilize o seu editor de textos favorito (vi, nedit, emacs, etc.)
• Entre no root e digiteroot [0]: .x hello.CHello Alexroot [1]: _
void hello(){ cout << “Hello Alex” << endl; return; }
Arquivo hello.C
Nome da função. Para ser executada com o
comando .x deve ter o mesmo nome do arquivo
Tipo de retorno da função
Funções ou blocos de programas são
encapsulados com { }
Separação de comandos são feitas através do ;
Variáveis em c++• As variáveis em c++ têm 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 C++ Root FortranVazio (0) void -Byte (1) char Char_t CHARACTER*1Curto (2) short Short_t INTEGER*2Inteiro (4) int Int_t INTEGER*4Longo (8) long Long_t INTEGER*8Real (4) float Float_t REAL*4
Dupla (8) double Double_t REAL*8
• Nomes de variáveis são sensíveis a maiúsculo/minúsculo• Em c++ vetores são definidos utilizando [ ] e são
indexados a partir do 0– Em fortran utiliza-se ( ) e os vetores são indexados a
partir do 1
Exemplos de variáveis
• Exemplos de definição de variáveisint a; Definição simplesint i,j,k; Definição múltiplafloat pi=3.1415, r0=1.2; Definição c/inicializaçãodouble a[10], b[5][20]; Definição de vetoresfloat c[5] = {1,2,3,4,5}; Definição c/inicializaçãofloat d[3][2] = {{1,2,3},{4,5,6}}; char texto[20] = “testando”;
• Não existem variáveis pré-definidas, como no FORTRAN
• Em compensação, variáveis podem ser definidas em qualquer ponto do programa
Comentários e IO básico• Comentários
– /* comentário de bloco */– // comentário de linha
• IO básico– Uso dos operadores >> (puxar) e <<
(empurrar)– cout/cin (vídeo e teclado)
cout << “Ola. 1 + 1 = “ << 1 + 1 << endl;int idade;cout << “Quantos anos voce tem? “;cin >> idade;int altura, peso;cout << “Qual a sua altura e peso? “;cin >> altura >> peso;
Muda de linha
Loops• for ( cond. inicial; condição de teste; alteração)
{ comandos }for(int i=0; i<10; i++)
{ int a = i*i; cout << i << “*” << i << “ = “ << a << endl; }
• do { alguma coisa } while ( condição de teste ); int i = 0; do { int a = i*i; cout << i << “*” << i << “ = “ << a << endl; i++; } while (i<10);• while ( condição de teste ) { alguma coisa } int i = 0; while (i<10) { int a = i*i; cout << i << “*” << i << “ = “ << a << endl; i++; }
if ... else• Condições
if ( condição ) comando; else outroComando;
if ( condição ) { comando1; comando2; } else { comando1; comando2;}– Operadores condicionais == (igual), != (diferente), || (or), && (and), ! (not),
etc.
O comando else é opcional
if (a<10) cout << “a é menor que 10” << endl;else cout << “não é menor que 10” << endl;
if(a>10 && a<20) cout <<“a entre 10 e 20”<<endl;
if(a!=10) cout <<“a é diferente de 10”<<endl;
Funções em c++• Funções permitem a compactação de um
programa, fazendo com que blocos repetitivos sejam tratados de forma isoladatipo nome(parametros){ comandos; return valor;}
• Exemplo: cálculo da área de um retângulofloat area(float lado1, float lado2){ float a = lado1*lado2; return a;}float l1,l2;cout << “Entre os lados do retângulo ”;cin >> l1 >> l2;cout << “A área desse retângulo é “ << area(l1,l2) <<endl;
Polimorfismo• Uma característica interessante em c é o polimorfismo. É
possível definir funções com mesmo nome mas parâmetros distintos.– O c se encarrega de decidir qual função chamar.
• Exemplo: cálculo da área de um retângulo e quadradofloat 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);
Como obter informações
• Vários tutoriais de ROOT em– http://www.dfn.if.usp.br/~suaide/pelletron/links.htm
• Referências e documentação do ROOT– http://root.cern.ch
• Página principal do root– http://root.cern.ch/root/Categories.html
• Documentação 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
Top Related