Hide and Seek ‐ Cosmology Research Group ETH Zurich - lncc-sered/manual-sdumont2nd GitHub Wiki

Table of Contents

Hide and Seek

=EM CONSTRUÇÃO

Hide and Seek desenvolvido pelo grupo de Cosmologia da ETH Zurich, consiste em dois pacotes de software independentes voltados para simulação e análise de dados de levantamentos de rádio com antenas de "prato único".

  • HIDE (HI Data Emulator): simula toda a cadeia do sistema de levantamento de rádio, permitindo modelar de forma realista como os dados seriam coletados em observações reais.
  • SEEK (Signal Extraction and Emission Kartographer): processa dados simulados (ou observados) de levantamentos de rádio de maneira reprodutível e consistente, facilitando a análise científica dos dados.
Observações: Esta versão utiliza Python 2.7 e teve sua última atualização em 2014: Copyright 2014, ETH Zurich, Institute for Astronomy. Revision ea319207.

📃 Documentação Oficial

Instruções de instalação Oficiais

Página oficial do Hide&Seek ETH-Zurich

🗂️ Local da Instalação e Carregando Module

Instalação do Hide&Seek via ambiente Conda, localizada em: "/scratch/app/anaconda_module/envs/hide-and-seek-0.1"

e carregada como um módulo do Enviromental Modules com o comando abaixo:

module load hide-and-seek/0.1
HIDE & SEEK carregado com sucesso

💻 Execução dos comando básico.

Exemplos de uso com dos programas Hide e Seek:

# Execução do comando Hide 
hide --strategy-start=2016-03-21-00:00:00 --strategy-end=2016-03-21-01:00:00 --verbose=True hide.config.bleien7m

# Execução do comando Seek
seek --file-prefix=./bgs_example_data --map-name=BGS_maps_test.hdf --verbose=True seek.config.process_survey_ff
Os arquivos para execução dos comando acima pode ser encontrados na pagina oficial de tutoriais dos programas-> Hide e Seek

🎓 Tutorial de execução do test Rápido

Testes Automatizados com pytest

Esta seção explica como executar as bibliotecas de teste do Hide and Seek utilizando o framework pytest, amplamente utilizado para testes em Python. (pytest 2.9.2 é uma versão compatível com Python 2.7)

(recomenda-se executar primeiro o exemplo oficial descrito abaixo para validação)

Primeiro crie o diretório de teste "hide-seek-teste". Em seguida, clone a partir do repositório do cosmo-ethz os programas programa Hide e o SEEK. Nele você encontrará a pasta "test". Este diretório contem os arquivos necessários para realização do teste rápido de ambos os programas.

mkdir hide-seek-teste
cd hide-seek-teste
git clone https://github.com/cosmo-ethz/hide.git
git clone https://github.com/cosmo-ethz/seek.git
Pós a clonagem entre no diretório de teste de qualquer programa baixado. Aqui vamos utilizar o diretório de teste do programa Hide :
cd hide/test
Ou se preferir, para sua comodidade disponibilizamos os arquivos de teste dos programas Hide e Seek nos diretórios de instalação. Como alternativa aos comando anteriores, utilize os comandos abaixo:
cp -r /scratch/app/anaconda_module/envs/hide-and-seek-0.1/hide-test . 
cp -r /scratch/app/anaconda_module/envs/hide-and-seek-0.1/seek-test . 
Nos diretórios teste diretório você verá uma série de arquivos utilizados para teste rápidos.
🗃️ Descrição dos Arquivos de Teste do HIDE

Arquivos do diretório /hide-test/test

Arquivo Função
__init__.py Inicializa o pacote de testes, permitindo que seja tratado como um módulo Python.
test_map_frequency_plugin.py Testa o plugin de mapeamento de frequência, que simula a varredura de frequências pelo telescópio.
test_map_strategy_plugin.py Avalia estratégias de mapeamento, como varreduras em zigue-zague ou espiral.
test_M9703_gain.py Verifica a aplicação de ganhos específicos do modelo M9703, utilizado na instrumentação.
test_noise_gen.py Testa a geração de ruído instrumental e ambiental nos dados simulados.
test_add_background.py Avalia a adição de sinais de fundo, como emissões galácticas difusas.
test_pointsources.py Testa a simulação de fontes pontuais, como estrelas ou quasares.
test_add_rfi.py Verifica a introdução de interferência de radiofrequência (RFI) nos dados simulados.
test_qu_opt_coord_transform_plugin.py Testa transformações de coordenadas otimizadas para dados de polarização Q e U.
test_quaternion.py Avalia operações com quaternions, úteis para representar rotações tridimensionais.
test_apply_gain_plugin.py Testa a aplicação de ganhos instrumentais aos dados simulados.
test_reduce_frequency_plugin.py Verifica a redução da resolução em frequência dos dados.
test_astro_signal_plugin.py Testa a simulação de sinais astronômicos específicos.
test_reduce_signals_plugin.py Avalia a redução ou filtragem de sinais nos dados simulados.
test_background_noise_plugin.py Testa a adição de ruído de fundo nos dados.
test_scanning_strategy_plugin.py Verifica diferentes estratégias de varredura do céu pelo telescópio.
test_beam_providers.py Testa a modelagem do feixe do telescópio, essencial para simular a resposta angular.
test_scheduler.py Avalia o agendamento de observações, determinando quando e onde o telescópio observa.
test_scheduler_virtual.py Testa um agendador virtual, possivelmente para simulações sem hardware real.
test_callisto_gain.py Verifica a aplicação de ganhos específicos do instrumento CALLISTO.
test_sphere.py Testa operações relacionadas à esfera celeste, como projeções e coordenadas.
test_cleanup_plugin.py Avalia a limpeza de dados simulados, removendo artefatos ou inconsistências.
test_static_astro_signal_provider.py Testa a provisão de sinais astronômicos estáticos, que não variam com o tempo.
test_combine_signals_plugin.py Verifica a combinação de múltiplos sinais simulados em um único conjunto de dados.
test_static_gsm.py Testa o uso do Modelo Global de Céu (GSM) estático para simular emissões galácticas.
test_coord_transform_plugin.py Avalia transformações de coordenadas entre diferentes sistemas de referência.
test_trig_lookup.py Testa tabelas de consulta trigonométricas para acelerar cálculos.
test_crosshair_strategy.py Verifica a estratégia de varredura em forma de mira (crosshair) pelo telescópio.
test_write_calibration.py Testa a escrita de dados de calibração nos arquivos de saída.
test_drift_scan.py Avalia a simulação de varreduras por deriva, onde o telescópio permanece fixo enquanto o céu se move.
test_write_coords_plugin.py Testa a escrita de coordenadas nos arquivos de saída.
test_earth_signal_plugin.py Verifica a simulação de sinais provenientes da Terra, como interferências humanas.
test_write_rfi.py Testa a escrita de dados de interferência de radiofrequência nos arquivos de saída.
test_full_sky.py Avalia a simulação de observações de todo o céu.
test_write_tod_fits_plugin.py Testa a escrita de dados simulados no formato FITS, padrão em astronomia.
test_gsm.py Verifica a integração com o Modelo Global de Céu (GSM) para simular emissões galácticas.
test_write_tod_phaseswitch_plugin.py Testa a escrita de dados simulados com comutação de fase nos arquivos de saída.
test_horizon_earth_signal.py Avalia a simulação de sinais da Terra no horizonte do telescópio.
test_write_tod_plugin.py Testa a escrita de dados simulados (Time-Ordered Data) nos arquivos de saída.
test_load_beam_profile_plugin.py Verifica o carregamento de perfis de feixe do telescópio para simulações.

Arquivos do diretório /hide-test/test/res/

Arquivo Função
HIMap_20150504_175242_02.fit.gz Mapa de intensidade de hidrogênio neutro simulado.
schedule.txt Arquivo de agendamento de observações para testes.
🗃️ Descrição dos Arquivos de Teste do SEEK

Arquivos do diretório /seek-test/test

Arquivo Função
__init__.py Inicializa o pacote de testes, permitindo que a pasta seja tratada como módulo Python.
test_astro_sources.py Testa a manipulação e inclusão de fontes astronômicas nos mapas.
test_background_removal.py Verifica os algoritmos de remoção de fundo dos dados de TOD (Time-Ordered Data).
test_calibration.py Testa a aplicação de calibração nos dados de TOD.
test_calibration_transit.py Avalia a calibração por trânsitos de fontes conhecidas.
test_create_maps.py Testa a geração de mapas a partir de dados de TOD processados.
test_filter_mapper.py Avalia mapeamento com filtros aplicados aos dados.
test_filter_variance_mapper.py Testa o mapeamento com variação estatística após aplicação de filtros.
test_find_nested_files_plugin.py Testa um plugin para localizar arquivos aninhados dentro de diretórios.
test_fitting.py Avalia algoritmos de ajuste (fitting) de modelos aos dados astronômicos.
test_healpy_mapper.py Testa o mapeamento de dados usando a biblioteca HEALPix (via healpy).
test_load_data_plugin.py Verifica a funcionalidade de carregamento de dados via plugin.
test_make_maps.py Testa a criação de mapas a partir de dados simulados ou reais.
test_map_file_paths_plugin.py Avalia o gerenciamento de caminhos de arquivos de mapas.
test_map_indicies.py Testa a indexação de pixels em mapas (geralmente HEALPix).
test_mask_artefacts.py Verifica a aplicação de máscaras para remoção de artefatos em mapas.
test_mask_objects.py Testa a criação de máscaras para objetos específicos nos mapas.
test_minimal.py Teste mínimo para verificar se o pipeline principal funciona com o mínimo de dados.
test_pre_process_tod.py Testa o pré-processamento dos dados temporais (TOD).
test_process_coords.py Verifica o processamento das coordenadas associadas aos dados.
test_process_survey.py Testa o processamento de dados de uma campanha de observações (survey).
test_reduce_map_indicies.py Avalia a redução ou compressão da indexação dos mapas.
test_reduce_maps_plugin.py Testa a redução de mapas completos por meio de plugins (ex: rebinning).
test_remove_rfi.py Verifica a remoção de interferência de radiofrequência dos dados.
test_restructure_tod.py Testa a reestruturação ou reagrupamento dos dados TOD.
test_simple_mapper.py Teste de um mapeador simples para validações rápidas.
test_simple_variance_mapper.py Testa um mapeador simples que também calcula variância por pixel.
test_sum_threshold.py Avalia algoritmos de detecção baseados em limiar de soma dos dados.
test_tod_utils.py Testa funções utilitárias para manipular dados de TOD.
test_write_maps.py Testa a escrita de mapas processados em arquivos de saída.

Arquivos do diretório /hide-test/test/res

Arquivo/Dir Função
coords/ Diretório contendo dados de coordenadas usados nos testes.
data/ Conjunto de dados de exemplo utilizados pelos testes automatizados.
simple_tod.hdf Arquivo HDF5 contendo dados de TOD simulados simples, usado em testes básicos.
skymap/ Diretório contendo mapas celestes gerados ou usados como referência durante os testes.

De posso dos arquivos de teste, execute o comando "pytest" para realizar os teste com cada um dos arquivos listados nas tabelas acima. Utilize o comando abaixo seguido do diretório de teste de cada uma dos programas. No exemplo abaixo utilizamos os teste do programa Hide:

pytest hide-test
O comando acima irá retornar a seguinte resposta no terminal abaixo:
rafaelfs@sdumont2nd5 hide-test$ pytest test
========================================== test session starts ==========================================
platform linux2 -- Python 2.7.15, pytest-4.6.11, py-1.11.0, pluggy-0.13.1
rootdir: /home/rafalfs/downloads/hide-and-seek/hide
collected 56 items                                                                                      

test/test_M9703_gain.py .                                                                         [  1%]
test/test_add_background.py .                                                                     [  3%]
test/test_add_rfi.py .                                                                            [  5%]
test/test_add_rfi_phaseswitch.py ..                                                               [  8%]
test/test_apply_gain_plugin.py .                                                                  [ 10%]
test/test_astro_signal_plugin.py .                                                                [ 12%]
test/test_background_noise_plugin.py .                                                            [ 14%]
test/test_beam_providers.py .....                                                                 [ 23%]
test/test_bleien7m.py .                                                                           [ 25%]
test/test_callisto_gain.py .                                                                      [ 26%]
test/test_cleanup_plugin.py .                                                                     [ 28%]
test/test_combine_signals_plugin.py .                                                             [ 30%]
test/test_coord_transform_plugin.py .                                                             [ 32%]
test/test_crosshair_strategy.py .                                                                 [ 33%]
test/test_drift_scan.py .                                                                         [ 35%]
test/test_earth_signal_plugin.py .                                                                [ 37%]
test/test_full_sky.py .                                                                           [ 39%]
test/test_gsm.py ....                                                                             [ 46%]
test/test_horizon_earth_signal.py .                                                               [ 48%]
test/test_load_beam_profile_plugin.py .                                                           [ 50%]
test/test_map_frequency_plugin.py .                                                               [ 51%]
test/test_map_strategy_plugin.py .                                                                [ 53%]
test/test_noise_gen.py .                                                                          [ 55%]
test/test_pointsources.py .                                                                       [ 57%]
test/test_qu_opt_coord_transform_plugin.py .                                                      [ 58%]
test/test_quaternion.py ....                                                                      [ 66%]
test/test_reduce_frequency_plugin.py s                                                            [ 67%]
test/test_reduce_signals_plugin.py .                                                              [ 69%]
test/test_scanning_strategy_plugin.py .                                                           [ 71%]
test/test_scheduler.py .                                                                          [ 73%]
test/test_scheduler_virtual.py .                                                                  [ 75%]
test/test_sphere.py .                                                                             [ 76%]
test/test_static_astro_signal_provider.py .                                                       [ 78%]
test/test_static_gsm.py ..                                                                        [ 82%]
test/test_trig_lookup.py ....                                                                     [ 89%]
test/test_write_calibration.py .                                                                  [ 91%]
test/test_write_coords_plugin.py .                                                                [ 92%]
test/test_write_rfi.py .                                                                          [ 94%]
test/test_write_tod_fits_plugin.py s                                                              [ 96%]
test/test_write_tod_phaseswitch_plugin.py .                                                       [ 98%]
test/test_write_tod_plugin.py .                                                                   [100%]

=========================================== warnings summary ============================================
test/test_add_rfi.py::TestAddRFIPlugin::test_add_rfi
  /home/rafalfs/downloads/hide-and-seek/hide/hide/plugins/add_rfi.py:60: VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future
    self.ctx.tod_vx[pos_freq: pos_freq + Z.shape[0], pos_time: pos_time + Z.shape[1]] += Z
-- Docs: https://docs.pytest.org/en/latest/warnings.html
========================== 54 passed, 2 skipped, 18 warnings in 45.35 seconds ===========================
Imterpretação Dos Resultados do Teste Rápido e Observações: A maioria dos testes não gera arquivos permanentes: eles usam diretórios temporários via tempfile e removem tudo após o teste.
Resultados dos Testes Unitários do HIDE
Arquivo de Teste Descrição do Plugin/Módulo Testado Status
test_M9703_gain.py Testa o ganho para o sistema M9703 ✔️ Passou
test_add_background.py Adiciona ruído de fundo simulado ao sinal ✔️ Passou
test_add_rfi.py Injeta interferência de rádio frequência (RFI) no TOD ✔️ Passou
test_add_rfi_phaseswitch.py Injeta RFI com comutação de fase ✔️✔️ Passou (2 testes)
test_apply_gain_plugin.py Aplica curva de ganho ao TOD ✔️ Passou
test_astro_signal_plugin.py Injeta sinais astrofísicos no TOD ✔️ Passou
test_background_noise_plugin.py Gera ruído de fundo aleatório ✔️ Passou
test_beam_providers.py Testa modelos de feixe utilizados nas simulações ✔️✔️✔️✔️✔️ Passou (5 testes)
test_bleien7m.py Testa simulação de observação do telescópio Bleien 7m ✔️ Passou
test_callisto_gain.py Aplica ganho baseado em dados do projeto Callisto ✔️ Passou
test_cleanup_plugin.py Limpa dados intermediários do pipeline ✔️ Passou
test_combine_signals_plugin.py Combina múltiplos sinais no TOD ✔️ Passou
test_coord_transform_plugin.py Transforma coordenadas celestes e locais ✔️ Passou
test_crosshair_strategy.py Testa estratégia de observação em forma de cruz ✔️ Passou
test_drift_scan.py Testa observação tipo drift-scan ✔️ Passou
test_earth_signal_plugin.py Injeta sinais da Terra no TOD ✔️ Passou
test_full_sky.py Testa mapeamento do céu completo ✔️ Passou
test_gsm.py Gera céu simulado com base no modelo GSM ✔️✔️✔️✔️ Passou (4 testes)
test_horizon_earth_signal.py Testa sinal da Terra no horizonte ✔️ Passou
test_load_beam_profile_plugin.py Carrega perfis de feixe de antena ✔️ Passou
test_map_frequency_plugin.py Mapeia frequências para canais do TOD ✔️ Passou
test_map_strategy_plugin.py Aplica estratégias de mapeamento ao TOD ✔️ Passou
test_noise_gen.py Gera ruído sintético genérico ✔️ Passou
test_pointsources.py Injeta fontes pontuais no TOD ✔️ Passou
test_qu_opt_coord_transform_plugin.py Testa transformação coordenada otimizada para QU ✔️ Passou
test_quaternion.py Testa rotinas de quaternions para rotação celeste ✔️✔️✔️✔️ Passou (4 testes)
test_reduce_frequency_plugin.py Reduz resolução em frequência ⏭️ Ignorado
test_reduce_signals_plugin.py Reduz resolução temporal dos sinais ✔️ Passou
test_scanning_strategy_plugin.py Aplica estratégias de escaneamento ✔️ Passou
test_scheduler.py Testa agendador de observações ✔️ Passou
test_scheduler_virtual.py Testa agendamento com telescópio virtual ✔️ Passou
test_sphere.py Testa representações esféricas do céu ✔️ Passou
test_static_astro_signal_provider.py Injeta sinal astrofísico estático ✔️ Passou
test_static_gsm.py Usa versão estática do modelo GSM ✔️✔️ Passou (2 testes)
test_trig_lookup.py Usa tabelas de senos/cossenos para eficiência ✔️✔️✔️✔️ Passou (4 testes)
test_write_calibration.py Escreve dados de calibração em arquivos ✔️ Passou
test_write_coords_plugin.py Escreve coordenadas simuladas ✔️ Passou
test_write_rfi.py Escreve sinais de RFI injetados ✔️ Passou
test_write_tod_fits_plugin.py Escreve TOD em formato FITS ⏭️ Ignorado
test_write_tod_phaseswitch_plugin.py Escreve TOD com chaveamento de fase ✔️ Passou
test_write_tod_plugin.py Escreve TOD final no disco ✔️ Passou

O teste automatizado do pacote HIDE com o pytest, que avaliou os módulos e plugins disponíveis no diretório hide-test. O resultado mostrou que:

  • 56 testes foram coletados no total.
  • 54 testes passaram com sucesso (.)
  • 2 testes foram pulados (s)
  • 18 avisos (warnings) foram gerados, geralmente por uso de funcionalidades antigas (deprecated), especialmente do NumPy.
Os alerta e aviso e principalmente "teste pulados" aqui mostrados ao final do teste são consequencida da falta de atualizações do codigo. Por utilizar versões antigas de bibliotecas como python 2.7 o codigo reporta o aviso "VisibleDeprecationWarning: using a non-integer number instead of an integer will result in an error in the future" isto significa que o codigo funciona agora, mas quebrará em futuras versões do NumPy. É recomendado que o usuário faça atualizações em seu codigo para se ajustar as versões de bibliotecas matemáticas exigidas pelo programas, com por exemplo o numpy, etc. Para mais informações visite a documentação oficial em ETH Zurich

➡️ Execução via SLURM com Hide & Seek

#!/bin/bash
#SBATCH --nodes=1                ### Solicita 1 nó de computação
#SBATCH --ntasks-per-node=1      ### 1 tarefa por nó (não é necessário paralelismo para rodar testes unitários)
#SBATCH --ntasks=1               ### Total de 1 tarefa
#SBATCH -p lncc-h100_dev         ### Especifica a partição (fila) do cluster. Use a apropriada para o seu ambiente.
#SBATCH -J hide-testes           ### Nome do job será "hide-testes"
#SBATCH -o hide_output.log       ### Arquivo de saída padrão (stdout)
#SBATCH -e hide_erros.log        ### Arquivo de erro padrão (stderr)

### A partir daqui começa o ambiente de execução

cd $SLURM_SUBMIT_DIR             ### Garante que o script será executado a partir do diretório onde foi submetido

### Carrega o módulo com a instalação do HIDE&SEEK
module load hide-and-seek/0.1

### Executa os testes com pytest
### O diretório "test" contém os arquivos test_*.py que serão executados automaticamente
### A opção -v mostra a saída em modo "verbose" (mais informativo)
pytest -v test/

### Se quiser salvar um relatório em formato JUnit XML para uso em CI/CD, adicione:
# pytest -v test/ --junitxml=relatorio-hide.xml
### Ou executes os comando basicos necessários para seus trabalhos como no exemplo abaixo:
# Execução do comando Hide 
srun hide --strategy-start=2016-03-21-00:00:00 --strategy-end=2016-03-21-01:00:00 --verbose=True hide.config.bleien7m
# Execução do comando Seek
srun seek --file-prefix=./bgs_example_data --map-name=BGS_maps_test.hdf --verbose=True seek.config.process_survey_ff

📚 Documentação Adicional

Com o módulo carregado, acesse ajuda com o comando abaixo:

module help hide-and-seek

---------------------------- Module Specific Help for "hide-and-seek/0.1" -----------------------------
	HIDE & SEEK - Simulacao e analise de levantamentos de radio

	Configura o ambiente para o HIDE & SEEK instalado via Conda e carregado com um Enviromental Modu
le
	Caminho dos binarios: /scratch/app/anaconda_module/envs/hide-and-seek-0.1/bin


Uso basico:
  1. Prepare seus scripts Python para rodar HIDE e SEEK
  2. Execute os comandos hide ou seek conforme a documentacao

Exemplo de execucao:
  hide --config config_hide.yaml
  seek --input data_seek.fits --output results.fits
Documentacao oficial e exemplos:
  https://cosmology.ethz.ch/research/software-lab/hide---seek.html

Ou utilize arquivos brutos para analise como no exemplo
# Execucao do comando Hide 
hide --strategy-start=2016-03-21-00:00:00 --strategy-end=2016-03-21-01:00:00 --verbose=True hide.config.
bleien7m
 # Execucao do comando Seek
 seek --file-prefix=./bgs_example_data --map-name=BGS_maps_test.hdf --verbose=True seek.config.process_s
urvey_ff
Documentacao oficial deste exemplos:
https://hide.readthedocs.io/en/latest/usage.html
https://seek.readthedocs.io/en/latest/usage.html
⚠️ **GitHub.com Fallback** ⚠️