Este documento rastreia as tarefas concluídas durante o desenvolvimento do site Gerador de Layouts de Antenas BINGO e lista possíveis melhorias e adições futuras.
Versão Atual: 1.0.3 | Última Atualização: Fevereiro 2026
- Análise de Requisitos e Definição do Escopo:
- Identificar os principais tipos de layouts de antena necessários (Grid, Espiral, Anéis, etc.).
- Definir os parâmetros de entrada para cada tipo de layout.
- Esboçar a interface do usuário e as principais seções (Gerador, Mapa, Exportação, Padrão de Feixe, PSF).
- Pesquisar e selecionar bibliotecas JavaScript (Leaflet, Plotly, JSZip, FileSaver).
- Configuração do Ambiente de Desenvolvimento:
- Criar estrutura de diretórios do projeto (
css/,js/,data/,python/,img/). - Configurar
index.htmlbásico,styles.cssemain.js. - Implementar sistema de temas (claro/escuro) e toggle na UI.
- Criar estrutura de diretórios do projeto (
- Desenvolvimento do Módulo
bingo_layouts.js:- Traduzir/adaptar algoritmos de
bingo_layouts.pypara JavaScript. - Implementar função
createGridLayout. - Implementar função
createSpiralLayout. - Implementar função
createRingLayout. - Implementar função
createRhombusLayout. - Implementar função
createHexGridLayout. - Implementar função
createPhyllotaxisLayout. - Implementar função
createManualCircularLayout. - Implementar função
createRandomLayout. - Implementar funções auxiliares (ex:
centerCoords,applyCenterExponentialScaling,placeWithRandomOffsetAndCollisionCheck).
- Traduzir/adaptar algoritmos de
- Desenvolvimento do Módulo
generator.js:- Criar classe
AntennaLayoutGenerator. - Implementar seleção de tipo de layout (
#layout-type). - Implementar geração dinâmica de controles de parâmetros (
#dynamic-params). - Implementar lógica para ler parâmetros da UI.
- Integrar com
BingoLayoutspara calcular posições dos tiles. - Implementar geração das 64 antenas dentro de cada tile.
- Implementar desenho do layout (tiles, antenas) no Canvas (
#layout-canvas). - Implementar cálculo e visualização de escala e eixos no canvas.
- Implementar contagem e exibição de tiles/antenas (
#tile-count,#antenna-count). - Implementar botão "Gerar Layout" e "Gerar Aleatório".
- Implementar funcionalidade "Mostrar Colisões" e visualização no canvas.
- Implementar exibição de detalhes das colisões.
- Implementar funcionalidade de download da imagem do layout (PNG).
- Adicionar opções de tema (claro/Dracula) e inclusão de eixos para a imagem.
- Remover opções de formato JPEG e qualidade.
- Adicionar responsividade ao canvas.
- Disparar evento
layoutGeneratedapós geração.
- Criar classe
- Reorganização da UI na Seção do Gerador:
- Trocar a posição da sub-seção "Baixar Imagem do Layout" com "Análise da PSF (Point Spread Function)".
- Ajustar as proporções horizontais e CSS correspondentes (flex, bordas).
- Desenvolvimento do Módulo
psf_analyzer.jsepsf_analysis_worker.js:- Criar interface HTML para controles e exibição da PSF (botão, inputs, displays de resultados).
- Implementar classe
PSFAnalyzerempsf_analyzer.js. - Criar Web Worker
psf_analysis_worker.jspara cálculos da PSF. - Implementar lógica de comunicação entre
PSFAnalyzere o worker. - Implementar cálculo do AF (Array Factor) no worker.
- Implementar cálculo do valor da PSF (intensidade ou magnitude) no worker.
- Implementar integração numérica 2D da PSF para obter o volume.
- Implementar cálculo do Volume Total da PSF e Theta_pico.
- Implementar cálculo de SLL (Side Lobe Level):
- Input para
Θ_SLL. - Cálculo do volume do cone e percentual SLL.
- Input para
- Implementar cálculo de EE (Encircled Energy):
- Input para porcentagem de EE.
- Cálculo do
Θ_EEe volume fracionário.
- Atualizar UI com resultados e status.
- Lidar com reset da análise quando um novo layout é gerado.
- Gerenciar estado de "calculando" para desabilitar inputs.
- Modificar
triggerFullPSFVolumeCalculationempsf_analyzer.jspara retornar uma Promise. - Fazer
psf_analyzer.jsdisparar um eventopsfTotalVolumeCalculatedapós o cálculo bem-sucedido do volume total e Theta_pico.
- Desenvolvimento do Módulo
beam_pattern.js,beam_worker.jsebeam_worker_3d.js:- Criar interface HTML para controles do padrão de feixe (Phi, escala, botões 2D/3D).
- Implementar Web Worker
beam_worker.jspara cálculo do padrão de feixe 2D. - Implementar Web Worker
beam_worker_3d.jspara cálculo do padrão de feixe 3D. - Implementar carregamento e parseamento de dados E-field:
- Para 2D:
efield_phi_X.csvindividuais (via IPFS). - Para 3D: arquivo CSV completo (via IPFS).
- Implementar cache para dados carregados.
- Implementar retentativas de fetch.
- Para 2D:
- Implementar cálculo do Array Factor (AF) nos workers.
- Aplicar AF ao campo do elemento individual nos workers.
- Enviar dados resultantes para plotagem (Plotly.js).
- Implementar plotagem 2D (Magnitude vs. Theta para Phi constante).
- Implementar plotagem 3D (Superfície polar).
- Implementar opções de escala (dB/Linear).
- Gerenciar estado de "calculando" e exibir mensagens de status.
- Atualizar plotagem quando o layout ou parâmetros mudam.
- Adicionar downsampling para plots 2D com muitos pontos.
- Disparar evento
beamData3DLoadedapós carregamento dos dados 3D. - Remover títulos dos gráficos do padrão de feixe 2D e 3D para otimizar espaço vertical.
- Implementação do Mapa de Calor (Heatmap):
- Criar Web Worker
heatmap_worker.jspara geração de heatmap. - Implementar supersampling adaptativo:
- 9x9 samples (81 total) para θ < 5° (centro, alta densidade)
- 5x5 samples (25 total) para θ > 5° (resto da imagem)
- Implementar paleta HSV com 64 níveis de cor.
- Implementar interpolação bilinear para dados polares.
- Suporte a múltiplas escalas: dB, Linear, Sqrt, Quadrática, Raiz Quarta.
- Criar Web Worker
- Implementação da Visualização da Curva EE(Θ) da PSF:
- Estrutura HTML e CSS:
- Adicionar nova sub-seção no HTML dentro do contêiner do "Padrão de Feixe Simulado" para o gráfico da Curva EE(Θ).
- Implementar um divisor visual (borda CSS) entre a área do gráfico do Padrão de Feixe e a nova área do gráfico da Curva EE(Θ).
- Ajustar CSS para que a área do Padrão de Feixe seja significativamente maior verticalmente (ex: proporção 6:1) que a área da Curva EE(Θ).
- Remover o título "Curva de Energia Circunscrita (EE vs. Θ)" e o botão "Gerar Curva" da UI.
- Desenvolvimento do Módulo
psf_ee_theta_plot.js:- Criar classe
PSFEeThetaPlotter. - Inicializar e gerenciar elementos DOM (área do plot, status).
- Criar classe
- Lógica de Geração da Curva no
psf_analysis_worker.js:- Adicionar novo comando
calculateEECurveao worker. - Reutilizar a
psfGridcalculada. - Calcular pontos (Theta, EE) para a curva, com maior densidade de amostragem (precisão ~3x maior) em ângulos Theta menores.
- Enviar dados da curva (
eeCurveData) de volta para a thread principal.
- Adicionar novo comando
- Integração e Plotagem no
psf_ee_theta_plot.js:- Geração Automática: Acionar o cálculo e plotagem da curva EE(Θ) automaticamente assim que o "Volume Total da PSF" for calculado com sucesso pelo
PSFAnalyzer. - Comunicar-se com
psf_analysis_worker.js(via referência do worker doPSFAnalyzer) para solicitar os dados da curva. - Plotar os dados recebidos usando Plotly.js.
- Zoom Horizontal: Configurar o gráfico Plotly para permitir zoom apenas no eixo X (Theta), mantendo o eixo Y (EE) fixo entre 0-100%.
- Atualizar mensagens de status.
- Limpar o gráfico quando os dados base da PSF forem invalidados (ex: novo layout).
- Geração Automática: Acionar o cálculo e plotagem da curva EE(Θ) automaticamente assim que o "Volume Total da PSF" for calculado com sucesso pelo
- Coordenação em
main.js:- Inicializar
PSFEeThetaPlotter. - Garantir que
PSFEeThetaPlotterreceba os dados (antennaCoords,elementFieldData3D,K_CONST) e seja notificado quando o volume da PSF estiver pronto.
- Inicializar
- Estrutura HTML e CSS:
- Desenvolvimento do Módulo
map.js:- Integrar biblioteca Leaflet.js.
- Inicializar mapa centrado no BINGO.
- Adicionar camadas base (OSM, Satélite ESRI) e controle de camadas.
- Adicionar marcador fixo para BINGO Central.
- Implementar adição de marcadores de estação por clique.
- Carregar e implementar seleção de arranjos pré-definidos de
data/posicoes_outriggers.csv. - Implementar busca de altitude via API Open-Meteo para marcadores.
- Implementar marcadores arrastáveis e atualização de coordenadas/altitude.
- Exibir informações da estação selecionada (lat, lon, alt, dist. BINGO).
- Exibir distância dinâmica do cursor ao BINGO.
- Implementar lista de coordenadas com opções de centralizar/remover marcador.
- Implementar ícones de cores diferentes para marcadores (BINGO, padrão, ativo).
- Adicionar linhas de distância e tooltips entre estações e BINGO.
- Implementar funcionalidade de visualização do arranjo de tiles/antenas em escala real no mapa.
- Calcular posições geográficas dos elementos do arranjo.
- Desenhar elementos como círculos (L.circle) com raio em metros.
- Adicionar camada de overlay para o arranjo e controle no seletor de camadas.
- Atualizar visualização do arranjo quando o layout muda ou marcadores são movidos.
- Corrigir bug de "marcador duplicado" após arrastar (gerenciamento da flag
isDraggingMarker).
- Desenvolvimento do Módulo
export.js:- Criar interface HTML para os campos de exportação e botão de download ZIP.
- Implementar classe
OskarLayoutExporter. - Gerar conteúdo para
layout_wgs84.txt(estações do mapa). - Gerar conteúdo para
position.txt(BINGO Central fixo). - Gerar conteúdo para
station/layout.txt(centros dos tiles do gerador). - Gerar conteúdo para
station/tile/layout.txt(64 antenas do tile, layout fixo). - Exibir conteúdos nas textareas.
- Adicionar botões "Copiar" para cada textarea.
- Implementar download dos 4 arquivos como um ZIP.
- Permitir nome de arquivo ZIP customizável.
- Usar JSZip para criar o ZIP e FileSaver.js para download.
- Atualizar campos de exportação quando os dados relevantes mudam (layout, posições no mapa).
- Desenvolvimento do Módulo
main.js:- Implementar lógica de inicialização da aplicação.
- Coordenar comunicação entre módulos através de eventos globais (ex:
layoutGenerated,themeChanged,beamData3DLoaded,psfTotalVolumeCalculated). - Configurar listeners de eventos globais (resize, etc.).
- CSS e Estilização:
- Aplicar estilos consistentes em toda a aplicação.
- Garantir responsividade para diferentes tamanhos de tela.
- Estilizar componentes específicos (sliders, tabelas, listas, botões, etc.).
- Testes e Depuração:
- Testar todas as funcionalidades em diferentes navegadores.
- Verificar a precisão dos cálculos e dos dados exportados.
- Depurar e corrigir quaisquer problemas encontrados.
- Otimizar performance de cálculos e renderizações onde possível.
- Documentação Inicial:
- Escrever um
README.mdinicial descrevendo o projeto. - Manter um
todo.md(este arquivo) para rastrear progresso.
- Escrever um
- Organização de Código:
- Criar arquivo
js/constants.jscentralizando constantes físicas, CIDs IPFS e configurações. - Adicionar diretivas
'use strict'em todos os módulos JavaScript. - Adicionar documentação JSDoc em todos os arquivos JavaScript.
- Atualizar scripts Python para usar caminhos relativos.
- Remover arquivo duplicado
todo.md.
- Criar arquivo
- Arquivos de Configuração:
- Melhorar
.gitignorecom padrões para Node.js, Python, Electron, IDEs. - Criar
.editorconfigpara estilo de código consistente. - Atualizar
package.jsoncom metadados completos, keywords, scripts de build.
- Melhorar
- SEO (Search Engine Optimization):
- Adicionar meta tags completas: canonical, robots, theme-color, keywords, author.
- Melhorar Open Graph e Twitter Cards com dimensões de imagem e alt text.
- Adicionar dados estruturados Schema.org (WebApplication, SoftwareApplication).
- Adicionar preconnect/dns-prefetch para recursos CDN.
- Atualizar sitemap.xml com data atual.
- Melhorar robots.txt com diretivas por bot.
- Acessibilidade:
- Adicionar classe CSS
.sr-onlypara conteúdo de leitores de tela. - Adicionar
.skip-linkpara navegação por teclado. - Adicionar estilos
:focus-visiblepara indicação de foco. - Adicionar
prefers-reduced-motionmedia query. - Adicionar
prefers-contrastmedia query. - Adicionar ARIA roles apropriados (header, main, footer, nav).
- Adicionar
rel="noopener noreferrer"em links externos.
- Adicionar classe CSS
- Processamento de Dados:
- Criar objeto
PerformanceMetricspara rastrear tempos de fetch/processamento/renderização. - Adicionar funções de validação:
validateAntennaCoords(),validateEFieldData(). - Melhorar fetch IPFS com retry (2 tentativas/gateway) e backoff exponencial.
- Melhorar parsing de CSV com validação completa e relatório de erros.
- Criar objeto
- Segurança (Electron):
- Habilitar sandbox e contextIsolation.
- Adicionar prevenção de navegação para URLs externas.
- Melhorar auto-updater com tratamento de erros.
- Verificações:
- Executar code review e corrigir issues.
- Executar CodeQL scan (0 vulnerabilidades).
- Sistema de Abas e Navegação:
- Implementar
TabManagercom botões.tab-btne painéis.tab-content. - Disparar evento customizado
tabChangedao trocar de aba. - Adicionar acesso rápido às abas no
main.js.
- Implementar
- Gerenciador de Estações (
stations.js):- Implementar 10 tipos de layout: grid, circular, spiral, y_shape, cross, random, logarithmic, sunflower (Fibonacci), dual_ring, elliptical.
- Adicionar geração automática em tempo real com debounce (150ms) ao alterar parâmetros.
- Manter botões "Gerar" e "Randomizar" para controle explícito.
- Geração inicial no carregamento da página.
- Implementar parâmetros de espaçamento exponencial por tipo de layout.
- Gerador INI OSKAR (
ini_generator.js):- Implementar
OskarIniGeneratorparaoskar_sim_interferometer(73 parâmetros em 5 seções). - Implementar
OskarImagerGeneratorparaoskar_imager(34 parâmetros). - Implementar
OskarBeamPatternGeneratorparaoskar_sim_beam_pattern(42 parâmetros). - Alinhar todos os geradores com TutorialOSKAR.tex (tooltips, defaults, parâmetros faltantes).
- Inputs de caminho de arquivo via clipboard paste (fa-paste) com fallback.
- Utilitário
getOsLineEnding()para detectar terminação de linha do SO. - Todos os geradores prepõem seção
[General] app=....
- Implementar
- Gerador de Sky Model (
sky_model.js):- Implementar 4 modos de geração: single, grid, random, power_law.
- Suporte completo a 12 colunas OSKAR (RA, Dec, I, Q, U, V, refFreq, spix, RM, major, minor, pa).
- Helper
_buildGaussianFields(prefix)para evitar duplicação. - Validação de fontes: RA ∈ [0°, 360°), Dec ∈ [-90°, +90°], Flux ≥ 0.
- Tabela interativa com coluna "Tipo" (ponto vs Gaussiana) e ordenação por coluna.
- Exportação no formato OSKAR de 12 colunas.
- Cobertura UV (
uv_coverage.js):- Implementar visualização de cobertura UV com Plotly.js.
- Aceleração WebGPU com shader WGSL (workgroup_size 64) para ≥10 estações.
- Fallback automático para CPU (
_computeUVonCPU). - Incluir componente Bz no cálculo de baselines 3D.
- Exportação e Coordenadas:
- Corrigir ordem de coordenadas:
layout_wgs84.txteposition.txtpara lon,lat,alt. - Implementar seletor de formato (WGS84/ECEF/ENU) com radio buttons e tooltips.
- Remover textarea WGS84 standalone; consolidar no seletor de rádio.
- ZIP export lê de
export-layout-wgs84-alt.
- Corrigir ordem de coordenadas:
- Mapa Interativo:
- Implementar Ctrl+scroll zoom com overlay de mensagem (1.5s).
- Adicionar toggle de distância no mapa.
- Atualizar Leaflet CDN de 1.7.1 → 1.9.4.
- Correções de Bugs:
- Corrigir race condition no heatmap (worker retorna
layoutHashpara validação). - Corrigir cache de heatmap para evitar dados obsoletos.
- Adicionar tooltip de intensidade no mapa de calor.
- Melhorar sincronização de workers.
- Corrigir race condition no heatmap (worker retorna
- Infraestrutura:
- Atualizar BUILD.md com seções Linux e macOS.
- Python
telescope_gen.py: substituir caminhos hardcoded poros.path.dirname+argparse. - Adicionar campo de nome de arquivo de imagem customizável.
- Habilitar carregamento local de dados.
- Aceleração de Cálculos com WebGPU:
- Expandir uso de WebGPU para cálculos de PSF e heatmap.
- Implementar fallback automático para CPU quando WebGPU não estiver disponível.
- Otimização de Performance do Heatmap:
- Implementar renderização progressiva (baixa resolução → alta resolução).
- Adicionar cache de tiles renderizados.
- Considerar WebGL para renderização do heatmap.
- Modo Offline/PWA:
- Implementar Service Worker para funcionamento offline.
- Armazenar dados E-field em IndexedDB após primeiro download.
- Adicionar manifest.json para instalação como PWA.
- Mais Algoritmos de Layout:
- Implementar layouts otimizados para baixa redundância (algoritmo de minimização de sidelobes).
- Layouts baseados em otimização por algoritmos genéticos.
- Layout Y-shaped (formato em Y) comum em radioastronomia. (implementado em v1.0.3 no StationManager)
- Layout logarítmico-espiral. (implementado em v1.0.3 no StationManager)
- Editor de Layout Manual Avançado:
- Ferramentas de alinhamento (alinhar à grade, alinhar horizontalmente/verticalmente).
- Ferramentas de distribuição (distribuir uniformemente).
- Seleção múltipla de tiles com Shift+Click.
- Rotação de grupos de tiles.
- Layout de Múltiplas Estações (Outriggers):
- Visualizar e configurar layouts para múltiplas estações simultaneamente no gerador.
- Calcular baseline coverage UV para arranjo de múltiplas estações.
- Padrões de Elemento de Antena Customizáveis:
- Permitir upload de arquivos de padrão de elemento (formato OSKAR, CST, GRASP).
- Biblioteca de padrões de elemento pré-carregados (dipolo, Vivaldi, patch, horn).
- Análise de PSF Mais Detalhada:
- Cálculo de FWHM (Full Width at Half Maximum) do lóbulo principal.
- Identificação e listagem dos níveis dos lóbulos laterais mais altos.
- Visualização 2D/3D da própria PSF como superfície.
- Comparação lado-a-lado de PSFs de diferentes layouts.
- Análise de Cobertura UV: (implementado em v1.0.3)
- Plotar a cobertura no plano UV para o arranjo gerado.
- Simular cobertura UV ao longo de diferentes horas de observação (Earth rotation synthesis).
- Calcular métricas de cobertura UV (filling factor, gaps).
- Simulação de Observação:
- Simular imagem de fonte pontual com o beam pattern atual.
- Adicionar fontes estendidas e simular imagem resultante.
- Considerar efeitos de ruído térmico e sistemáticos básicos.
- Desfazer/Refazer (Undo/Redo):
- Para ações no gerador de layout.
- Histórico de alterações navegável.
- Internacionalização (i18n):
- Suporte para múltiplos idiomas (Inglês, Português, Espanhol).
- Detecção automática de idioma do navegador.
- Guia do Usuário / Tutoriais Interativos:
- Incorporar ajuda contextual com tooltips explicativos.
- Tour guiado interativo para novos usuários.
- Vídeos tutoriais incorporados.
- Melhorias de Acessibilidade (A11Y):
- Revisão completa para conformidade com WCAG 2.1 AA.
- Navegação completa por teclado.
- Suporte a leitores de tela melhorado.
- Salvar Estado da Aplicação:
- Usar
localStoragepara persistir o estado da UI entre sessões. - Permitir salvar/carregar múltiplos "projetos" nomeados.
- Usar
- Dashboard de Comparação:
- Permitir comparar métricas de múltiplos layouts lado a lado.
- Gráficos comparativos de PSF, beam width, SLL.
- Otimização de Performance:
- Perfilamento de código JavaScript para identificar gargalos.
- Considerar WebAssembly para partes críticas de cálculo.
- Lazy loading de módulos não essenciais.
- Backend (Opcional, para funcionalidades avançadas):
- Contas de usuário para salvar layouts e configurações na nuvem.
- Compartilhamento de layouts via URL.
- Execução de simulações OSKAR mais complexas no servidor.
- API REST para integração com outros softwares.
- Testes Automatizados:
- Implementar testes unitários para módulos JavaScript críticos (ex:
bingo_layouts.js). - Implementar testes de integração.
- Configurar testes End-to-End (E2E) com Playwright ou Cypress.
- Implementar testes unitários para módulos JavaScript críticos (ex:
- CI/CD (Integração Contínua / Entrega Contínua):
- Configurar pipeline GitHub Actions para automação de testes.
- Deploy automático para GitHub Pages após merge em main.
- Verificação automática de vulnerabilidades com Dependabot.
- Atualização de Dependências:
- Revisar e atualizar bibliotecas de terceiros periodicamente.
- Monitorar alertas de segurança de dependências.
- Mais Formatos de Exportação:
- Exportar para formato CASA (Common Astronomy Software Applications).
- Exportar para formato MeerKAT/SKA.
- Exportar imagem do beam pattern em alta resolução.
- Exportar dados brutos em CSV/JSON.
- Validação de Configurações OSKAR:
- Checagens básicas nos dados exportados para garantir compatibilidade.
- Warnings para configurações potencialmente problemáticas.
- Integração com Ferramentas Externas:
- Plugin/extensão para CASA.
- Integração com JupyterLab.
- Migração de Dados E-field:
- Considerar CDN próprio além de IPFS para maior confiabilidade.
- Implementar compressão de dados (gzip/brotli).
- Versionar dados E-field para diferentes configurações de antena.
- Monitoramento e Analytics:
- Implementar analytics respeitando privacidade (Plausible, Umami).
- Monitorar erros em produção (Sentry).
- Dashboard de métricas de uso.