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