# -*- coding: utf-8 -*-
"""
Created on Thu Mar 19 00:39:18 2026

@author: scige"
"""

"""
python.exe -m pip install --upgrade pip
pip install spyder
spyder

pip install matplotlib pandas scipy numpy
pip install numba pyopencl
pip install h5py astropy numpy
"""
#%%
import numpy as np
from astropy.io import fits
from datetime import datetime

# 1. Creiamo i dati dell'immagine (simuliamo un sensore CCD 100x100)
# Aggiungiamo un po' di rumore bianco e un "oggetto" luminoso al centro
data = np.random.normal(100, 5, (100, 100))
data[45:55, 45:55] += 500  # Simulazione di una stella

# 2. Creiamo la Primary HDU (Header + Data)
hdu = fits.PrimaryHDU(data)

# 3. Aggiungiamo i METADATI all'Header
# Le chiavi FITS sono limitate a 8 caratteri (standard classico)
hdr = hdu.header
hdr['OBSERVER'] = 'Corso Python'      # Chi osserva
hdr['INSTRUME'] = 'CCD-Sim-01'       # Strumento
hdr['EXPTIME'] = 30.0                # Tempo esposizione in secondi
hdr['FILTER'] = 'V'                  # Filtro fotometrico
hdr['DATE-OBS'] = datetime.now().strftime('%Y-%m-%dT%H:%M:%S') # Data osservazione
hdr.add_comment('File generato per scopo didattico sul formato FITS.')

# 4. (Opzionale) Aggiungiamo un'estensione con una Tabella Binaria
# Simuliamo un catalogo di stelle trovate nell'immagine
col1 = fits.Column(name='ID_STELLA', format='I', array=np.array([1, 2]))
col2 = fits.Column(name='MAGNITUDINE', format='E', array=np.array([12.5, 14.2]))
cols = fits.ColDefs([col1, col2])
tab_hdu = fits.BinTableHDU.from_columns(cols, name='CATALOGO_STELLE')

# 5. Uniamo tutto in una lista (HDU List) e salviamo
hdul = fits.HDUList([hdu, tab_hdu])
hdul.writeto('osservazione.fits', overwrite=True)

print("File 'osservazione.fits' creato con successo!")

# --- VERIFICA E LETTURA ---
print("\n--- Verifica Metadati FITS ---")
with fits.open('osservazione.fits') as hdul_read:
    # Mostra il sommario della struttura
    hdul_read.info()
    
    # Leggiamo l'header della Primary HDU
    print("\nHeader Primario:")
    print(f"Strumento: {hdul_read[0].header['INSTRUME']}")
    print(f"Esposizione: {hdul_read[0].header['EXPTIME']}s")
    
    # Leggiamo la tabella nell'estensione 1
    print("\nDati della Tabella Binaria:")
    print(hdul_read[1].data)
    
    