# Configurazione Tutti i valori sono in [`config.toml`](../config.toml): **nessun default nel codice**, una chiave mancante è un errore (exit 3). Suffissi nei nomi: `_s` secondi, `_c` gradi, `_rel` frazione della durata del dominio, `_sigma` multiplo di $\sigma$, `_n` / `_campioni` numero di campioni. Per aggiungere una chiave: `config.toml`, `CHIAVI` in `config.py`, questo documento. Il modulo che la legge è indicato a destra. Si usa un altro file con `fitseg --config altro.toml …`. ## `[dati]` — formato del CSV (`dati.py`) | Chiave | Valore | Significato | |---|---|---| | `colonna_tempo` | `"t_ms"` | nome della colonna del tempo | | `unita_tempo` | `"ms"` \| `"s"` | unità del tempo nel CSV; internamente tutto è in secondi (A3) | | `serie` | `["T_C", "dT_C"]` | colonne da approssimare; ognuna ha le sue equazioni, tutte condividono i domini (A4) | | `separatore` | `","` | separatore dei campi | ## `[domini]` — riconoscimento dei domini (`domini.py`, `analisi.py`) | Chiave | Default | Significato | Effetto se alzata / abbassata | |---|---|---|---| | `serie_riferimento` | `"T_C"` | serie in cui si cercano i gradini; deve essere in `serie` | — | | `soglia_gradino_c` | 20.0 | **salita complessiva** minima (somma dei salti dei campioni consecutivi in salita, in °C) per essere un gradino | alta: gradini piccoli non rilevati; bassa: scarti scambiati per gradini (A5) | | `soglia_bordo_sigma` | 6.0 | un campione è «in salita» se il salto verso il successivo supera $\theta_b\,\sigma_d$, con $\theta_b$ questa soglia e $\sigma_d = 1.4826\,\mathrm{MAD}$ dei salti ([algoritmi.md](algoritmi.md) §3) | alta: i campioni di una salita distribuita non sono riconosciuti tutti; bassa: il rumore genera falsi campioni in salita | | `distanza_min_salti_campioni` | 3 | campioni in salita a meno di questa distanza (in indici) appartengono alla stessa salita | alta: gradini ravvicinati fusi; bassa: una salita con un campione piatto in mezzo viene spezzata | | `n_min_punti` | 6 | campioni minimi per fittare un dominio con parametri liberi; sotto → `indeterminato` | alta: più domini non fittati | | `n_min_punti_parametri_fissi` | 4 | campioni minimi quando $c$ e $\tau$ sono fissi e si stima solo $A$ (raffreddamenti intermedi corti); sotto → `indeterminato`. Con 4–7 campioni $\sigma$ non è stimabile (servono 8, A13): il fit si fa comunque, l'adeguatezza no | 3: ancora fittabile ma con 1 grado di libertà; alta: tratti corti tra gradini ravvicinati restano indeterminati | | `scarta_dopo_salto_n` | 0 | campioni esclusi dal fit **all'inizio di ogni raffreddamento**. 0 perché la salita è già nel dominio di riscaldamento: su 45 seed con 0 gli errori su $A$, $\tau$ e salti sono i migliori e i tratti indeterminati i meno numerosi; con 2 peggiorano molto | alta: perde campioni del decadimento (e rende indeterminati i tratti corti) | ## `[fit]` — regressione e scelta (`fit.py`, `analisi.py`) | Chiave | Default | Significato | |---|---|---| | `raffreddamento_intermedio_fissa_da_finale` | `["c", "tau"]` | parametri che i raffreddamenti intermedi prendono dal raffreddamento finale ([algoritmi.md](algoritmi.md) §5b). `[]` = tutti liberi. Nomi ammessi: quelli del modello (`c`, `A`, `tau`) | | `perdita` | `"soft_l1"` | funzione di perdita di `least_squares`: `"linear"` (minimi quadrati), `"soft_l1"`, `"huber"` (robuste agli scarti, A14) | | `scala_perdita_sigma` | 3.0 | scala $s$ della perdita robusta, in multipli di $\sigma$: sotto $s$ come i minimi quadrati, sopra cresce linearmente | | `tau_min_rel`, `tau_max_rel` | 0.05, 50.0 | limiti di $\tau$ come frazione della durata del dominio $L$: $\tau \in [0.05L,\ 50L]$; un $\tau$ al bordo rende il fit non valido | | `n_griglia_tau` | 40 | punti della griglia logaritmica su $\tau$ per la partenza dell'esponenziale | | `soglia_condizione` | $10^8$ | numero di condizione dello jacobiano normalizzato oltre cui i parametri sono «non identificabili» | | `correggi_autocorrelazione` | `true` | allarga gli intervalli di $\sqrt{(1+\rho_1)/(1-\rho_1)}$ se $\rho_1$ supera `soglia_acf` (A17) | | `soglia_acf` | 0.3 | soglia di $\rho_1$ per la correzione | | `soglia_delta_aicc` | 2.0 | tra i modelli entro questo $\Delta\mathrm{AICc}$ dal migliore vince quello con meno parametri | | `scala_residui_vs_rumore_max` | 1.5 | un modello è «adeguato» se $\hat\sigma_\text{res} \le$ questo valore $\cdot\ \sigma$, con $\hat\sigma_\text{res} = 1.4826\,\mathrm{MAD}(r)$ la scala **robusta** dei residui ([algoritmi.md](algoritmi.md) §5.5, §6). Osservato per il modello giusto: 0.97–1.40; per modelli sbagliati: 11–100 | ### `[fit.modelli_per_tipo]` — modelli provati per tipo di dominio | Chiave | Default | Significato | |---|---|---| | `riposo` | `["costante", "lineare", "esp_decad"]` | modelli provati sul riposo (A10) | | `raffreddamento` | `["esp_decad"]` | modelli provati sui raffreddamenti (A7) | Entrambe le liste sono obbligatorie e non vuote. Non esiste la voce `riscaldamento`: quel dominio non si fitta (A23). Modelli ammessi: i nomi in `modelli.MODELLI`. ## `[output]` (`cli.py`) | Chiave | Default | Significato | |---|---|---| | `cartella_output` | `"output"` | cartella madre; ogni analisi scrive in `//`. `--output DIR` la sostituisce | ## `domini.toml` — domini modificabili (`domini.py`) Scritto in `output//01_domini/domini.toml`, rilegibile con `fitseg analizza CSV --domini FILE` ([uso.md](uso.md)): ```toml [[dominio]] tipo = "raffreddamento" # riposo | riscaldamento | raffreddamento t0_s = 16.1000 # primo campione del dominio (incluso) t1_s = 17.9100 # primo campione del dominio successivo (escluso); per l'ultimo: ultimo campione ``` I domini devono essere contigui ($t_1$ di uno uguale a $t_0$ del successivo): altrimenti exit 6. ## Esempi | Voglio… | Cambio | |---|---| | gradini più piccoli (es. 8 °C) | `[domini] soglia_gradino_c = 8.0` e verifica che gli scarti restino sotto la soglia (A5) | | tutti i raffreddamenti con parametri liberi | `[fit] raffreddamento_intermedio_fissa_da_finale = []` | | fissare solo la costante di tempo | `["tau"]` | | fit ai minimi quadrati puri | `perdita = "linear"` | | un'altra colonna del CSV | `[dati] serie = [...]` e, se serve, `[domini] serie_riferimento` | | tempo in secondi | `[dati] unita_tempo = "s"` e `colonna_tempo` |