Root





 O sistema Root é um framework feito em C++ por  René Brun ,  para fazer análise de dados. O Root possui código aberto,  são 310 classes subdivididos em 24 frameworks, seu design e desenvolvimento seguiu o paradigma Orientado a Objetos e o seu projeto foi inspirado no contexto do experimento NA49.  A principal motivação da criação do Root foi a necessidade de um software que manipulasse  e armazenasse eficientemente grandes quantidades de dados acompanhando as atuais tendências dos projetos computacionais.  Os dados são definidos na forma de objetos e estes são comprimidos (usa o algoritmo do gzip) e armazenados em arquivos num formato específico do Root.   Inicialmente esse pacote era usado frequentemente por físicos para análise de dados experimentais, porém mais tarde descobriu-se várias outras aplicações para o Root (Veja aqui algumas delas) .   Possui ainda um interpretador C++ de nome CINT,  de onde é possível executar diversas macros,  contribuição de Masaharu Goto.   Mais Detalhes do Root
 

                                                                                             CLASSES BÁSICAS DO ROOT
 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  Arquivo Root








Estrutura Física:

  O arquivo root possui um cabeçalho e uma estrutura para cada conjunto de informações referente ao objeto armazenado nele. No inicio de cada bloco existe m dados que servem para identificar de forma única o objeto armazenado(corresponde a
 um objeto TKey na estrutura lógica). O primeiro bloco depois do cabeçalho sempre possui uma descrição do diretório raiz (nome, data de criação, última modificação..). Veja o esquema abaixo:
 


 

Estrutura Lógica:

  É formada por :
           - uma lista de objetos e diretórios.
           - uma lista de objetos TKey (as chaves associadas aos objetos)
           - uma lista de blocos livres para alocação dos objetos
     Cada diretório, por sua vez possui uma lista de objetos/diretórios e uma lista de objetos TKey. Assim, o arquivo pode conter objetos e diretórios com ilimitado número de níveis. Buscar um objeto no arquivo a partir do nome significa buscar o objeto TKey associado e pegar dele o valor do campo fSeekKey o qual armazena a posição do objeto no arquivo. A lista dos nomes é um hashlist. Veja o esquema abaixo.


 
 

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 

Estrutura de árvore do Root

 Um ponto interessante de se comentar  é  a estrutura de  árvores (representada pela classe TTree) usada pelo Root para armazenar os dados.  A vantagem em se usar essa estrutura é  nas situações em que existem grandes quantidades de objetos de uma mesma classe, pois armazenar esses objetos  individualmente no arquivo root, cada um sendo associado a uma chave, não é uma boa idéia. Em relação ao acesso, imagine que seja necessário aplicar sobre esse conjunto de objetos uma expressão, para acessar cada um dos valores teríamos que abrir todos os objetos um a um, em contrapartida, usando um objeto TTree isso é feito apenas uma vez. Além disso,haverá redundância de informações armazenadas pelo fato de pertencerem a mesma classe (cada objeto possui associado informações referentes à classe a qual pertence), o que significa alocar espaço mais do que é realmente  necessário. Abaixo segue o esquema da estrutura TTree.


 

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 


Exemplo de um gráfico do Root