Skip to content

Latest commit

 

History

History
407 lines (369 loc) · 25.4 KB

TODO.md

File metadata and controls

407 lines (369 loc) · 25.4 KB

✅ BINGO Antenna Layout Generator - TODO List 📋

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

🚀 Fase 1: Fundação e Configuração Inicial

  • 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.html básico, styles.css e main.js.
    • Implementar sistema de temas (claro/escuro) e toggle na UI.
  • Desenvolvimento do Módulo bingo_layouts.js:
    • Traduzir/adaptar algoritmos de bingo_layouts.py para 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).

🎨 Fase 2: Interface do Gerador de Layout e Visualização

  • 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 BingoLayouts para 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 layoutGenerated após geração.
  • 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).

🔬 Fase 3: Análise da Point Spread Function (PSF)

  • Desenvolvimento do Módulo psf_analyzer.js e psf_analysis_worker.js:
    • Criar interface HTML para controles e exibição da PSF (botão, inputs, displays de resultados).
    • Implementar classe PSFAnalyzer em psf_analyzer.js.
    • Criar Web Worker psf_analysis_worker.js para cálculos da PSF.
    • Implementar lógica de comunicação entre PSFAnalyzer e 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.
    • Implementar cálculo de EE (Encircled Energy):
      • Input para porcentagem de EE.
      • Cálculo do Θ_EE e 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 triggerFullPSFVolumeCalculation em psf_analyzer.js para retornar uma Promise.
    • Fazer psf_analyzer.js disparar um evento psfTotalVolumeCalculated após o cálculo bem-sucedido do volume total e Theta_pico.

📡 Fase 4: Simulação do Padrão de Feixe e Curva EE(Θ) da PSF

  • Desenvolvimento do Módulo beam_pattern.js, beam_worker.js e beam_worker_3d.js:
    • Criar interface HTML para controles do padrão de feixe (Phi, escala, botões 2D/3D).
    • Implementar Web Worker beam_worker.js para cálculo do padrão de feixe 2D.
    • Implementar Web Worker beam_worker_3d.js para cálculo do padrão de feixe 3D.
    • Implementar carregamento e parseamento de dados E-field:
      • Para 2D: efield_phi_X.csv individuais (via IPFS).
      • Para 3D: arquivo CSV completo (via IPFS).
      • Implementar cache para dados carregados.
      • Implementar retentativas de fetch.
    • 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 beamData3DLoaded apó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.js para 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.
  • 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).
    • Lógica de Geração da Curva no psf_analysis_worker.js:
      • Adicionar novo comando calculateEECurve ao worker.
      • Reutilizar a psfGrid calculada.
      • 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.
    • 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 do PSFAnalyzer) 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).
    • Coordenação em main.js:
      • Inicializar PSFEeThetaPlotter.
      • Garantir que PSFEeThetaPlotter receba os dados (antennaCoords, elementFieldData3D, K_CONST) e seja notificado quando o volume da PSF estiver pronto.

🗺️ Fase 5: Mapa Interativo

  • 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).

📤 Fase 6: Exportação para OSKAR

  • 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).

⚙️ Fase 7: Integração, Refinamento e Testes

  • 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.md inicial descrevendo o projeto.
    • Manter um todo.md (este arquivo) para rastrear progresso.

🛡️ Fase 8: Boas Práticas, SEO e Organização de Código (v1.0.2)

  • Organização de Código:
    • Criar arquivo js/constants.js centralizando 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.
  • Arquivos de Configuração:
    • Melhorar .gitignore com padrões para Node.js, Python, Electron, IDEs.
    • Criar .editorconfig para estilo de código consistente.
    • Atualizar package.json com metadados completos, keywords, scripts de build.
  • 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-only para conteúdo de leitores de tela.
    • Adicionar .skip-link para navegação por teclado.
    • Adicionar estilos :focus-visible para indicação de foco.
    • Adicionar prefers-reduced-motion media query.
    • Adicionar prefers-contrast media query.
    • Adicionar ARIA roles apropriados (header, main, footer, nav).
    • Adicionar rel="noopener noreferrer" em links externos.
  • Processamento de Dados:
    • Criar objeto PerformanceMetrics para 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.
  • 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).

🚀 Fase 9: Módulos OSKAR, Estações, Sky Model e Cobertura UV (v1.0.3)

  • Sistema de Abas e Navegação:
    • Implementar TabManager com botões .tab-btn e painéis .tab-content.
    • Disparar evento customizado tabChanged ao trocar de aba.
    • Adicionar acesso rápido às abas no main.js.
  • 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 OskarIniGenerator para oskar_sim_interferometer (73 parâmetros em 5 seções).
    • Implementar OskarImagerGenerator para oskar_imager (34 parâmetros).
    • Implementar OskarBeamPatternGenerator para oskar_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=....
  • 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.txt e position.txt para 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.
  • 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 layoutHash para validação).
    • Corrigir cache de heatmap para evitar dados obsoletos.
    • Adicionar tooltip de intensidade no mapa de calor.
    • Melhorar sincronização de workers.
  • Infraestrutura:
    • Atualizar BUILD.md com seções Linux e macOS.
    • Python telescope_gen.py: substituir caminhos hardcoded por os.path.dirname + argparse.
    • Adicionar campo de nome de arquivo de imagem customizável.
    • Habilitar carregamento local de dados.

🔮 Futuras Melhorias e Adições

🎯 Alta Prioridade

  • 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.

🔧 Funcionalidades Avançadas de Layout

  • 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.

📊 Simulação e Análise Aprimoradas

  • 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.

🖥️ Interface do Usuário e Experiência

  • 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 localStorage para persistir o estado da UI entre sessões.
    • Permitir salvar/carregar múltiplos "projetos" nomeados.
  • Dashboard de Comparação:
    • Permitir comparar métricas de múltiplos layouts lado a lado.
    • Gráficos comparativos de PSF, beam width, SLL.

🚀 Performance e Backend

  • 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 e Manutenção

  • 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.
  • 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.

📦 Exportação e Integração

  • 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.

🌐 Infraestrutura

  • 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.