ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios
Grid
                 O Framework ROOT
B´sico
 a                 N˜o apenas para f´
                    a               ısicos
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
                    Marcelo Zimbres Silva
Op¸˜es
   co
                    B mzimbres@gmail.com
Sum´rio
   a




                Encontro do grupo C++ Brasil
Outline

   ROOT


                1   Introdu¸˜o
                            ca
Introdu¸˜o
       ca              Informa¸˜es importantes sobre o ROOT
                               co
Informa¸˜es
       co
Desafios                Os desafios do LHC
Grid

B´sico
 a
                       O Grid
Serializa¸˜o
         ca
HTML
TTree           2   T´picos b´sicos importantes.
                     o       a
Interpretador         Dicion´rios: Serializa¸˜o
                            a               ca
Porquˆe
Op¸˜es
   co                 Como gerar documenta¸˜o HTML
                                               ca
Sum´rio
   a
                      Como armazenar e processar dados

                3   Usando C++ interpretado
                      Vantagens e desvantagens de C++ interpretado
                      Cint e Cling
Outline

   ROOT


                1   Introdu¸˜o
                            ca
Introdu¸˜o
       ca              Informa¸˜es importantes sobre o ROOT
                               co
Informa¸˜es
       co
Desafios                Os desafios do LHC
Grid

B´sico
 a
                       O Grid
Serializa¸˜o
         ca
HTML
TTree           2   T´picos b´sicos importantes.
                     o       a
Interpretador         Dicion´rios: Serializa¸˜o
                            a               ca
Porquˆe
Op¸˜es
   co                 Como gerar documenta¸˜o HTML
                                               ca
Sum´rio
   a
                      Como armazenar e processar dados

                3   Usando C++ interpretado
                      Vantagens e desvantagens de C++ interpretado
                      Cint e Cling
Outline

   ROOT


                1   Introdu¸˜o
                            ca
Introdu¸˜o
       ca              Informa¸˜es importantes sobre o ROOT
                               co
Informa¸˜es
       co
Desafios                Os desafios do LHC
Grid

B´sico
 a
                       O Grid
Serializa¸˜o
         ca
HTML
TTree           2   T´picos b´sicos importantes.
                     o       a
Interpretador         Dicion´rios: Serializa¸˜o
                            a               ca
Porquˆe
Op¸˜es
   co                 Como gerar documenta¸˜o HTML
                                               ca
Sum´rio
   a
                      Como armazenar e processar dados

                3   Usando C++ interpretado
                      Vantagens e desvantagens de C++ interpretado
                      Cint e Cling
Informa¸oes sobre o ROOT
                       c˜

   ROOT
                Sobre o Framework:
                    2500 classes divididas em 100 shared libs.
Introdu¸˜o
       ca
Informa¸˜es
       co           7 desenvolvedores fixos mais Fermilab e colaboradores.
Desafios
Grid                Mais de 20.000 usu´rios.
                                      a
B´sico
 a
Serializa¸˜o
         ca         Iniciado em 1995. Licen¸a GNU LGPL.
                                           c
HTML
TTree           Desenvolvido no Cern:
Interpretador
Porquˆe             Labor´torio de f´
                         a          ısica de altas energias.
Op¸˜es
   co

Sum´rio
   a                Mesmo lugar onde inventaram o www . . .
                    . . . e tamb´m onde se criariam buracos negros.
                                e
                    LHC e Cern criaram ≈ 50 milh˜es de linhas de c´digo.
                                                o                 o
                    Membro do comite do padr˜o C++. Assim como o
                                            a
                    Fermilab
                    Usando C++ desde o come¸o dos anos 1990.
                                           c
Informa¸oes sobre o ROOT
                       c˜

   ROOT
                Sobre o Framework:
                    2500 classes divididas em 100 shared libs.
Introdu¸˜o
       ca
Informa¸˜es
       co           7 desenvolvedores fixos mais Fermilab e colaboradores.
Desafios
Grid                Mais de 20.000 usu´rios.
                                      a
B´sico
 a
Serializa¸˜o
         ca         Iniciado em 1995. Licen¸a GNU LGPL.
                                           c
HTML
TTree           Desenvolvido no Cern:
Interpretador
Porquˆe             Labor´torio de f´
                         a          ısica de altas energias.
Op¸˜es
   co

Sum´rio
   a                Mesmo lugar onde inventaram o www . . .
                    . . . e tamb´m onde se criariam buracos negros.
                                e
                    LHC e Cern criaram ≈ 50 milh˜es de linhas de c´digo.
                                                o                 o
                    Membro do comite do padr˜o C++. Assim como o
                                            a
                    Fermilab
                    Usando C++ desde o come¸o dos anos 1990.
                                           c
Caracter´
                        ısticas mais importantes

   ROOT
                    Salvar seus objetos em arquivo .root.
                    Armazenamento eficiente de dados.
Introdu¸˜o
       ca
Informa¸˜es
       co           Otimizado para acesso remoto.
Desafios
Grid                An´lise estat´
                       a         ıstica avan¸ada.
                                            c
B´sico
 a
Serializa¸˜o
         ca         Facilidades para processamento paralelo.
HTML
TTree               Visualiza¸˜o de gr´ficos 2D e 3D.
                             ca        a
Interpretador
Porquˆe         Classes em que vamos focar:
Op¸˜es
   co

Sum´rio
   a

                      TFile             TObject           Tree
                      cd                IsA               GetEntries
                      ls                IsOnHeap          MakeSelector
                      mkdir             Write             Process
                      rmdir             Draw              Fill
Caracter´
                        ısticas mais importantes

   ROOT
                    Salvar seus objetos em arquivo .root.
                    Armazenamento eficiente de dados.
Introdu¸˜o
       ca
Informa¸˜es
       co           Otimizado para acesso remoto.
Desafios
Grid                An´lise estat´
                       a         ıstica avan¸ada.
                                            c
B´sico
 a
Serializa¸˜o
         ca         Facilidades para processamento paralelo.
HTML
TTree               Visualiza¸˜o de gr´ficos 2D e 3D.
                             ca        a
Interpretador
Porquˆe         Classes em que vamos focar:
Op¸˜es
   co

Sum´rio
   a

                      TFile             TObject           Tree
                      cd                IsA               GetEntries
                      ls                IsOnHeap          MakeSelector
                      mkdir             Write             Process
                      rmdir             Draw              Fill
Motiva¸oes para se criar o ROOT
                      c˜

   ROOT         Como tudo come¸ou:
                              c
                    ”In the mid 90s, the fortram libraries had reached their
Introdu¸˜o
       ca           limits”
Informa¸˜es
       co
Desafios
Grid
                    ”They could not scale with the challenges offered by LHC”
B´sico
 a                  ”Computer science had made progresses in OO Design”
Serializa¸˜o
         ca
HTML
TTree
                N´meros:
                 u
Interpretador       Somente no CMS, armazenar 100 MB/s.
Porquˆe
Op¸˜es
   co
                    Armazenar e analisar 15 Peta bytes de dados por ano.
Sum´rio
   a
                    Peta = 1000*Tera = 106 Giga.
                    Suficiente para encher ≈ 3.4 milh˜es de DVDs.
                                                    o
                    O Cern ´ capaz de processar apenas 20% dos dados.
                           e

                           Somente com o grid isso seria poss´
                                                             ıvel!
Motiva¸oes para se criar o ROOT
                      c˜

   ROOT         Como tudo come¸ou:
                              c
                    ”In the mid 90s, the fortram libraries had reached their
Introdu¸˜o
       ca           limits”
Informa¸˜es
       co
Desafios
Grid
                    ”They could not scale with the challenges offered by LHC”
B´sico
 a                  ”Computer science had made progresses in OO Design”
Serializa¸˜o
         ca
HTML
TTree
                N´meros:
                 u
Interpretador       Somente no CMS, armazenar 100 MB/s.
Porquˆe
Op¸˜es
   co
                    Armazenar e analisar 15 Peta bytes de dados por ano.
Sum´rio
   a
                    Peta = 1000*Tera = 106 Giga.
                    Suficiente para encher ≈ 3.4 milh˜es de DVDs.
                                                    o
                    O Cern ´ capaz de processar apenas 20% dos dados.
                           e

                           Somente com o grid isso seria poss´
                                                             ıvel!
Motiva¸oes para se criar o ROOT
                      c˜

   ROOT         Como tudo come¸ou:
                              c
                    ”In the mid 90s, the fortram libraries had reached their
Introdu¸˜o
       ca           limits”
Informa¸˜es
       co
Desafios
Grid
                    ”They could not scale with the challenges offered by LHC”
B´sico
 a                  ”Computer science had made progresses in OO Design”
Serializa¸˜o
         ca
HTML
TTree
                N´meros:
                 u
Interpretador       Somente no CMS, armazenar 100 MB/s.
Porquˆe
Op¸˜es
   co
                    Armazenar e analisar 15 Peta bytes de dados por ano.
Sum´rio
   a
                    Peta = 1000*Tera = 106 Giga.
                    Suficiente para encher ≈ 3.4 milh˜es de DVDs.
                                                    o
                    O Cern ´ capaz de processar apenas 20% dos dados.
                           e

                           Somente com o grid isso seria poss´
                                                             ıvel!
Analise distribu´ em v´rios centros no Mundo
                                ıda   a
                Rede conhecida como: Grid


   ROOT

                 O Grid:
Introdu¸˜o
       ca                                   ca          ıses. O(105 ) CPUs.
                      140 centros de computa¸˜o em 34 pa´
Informa¸˜es
       co
Desafios
Grid
                      11 centros Tier-1. 160 Tier-2 (um em SP).
B´sico
 a                    Conex˜o de 10GB/s conectam os centros ao Cern.
                           a
Serializa¸˜o
         ca
HTML
TTree
                 Sprace (2012) em S˜o Paulo:
                                   a
Interpretador
Porquˆe
                      80 servidores totalizando 850 batch slots de
Op¸˜es
   co
                      processamento.
Sum´rio
   a
                      720 TB de armazenamento.
                      Conex˜o de 5 Gbps com o Fermilab provido pela ANSP.
                           a
                      Arquivos .root de alguns TB analisados no cluster.
                      Arquivos analisados da ordem de GB.
Analise distribu´ em v´rios centros no Mundo
                                ıda   a
                Rede conhecida como: Grid


   ROOT

                 O Grid:
Introdu¸˜o
       ca                                   ca          ıses. O(105 ) CPUs.
                      140 centros de computa¸˜o em 34 pa´
Informa¸˜es
       co
Desafios
Grid
                      11 centros Tier-1. 160 Tier-2 (um em SP).
B´sico
 a                    Conex˜o de 10GB/s conectam os centros ao Cern.
                           a
Serializa¸˜o
         ca
HTML
TTree
                 Sprace (2012) em S˜o Paulo:
                                   a
Interpretador
Porquˆe
                      80 servidores totalizando 850 batch slots de
Op¸˜es
   co
                      processamento.
Sum´rio
   a
                      720 TB de armazenamento.
                      Conex˜o de 5 Gbps com o Fermilab provido pela ANSP.
                           a
                      Arquivos .root de alguns TB analisados no cluster.
                      Arquivos analisados da ordem de GB.
Analise distribu´ em v´rios centros no Mundo
                                ıda   a
                Rede conhecida como: Grid


   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a
Outline

   ROOT


                1   Introdu¸˜o
                            ca
Introdu¸˜o
       ca              Informa¸˜es importantes sobre o ROOT
                               co
Informa¸˜es
       co
Desafios                Os desafios do LHC
Grid

B´sico
 a
                       O Grid
Serializa¸˜o
         ca
HTML
TTree           2   T´picos b´sicos importantes.
                     o       a
Interpretador         Dicion´rios: Serializa¸˜o
                            a               ca
Porquˆe
Op¸˜es
   co                 Como gerar documenta¸˜o HTML
                                               ca
Sum´rio
   a
                      Como armazenar e processar dados

                3   Usando C++ interpretado
                      Vantagens e desvantagens de C++ interpretado
                      Cint e Cling
O que n´s gostar´
                       o        ıamos de fazer em C++

   ROOT         Motiva¸˜o:
                      ca
                    Os experimentos usam C++ para analisar dados.
Introdu¸˜o
       ca
Informa¸˜es
       co
                    Dados s˜o objetos C++.
                            a
Desafios
Grid
                    Queremos salvar objetos e depois lˆ-los novamente.
                                                      e
B´sico
 a                  std::cout n˜o ´ uma op¸˜o para 15 PB.
                               a e        ca
Serializa¸˜o
         ca
HTML
TTree
                Gostar´
                      ıamos de poder salvar os objetos diretamente:
Interpretador
Porquˆ
Op¸˜es
   co
      e            TNamed* obj1 = new TNamed(”nome”);
Sum´rio
   a               ...
                   std::write(”arquivo.bin”,obj1);

                E ler os objetos da forma:
                   ...
                   TNamed* obj2 = std::read(”arquivo.bin”,”nome”);
O que n´s gostar´
                       o        ıamos de fazer em C++

   ROOT         Motiva¸˜o:
                      ca
                    Os experimentos usam C++ para analisar dados.
Introdu¸˜o
       ca
Informa¸˜es
       co
                    Dados s˜o objetos C++.
                            a
Desafios
Grid
                    Queremos salvar objetos e depois lˆ-los novamente.
                                                      e
B´sico
 a                  std::cout n˜o ´ uma op¸˜o para 15 PB.
                               a e        ca
Serializa¸˜o
         ca
HTML
TTree
                Gostar´
                      ıamos de poder salvar os objetos diretamente:
Interpretador
Porquˆ
Op¸˜es
   co
      e            TNamed* obj1 = new TNamed(”nome”);
Sum´rio
   a               ...
                   std::write(”arquivo.bin”,obj1);

                E ler os objetos da forma:
                   ...
                   TNamed* obj2 = std::read(”arquivo.bin”,”nome”);
O que n´s gostar´
                       o        ıamos de fazer em C++

   ROOT         Motiva¸˜o:
                      ca
                    Os experimentos usam C++ para analisar dados.
Introdu¸˜o
       ca
Informa¸˜es
       co
                    Dados s˜o objetos C++.
                            a
Desafios
Grid
                    Queremos salvar objetos e depois lˆ-los novamente.
                                                      e
B´sico
 a                  std::cout n˜o ´ uma op¸˜o para 15 PB.
                               a e        ca
Serializa¸˜o
         ca
HTML
TTree
                Gostar´
                      ıamos de poder salvar os objetos diretamente:
Interpretador
Porquˆ
Op¸˜es
   co
      e            TNamed* obj1 = new TNamed(”nome”);
Sum´rio
   a               ...
                   std::write(”arquivo.bin”,obj1);

                E ler os objetos da forma:
                   ...
                   TNamed* obj2 = std::read(”arquivo.bin”,”nome”);
Serializando um objeto no ROOT

   ROOT         Necess´rio:
                      a
                    Saber o tipo do objeto: RTTI.                  Esquema:
Introdu¸˜o
       ca
Informa¸˜es
       co           Quais os atributos do tipo: Reflex˜o
                                                     a
Desafios
Grid                Quais os tamanhos dos atributos: Plataforma.    Header
B´sico
 a
Serializa¸˜o
         ca         Onde os atributos est˜o na mem´ria:
                                         a        o
HTML
TTree               Introspec¸˜o
                             ca
Interpretador                                                        Parser
Porquˆe
                    Muito al´m do que C++ oferece.
                            e
Op¸˜es
   co

Sum´rio
   a
                    Precisamos de ”dicion´rios” para descrever o
                                         a
                    c´digo.
                     o
                                                                   Dicionario
                O ROOT usa ”Dicion´rios”:
                                  a
                    C´digo C++ que descreve os tipos.
                     o
                    Gerado com informa¸˜o dos headers.
                                      ca                              I/O
                    20% TClass, 30% reflex˜o, 50% stubs.
                                         a
Serializando um objeto no ROOT

   ROOT         Necess´rio:
                      a
                    Saber o tipo do objeto: RTTI.                  Esquema:
Introdu¸˜o
       ca
Informa¸˜es
       co           Quais os atributos do tipo: Reflex˜o
                                                     a
Desafios
Grid                Quais os tamanhos dos atributos: Plataforma.    Header
B´sico
 a
Serializa¸˜o
         ca         Onde os atributos est˜o na mem´ria:
                                         a        o
HTML
TTree               Introspec¸˜o
                             ca
Interpretador                                                        Parser
Porquˆe
                    Muito al´m do que C++ oferece.
                            e
Op¸˜es
   co

Sum´rio
   a
                    Precisamos de ”dicion´rios” para descrever o
                                         a
                    c´digo.
                     o
                                                                   Dicionario
                O ROOT usa ”Dicion´rios”:
                                  a
                    C´digo C++ que descreve os tipos.
                     o
                    Gerado com informa¸˜o dos headers.
                                      ca                              I/O
                    20% TClass, 30% reflex˜o, 50% stubs.
                                         a
Como gerar dicion´rios.
                                 a

   ROOT

                Declarando a classe:
Introdu¸˜o
       ca           Macros ClassDef e ClassImp:                       TObject
Informa¸˜es
       co
Desafios             TObject: Protocolo para as classes.
Grid                                                                   Write
B´sico
 a
Serializa¸˜o
         ca          class pessoa: public TNamed {
HTML
TTree                  private:
                                                                      TNamed
Interpretador          int fIdade;
Porquˆ
Op¸˜es
   co
      e
                       public:
                                                                      GetName
Sum´rio
   a                   pessoa(): TNamed(”Marcelo”), fIdade(31) {}
                       ˜pessoa() {}
                                                                       pessoa
                       int GetIdade() const {return fIdade;}
                       ClassDef(pessoa,1);                            GetIdade
                     }; // Adicionar ClassImp(pessoa); a pessoa.cxx
Como gerar dicion´rios.
                                 a

   ROOT

                Declarando a classe:
Introdu¸˜o
       ca           Macros ClassDef e ClassImp:                       TObject
Informa¸˜es
       co
Desafios             TObject: Protocolo para as classes.
Grid                                                                   Write
B´sico
 a
Serializa¸˜o
         ca          class pessoa: public TNamed {
HTML
TTree                  private:
                                                                      TNamed
Interpretador          int fIdade;
Porquˆ
Op¸˜es
   co
      e
                       public:
                                                                      GetName
Sum´rio
   a                   pessoa(): TNamed(”Marcelo”), fIdade(31) {}
                       ˜pessoa() {}
                                                                       pessoa
                       int GetIdade() const {return fIdade;}
                       ClassDef(pessoa,1);                            GetIdade
                     }; // Adicionar ClassImp(pessoa); a pessoa.cxx
Exemplo do c´digo para salvar seus objetos
                            o
                Arquivos .root


   ROOT

                Salvando:
Introdu¸˜o
       ca
Informa¸˜es
       co
                         TFile f(”familia.root”,”recreate”);   TObject
Desafios                  pessoa pai(”Jo˜o”);
                                       a
Grid                                                            Write
B´sico
 a                       pessoa mae(”Maria”);
Serializa¸˜o
         ca
                         pai.Write();
HTML
TTree
                         mae.Write();                          TNamed
Interpretador
Porquˆ
Op¸˜es
   co
      e
                                                               GetName
Sum´rio
   a            Lendo:

                         TFile f(”familia.root”);               pessoa
                         TObject* obj1 = f.Get(”Jo˜o”);
                                                  a
                                                               GetIdade
                         TObject* obj2 = f.Get(”Maria”);
Exemplo do c´digo para salvar seus objetos
                            o
                Arquivos .root


   ROOT

                Salvando:
Introdu¸˜o
       ca
Informa¸˜es
       co
                         TFile f(”familia.root”,”recreate”);   TObject
Desafios                  pessoa pai(”Jo˜o”);
                                       a
Grid                                                            Write
B´sico
 a                       pessoa mae(”Maria”);
Serializa¸˜o
         ca
                         pai.Write();
HTML
TTree
                         mae.Write();                          TNamed
Interpretador
Porquˆ
Op¸˜es
   co
      e
                                                               GetName
Sum´rio
   a            Lendo:

                         TFile f(”familia.root”);               pessoa
                         TObject* obj1 = f.Get(”Jo˜o”);
                                                  a
                                                               GetIdade
                         TObject* obj2 = f.Get(”Maria”);
Um arquivo .root ´ parecido com um diret´rio
                                 e                      o
                Unix
   ROOT

                                                                      TObject
Introdu¸˜o
       ca
                Para gerar um arquivo com diret´rios:
                                               o
Informa¸˜es
       co
Desafios
Grid
                   TFile social(”pessoas.root”,”recreate”);
                   TDirectory* familia = social.mkdir(”familia”);     TNamed
B´sico
 a
Serializa¸˜o
         ca
                   TDirectory* amigos = social.mkdir(”amigos”);
HTML               pessoa* irma = new pessoa(”Fernanda”,29);
TTree
                   pessoa* rafael = new pessoa(”Rafael”,31);
Interpretador      familia->Add(irma);                               TDirectory
Porquˆe            amigos->Add(rafael);
Op¸˜es
   co

Sum´rio
   a

                Importante:
                                                                    TDirectoryFile
                    N˜o precisa deletar os ponteiros.
                     a
                    Objetos ser˜o escritos no arquivo.
                               a
                                                                        TFile
Novos m´todos para RTTI definidos
                       e

   ROOT


                                             TDictionary
                 pessoa
Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios          idade
Grid

B´sico
 a
                 GetIdade
Serializa¸˜o
         ca      IsA                TClass                   TDataType
HTML
TTree            ClassName
Interpretador
Porquˆe
                 DclFileName
Op¸˜es
   co            ImplFileName
Sum´rio
   a
                 ImplFileLine
                                                           TBaseClass
                 DclFileLine
                                 TDataMember

                                                 TMethod
Novos m´todos para RTTI definidos
                       e

   ROOT


                                             TDictionary
                 pessoa
Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios          idade
Grid

B´sico
 a
                 GetIdade
Serializa¸˜o
         ca      IsA                TClass                   TDataType
HTML
TTree            ClassName
Interpretador
Porquˆe
                 DclFileName
Op¸˜es
   co            ImplFileName
Sum´rio
   a
                 ImplFileLine
                                                           TBaseClass
                 DclFileLine
                                 TDataMember

                                                 TMethod
Exemplo com a classe pessoa

   ROOT



                Programa:
Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios               pessoa a;
Grid                  cout << ”Decl:    ”<<   a.DeclFileName() << ”n”
B´sico
 a                         << ”Linha:   ”<<   a.DeclFileLine() << ”n”
Serializa¸˜o
         ca                << ”Imple:   ”<<   a.ImpFileName() << ”n”
HTML
TTree
                           << ”Linha:   ”<<   a.ImpFileLine() << endl;
Interpretador
Porquˆe
Op¸˜es
   co           Output:
Sum´rio
   a
                      Header: /home/marcelo/misc/./pessoa.h
                      Linha: 31
                      Imple: /home/marcelo/misc/./pessoa.cxx
                      Linha: 3
Exemplo com a classe pessoa

   ROOT



                Programa:
Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios               pessoa a;
Grid                  cout << ”Decl:    ”<<   a.DeclFileName() << ”n”
B´sico
 a                         << ”Linha:   ”<<   a.DeclFileLine() << ”n”
Serializa¸˜o
         ca                << ”Imple:   ”<<   a.ImpFileName() << ”n”
HTML
TTree
                           << ”Linha:   ”<<   a.ImpFileLine() << endl;
Interpretador
Porquˆe
Op¸˜es
   co           Output:
Sum´rio
   a
                      Header: /home/marcelo/misc/./pessoa.h
                      Linha: 31
                      Imple: /home/marcelo/misc/./pessoa.cxx
                      Linha: 3
Encontrar a idade sem usar o getter.

   ROOT
                Econtrando a idade com RTTI:

Introdu¸˜o
       ca                 pessoa p(”Marcelo”,31);
Informa¸˜es
       co
Desafios                   TClass* c = p.IsA();
Grid
                          TDataMember* dm = c->GetDataMember(”fIdade”);
B´sico
 a
Serializa¸˜o
         ca               TMethodCall* getter = dm->GetterMethod(c);
HTML
TTree                     Long t idade;
Interpretador             getter->Execute(&p,””,idade);
Porquˆe
Op¸˜es
   co                     cout << ”Idade: ”<< idade << endl;
Sum´rio
   a




                Output:

                  Idade: 31
Gerando dicion´rios, compilando e ligando.
                              a

   ROOT


                Para gerar os dicion´rios:
                                    a
Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios                       $ rootcint -f dicionario.cxx -c pessoa.h && ls
Grid
                              dicionario.cxx dicionario.h pessoa.cxx pessoa.h
B´sico
 a
Serializa¸˜o
         ca                   $ wc -l dicionario.h && wc -l dicionario.cxx
HTML
TTree                         53 dicionario.h
Interpretador                 639 dicionario.cxx
Porquˆe
Op¸˜es
   co

Sum´rio
   a
                Compilar e ligar(Comparem com Qt):
                  1   Comando: root-config –cflags –libs
                  2   Macro Autoconf: ROOT PATH e ROOT FEATURE
                  3   Interpretador: .L pessoa.cxx+
Gerando documenta¸˜o para a classe pessoa
                                 ca

   ROOT            THtml h;
                   h.SetProductName(”Encontro CppBrasil”);
                   h.MakeIndex();
Introdu¸˜o
       ca          h.MakeAll();
Informa¸˜es
       co
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a
Exemplo de outro pacote com mais classes

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a
Header

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a
Header com m´todos da classe base
                            e

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a
M´todos e atributos da classe pessoa
                 e

   ROOT
                                                     TObject                                       TNamed            pessoa
                           fUniqueID             kIsReferenced      kZombie               fName             fIdade
                           fBits                 kHasUUID           kBitMask              fTitle            fgIsA
                           fgDtorOnly            kCannotPick        kSingleKey            fgIsA
                           fgObjectStat          kNoContextMenu     kOverwrite
                                                                                                            @~pessoa
                           kCanDelete            kInvalidObject     kWriteDelete
                                                                                          @~TNamed          pessoa
                           kMustCleanup          kIsOnHeap          fgIsA
                                                                                          TNamed            GetIdade
                           kObjInCanvas          kNotDeleted
Introdu¸˜o
       ca                  @~TObject             GetObjectInfo      operator new@[@]
                                                                                          TNamed
                                                                                          TNamed
                                                                                                            Class
                                                                                                            Class_Name
                           MakeZombie            GetTitle           operator delete       TNamed            IsA
Informa¸˜es
       co                  DoError               HandleTimer        operator delete@[@]   operator=         ShowMembers
                           TObject               Hash               operator delete       Clear             Streamer
Desafios                    TObject               InheritsFrom       operator delete@[@]   Clone             StreamerNVirtual
                           operator=             InheritsFrom       SetBit                Compare
Grid                       AppendPad             Inspect            SetBit                Copy
                           Browse                IsFolder           ResetBit              FillBuffer
                           ClassName             IsEqual            TestBit               GetName
B´sico
 a                         Clear
                           Clone
                                                 IsSortable
                                                 IsOnHeap
                                                                    TestBits
                                                                    InvertBit
                                                                                          GetTitle
                                                                                          Hash
                           Compare               IsZombie           Info                  IsSortable
Serializa¸˜o
         ca                Copy                  Notify             Warning               SetName
                           Delete                ls                 Error                 SetNameTitle
HTML                       DistancetoPrimitive   Paint              SysError              SetTitle
                           Draw                  Pop                Fatal                 ls
TTree                      DrawClass             Print              AbstractMethod        Print
                           DrawClone             Read               MayNotUse             Sizeof
                           Dump                  RecursiveRemove    Obsolete              Class
Interpretador              Execute
                           Execute
                                                 SaveAs
                                                 SavePrimitive
                                                                    GetDtorOnly
                                                                    SetDtorOnly
                                                                                          Class_Name
                                                                                          IsA
                           ExecuteEvent          SetDrawOption      GetObjectStat         ShowMembers
Porquˆe                    FindObject            SetUniqueID        SetObjectStat
                           FindObject            UseCurrentStyle    Class
Op¸˜es
   co                      GetDrawOption         Write              Class_Name
                           GetUniqueID           Write              IsA
                           GetName               operator new       ShowMembers
Sum´rio
   a                       GetIconName
                           GetOption
                                                 operator new@[@]
                                                 operator new
Salvando objetos de mesma classe
                TTree


   ROOT

                 Classe TTree:
Introdu¸˜o
       ca               Lˆ os dados por partes conforme o programa precisa.
                         e
Informa¸˜es
       co
Desafios
Grid
                        Eficiente para ”Salvar uma vez” e ”Ler muitas”.
B´sico
 a                      Projetado para armazenar enormes quantidades de dados.
Serializa¸˜o
         ca
HTML
TTree
                        Otimizada para acesso remoto.
Interpretador           Facilidades para encadear muitos arquivos. TChain
Porquˆe
Op¸˜es
   co                   Facilidade para processamento paralelo. TProof
Sum´rio
   a

                             TNtuple tuple(”cot”,”Embraer”,”dia:preabe:...”);
                             for (...)
                                tuple.Fill(...);
                             TFile f(”embraer.root”,”recreate”);
                             tuple.Write();
Exemplo de como analisar dados
                S´rie hist´rica 2000 - 2011, Embraer (Bovespa)
                 e        o


   ROOT

                     TTree* t = (TTree*)f.Get(”Embraer”);
                     t->Draw(”premax:dia”);
Introdu¸˜o
       ca            t->Draw(”premax”);
Informa¸˜es
       co            t->Draw(”premax-premin:dia”);
                                                                 TObject
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree
                                                                 TNamed
Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a                                                             TTree


                                                                 TNtuple
Exemplo de como analisar dados (Com v´
                                                     ınculos)
                S´rie hist´rica 2000 - 2011, Embraer (Bovespa)
                 e        o


   ROOT

                    TTree* t = (TTree*)f.Get(”Embraer”);
                    t->Draw(”premax:dia”,”premax > 1.025*preabe”);
Introdu¸˜o
       ca           t->Draw(”premax”,”premax > 1.025*preabe”);
Informa¸˜es
       co           t->Draw(”premax-premin:dia”,”preult > 1.03*preabe”);
                                                                           TObject
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree
                                                                           TNamed
Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a                                                                       TTree


                                                                           TNtuple
Se¸˜o no Interpretador Cint.
                  ca

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co
Desafios
Grid

B´sico
 a
Serializa¸˜o
         ca
HTML
TTree

Interpretador
Porquˆe
Op¸˜es
   co

Sum´rio
   a
Analisando v´rias TTree’s: PROOF
                            a
                Processamento paralelo


   ROOT
                 Desafio:
                      1.5 PB de dados por ano.
Introdu¸˜o
       ca
Informa¸˜es
       co             Processando 15 MB/s, em um n´cleo levaria anos.
                                                  u
Desafios
Grid
                 PROOF: Paralel ROOT Facility
B´sico
 a
Serializa¸˜o
HTML
         ca
                      Grande quantidade de eventos em centenas de CPUs.
TTree

Interpretador
                      Divide o trabalho em N eventos por CPU.
Porquˆe
Op¸˜es
   co
                            TChain *c = new TChain(”myTree”);
Sum´rio
   a
                            c->Add(”http://www.algum lugar/arquivo1.root”);
                            c->Add(”http://www.algum lugar/arquivo2.root”);
                            c->Add(”http://www.algum lugar/arquivo3.root”);
                            TProof::Open(”lite”); // <=== Importante
                            c->SetProof();
                            c->Process(”Selector.c+”);
Outline

   ROOT


                1   Introdu¸˜o
                            ca
Introdu¸˜o
       ca              Informa¸˜es importantes sobre o ROOT
                               co
Informa¸˜es
       co
Desafios                Os desafios do LHC
Grid

B´sico
 a
                       O Grid
Serializa¸˜o
         ca
HTML
TTree           2   T´picos b´sicos importantes.
                     o       a
Interpretador         Dicion´rios: Serializa¸˜o
                            a               ca
Porquˆe
Op¸˜es
   co                 Como gerar documenta¸˜o HTML
                                               ca
Sum´rio
   a
                      Como armazenar e processar dados

                3   Usando C++ interpretado
                      Vantagens e desvantagens de C++ interpretado
                      Cint e Cling
Compilado versus interpretado

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co         1   Interpretado:
Desafios
Grid
                          R´pido para experimentar.
                           a
B´sico
 a
Serializa¸˜o
         ca
                          R´pido para ”Editar → Rodar → Testar → Editar”
                           a
HTML                      Escrever um script ´ mais f´cil.
                                             e       a
TTree
                          N˜o precisa compilar e ligar.
                           a
Interpretador
Porquˆe
Op¸˜es
   co             2   Compilado:
Sum´rio
   a
                          Execu¸˜o mais r´pida.
                                ca        a
                          O interpretador tem limita¸˜es.
                                                    co
                          Validar o c´digo.
                                     o
Compilado versus interpretado

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co         1   Interpretado:
Desafios
Grid
                          R´pido para experimentar.
                           a
B´sico
 a
Serializa¸˜o
         ca
                          R´pido para ”Editar → Rodar → Testar → Editar”
                           a
HTML                      Escrever um script ´ mais f´cil.
                                             e       a
TTree
                          N˜o precisa compilar e ligar.
                           a
Interpretador
Porquˆe
Op¸˜es
   co             2   Compilado:
Sum´rio
   a
                          Execu¸˜o mais r´pida.
                                ca        a
                          O interpretador tem limita¸˜es.
                                                    co
                          Validar o c´digo.
                                     o
Cint e Cling

   ROOT
                Cint:

Introdu¸˜o
       ca
                    400.000 linhas de c´digo
                                       o
Informa¸˜es
Desafios
       co
                    ”It is used in production by several companies in the
Grid
                    banking, integrated devices, and even gaming
B´sico
 a
Serializa¸˜o
         ca         environment”
HTML
TTree               Quase todo ANSI C e iso C++ 2003.
Interpretador
Porquˆe             Pode chamar classes compiladas.
Op¸˜es
   co

Sum´rio
   a                C´digo compilado pode chamar c´digo interpretado.
                     o                            o
                Cling:
                    Baseado no LLVM e Clang.
                    Projetado com os anos de experiˆncia com o Cint.
                                                   e
                    ´
                    E na verdade um ”Incremental compiler”
Calculadora de bolso

   ROOT




Introdu¸˜o
       ca       Uso Simples:
Informa¸˜es
       co
Desafios
Grid
                 root sqrt(2)
B´sico
 a               (const double)1.41421356237309515e+00
Serializa¸˜o
         ca
HTML             root double a = TMath::Pi()/4
TTree
                 root sin(a)
Interpretador
Porquˆe          (const double)7.07106781186547462e-01
Op¸˜es
   co
                 root
Sum´rio
   a

                Misturando interpretado e compilado:
                 root gROOT->ProcessLine(”pessoa a;a.GetIdade()”)
Sum´rio
                   a

   ROOT




Introdu¸˜o
       ca
Informa¸˜es
       co           Serializa¸˜o de objetos.
                             ca
Desafios
Grid
                    Armazenamento e an´lise eficiente de dados.
                                      a
B´sico
 a
Serializa¸˜o
         ca         An´lise estat´
                      a          ıstica e visualiza¸˜o dos dados.
                                                   ca
HTML
TTree

Interpretador
Porquˆ
Op¸˜es
   co
      e
                Muito mais do que o que foi apresentado aqui:
Sum´rio
   a                Graphical User Interface.
                    Est´ sendo portado para iOS.
                       a
                    Implementa¸˜o do mecanismo Signal Slot
                              ca

root

  • 1.
    ROOT Introdu¸˜o ca Informa¸˜es co Desafios Grid O Framework ROOT B´sico a N˜o apenas para f´ a ısicos Serializa¸˜o ca HTML TTree Interpretador Porquˆe Marcelo Zimbres Silva Op¸˜es co B mzimbres@gmail.com Sum´rio a Encontro do grupo C++ Brasil
  • 2.
    Outline ROOT 1 Introdu¸˜o ca Introdu¸˜o ca Informa¸˜es importantes sobre o ROOT co Informa¸˜es co Desafios Os desafios do LHC Grid B´sico a O Grid Serializa¸˜o ca HTML TTree 2 T´picos b´sicos importantes. o a Interpretador Dicion´rios: Serializa¸˜o a ca Porquˆe Op¸˜es co Como gerar documenta¸˜o HTML ca Sum´rio a Como armazenar e processar dados 3 Usando C++ interpretado Vantagens e desvantagens de C++ interpretado Cint e Cling
  • 3.
    Outline ROOT 1 Introdu¸˜o ca Introdu¸˜o ca Informa¸˜es importantes sobre o ROOT co Informa¸˜es co Desafios Os desafios do LHC Grid B´sico a O Grid Serializa¸˜o ca HTML TTree 2 T´picos b´sicos importantes. o a Interpretador Dicion´rios: Serializa¸˜o a ca Porquˆe Op¸˜es co Como gerar documenta¸˜o HTML ca Sum´rio a Como armazenar e processar dados 3 Usando C++ interpretado Vantagens e desvantagens de C++ interpretado Cint e Cling
  • 4.
    Outline ROOT 1 Introdu¸˜o ca Introdu¸˜o ca Informa¸˜es importantes sobre o ROOT co Informa¸˜es co Desafios Os desafios do LHC Grid B´sico a O Grid Serializa¸˜o ca HTML TTree 2 T´picos b´sicos importantes. o a Interpretador Dicion´rios: Serializa¸˜o a ca Porquˆe Op¸˜es co Como gerar documenta¸˜o HTML ca Sum´rio a Como armazenar e processar dados 3 Usando C++ interpretado Vantagens e desvantagens de C++ interpretado Cint e Cling
  • 5.
    Informa¸oes sobre oROOT c˜ ROOT Sobre o Framework: 2500 classes divididas em 100 shared libs. Introdu¸˜o ca Informa¸˜es co 7 desenvolvedores fixos mais Fermilab e colaboradores. Desafios Grid Mais de 20.000 usu´rios. a B´sico a Serializa¸˜o ca Iniciado em 1995. Licen¸a GNU LGPL. c HTML TTree Desenvolvido no Cern: Interpretador Porquˆe Labor´torio de f´ a ısica de altas energias. Op¸˜es co Sum´rio a Mesmo lugar onde inventaram o www . . . . . . e tamb´m onde se criariam buracos negros. e LHC e Cern criaram ≈ 50 milh˜es de linhas de c´digo. o o Membro do comite do padr˜o C++. Assim como o a Fermilab Usando C++ desde o come¸o dos anos 1990. c
  • 6.
    Informa¸oes sobre oROOT c˜ ROOT Sobre o Framework: 2500 classes divididas em 100 shared libs. Introdu¸˜o ca Informa¸˜es co 7 desenvolvedores fixos mais Fermilab e colaboradores. Desafios Grid Mais de 20.000 usu´rios. a B´sico a Serializa¸˜o ca Iniciado em 1995. Licen¸a GNU LGPL. c HTML TTree Desenvolvido no Cern: Interpretador Porquˆe Labor´torio de f´ a ısica de altas energias. Op¸˜es co Sum´rio a Mesmo lugar onde inventaram o www . . . . . . e tamb´m onde se criariam buracos negros. e LHC e Cern criaram ≈ 50 milh˜es de linhas de c´digo. o o Membro do comite do padr˜o C++. Assim como o a Fermilab Usando C++ desde o come¸o dos anos 1990. c
  • 7.
    Caracter´ ısticas mais importantes ROOT Salvar seus objetos em arquivo .root. Armazenamento eficiente de dados. Introdu¸˜o ca Informa¸˜es co Otimizado para acesso remoto. Desafios Grid An´lise estat´ a ıstica avan¸ada. c B´sico a Serializa¸˜o ca Facilidades para processamento paralelo. HTML TTree Visualiza¸˜o de gr´ficos 2D e 3D. ca a Interpretador Porquˆe Classes em que vamos focar: Op¸˜es co Sum´rio a TFile TObject Tree cd IsA GetEntries ls IsOnHeap MakeSelector mkdir Write Process rmdir Draw Fill
  • 8.
    Caracter´ ısticas mais importantes ROOT Salvar seus objetos em arquivo .root. Armazenamento eficiente de dados. Introdu¸˜o ca Informa¸˜es co Otimizado para acesso remoto. Desafios Grid An´lise estat´ a ıstica avan¸ada. c B´sico a Serializa¸˜o ca Facilidades para processamento paralelo. HTML TTree Visualiza¸˜o de gr´ficos 2D e 3D. ca a Interpretador Porquˆe Classes em que vamos focar: Op¸˜es co Sum´rio a TFile TObject Tree cd IsA GetEntries ls IsOnHeap MakeSelector mkdir Write Process rmdir Draw Fill
  • 9.
    Motiva¸oes para secriar o ROOT c˜ ROOT Como tudo come¸ou: c ”In the mid 90s, the fortram libraries had reached their Introdu¸˜o ca limits” Informa¸˜es co Desafios Grid ”They could not scale with the challenges offered by LHC” B´sico a ”Computer science had made progresses in OO Design” Serializa¸˜o ca HTML TTree N´meros: u Interpretador Somente no CMS, armazenar 100 MB/s. Porquˆe Op¸˜es co Armazenar e analisar 15 Peta bytes de dados por ano. Sum´rio a Peta = 1000*Tera = 106 Giga. Suficiente para encher ≈ 3.4 milh˜es de DVDs. o O Cern ´ capaz de processar apenas 20% dos dados. e Somente com o grid isso seria poss´ ıvel!
  • 10.
    Motiva¸oes para secriar o ROOT c˜ ROOT Como tudo come¸ou: c ”In the mid 90s, the fortram libraries had reached their Introdu¸˜o ca limits” Informa¸˜es co Desafios Grid ”They could not scale with the challenges offered by LHC” B´sico a ”Computer science had made progresses in OO Design” Serializa¸˜o ca HTML TTree N´meros: u Interpretador Somente no CMS, armazenar 100 MB/s. Porquˆe Op¸˜es co Armazenar e analisar 15 Peta bytes de dados por ano. Sum´rio a Peta = 1000*Tera = 106 Giga. Suficiente para encher ≈ 3.4 milh˜es de DVDs. o O Cern ´ capaz de processar apenas 20% dos dados. e Somente com o grid isso seria poss´ ıvel!
  • 11.
    Motiva¸oes para secriar o ROOT c˜ ROOT Como tudo come¸ou: c ”In the mid 90s, the fortram libraries had reached their Introdu¸˜o ca limits” Informa¸˜es co Desafios Grid ”They could not scale with the challenges offered by LHC” B´sico a ”Computer science had made progresses in OO Design” Serializa¸˜o ca HTML TTree N´meros: u Interpretador Somente no CMS, armazenar 100 MB/s. Porquˆe Op¸˜es co Armazenar e analisar 15 Peta bytes de dados por ano. Sum´rio a Peta = 1000*Tera = 106 Giga. Suficiente para encher ≈ 3.4 milh˜es de DVDs. o O Cern ´ capaz de processar apenas 20% dos dados. e Somente com o grid isso seria poss´ ıvel!
  • 12.
    Analise distribu´ emv´rios centros no Mundo ıda a Rede conhecida como: Grid ROOT O Grid: Introdu¸˜o ca ca ıses. O(105 ) CPUs. 140 centros de computa¸˜o em 34 pa´ Informa¸˜es co Desafios Grid 11 centros Tier-1. 160 Tier-2 (um em SP). B´sico a Conex˜o de 10GB/s conectam os centros ao Cern. a Serializa¸˜o ca HTML TTree Sprace (2012) em S˜o Paulo: a Interpretador Porquˆe 80 servidores totalizando 850 batch slots de Op¸˜es co processamento. Sum´rio a 720 TB de armazenamento. Conex˜o de 5 Gbps com o Fermilab provido pela ANSP. a Arquivos .root de alguns TB analisados no cluster. Arquivos analisados da ordem de GB.
  • 13.
    Analise distribu´ emv´rios centros no Mundo ıda a Rede conhecida como: Grid ROOT O Grid: Introdu¸˜o ca ca ıses. O(105 ) CPUs. 140 centros de computa¸˜o em 34 pa´ Informa¸˜es co Desafios Grid 11 centros Tier-1. 160 Tier-2 (um em SP). B´sico a Conex˜o de 10GB/s conectam os centros ao Cern. a Serializa¸˜o ca HTML TTree Sprace (2012) em S˜o Paulo: a Interpretador Porquˆe 80 servidores totalizando 850 batch slots de Op¸˜es co processamento. Sum´rio a 720 TB de armazenamento. Conex˜o de 5 Gbps com o Fermilab provido pela ANSP. a Arquivos .root de alguns TB analisados no cluster. Arquivos analisados da ordem de GB.
  • 14.
    Analise distribu´ emv´rios centros no Mundo ıda a Rede conhecida como: Grid ROOT Introdu¸˜o ca Informa¸˜es co Desafios Grid B´sico a Serializa¸˜o ca HTML TTree Interpretador Porquˆe Op¸˜es co Sum´rio a
  • 15.
    Outline ROOT 1 Introdu¸˜o ca Introdu¸˜o ca Informa¸˜es importantes sobre o ROOT co Informa¸˜es co Desafios Os desafios do LHC Grid B´sico a O Grid Serializa¸˜o ca HTML TTree 2 T´picos b´sicos importantes. o a Interpretador Dicion´rios: Serializa¸˜o a ca Porquˆe Op¸˜es co Como gerar documenta¸˜o HTML ca Sum´rio a Como armazenar e processar dados 3 Usando C++ interpretado Vantagens e desvantagens de C++ interpretado Cint e Cling
  • 16.
    O que n´sgostar´ o ıamos de fazer em C++ ROOT Motiva¸˜o: ca Os experimentos usam C++ para analisar dados. Introdu¸˜o ca Informa¸˜es co Dados s˜o objetos C++. a Desafios Grid Queremos salvar objetos e depois lˆ-los novamente. e B´sico a std::cout n˜o ´ uma op¸˜o para 15 PB. a e ca Serializa¸˜o ca HTML TTree Gostar´ ıamos de poder salvar os objetos diretamente: Interpretador Porquˆ Op¸˜es co e TNamed* obj1 = new TNamed(”nome”); Sum´rio a ... std::write(”arquivo.bin”,obj1); E ler os objetos da forma: ... TNamed* obj2 = std::read(”arquivo.bin”,”nome”);
  • 17.
    O que n´sgostar´ o ıamos de fazer em C++ ROOT Motiva¸˜o: ca Os experimentos usam C++ para analisar dados. Introdu¸˜o ca Informa¸˜es co Dados s˜o objetos C++. a Desafios Grid Queremos salvar objetos e depois lˆ-los novamente. e B´sico a std::cout n˜o ´ uma op¸˜o para 15 PB. a e ca Serializa¸˜o ca HTML TTree Gostar´ ıamos de poder salvar os objetos diretamente: Interpretador Porquˆ Op¸˜es co e TNamed* obj1 = new TNamed(”nome”); Sum´rio a ... std::write(”arquivo.bin”,obj1); E ler os objetos da forma: ... TNamed* obj2 = std::read(”arquivo.bin”,”nome”);
  • 18.
    O que n´sgostar´ o ıamos de fazer em C++ ROOT Motiva¸˜o: ca Os experimentos usam C++ para analisar dados. Introdu¸˜o ca Informa¸˜es co Dados s˜o objetos C++. a Desafios Grid Queremos salvar objetos e depois lˆ-los novamente. e B´sico a std::cout n˜o ´ uma op¸˜o para 15 PB. a e ca Serializa¸˜o ca HTML TTree Gostar´ ıamos de poder salvar os objetos diretamente: Interpretador Porquˆ Op¸˜es co e TNamed* obj1 = new TNamed(”nome”); Sum´rio a ... std::write(”arquivo.bin”,obj1); E ler os objetos da forma: ... TNamed* obj2 = std::read(”arquivo.bin”,”nome”);
  • 19.
    Serializando um objetono ROOT ROOT Necess´rio: a Saber o tipo do objeto: RTTI. Esquema: Introdu¸˜o ca Informa¸˜es co Quais os atributos do tipo: Reflex˜o a Desafios Grid Quais os tamanhos dos atributos: Plataforma. Header B´sico a Serializa¸˜o ca Onde os atributos est˜o na mem´ria: a o HTML TTree Introspec¸˜o ca Interpretador Parser Porquˆe Muito al´m do que C++ oferece. e Op¸˜es co Sum´rio a Precisamos de ”dicion´rios” para descrever o a c´digo. o Dicionario O ROOT usa ”Dicion´rios”: a C´digo C++ que descreve os tipos. o Gerado com informa¸˜o dos headers. ca I/O 20% TClass, 30% reflex˜o, 50% stubs. a
  • 20.
    Serializando um objetono ROOT ROOT Necess´rio: a Saber o tipo do objeto: RTTI. Esquema: Introdu¸˜o ca Informa¸˜es co Quais os atributos do tipo: Reflex˜o a Desafios Grid Quais os tamanhos dos atributos: Plataforma. Header B´sico a Serializa¸˜o ca Onde os atributos est˜o na mem´ria: a o HTML TTree Introspec¸˜o ca Interpretador Parser Porquˆe Muito al´m do que C++ oferece. e Op¸˜es co Sum´rio a Precisamos de ”dicion´rios” para descrever o a c´digo. o Dicionario O ROOT usa ”Dicion´rios”: a C´digo C++ que descreve os tipos. o Gerado com informa¸˜o dos headers. ca I/O 20% TClass, 30% reflex˜o, 50% stubs. a
  • 21.
    Como gerar dicion´rios. a ROOT Declarando a classe: Introdu¸˜o ca Macros ClassDef e ClassImp: TObject Informa¸˜es co Desafios TObject: Protocolo para as classes. Grid Write B´sico a Serializa¸˜o ca class pessoa: public TNamed { HTML TTree private: TNamed Interpretador int fIdade; Porquˆ Op¸˜es co e public: GetName Sum´rio a pessoa(): TNamed(”Marcelo”), fIdade(31) {} ˜pessoa() {} pessoa int GetIdade() const {return fIdade;} ClassDef(pessoa,1); GetIdade }; // Adicionar ClassImp(pessoa); a pessoa.cxx
  • 22.
    Como gerar dicion´rios. a ROOT Declarando a classe: Introdu¸˜o ca Macros ClassDef e ClassImp: TObject Informa¸˜es co Desafios TObject: Protocolo para as classes. Grid Write B´sico a Serializa¸˜o ca class pessoa: public TNamed { HTML TTree private: TNamed Interpretador int fIdade; Porquˆ Op¸˜es co e public: GetName Sum´rio a pessoa(): TNamed(”Marcelo”), fIdade(31) {} ˜pessoa() {} pessoa int GetIdade() const {return fIdade;} ClassDef(pessoa,1); GetIdade }; // Adicionar ClassImp(pessoa); a pessoa.cxx
  • 23.
    Exemplo do c´digopara salvar seus objetos o Arquivos .root ROOT Salvando: Introdu¸˜o ca Informa¸˜es co TFile f(”familia.root”,”recreate”); TObject Desafios pessoa pai(”Jo˜o”); a Grid Write B´sico a pessoa mae(”Maria”); Serializa¸˜o ca pai.Write(); HTML TTree mae.Write(); TNamed Interpretador Porquˆ Op¸˜es co e GetName Sum´rio a Lendo: TFile f(”familia.root”); pessoa TObject* obj1 = f.Get(”Jo˜o”); a GetIdade TObject* obj2 = f.Get(”Maria”);
  • 24.
    Exemplo do c´digopara salvar seus objetos o Arquivos .root ROOT Salvando: Introdu¸˜o ca Informa¸˜es co TFile f(”familia.root”,”recreate”); TObject Desafios pessoa pai(”Jo˜o”); a Grid Write B´sico a pessoa mae(”Maria”); Serializa¸˜o ca pai.Write(); HTML TTree mae.Write(); TNamed Interpretador Porquˆ Op¸˜es co e GetName Sum´rio a Lendo: TFile f(”familia.root”); pessoa TObject* obj1 = f.Get(”Jo˜o”); a GetIdade TObject* obj2 = f.Get(”Maria”);
  • 25.
    Um arquivo .root´ parecido com um diret´rio e o Unix ROOT TObject Introdu¸˜o ca Para gerar um arquivo com diret´rios: o Informa¸˜es co Desafios Grid TFile social(”pessoas.root”,”recreate”); TDirectory* familia = social.mkdir(”familia”); TNamed B´sico a Serializa¸˜o ca TDirectory* amigos = social.mkdir(”amigos”); HTML pessoa* irma = new pessoa(”Fernanda”,29); TTree pessoa* rafael = new pessoa(”Rafael”,31); Interpretador familia->Add(irma); TDirectory Porquˆe amigos->Add(rafael); Op¸˜es co Sum´rio a Importante: TDirectoryFile N˜o precisa deletar os ponteiros. a Objetos ser˜o escritos no arquivo. a TFile
  • 26.
    Novos m´todos paraRTTI definidos e ROOT TDictionary pessoa Introdu¸˜o ca Informa¸˜es co Desafios idade Grid B´sico a GetIdade Serializa¸˜o ca IsA TClass TDataType HTML TTree ClassName Interpretador Porquˆe DclFileName Op¸˜es co ImplFileName Sum´rio a ImplFileLine TBaseClass DclFileLine TDataMember TMethod
  • 27.
    Novos m´todos paraRTTI definidos e ROOT TDictionary pessoa Introdu¸˜o ca Informa¸˜es co Desafios idade Grid B´sico a GetIdade Serializa¸˜o ca IsA TClass TDataType HTML TTree ClassName Interpretador Porquˆe DclFileName Op¸˜es co ImplFileName Sum´rio a ImplFileLine TBaseClass DclFileLine TDataMember TMethod
  • 28.
    Exemplo com aclasse pessoa ROOT Programa: Introdu¸˜o ca Informa¸˜es co Desafios pessoa a; Grid cout << ”Decl: ”<< a.DeclFileName() << ”n” B´sico a << ”Linha: ”<< a.DeclFileLine() << ”n” Serializa¸˜o ca << ”Imple: ”<< a.ImpFileName() << ”n” HTML TTree << ”Linha: ”<< a.ImpFileLine() << endl; Interpretador Porquˆe Op¸˜es co Output: Sum´rio a Header: /home/marcelo/misc/./pessoa.h Linha: 31 Imple: /home/marcelo/misc/./pessoa.cxx Linha: 3
  • 29.
    Exemplo com aclasse pessoa ROOT Programa: Introdu¸˜o ca Informa¸˜es co Desafios pessoa a; Grid cout << ”Decl: ”<< a.DeclFileName() << ”n” B´sico a << ”Linha: ”<< a.DeclFileLine() << ”n” Serializa¸˜o ca << ”Imple: ”<< a.ImpFileName() << ”n” HTML TTree << ”Linha: ”<< a.ImpFileLine() << endl; Interpretador Porquˆe Op¸˜es co Output: Sum´rio a Header: /home/marcelo/misc/./pessoa.h Linha: 31 Imple: /home/marcelo/misc/./pessoa.cxx Linha: 3
  • 30.
    Encontrar a idadesem usar o getter. ROOT Econtrando a idade com RTTI: Introdu¸˜o ca pessoa p(”Marcelo”,31); Informa¸˜es co Desafios TClass* c = p.IsA(); Grid TDataMember* dm = c->GetDataMember(”fIdade”); B´sico a Serializa¸˜o ca TMethodCall* getter = dm->GetterMethod(c); HTML TTree Long t idade; Interpretador getter->Execute(&p,””,idade); Porquˆe Op¸˜es co cout << ”Idade: ”<< idade << endl; Sum´rio a Output: Idade: 31
  • 31.
    Gerando dicion´rios, compilandoe ligando. a ROOT Para gerar os dicion´rios: a Introdu¸˜o ca Informa¸˜es co Desafios $ rootcint -f dicionario.cxx -c pessoa.h && ls Grid dicionario.cxx dicionario.h pessoa.cxx pessoa.h B´sico a Serializa¸˜o ca $ wc -l dicionario.h && wc -l dicionario.cxx HTML TTree 53 dicionario.h Interpretador 639 dicionario.cxx Porquˆe Op¸˜es co Sum´rio a Compilar e ligar(Comparem com Qt): 1 Comando: root-config –cflags –libs 2 Macro Autoconf: ROOT PATH e ROOT FEATURE 3 Interpretador: .L pessoa.cxx+
  • 32.
    Gerando documenta¸˜o paraa classe pessoa ca ROOT THtml h; h.SetProductName(”Encontro CppBrasil”); h.MakeIndex(); Introdu¸˜o ca h.MakeAll(); Informa¸˜es co Desafios Grid B´sico a Serializa¸˜o ca HTML TTree Interpretador Porquˆe Op¸˜es co Sum´rio a
  • 33.
    Exemplo de outropacote com mais classes ROOT Introdu¸˜o ca Informa¸˜es co Desafios Grid B´sico a Serializa¸˜o ca HTML TTree Interpretador Porquˆe Op¸˜es co Sum´rio a
  • 34.
    Header ROOT Introdu¸˜o ca Informa¸˜es co Desafios Grid B´sico a Serializa¸˜o ca HTML TTree Interpretador Porquˆe Op¸˜es co Sum´rio a
  • 35.
    Header com m´todosda classe base e ROOT Introdu¸˜o ca Informa¸˜es co Desafios Grid B´sico a Serializa¸˜o ca HTML TTree Interpretador Porquˆe Op¸˜es co Sum´rio a
  • 36.
    M´todos e atributosda classe pessoa e ROOT TObject TNamed pessoa fUniqueID kIsReferenced kZombie fName fIdade fBits kHasUUID kBitMask fTitle fgIsA fgDtorOnly kCannotPick kSingleKey fgIsA fgObjectStat kNoContextMenu kOverwrite @~pessoa kCanDelete kInvalidObject kWriteDelete @~TNamed pessoa kMustCleanup kIsOnHeap fgIsA TNamed GetIdade kObjInCanvas kNotDeleted Introdu¸˜o ca @~TObject GetObjectInfo operator new@[@] TNamed TNamed Class Class_Name MakeZombie GetTitle operator delete TNamed IsA Informa¸˜es co DoError HandleTimer operator delete@[@] operator= ShowMembers TObject Hash operator delete Clear Streamer Desafios TObject InheritsFrom operator delete@[@] Clone StreamerNVirtual operator= InheritsFrom SetBit Compare Grid AppendPad Inspect SetBit Copy Browse IsFolder ResetBit FillBuffer ClassName IsEqual TestBit GetName B´sico a Clear Clone IsSortable IsOnHeap TestBits InvertBit GetTitle Hash Compare IsZombie Info IsSortable Serializa¸˜o ca Copy Notify Warning SetName Delete ls Error SetNameTitle HTML DistancetoPrimitive Paint SysError SetTitle Draw Pop Fatal ls TTree DrawClass Print AbstractMethod Print DrawClone Read MayNotUse Sizeof Dump RecursiveRemove Obsolete Class Interpretador Execute Execute SaveAs SavePrimitive GetDtorOnly SetDtorOnly Class_Name IsA ExecuteEvent SetDrawOption GetObjectStat ShowMembers Porquˆe FindObject SetUniqueID SetObjectStat FindObject UseCurrentStyle Class Op¸˜es co GetDrawOption Write Class_Name GetUniqueID Write IsA GetName operator new ShowMembers Sum´rio a GetIconName GetOption operator new@[@] operator new
  • 37.
    Salvando objetos demesma classe TTree ROOT Classe TTree: Introdu¸˜o ca Lˆ os dados por partes conforme o programa precisa. e Informa¸˜es co Desafios Grid Eficiente para ”Salvar uma vez” e ”Ler muitas”. B´sico a Projetado para armazenar enormes quantidades de dados. Serializa¸˜o ca HTML TTree Otimizada para acesso remoto. Interpretador Facilidades para encadear muitos arquivos. TChain Porquˆe Op¸˜es co Facilidade para processamento paralelo. TProof Sum´rio a TNtuple tuple(”cot”,”Embraer”,”dia:preabe:...”); for (...) tuple.Fill(...); TFile f(”embraer.root”,”recreate”); tuple.Write();
  • 38.
    Exemplo de comoanalisar dados S´rie hist´rica 2000 - 2011, Embraer (Bovespa) e o ROOT TTree* t = (TTree*)f.Get(”Embraer”); t->Draw(”premax:dia”); Introdu¸˜o ca t->Draw(”premax”); Informa¸˜es co t->Draw(”premax-premin:dia”); TObject Desafios Grid B´sico a Serializa¸˜o ca HTML TTree TNamed Interpretador Porquˆe Op¸˜es co Sum´rio a TTree TNtuple
  • 39.
    Exemplo de comoanalisar dados (Com v´ ınculos) S´rie hist´rica 2000 - 2011, Embraer (Bovespa) e o ROOT TTree* t = (TTree*)f.Get(”Embraer”); t->Draw(”premax:dia”,”premax > 1.025*preabe”); Introdu¸˜o ca t->Draw(”premax”,”premax > 1.025*preabe”); Informa¸˜es co t->Draw(”premax-premin:dia”,”preult > 1.03*preabe”); TObject Desafios Grid B´sico a Serializa¸˜o ca HTML TTree TNamed Interpretador Porquˆe Op¸˜es co Sum´rio a TTree TNtuple
  • 40.
    Se¸˜o no InterpretadorCint. ca ROOT Introdu¸˜o ca Informa¸˜es co Desafios Grid B´sico a Serializa¸˜o ca HTML TTree Interpretador Porquˆe Op¸˜es co Sum´rio a
  • 41.
    Analisando v´rias TTree’s:PROOF a Processamento paralelo ROOT Desafio: 1.5 PB de dados por ano. Introdu¸˜o ca Informa¸˜es co Processando 15 MB/s, em um n´cleo levaria anos. u Desafios Grid PROOF: Paralel ROOT Facility B´sico a Serializa¸˜o HTML ca Grande quantidade de eventos em centenas de CPUs. TTree Interpretador Divide o trabalho em N eventos por CPU. Porquˆe Op¸˜es co TChain *c = new TChain(”myTree”); Sum´rio a c->Add(”http://www.algum lugar/arquivo1.root”); c->Add(”http://www.algum lugar/arquivo2.root”); c->Add(”http://www.algum lugar/arquivo3.root”); TProof::Open(”lite”); // <=== Importante c->SetProof(); c->Process(”Selector.c+”);
  • 42.
    Outline ROOT 1 Introdu¸˜o ca Introdu¸˜o ca Informa¸˜es importantes sobre o ROOT co Informa¸˜es co Desafios Os desafios do LHC Grid B´sico a O Grid Serializa¸˜o ca HTML TTree 2 T´picos b´sicos importantes. o a Interpretador Dicion´rios: Serializa¸˜o a ca Porquˆe Op¸˜es co Como gerar documenta¸˜o HTML ca Sum´rio a Como armazenar e processar dados 3 Usando C++ interpretado Vantagens e desvantagens de C++ interpretado Cint e Cling
  • 43.
    Compilado versus interpretado ROOT Introdu¸˜o ca Informa¸˜es co 1 Interpretado: Desafios Grid R´pido para experimentar. a B´sico a Serializa¸˜o ca R´pido para ”Editar → Rodar → Testar → Editar” a HTML Escrever um script ´ mais f´cil. e a TTree N˜o precisa compilar e ligar. a Interpretador Porquˆe Op¸˜es co 2 Compilado: Sum´rio a Execu¸˜o mais r´pida. ca a O interpretador tem limita¸˜es. co Validar o c´digo. o
  • 44.
    Compilado versus interpretado ROOT Introdu¸˜o ca Informa¸˜es co 1 Interpretado: Desafios Grid R´pido para experimentar. a B´sico a Serializa¸˜o ca R´pido para ”Editar → Rodar → Testar → Editar” a HTML Escrever um script ´ mais f´cil. e a TTree N˜o precisa compilar e ligar. a Interpretador Porquˆe Op¸˜es co 2 Compilado: Sum´rio a Execu¸˜o mais r´pida. ca a O interpretador tem limita¸˜es. co Validar o c´digo. o
  • 45.
    Cint e Cling ROOT Cint: Introdu¸˜o ca 400.000 linhas de c´digo o Informa¸˜es Desafios co ”It is used in production by several companies in the Grid banking, integrated devices, and even gaming B´sico a Serializa¸˜o ca environment” HTML TTree Quase todo ANSI C e iso C++ 2003. Interpretador Porquˆe Pode chamar classes compiladas. Op¸˜es co Sum´rio a C´digo compilado pode chamar c´digo interpretado. o o Cling: Baseado no LLVM e Clang. Projetado com os anos de experiˆncia com o Cint. e ´ E na verdade um ”Incremental compiler”
  • 46.
    Calculadora de bolso ROOT Introdu¸˜o ca Uso Simples: Informa¸˜es co Desafios Grid root sqrt(2) B´sico a (const double)1.41421356237309515e+00 Serializa¸˜o ca HTML root double a = TMath::Pi()/4 TTree root sin(a) Interpretador Porquˆe (const double)7.07106781186547462e-01 Op¸˜es co root Sum´rio a Misturando interpretado e compilado: root gROOT->ProcessLine(”pessoa a;a.GetIdade()”)
  • 47.
    Sum´rio a ROOT Introdu¸˜o ca Informa¸˜es co Serializa¸˜o de objetos. ca Desafios Grid Armazenamento e an´lise eficiente de dados. a B´sico a Serializa¸˜o ca An´lise estat´ a ıstica e visualiza¸˜o dos dados. ca HTML TTree Interpretador Porquˆ Op¸˜es co e Muito mais do que o que foi apresentado aqui: Sum´rio a Graphical User Interface. Est´ sendo portado para iOS. a Implementa¸˜o do mecanismo Signal Slot ca