... | ... | @@ -84,6 +84,13 @@ Para fins de familiarização com os conteúdos necessários para o entendimento |
|
|
| 12/06/2020 | [Adicionadas informações de data e hora no arquivo *log* e melhorias na formatação](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/d863240cb895f835dfb85baa7ef647790f6b6a94) |
|
|
|
| 16/06/2020 | [Melhorado o layout do arquivo *log* e adição do ponto de início dos processos](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/9b4d18d1a162f3b8694179951dd587b4bf1a42cf) |
|
|
|
| 23/06/2020 | Projeto de animação de eventos ALICE no Blender [adicionado à capa do CTA](https://git.cta.if.ufrgs.br/CTA/site_CTA/commit/bc22f452967058063a7bca049f3993eb38a7bc98) ([ver capa atual do CTA](http://cta.if.ufrgs.br/capa/)). |
|
|
|
| 25/06/2020 | [Apresentação](https://git.cta.if.ufrgs.br/suporte-cta/cta/blob/master/Documentos/Apresenta%C3%A7%C3%B5es/2020-06-25-Breno-ALICE.pdf) dos progressos do projeto de animação de eventos ALICE no Blender na [Reunião Geral do CTA](https://git.cta.if.ufrgs.br/suporte-cta/cta/issues/19) |
|
|
|
| 02/07/2020 | [Paralelização das cenas no Blender](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/f2bf10a68f6e8fae5e4d2f4f6f0f3e89690b3ca6) usando o programa [GNU parallel](https://www.gnu.org/software/parallel/) |
|
|
|
| 07/07/2020 | [Ajustado arquivo de log do código da animação para incluir os tempos das cenas](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/0b2e197a381f52af1a430cbac24583036d79bc0b), feitas em paralelo. |
|
|
|
| 10/07/2020 | [Adicionada opção para escolher a tonalidade do fundo da animação](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/a4fe263e6400f6288cd33a36a2f6264f81430579) |
|
|
|
| 10/07/2020 | [Adicionada opção para escolher a escala de tamanho das partículas na animação](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/1f149e18c698518c7afb0f884955ce8bebd88097) |
|
|
|
| 10/07/2020 | [Criada função *animate_camera*](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/a39d2caf9e5bcea444d1d850225245fa868439a0) para gerar animações com câmeras móveis (mudança de perspectiva) |
|
|
|
|
|
|
|
|
|
|
|
|
## Tarefas <a name="tarefas"></a>
|
... | ... | @@ -358,18 +365,20 @@ As opções de uso do *script* devem ser dadas junto com sua execução, com esp |
|
|
| -h ou --help | (sem entrada) | Exibe uma lista com as possíveis opções de uso e um exemplo de execução | - |
|
|
|
| -d ou --download | (sem entrada) | Especifica que deve ser feito o download do arquivo ESD | False (o download automático só é efetuado se essa opção é chamada) |
|
|
|
| -u ou --url | URL do arquivo ESD | Informa o ESD cujos eventos serão analisados, caso o download do mesmo seja necessário | (sem valor padrão) |
|
|
|
| -m ou --maxparticles | Número inteiro | Configura o número máximo de partículas presentes nos eventos que se deseja animar | 1000 |
|
|
|
| --minparticles | Número inteiro | Configura o número mínimo de partículas presentes nos eventos que se deseja animar | 0 |
|
|
|
| -n ou --numberofevents | Número inteiro | Configura o número de eventos do ESD que se deseja animar | 10 |
|
|
|
| --minavgpz | Número racional | Configura o valor mínimo do módulo da média dos valores de *momentum* na direção z que devem ter os eventos que se deseja animar. Útil para selecionar eventos com "*boosts*" de partículas para um mesmo lado. | 0 |
|
|
|
| -m ou --maxparticles | Número natural | Configura o número máximo de partículas presentes nos eventos que se deseja animar | 1000 |
|
|
|
| --minparticles | Número natural | Configura o número mínimo de partículas presentes nos eventos que se deseja animar | 0 |
|
|
|
| -n ou --numberofevents | Número natural | Configura o número de eventos do ESD que se deseja animar | 10 |
|
|
|
| --minavgpz | Número racional positivo | Configura o valor mínimo do módulo da média dos valores de *momentum* na direção z que devem ter os eventos que se deseja animar. Útil para selecionar eventos com "*boosts*" de partículas para um mesmo lado. | 0 |
|
|
|
| --minavgpt | Número racional na forma decimal, com ponto (ex: 1.2) | Configura o valor mínimo da média dos valores de *momentum* transversal (Pt) que devem ter os eventos que se deseja animar. Útil para selecionar eventos com "*boosts*" de partículas no plano xy. | 0 |
|
|
|
| -t ou --duration | Número inteiro | Configura a duração da animação, em segundos | 10 |
|
|
|
| -r ou --resolution | Número inteiro de 1 a 100 | Configura a porcentagem de resolução da animação | 100 |
|
|
|
| --fps | Número inteiro | Configura o número de frames por segundo (fps) da animação | 24 |
|
|
|
| -r ou --radius | Número racional positivo | Escala o raio padrão da partícula para o valor informado (por exemplo, o valor 2 dobra o tamanho da partícula em relação ao tamanho padrão) | 1 |
|
|
|
| --resolution | Número inteiro de 1 a 100 | Configura a porcentagem de resolução da animação | 100 |
|
|
|
| --fps | Número natural | Configura o número de frames por segundo (fps) da animação | 24 |
|
|
|
| --transparency | Número racional não-negativo, na forma decimal, com ponto (ex: 1.2) | Configura a transparência dos detectores, onde 0 significa transparência máxima e 1 é a transparência padrão | 1 |
|
|
|
| -c ou --cameras | Lista separada por vírgula (e sem espaços) das câmeras desejadas. Opções: Barrel, Forward, Overview, Side | Configura as câmeras por meio das quais se deseja animar os eventos. Exemplo: `-c Barrel,Forward,Side` | Overview |
|
|
|
| -c ou --cameras | Lista separada por vírgula (e sem espaços) das câmeras desejadas. Opções: Barrel, Forward, Overview, Side, Moving | Configura as câmeras por meio das quais se deseja animar os eventos. Exemplo: `-c Barrel,Forward,Side` | Overview |
|
|
|
| --mosaic | (sem entrada) | Habilita o modo "mosaico", que automaticamente anima os eventos em todas as quatro câmeras e monta um clipe 2x2 contendo todas as perspectivas, totalizando 5 vídeos gerados por evento | False (a opção só é habilitada se chamada) |
|
|
|
| --picpct | Número inteiro de 1 a 100 | Informa a porcentagem da animação correspondente ao ponto que deve ser tirada a foto em HD, salva junto com o clipe | 80 |
|
|
|
| --bgshade | Número racional entre 0 e 1 | Configura a tonalidade do fundo da animação, em que 0 corresponde a preto e 1 corresponde a branco | 0 |
|
|
|
| -a ou --sample | (sem entrada) | Cria uma "animação amostra" gerada a partir do evento 2 do ESD de URL http://opendata.cern.ch/record/1102/files/assets/alice/2010/LHC10h/000139038/ESD/0001/AliESDs.root | - |
|
|
|
| --its | (sem entrada) | Desabilita a geometria do ITS da animação | False (como padrão, o ITS é incluído) |
|
|
|
| --detailedtpc | (sem entrada) | Inclui uma versão mais detalhada do TPC na animação, com créditos para o pesquisador [Stefan Rossegger](#stefan) | False (como padrão, é incluída a versão com menos detalhe) |
|
... | ... | @@ -421,6 +430,58 @@ Observou-se que o ponto original foi "corrigido" de modo a adaptar-se ao padrão |
|
|
Em ambos os gráficos gerados, na primeira análise, nota-se um padrão linear de pontos até a multiplicidade um pouco maior que 600. Na análise da memória, isso é coerente com a memória RAM do *notebook* utilizado, de 8GB, pois é aproximadamente neste valor de uso de memória que o gráfico torna-se praticamente constante.
|
|
|
|
|
|
|
|
|
### Preparo para o PCAD
|
|
|
|
|
|
Como objetivo do projeto, foi proposta a utilização dos recursos disponibilizados pelo [Parque Computacional de Alto Desempenho (PCAD)](http://gppd-hpc.inf.ufrgs.br/), da UFRGS, para gerar um número significativo de clipes de colisões de partículas do detector ALICE, por meio do projeto de animação. Com isso em mente, foram tomadas algumas providências para aprontar o projeto de forma a facilitar sua execução nas máquinas do Parque, cujo acesso é dado somente via ssh, isto é, remotamente. A principal delas foi a elaboração de um arquivo *log* contendo o relato das etapas de todo o procedimento realizado pelo código, em cada execução, desde a extração de dados até a montagem final do clipe animado. Para cada etapa, são registrados data e hora, conforme no exemplo abaixo, gerado a partir de uma execução com a chamada `./workflow_sketch.sh -n 1 -m 5 -t 2 --mosaic`.
|
|
|
|
|
|
![Screenshot_from_2020-07-13_16-00-48](uploads/b55b96211e000bacf300ce6d1317996b/Screenshot_from_2020-07-13_16-00-48.png)
|
|
|
|
|
|
Por meio de um *log* como este, não apenas é possível estudar o desempenho computacional das etapas do processo, mas também tornar o script principal (`workflow_sketch.sh`) inteligente, no sentido de que ele pode verificar quais etapas já foram concluídas, por meio da leitura deste *log*, caso o processo porventura tenha sido interrompido, e continuar a partir de onde parou. A seguir, a documentação da abordagem de construção do código com escrita e leitura do *log*, dentro do script principal, na linguagem *shell*.
|
|
|
|
|
|
#### Escrevendo as ações no arquivo *log*
|
|
|
|
|
|
Para escrever a data e a hora de cada etapa do processo, foi [criada a função timestamp](https://git.cta.if.ufrgs.br/ALICE-open-data/alice-blender-animation/commit/d863240cb895f835dfb85baa7ef647790f6b6a94#25beaa1bb466d005db9e7b50f4f1bd7f6bcff300_22_28):
|
|
|
|
|
|
|
|
|
timestamp() {
|
|
|
|
|
|
date +"%y-%m-%d, %T, $1"
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
Por meio dela, para registrar qualquer etapa no arquivo log, escreve-se, por exemplo:
|
|
|
|
|
|
`timestamp "${UNIQUEID}, DATA_ANALYSIS, FINISHED" >> $PROGRESS_LOG`
|
|
|
|
|
|
em que a variável `$PROGRESS_LOG` é definida, no começo do código, assim:
|
|
|
|
|
|
`export PROGRESS_LOG=$(pwd)/progress.log`
|
|
|
|
|
|
o que refere-se ao arquivo *progress.log*, contido no mesmo diretório que o próprio script (`workflow_sketch.sh`).
|
|
|
|
|
|
O exemplo acima acrescenta, portanto, ao final do arquivo *progress.log*, a linha referente à finalização da etapa de análise de dados, como na imagem logo mais acima. Desta forma, basta que, para cada uma das etapas do código, seja antes verificada a presença da respectiva mensagem de conclusão no arquivo *progress.log*.
|
|
|
|
|
|
#### Lendo as ações do arquivo *log*
|
|
|
|
|
|
A leitura, ou verificação, das etapas já concluídas do processo pode ser feita da seguinte maneira, com o comando *grep*:
|
|
|
|
|
|
|
|
|
if ! grep -q "DATA_ANALYSIS, FINISHED" $PROGRESS_LOG; then
|
|
|
|
|
|
(código para fazer a análise)
|
|
|
(...)
|
|
|
|
|
|
timestamp "${UNIQUEID}, DATA_ANALYSIS, FINISHED" >> $PROGRESS_LOG
|
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
A primeira linha essencialmente diz: "**se** (if) **não** (!) for encontrada a expressão "DATA_ANALYSIS, FINISHED" dentro do arquivo `$PROGRESS_LOG` (grep -q [expressão] [arquivo]), **então** (then) execute o código para fazer a análise e escreve no arquivo `$PROGRESS_LOG` a devida mensagem (com timestamp)".
|
|
|
|
|
|
Assim, o script somente executará as etapas que **não** constam no *log*, uma vez todas elas estão colocadas de forma semelhante à mostrada. Quando o processo chega ao fim, é escrita a mensagem "JOB FINISHED", possibilitando que em uma próxima execução, ao ser conferida a presença desta mensagem, o processo comece pelo início novamente.
|
|
|
|
|
|
|
|
|
### Abordagem utilizando máquina virtual <a name="docum8"></a>
|
|
|
|
|
|
É o método indicado pelo CERN para análise dos dados abertos disponíveis no portal.
|
... | ... | |