diff --git a/README.md b/README.md index 5bdcb64..28adde0 100644 --- a/README.md +++ b/README.md @@ -43,6 +43,12 @@ uv run grafico.py -o grafico.png # salva l'immagine (png, pdf, svg) in Mostra `T` e `ΔT` in funzione del tempo. `grafico.py` ha le sue dipendenze (`numpy`, `matplotlib`), gestite da uv come per `genera.py`; senza schermo usa `-o`. +## Pulizia + +```bash +./pulisci.sh # svuota la cartella output/ +``` + ## Output ``` @@ -61,4 +67,4 @@ Per cambiare il profilo di riscaldamento si modificano `t_impulsi_s` e `dT_impul ## Documentazione -Modello, passi di calcolo, controlli di accettazione e limiti sono in [docs/SPEC.md](docs/SPEC.md). +Elenco completo delle funzionalità in [docs/FUNZIONALITA.md](docs/FUNZIONALITA.md). Modello, passi di calcolo, controlli di accettazione e limiti sono in [docs/SPEC.md](docs/SPEC.md). diff --git a/docs/FUNZIONALITA.md b/docs/FUNZIONALITA.md new file mode 100644 index 0000000..d323318 --- /dev/null +++ b/docs/FUNZIONALITA.md @@ -0,0 +1,43 @@ +# Funzionalità + +Elenco di ciò che il programma sa fare. Per l'uso passo per passo vedi il [README](../README.md); per il modello e i controlli di accettazione vedi [SPEC.md](SPEC.md). + +## Generazione dei dati — `genera.py` + +- **Profilo di temperatura**: `T` parte dalla temperatura ambiente, sale con uno o più gradini di riscaldamento e ridiscende con raffreddamento esponenziale fino a `T_amb`. +- **Gradini configurabili**: numero, istanti e ampiezze (`t_impulsi_s`, `dT_impulsi_c`); lista vuota = nessun riscaldamento. Costante di raffreddamento in `k_raffreddamento_hz`. +- **Ambiente realistico**: `T_amb` assestata con andamento esponenziale, con rumore e quantizzazione propri (`amb_*`). Non compare nel CSV, serve per `ΔT` e come baseline di `T`. +- **Tempi con jitter**: intervallo medio `dt_ms` con variazione uniforme ±`jitter_ms`, fino a `durata_s`. +- **Risposta del sensore**: filtro del primo ordine (`tau_sensore_s`) calcolato su griglia fine da 5 ms e interpolato ai tempi di campionamento. +- **Rumore di `T`**: componente bianca gaussiana, più forte quando `T` è molto sopra l'ambiente (`sigma_c` → `sigma_caldo_c`), più una deriva lenta di tipo Ornstein-Uhlenbeck (`wander_*`). +- **Quantizzazione**: `T` e `ΔT` a `passo_T_c`, ambiente a `amb_passo_c`. `ΔT` è calcolato dopo rumore e quantizzazione di entrambi i canali. +- **Riproducibilità**: `--seed` fissa il risultato (stesso seed e stessa configurazione ⇒ file identico); senza seed ne viene scelto uno casuale e stampato su stderr. +- **Uscita flessibile**: per default `output/gen_.csv` (cartella creata se manca); `-o percorso` per un file a scelta; `-o -` per stdout. +- **Configurazione senza valori nascosti**: tutti i valori stanno in un TOML; una chiave mancante, un TOML non valido o gradini di lunghezza diversa terminano con exit 1 e un messaggio in italiano. Lo stesso avviene se il file di uscita non è scrivibile. + +Formato dell'uscita: `t_ms,T_C,dT_C` (`t_ms` intero, gli altri a due decimali). + +## Visualizzazione — `grafico.py` + +- Disegna `T` e `ΔT` in funzione del tempo in due pannelli con asse comune. +- Senza argomenti usa l'ultimo CSV modificato in `output/`; oppure si indica il file. +- Apre una finestra, oppure con `-o` salva l'immagine (png, pdf, svg) e funziona anche senza schermo. +- Errore chiaro (exit 1) se non ci sono CSV, se il file non si legge o se il formato non è `t_ms,T_C,dT_C`. + +## Pulizia — `pulisci.sh` + +- Svuota la cartella `output/` (la cartella resta). Non tocca altro. +- Se `output/` non esiste lo segnala senza errore. + +## Ambiente + +- Gli script girano con [uv](https://docs.astral.sh/uv/): le dipendenze (`numpy`, più `matplotlib` per il grafico) sono dichiarate nello script (PEP 723) e uv crea da solo l'ambiente virtuale. +- La cartella `output/` è ignorata da git. + +## Riferimento dati reali + +[dati.csv](../dati.csv) contiene una registrazione reale del sensore IR, usata come riferimento per ricalibrare il rumore (`sigma_c`, `wander_*`, `amb_*`). Non è letta dal programma. + +## Limiti noti + +Elencati in [SPEC.md §6](SPEC.md): un solo tempo di raffreddamento, gradini istantanei, ambiente che non sale col riscaldamento, nessun glitch di campionamento, rumore tarato su un solo sensore. diff --git a/pulisci.sh b/pulisci.sh new file mode 100755 index 0000000..c216419 --- /dev/null +++ b/pulisci.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +# Elimina i dati generati: svuota la cartella output/ (la cartella resta). +set -euo pipefail + +cd "$(dirname "$0")" + +if [ ! -d output ]; then + echo "Niente da pulire: la cartella output/ non esiste." + exit 0 +fi + +n=$(find output -mindepth 1 | wc -l) +find output -mindepth 1 -delete +echo "Eliminati $n elementi da output/."