... | ... | @@ -192,7 +192,7 @@ No [repositório](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-anim |
|
|
|
|
|
* **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 tipo `Particle`. A classe `genDriver` 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 classe `dataDriver` é 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](https://git.cta.if.ufrgs.br/ALICE-open-data/AliESD_Example), 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ção `addALICE_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 classe `Particle` 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 por `createSceneParticles()` -, uma lista de objetos do tipo `Particle` e um objeto do tipo `animationDriver`, com o propósito de fazer os objetos animados seguirem a propagação conforme definido na classe `ParticlePropagator`.
|
|
|
* **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ção `addALICE_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 classe `Particle` 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 por `createSceneParticles()` -, uma lista de objetos do tipo `Particle` e um objeto do tipo `animationDriver`, com o propósito de fazer os objetos animados seguirem a propagação conforme definido na classe `ParticlePropagator`.
|
|
|
|
|
|
* **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.
|
|
|
|
... | ... | @@ -237,6 +237,30 @@ Enquanto a solução mais promissora para o primeiro problema parece residir em |
|
|
Conforme disponível no artigo [TGeoCad: an Interface between ROOT and CAD Systems](https://iopscience.iop.org/article/10.1088/1742-6596/523/1/012017), a interface TGeoCad requer a instalação de um outro software, chamado [Open Cascade](https://www.opencascade.com/), 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. A dificuldade do grupo na procura por uma alternativa para converter geometrias do ALICE para um formato utilizável no projeto levou o grupo a abandonar tais tentativas e partir para a criação de uma geometria utilizando modelagem 3D. De qualquer maneira, esse é um caminho que ainda pode ser explorado, e os registros importantes do processo estão registrados na página de wiki [Documentação da instalação da interface TGeoCad](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-open-data/wikis/Documentação-da-instalação-da-interface-TGeoCad).
|
|
|
|
|
|
|
|
|
### Elaboração da geometria do detector
|
|
|
|
|
|
Como explicado acima, foi buscada uma alternativa para a construção das peças do detector na animação usando software. Naturalmente, foi escolhido o [Blender]() como programa para tal tarefa, pois é o mesmo que gera a animação em si e é um dos melhores recursos abertos para criar cenários em três dimensões.
|
|
|
|
|
|
Até o presente momento, haviam sido apenas exploradas algumas funcionalidades básicas do Blender, portanto deu-se a necessidade de expandir os conhecimentos acerca do mesmo, para assim projetar com mais qualidade as peças do detector. Após algum tempo de imersão no software, com a ajuda de tutoriais disponíveis nos [Estudos Complementares](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-open-data/wikis/home#estudos-complementares) dessa página, foi optado pela abordagem de utilizar a tela padrão de edição de objetos do Blender como um recurso para entender quais os códigos equivalentes, em *python*, para gerar cada peça, como descrito a seguir, principalmente por meio de operações booleanas. É importante ressaltar que no projeto é utilizada a versão 2.79 do programa, ao passo que os tutoriais disponíveis são na versão 2.8. Dentro do que foi utilizado, porém, explorar um pouco os menus da versão antiga foi o suficiente para se adaptar.
|
|
|
|
|
|
Assim, o procedimento adotado foi, ao incluir um objeto na interface padrão do Blender, como na imagem abaixo,
|
|
|
|
|
|
![Screenshot_from_2020-03-20_17-40-31](uploads/3100ca0878387e514dc7748304381b98/Screenshot_from_2020-03-20_17-40-31.png)
|
|
|
|
|
|
verificar na aba *Scripting* o código em *python* correspondente para aquela função.
|
|
|
|
|
|
![Screenshot_from_2020-03-20_16-28-48](uploads/3909d31b38b45c8453c0288e5f0af396/Screenshot_from_2020-03-20_16-28-48.png)
|
|
|
|
|
|
Analogamente, consulta-se o código para efetuar translações, mudanças na escala, operações booleanas (ver seção acima) e outras operações necessárias. Para algumas tarefas utilizadas frequentemente, porém, como a adição de uma casca cilíndrica - um cilindro com um cilindro "subtraído" do meio, como mostrado abaixo -, foram definidas funções com a finalidade de encurtar e simplificar o código.
|
|
|
|
|
|
![Screenshot_from_2020-03-20_17-18-37](uploads/be390f36c2ec4d908658e2f239e922f8/Screenshot_from_2020-03-20_17-18-37.png)
|
|
|
|
|
|
Desta maneira, por exemplo, para auxiliar na tarefa mencionada, criou-se a função `subtract(that,fromThat)`, em que dois objetos são dados como entrada - o objeto *that* e o objeto *fromThat*. A função então faz a operação booleana da diferença entre o segundo e o primeiro objeto, isto é, "subtrai" o objeto *that* do objeto *fromThat*, por fim excluindo este último.
|
|
|
|
|
|
Foi criado um arquivo modelo no Blender, de nome [alice-geometry.blend](uploads/0849d5d717aa8d6c520ea55b3762e4ed/alice-geometry.blend), onde era testado o código para gerar cada peça do detector e, assim, armazenar a geometria junto com o respectivo código salvos. A partir do mesmo, era copiado o código e colado no arquivo `scene_functions.py`, em que constam as funções para gerar os objetos da cena, conforme explicado na seção anterior [Animação no Blender](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-open-data/wikis/home#anima%C3%A7%C3%A3o-no-blender). As definições das funções de simplificação do código - como a função `subtract()` -, todavia, foram adicionadas a um novo arquivo chamado [blender_functions.py](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/blob/master/animate/blender_functions.py), [acrescentado também ao repositório principal do projeto](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/9a4e8e0b07a7be0eb15a01abdb14700cab1532cf), com a finalidade de maior organização dos códigos.
|
|
|
|
|
|
|
|
|
|
|
|
### Abordagem utilizando máquina virtual
|
|
|
|
|
|
É o método indicado pelo CERN para análise dos dados abertos disponíveis no portal.
|
... | ... | @@ -293,6 +317,8 @@ A partir de [ALICE Offline Reconstruction](http://alice-offline.web.cern.ch/Acti |
|
|
* [Codecademy: Learn Python](https://www.codecademy.com/learn/learn-python)
|
|
|
* R
|
|
|
* [Codecademy: Learn R](https://www.codecademy.com/learn/learn-r)
|
|
|
* Blender
|
|
|
* [Tutorial Blender 2.8 em Português](https://www.youtube.com/watch?v=_-ig3TN7mrw&t=1571s)
|
|
|
|
|
|
|
|
|
## Contatos
|
... | ... | |