# Capitolo 6: Esecuzione della Simulazione e Analisi

Questo capitolo descrive il flusso operativo completo per eseguire una sessione di test, dal caricamento di uno scenario all'analisi dei dati raccolti.

## 6.1. Flusso Operativo Tipico

Una sessione di test completa con il Radar Target Simulator segue tipicamente questi passaggi:

1.  **Configurazione e Connessione:**
    *   Verificare e, se necessario, modificare le impostazioni di connessione tramite la finestra `ConnectionSettingsWindow` (Capitolo 5).
    *   Premere il pulsante `Connect` per stabilire la comunicazione con il sistema radar. L'indicatore LED nella barra di stato diventerà verde.

2.  **Caricamento dello Scenario:**
    *   Selezionare lo scenario di test desiderato dal menu a tendina nel "Pannello di Controllo Scenari". I target dello scenario verranno caricati e visualizzati nella tabella "Target List" e in anteprima sul PPI.

3.  **Avvio della Simulazione:**
    *   Passare alla scheda "Simulation".
    *   Premere il pulsante `Start Live`. Questa azione innesca il processo di avvio descritto nella sezione successiva.

4.  **Monitoraggio in Tempo Reale:**
    *   Osservare il PPI: i target simulati (verdi) inizieranno a muoversi lungo le loro traiettorie. Se il sistema radar sta tracciando correttamente, appariranno i target reali (rossi) sovrapposti o vicini a quelli simulati.
    *   Monitorare i pannelli "Ownship State" e "Active Targets" per dati cinematici numerici.
    *   Controllare la barra di stato per metriche di comunicazione (rate, latenza) e il pannello dei log per eventuali messaggi di errore o informativi.

5.  **Fine della Simulazione:**
    *   La simulazione termina automaticamente quando tutti i target hanno completato la loro traiettoria.
    *   È possibile interromperla manualmente in qualsiasi momento premendo il pulsante `Stop Live`.

6.  **Analisi dei Dati:**
    *   Al termine della simulazione (sia naturale che manuale), i dati della sessione (ground truth simulata, dati reali ricevuti e metadati) vengono salvati automaticamente in un file di archivio `.json`.
    *   Navigare alla scheda "Analysis", aggiornare la lista e aprire la sessione appena conclusa per analizzare le prestazioni di tracciamento.

## 6.2. Il Processo di Avvio della Simulazione

Premere `Start Live` non avvia semplicemente il movimento dei target. Innesca una sequenza di operazioni orchestrata dal `SimulationController` per garantire uno stato iniziale pulito e sincronizzato:

1.  **Reset del Radar (in background):** Viene inviato un comando di reset al sistema radar per cancellare tutte le tracce preesistenti. Questo assicura che il test parta da una situazione nota. L'applicazione attende una conferma che il radar sia "pulito" prima di procedere.
2.  **Snapshot dell'Origine (T=0):** Viene catturato lo stato corrente dell'ownship (posizione e heading) e salvato come "origine della simulazione" fissa (vedi Capitolo 2.2.2).
3.  **Invio dello Scenario Iniziale:** L'intera configurazione dello scenario (posizioni iniziali di tutti i target) viene inviata al sistema radar in un'unica operazione atomica (es. tramite un singolo payload JSON o una sequenza `tgtinit`).
4.  **Avvio del `SimulationEngine`:** Solo dopo che i passaggi precedenti sono stati completati con successo, viene avviato il thread del `SimulationEngine`. Da questo momento in poi, il motore inizierà a calcolare gli stati successivi dei target e a inviare comandi di aggiornamento (`tgtset` o payload JSON) a intervalli regolari.

Note operative e robustezza del processo di start

*   **Reset atomico e comandi preparatori:** Per ridurre al minimo la possibilità di perdite o condizioni inconsistenti durante l'inizializzazione, l'applicazione può inviare comandi preparatori al device (ad es. impostazioni di riga o parametri) e quindi effettuare un reset atomico delle tracce/target quando supportato dal server. Questo approccio è preferito rispetto all'invio di molteplici comandi singoli che potrebbero essere persi.
*   **Sincronizzazione orologi e misurazione latenze:** Prima o durante la fase di start possono essere scambiati messaggi di sincronizzazione (SYNC) per stimare il ritardo di comunicazione tra client e server. I valori di latenza stimata vengono poi resi disponibili nelle metriche della sessione e possono essere usati per tarare il `Prediction Offset`.
*   **Avvio non bloccante:** Il processo di start è stato progettato per non bloccare l'interfaccia grafica. Le operazioni di setup (reset, invio scenario, sincronizzazione) avvengono in background; l'interfaccia rimane reattiva e mostra lo stato di avanzamento fino al momento in cui il motore inizia a riprodurre la simulazione.

Questo processo garantisce che il sistema radar e il simulatore siano allineati allo stesso stato iniziale prima che il movimento dinamico abbia inizio.

## 6.3. Analisi Post-Simulazione

Al termine di ogni sessione, l'applicazione archivia i dati raccolti. Questi dati possono essere analizzati per una valutazione quantitativa delle performance.

### 6.3.1. La Scheda "Analysis"

Questa scheda elenca tutti i file di archivio delle simulazioni passate, mostrando data, nome dello scenario e durata. Da qui è possibile:
*   `Refresh List`: Ricaricare l'elenco dei file dalla cartella di archivio.
*   `Open Archive Folder`: Aprire la cartella contenente i file `.json` per un'ispezione manuale.
*   `Analyze Selected`: Aprire la finestra di analisi per la sessione selezionata.

### 6.3.2. La Finestra di Analisi (`AnalysisWindow`)

Questa finestra fornisce una sintesi statistica e grafica dell'errore di tracciamento per un target specifico.

*(Placeholder per l'immagine)*

**Descrizione dell'Immagine:** `finestra_analisi.png`
*Qui ti aspetti uno screenshot della `AnalysisWindow` con dati di esempio. Evidenzia:*
1.  *La tabella "Error Statistics", mostrando le righe per "Mean", "Std Dev" e "RMSE".*
2.  *Il grafico "Error Over Time", mostrando le tre curve per gli errori X, Y, e Z.*
3.  *Il selettore "Select Target ID" per scegliere quale target analizzare.*
4.  *Le etichette "Avg. Latency" e "Prediction Offset" che mostrano i valori di temporizzazione.*

---

*   **Selezione del Target:** È possibile analizzare un target alla volta selezionandolo dal menu a tendina.
*   **Statistiche di Errore:** La tabella mostra le metriche chiave calcolate come `Errore = Posizione_Reale - Posizione_Simulata_Interpolata`.
    *   **Mean (Errore Medio):** Indica una deriva o un bias sistematico. Un valore medio vicino a zero è desiderabile.
    *   **Std Dev (Deviazione Standard):** Misura la variabilità o "jitter" dell'errore attorno alla sua media. Un valore basso indica un tracciamento stabile.
    *   **RMSE (Root Mean Square Error):** Una misura complessiva della magnitudine dell'errore. È una delle metriche più importanti per valutare l'accuratezza generale.
*   **Grafico dell'Errore nel Tempo:** Il grafico mostra l'andamento dell'errore istantaneo lungo gli assi X, Y e Z per tutta la durata del tracciamento. È utile per identificare in quali fasi della traiettoria (es. durante una virata) l'errore aumenta.
*   **Metadati di Sincronizzazione:** La finestra mostra anche la latenza media stimata durante la sessione e l'eventuale `Prediction Offset` manuale che era stato applicato, fornendo un contesto cruciale per l'interpretazione dell'errore medio.