30
Alexandre Suaide aula 1 c++ e Root

Alexandre Suaide aula 1 c++ e Root. Ferramentas para análise de dados Paradigma 1 –Ferramentas prontas para executar tarefas específicas para análise

Embed Size (px)

Citation preview

Alexandre Suaideaula 1

c++ e Root

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

Exemplo prático: cálculo da seção de

choque de Rutherford

Exemplo prático: cálculo da seção de

choque de Rutherford

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