Grupo de estudos dos Dados Abertos do Experimento ALICE
ALICE: A Large Ion Collider Experiment, um experimento de física de partículas do Large Hadron Collider, CERN
Fonte: http://aliceinfo.cern.ch/Public/ev411_run244918.png
Descrição do Projeto
O projeto visa à familiarização e divulgação das técnicas de análise de dados do experimento ALICE, um dos detectores do LHC, desenvolvido com o objetivo de estudar uma fase da matéria denominada quark gluon plasma. Todo ano, o LHC realiza séries de colisões entre pacotes de núcleos de átomos de chumbo (Pb), que são pesados o suficiente para liberar os quarks contidos dentro de seus prótons e nêutrons e criar novas partículas, ao se chocarem. O detector ALICE recolhe informação de tais colisões, como partes das trajetórias de certas partículas, sua posição inicial e carga. O projeto em questão busca construir conhecimento acerca da forma como são interpretados e utilizados os dados, sendo um dos principais objetivos a elaboração de um sistema de visualização 3D das colisões chumbo-chumbo que serve, sobretudo, para fins didáticos e de aprendizagem.
Principais Características
- Este grupo de estudos utilizará os dados do Experimento ALICE disponíveis no CERN Open Data Portal
- Os eventos estudados englobam princípios da Física de Partículas Elementares e da Teoria da Relatividade Especial.
Atividades Preliminares
Para fins de familiarização com os conteúdos necessários para o entendimento do projeto, são relevantes os arquivos e links disponíveis abaixo.
- Introdução ao Plasma de Quarks e Glúons
- Introdução ao Detector ALICE
Histórico
Data | Evento |
---|---|
31/07/19 | Apresentação do projeto e seus objetivos |
01/08/19 | Definição da estrutura da Wiki e Tarefas (na data, em uma plataforma diferente do GitLab) |
14/08/19 | Criação de exemplo que processa os arquivos AliESDs.root no aliroot |
16/08/19 | Encontro do Grupo |
02/09/19 | Atualização do código exemplo para inserir coordenadas dos vértices das trilhas |
07/09/2019 | Implementação de programa em C para gerar a evolução das posições das partículas no tempo |
13/09/2019 | Apresentação de slides que explica a estrutura do programa em C |
30/09/2019 | Criado repositório Breno que diferencia modelo padrão do código exemplo do modelo gerado para utilização do programa em C para gerar a evolução das posições das partículas no tempo |
01/10/2019 | Apresentação de slides que resume o progresso do projeto até o momento, para apresentação na Reunião Geral do CTA |
02/10/2019 | 2º Encontro do Grupo |
11/10/2019 | Adicionado no repositório o programa em C para gerar a evolução das posições das partículas no tempo, agora considerando efeitos relativísticos. |
21/10/2019 | Criado repositório no GitLab para desenvolver animação de eventos no Blender |
01/11/2019 | Implementação da leitura de arquivos com os dados abertos do CERN na animação do Blender |
13/11/2019 | Atualizado branch do repositório da animação ALICE do Blender com correção dos tipos de partículas e implementação de argumentos pela linha de comando |
14/11/2019 | Adicionadas trilhas às trajetórias das partículas no repositório da animação ALICE do Blender |
22/11/2019 | Adicionado conteúdo do repositório de análise de dados do ALICE (AliESD_Example) ao repositório da animação no Blender (ALICE Blender animation) |
26/11/2019 | Adicionado esboço básico de um script para simplificar o processo de gerar a animação |
10/12/2019 | Adicionada versão básica do projeto ALICE Blender animation automatizado por meio do script em shell, com instruções de uso |
Tarefas
Abaixo, são descritas as tarefas propostas para o decorrer do projeto, que serão atualizadas na medida em que for obtido maior grau de precisão de seus objetivos. Para conhecer as tarefas correntes, veja a seção "Próximos Passos".
Tarefa 0: Organizar a documentação do projeto.
Esta Wiki é feita a partir do Modelo de Documentação Padrão do CTA. O registro dos progressos serão feitos nas Tarefas, enquanto os sumários dos encontros do grupo estarão nos Fóruns.
Tarefa: Familiarização com as ferramentas de análise de dados. Listar opções e documentar procedimentos de uso. Enquanto as ferramentas necessárias para uso dos dados abertos estão descritas no CERN Open Data Portal, pode ser utilizado o Aliroot oficial de análise de dados da colaboração ALICE - cujos links são os dois primeiros abaixo -, apesar de talvez nem tudo estar acessível publicamente.
-
- Raw-data Display and Visual Reconstruction Validation in ALICE - Matevˇz Tadel
Tarefa: Geração de gráficos, tabelas e estatísticas dos dados. Primeiramente, visa-se executar exemplos com um evento isolado, para depois generalizar os resultados para uma infinidade de eventos. Cada choque de pacotes de núcleos atômicos constitui um evento.
- Distribuição de multiplicidade de partículas dos eventos, distribuição de p_t (momento relativístico transversal) e posições dos vértices.
- Caracterização das trilhas: tipo de partícula e variáveis cinemáticas.
Tarefa: Criação das trilhas no Blender.
- Exemplos (alguns são simulações)
- Ver último minuto de Preparing for heavy ion collisions
- Quark gluon plasma (QGP) @ RHIC
- Quark Gluon Plasma (QGP) Video 1
- Quark Gluon Plasma (QGP) Video 2
- CERN-MOVIE-2010
- Heavy Ion Collision Event Animation (ATLAS)
- ALICE Animations
Desafio da primeira fase do Grupo de Estudos: A partir dos conhecimentos adquiridos com as etapas anteriores, criar visualizações 3D dos dados obtidos pelo detector ALICE. As visualizações serão utilizadas em atividades de divulgação científica.
Documentação
A análise de dados provenientes das colisões de partículas do detector ALICE pode ser feita por meio de duas principais abordagens: através de uma plataforma de máquina virtual, já previamente configurada com uma interface que torna a análise intuitiva e mais direta, ou através de um software de análise de dados, chamado Aliroot, que com o auxílio de programas na linguagem C++, obtém a informação diretamente dos arquivos disponíveis. Ao passo que a máquina virtual torna os processos mais simplificados, a abordagem do software proporciona maior capacidade de familiarização com o quadro geral do armazenamento de dados e sua obtenção, portanto o projeto dedica-se especialmente a este último método. De qualquer maneira, estão documentadas aqui características de ambas as abordagens.
Abordagem do software Aliroot
Conhecida como ALICE Off-line Project, por não precisar de conexão à internet durante a análise dos dados, consiste essencialmente no download de arquivos do tipo ESD - Event Summary Data - com extensão .root, diretamente do portal de dados abertos do CERN, e em seguida na execução de programas específicos para coletar e fazer reconstruções e simulações com os dados desejados. Cada arquivo contém informações a respeito de uma série de eventos, sendo cada evento definido como uma colisão de pacotes de partículas (que podem se tratar de colisões próton-próton ou chumbo-chumbo). Como mostra a imagem abaixo, a reconstrução do evento é feita com a ajuda de uma simulação prévia:
Fonte: http://alice-offline.web.cern.ch/Activities/Reconstruction/index.html
O próprio CERN disponibiliza páginas que introduzem a análise no ALICE e também a plataforma de análise ALICE. Foi desenvolvida, também, de maneira extraoficial, uma abordagem alternativa utilizando a linguagem de programação Rust.
O grupo de pesquisa instalou o software Aliroot seguindo as instruções disponíveis no repositório AliESD_Example deste GitLab. É recomendável clonar o repositório (usando o comando git clone https://git.cta.if.ufrgs.br/ALICE-open-data/AliESD_Example.git
) em um diretório de nome alice, onde também deve ser instalado o Aliroot. O último passo no arquivo README.md, referente à instrução de instalação, pede para executar o macro runAnalysis.C
, que se trata de um código exemplo, na linguagem C++, que realiza uma análise sobre um determinado arquivo ESD, que deve ser baixado diretamente do CERN Open Data Portal. Para teste, recomenda-se os arquivos da amostra Pb-Pb data sample at the collision energy of 2.76 TeV per nucleon pair from run number 139038. Tais arquivos ESD devem ser colocados no diretório clonado do repositório do Git, de nome AliESD_Example, e devem ser referenciados no macro runAnalysis.C
na linha
chain->Add("AliESDs.root");
em que "AliESDs.root"
é o arquivo ESD. Podem ser adicionados outros arquivos ESD; basta repetir o comando e acrescentar outros arquivos à cadeia.
O código que determina o tipo de análise que será feita, no entanto, está no arquivo AliAnalysisTaskMyTask.cxx
. Este faz um loop nas trilhas das partículas resultantes da colisão entre íons e escreve arquivos com informações relevantes para a caracterização das mesmas, como o momentum nas três dimensões espaciais e a carga. A função que deve ser editada para alterar os dados extraídos é a função UserExec
, da classe AliAnalysisTaskMyTask
.
Para uma melhor referência dos dados que podem ser obtidos no arquivo ESD, pode-se usar as estruturas chamadas TTree, espécie de plataforma desenvolvida pelo CERN para armazenar informações de experimentos com altas energias. Basta acessar o Aliroot e, em seguida, abrir o TBrowser, no qual podem ser reconhecidos os membros de arquivos do tipo .root, conforme abaixo:
aliroot
new TBrowser
Isso abrirá uma janela de navegação; deve ser selecionado algum arquivo ESD, como ilustra a imagem.
Mais informações a respeito das funções criadas para obter os dados dos arquivos ESD podem ser encontradas nas bibliotecas do GitHub do Aliroot. As principais bibliotecas utilizadas foram:
- AliESDEvent.h
- AliESDVertex.h
- AliESDtrack.h
- AliExternalTrackParam.h (porém essa não se encontra no mesmo endereço que as outras)
Podem ser úteis, também, os seguintes itens:
- Slides do ALICE Offline tutorial (Slide 30 mostra uso de PID - Particle Identification)
- Dicas do uso do Aliroot
- Códigos relevantes:
- Unidades de medida utilizadas na Física de Partículas:
Evolução das partículas no tempo
A partir da edição do código exemplo mencionado acima, na função UserExec
do arquivo AliAnalysisTaskMyTask.cxx
, foi executada uma análise para escrever arquivos texto contendo dados relevantes relacionados às informações gerais de cada evento e às trilhas destes, chamados respectivamente esd-summary.dat
e esd-detail.dat
.
O primeiro contém o número de trilhas do evento, as coordenadas x, y e z do vértice da colisão, de acordo com o sistema de coordenadas cartesianas utilizado, e o módulo do campo magnético gerado pelo solenoide que envolve a região.
Fonte: https://en.wikipedia.org/wiki/ALICE_experiment
O segundo contém a massa da partícula associada a cada trilha, bem como sua carga e componentes do momentum linear e velocidade nas direções x, y e z no instante da colisão - também de acordo com o sistema de coordenadas, sendo usados valores negativos para sentidos contrários ao de crescimento de cada eixo.
Pode-se conferir a versão do código AliAnalysisTaskMyTask.cxx
que gera tais arquivos. Note que a velocidade não é obtida diretamente de uma função do Aliroot, mas calculada a partir dos valores de momentum linear usando cálculos de relatividade, pois tratam-se de partículas em velocidades próximas à da luz.
Através destas informações básicas é possível construir um modelo simplificado da evolução de cada partícula no tempo, utilizando equações do Eletromagnetismo. O modelo é simplificado pois não inclui decaimento de partículas ou quaisquer tipo de interações com a matéria ou mesmo entre elas próprias durante sua propagação. Dito isso, foi elaborado um programa na linguagem C - como pode-se dizer, um subset da linguagem C++ -, de nome sol-analitica.tpc.c
, que lê os arquivos gerados esd-summary.dat
e esd-detail.dat
e gera um terceiro arquivo texto de nome positions.txt
, que contém a evolução das trajetórias das partículas no tempo. Este último possui cinco colunas: a primeira, com o índice da trilha; a segunda, com vários instantes de tempo; a terceira, quarta e quinta com as respectivas coordenadas em x, y e z daquela trilha. As coordenadas das partículas são representadas apenas no interior do raio externo do TPC.
Assim, pode-se gerar gráficos com uma "aproximação", pelos motivos mencionados, de um evento selecionado a partir de um arquivo ESD. A imagem abaixo é a representação das trajetórias de um evento com 24 trilhas, projetadas no plano xy, isto é, sem a dimensão longitudinal do detector (a direção z).
Deve-se conseguir obter a mesma figura fazendo todo o processo explicado utilizando um dos arquivos ESD da lista mencionada do CERN Open Data Portal. Segue a sequência de passos:
- Fazer o download deste branch do repositório AliESD_Example, que atualmente contém os programas necessários, e entrar no diretório sol-analitica ;
- Com o Aliroot instalado (instruções em README.md ), executar o programa
runAnalysis.C
no ambiente ROOT do ALICE; - Compilar e executar o programa
sol-analitica-tpc.c
; - Plotar um gráfico das colunas 3 e 4 do arquivo
positions.txt
gerado, que contém as coordenadas x e y das trilhas.
Para maiores detalhes no algoritmo de desenvolvimento do programa da evolução temporal das trilhas, confira a apresentação de slides.
É passível de observação que todos os códigos foram programados a fim de selecionar um evento com um número "razoável" de trilhas - entre 15 e 30 - a partir dos ESDs, de maneira a impedir uma poluição visual da representação gráfica do mesmo, no caso de um número excessivamente grande de trilhas, ou a análise de um evento com um número demasiado baixo de trilhas.
Animação no Blender
O Blender é um programa gratuito e aberto para criar animações. Foi utilizado aqui com o propósito de gerar a visualização em 3D de eventos de colisão de partículas no detector ALICE. Com essa finalidade, foi criado um projeto no GitLab do grupo de colaboração ALICE-open-data, de nome ALICE Blender animation. A animação foi desenvolvida unicamente por meio de scripts na linguagem Python, utilizando orientação a objeto, de maneira que são dispensadas aqui informações sobre a interface do Blender. Todo o código foi pensado a partir de um exemplo de script para Blender que simula um sistema solar, disponível no site do Instituto de Física da UFRGS. No repositório, além do arquivo README.md, existem quatro arquivos principais que estruturam toda a animação, brevemente detalhados abaixo.
-
particle.py: é o arquivo que define a classe das partículas, ou seja, que contém as características a ser adicionadas posteriormente a cada objeto animado do Blender e como eles devem se propagar pelo espaço a partir das condições intrínsecas da partícula que representam. É notável que este código define duas classes: a classe base
Particle
, que guarda o vértice, carga e massa da partícula; e a classe derivadaParticlePropagator
, que configura o campo magnético, lê os valores de momentum nas três direções e define outras propriedades, para em seguida definir a propagação das partículas. -
drivers.py: este arquivo define a classe
animationDriver
, responsável por configurar aspectos gerais da animação, como qual câmera será utilizada, duração, número de quadros, porcentagem de resolução, etc. Suas classes derivadas, definidas em seguida, configuram a maneira como são determinados os dados que serão passados para as partículas, os objetos do tipoParticle
. A classegenDriver
gera partículas com valores de momentum que seguem uma distribuição gaussiana, nas três direções, e seus objetos devem ser inicializados com o desvio padrão dessa distribuição como argumento. A classedataDriver
é a mais importante no que tange aos objetivos deste projeto: ela lê todos valores de massa, carga, momentum e vértices das partículas a partir do arquivo texto gerado diretamente pela execução dos códigos para análise dos dados abertos ALICE, e seus objetos devem ser inicializados com o nome deste arquivo texto como argumento. -
scene-functions.py: é onde são definidas as funções que de fato executam a animação, não sendo definidas quaisquer classes. A função
init()
configura o ambiente, limpando o cenário e adicionando as câmeras e um cilindro que representa o TPC do detector, por sua vez definido na funçãoaddALICE_TPC()
. JáaddCameras()
disponibiliza os tipos de câmera a ser escolhidos, que mostram a visualização de diferentes perspectivas.createSceneParticles()
recebe como argumento uma lista com as partículas da classeParticle
e cria os objetos do Blender para as partículas, acrescenta cores a cada uma, define seus tipos, configura as sombras e retorna uma lista com estes objetos, que tratam-se na verdade de pequenas esferas. Por último,animate()
recebe como argumentos uma lista de objetos do Blender - como aquela criada porcreateSceneParticles()
-, uma lista de objetos do tipoParticle
e um objeto do tipoanimationDriver
, com o propósito de fazer os objetos animados seguirem a propagação conforme definido na classeParticlePropagator
. -
animate_particles.py: finalmente, é o arquivo em que são especificados os parâmetros desejados para a animação e o caminho do diretório onde será salva, além de chamar as funções definidas nos arquivos anteriormente descritos para construir a cena, animá-la e renderizar tudo.
Para gerar a animação, basta digitar o comando blender -noaudio --background -P animate_particles.py
para executar o código em animate_particles.py
. Ela será salva como um arquivo .mp4 no caminho especificado no código, que pode ser alterado. É válido lembrar que, para tal, o Blender deve estar instalado.
Observa-se, ainda, que o código desenvolvido pode ser usado para diversos fins, isto é, não apenas para eventos do ALICE - ou, sequer, de colisão de partículas -, graças à maneira como está organizado. A programação orientada a objeto proporciona uma facilidade de modificar aspector específicos de um código sem, todavia, a necessidade de preocupar-se com a maneira como isso irá afetar todo o restante do mesmo. Um usuário poderia, por exemplo, facilmente criar uma nova classe de driver para ler arquivos com dados de partículas diferentes dos mencionados, ou ainda definir uma nova maneira de propagar os objetos, que não na presença de um campo magnético, tudo isso fazendo alterações pontuais nos códigos.
É importante ressaltar que os arquivos do projeto são abertos e estão disponíveis para utilização, modificação e divulgação por toda a comunidade.
Histogramas
Histogramas são formas interessantes de representar dados, pois mostra a distribuição de frequências de determinada grandeza. Com o Aliroot, é possível modificar o código em C++ para incluir histogramas específicos, com os dados do evento analisado, no arquivo AnalysisResults.root
, que é gerado a partir da execução do runAnalysis.C
. Este arquivo, no entanto, deve ser acessado por meio de um TBrowser, visitando o arquivo com os resultados da análise e abrindo seus diretórios, como mostrado na figura:
Instruções sobre a construção de histogramas com o Aliroot podem ser encontradas no CERN User's Guide - Chapter 5: Histograms. No repositório do projeto AliESD_Example foram incluídos histogramas com os momentos transversais Pt, com as massas das partículas presentes - o que identifica e distingue as partículas - e com o número de eventos varridos nos arquivos ESD analisados. O código declara o histograma na função UserCreateOutputObjects()
do arquivo AliAnalysisTaskMyTask.cxx
, e o preenche na função UserExec()
do mesmo arquivo.
Histograma com as massas das partículas presentes
Geometria do detector
Uma vez implementada a base da animação, como descrito até aqui, o próximo objetivo passa a ser adicionar os elementos do detector ALICE à animação. Tais elementos tratam-se na verdade das chamadas geometrias, elaboradas em alguma linguagem de programação, com a finalidade de representar objetos e formas físicas. As geometrias, no entanto, não são tão trivialmente compatíveis entre os formatos existentes, isto é, geometrias geradas a partir de linguagens diferentes muitas vezes contém elementos incompatíveis entre si.
Por exemplo, geometrias no formato CAD - Computer Aided Design - utilizam os chamados tesselated solids, sólidos construídos a partir da mescla de elementos primários como vértices, arestas, faces, polígonos e superfícies. Tais sólidos, todavia, não estão implementados no ROOT, que através da sua classe TGeometry, mencionada a seguir, utiliza primordialmente a técnica CSG - Constructive Solid Geometry - para criar novos objetos a partir de operações booleanas aplicadas a objetos mais simples, como união ou intersecção.
Tessellated solids. Fonte: https://en.wikipedia.org/wiki/Polygon_mesh
Constructive Solid Geometry. Fonte: https://en.wikipedia.org/wiki/Constructive_solid_geometry
Cabe aqui estabelecer uma distinção: um dos desafios da colaboração ALICE é encontrar uma maneira apropriada de converter projetos em CAD, uma ferramenta mais simples e intuitiva de se construir geometrias, para um formato utilizável pelo ROOT, o software oficial da organização. O principal objetivo do presente projeto, porém, trata-se de exportar as geometrias já disponíveis do detector, em formato ROOT, para um formato utilizável no Blender, o programa escolhido para a animação das trilhas.
Enquanto a solução mais promissora para o primeiro problema parece residir em uma conversão entre os formatos ROOT e GDML - Geometry Description Markup Language, uma linguagem derivada de XML, compatível com o ROOT e outros softwares de simulação física como o Geant4 -, uma solução possível para o segundo problema pode ser a interface TGeoCad, uma funcionalidade do ROOT que possibilita a criação de arquivos no formato STL, ou STEP, a partir de geometrias já implementadas no mesmo. Arquivos STEP são mais facilmente intercambiáveis com CAD e outros formatos.
Conforme disponível no artigo TGeoCad: an Interface between ROOT and CAD Systems, a interface TGeoCad requer a instalação de um outro software, chamado Open Cascade, que contém bibliotecas relevantes. As versões mais recentes do Open Cascade, no entanto, estão estruturadas de uma maneira sutilmente diferente da versão originalmente acessada pelo TGeoCad, o que provavelmente é a causa de tal interface também estar indisponível nas versões mais recentes do ROOT.
Abordagem utilizando máquina virtual
É o método indicado pelo CERN para análise dos dados abertos disponíveis no portal.
Próximos Passos
Os próximos passos do projeto são incluir a geometria do detector na animação, isto é, fazer aparecer o equipamento do ALICE na visualização das trilhas. Paralelamente, busca-se implementar um modo de visualização estático, em que é possível "explorar" o evento de qualquer ângulo desejado, talvez no próprio Blender, o software utilizado para gerar a animação. Ainda, busca-se investigar a reconstrução analítica das trilhas, através da informação resultante dos clusters do TPC (Time Projection Chamber) e, em seguida, incorporá-las ao exemplo de análise. Para isso, deve-se procurar nas bibliotecas do GitHub do Aliroot as funções desejadas.
Glossário
Aqui são descritos termos importantes para o assunto da pesquisa.
A partir de ALICE Offline Reconstruction:
- Dígito: Sinal digitalizado obtido por uma placa sensível de um detector em um dado instante de tempo.
- Cluster: Conjunto de dígitos adjacentes (no espaço e/ou tempo) que foram presumivelmente gerados pela mesma partícula atravessando o elemento sensível de um detector.
- Ponto do espaço reconstruído: Estimativa da posição onde uma partícula atravessou o elemento sensível de um detector (frequentemente, isso é feito calculando o centro de gravidade do cluster).
- Trilha reconstruída: Conjunto de cinco parâmetros (como a curvatura e os ângulos com respeito aos eixos coordenados) da trajetória da partícula junto com a matriz de covariância estimada em um dado ponto do espaço.
Estudos complementares
- Particle Tracking
- Particle Identification
- Quarkonia Production
- ALICE MasterClasses
- Theory of Special Relativity
- C++ Material
- Git tutorials
- Python
- R
Contatos
- Mantenedor do projeto: Rafael Pezzi
- Gerente do projeto: Breno Lemos
- Outros contribuidores: Lucas Schnorr, Pedro Widniczck
Documentos
Referências
- TTree
- ROOT
- Geometry in ROOT
- ALICE data flow
- Performance of the ALICE Experiment
- ALICE Technical Design Report of the Time Projection Chamber
- The ALICE TPC