Skip to content

Adiciona mosaico de múltiplos tiles, composição RGB e metadados de proveniência ao motor de cutout#68

Merged
glaubervila merged 7 commits into
mainfrom
add-mosaic-method
Jun 24, 2026
Merged

Adiciona mosaico de múltiplos tiles, composição RGB e metadados de proveniência ao motor de cutout#68
glaubervila merged 7 commits into
mainfrom
add-mosaic-method

Conversation

@rcboufleur

@rcboufleur rcboufleur commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Quando o fits_cut do astrocut produz múltiplas extensões (cutout caindo em mais de um tile do survey), cada extensão é agora reprojetada para um grid comum centrado na coordenada solicitada via reproject_interp e combinada com nanmean, gerando um FITS de extensão única com o mosaico final. Isso vale para os três caminhos de saída (fits, png colorido e png mono).

Para PNG colorido, foi criado um módulo dedicado de composição RGB (color_composer.py) com duas estratégias: arcsinh_clip (compressão independente por banda via _arcsinh_stretch, alto contraste) e lupton (implementação fiel do algoritmo de Lupton et al. 2004 com f(I)/I, preservando razões de fluxo entre bandas), ambas configuráveis por survey em COLOR_PARAMS (atualmente com parâmetros para des_dr2). Ambos os formatos de saída agora embutem metadados de proveniência (ORIGIN, SOFTNAME, SOFTVERS, HISTORY).

O teste existente foi ajustado com mock de fits.open retornando HDUList de extensão única para cobrir o caminho sem mosaico, e reproject==0.14.1 entrou como dependência nova.

Elimina arquivos FITS intermediários do pipeline de cutout. O engine agora processa inteiramente em memória usando fits_cut(memory_only=True), e o astrocut lê .fits.fz nativamente via .section (descomprime só a região do cutout, não o tile inteiro). A descompressão funpack em disco foi removida do fluxo principal mas código legado foi mantido em tasks.py. Otimizações adicionais de memória (liberação pós-reprojeção) aumentam o cutout RGB máximo com 8 tiles de 0.77° para 0.91° em 12 GB.

- Add _mosaic_extensions to reproject multi-tile FITS onto common grid
- Add ORIGIN/SOFTNAME/SOFTVERS service provenance to FITS and PNG outputs
- Read SOFTVERS from cutout.__version__
- Delegate RGB composition to color_composer.compose_rgb
- Embed WCS keywords in PNG tEXt chunks for coordinate display
- Compress PNG with compress_level=9 + optimize
@rcboufleur
rcboufleur requested a review from glaubervila June 24, 2026 12:03
- Usa fits_cut(memory_only=True) nos 3 caminhos (FITS, Color PNG, Mono PNG)
  em vez de escrever FITS temporários em disco e reler
- _mosaic_extensions(path) → _mosaic_hdus(data_hdus): trabalha em memória
  e retorna PrimaryHDU; caller decide se escreve em disco
- Extrai _extract_data_hdus e _add_provenance como helpers
- Libera dados originais após reprojeção (hdu.data = None) para reduzir
  pico de memória durante np.stack no mosaico
- Troca .astype(float) → .astype(np.float32) nas arrays acumuladas do RGB
  (float64 não era necessário e dobrava o uso de RAM)
- Remove chamada a _ensure_unpacked no image_cutout — o astrocut já lê
  .fits.fz nativamente via .section, descomprimindo só a região do cutout
- _ensure_unpacked mantido como legado com docstring explicativa
- Remove imports mortos (shutil, uuid4) e _count_data_extensions
@glaubervila
glaubervila merged commit 8caa873 into main Jun 24, 2026
0 of 2 checks passed
@glaubervila
glaubervila deleted the add-mosaic-method branch June 24, 2026 22:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants