Files
davideandClaude Sonnet 4.6 a30a9410c7 docs: aggiorna README e CLAUDE.md
README: aggiunge algoritmo.md e clear.sh alla struttura e alle voci menu.
CLAUDE.md: riscrittura completa — rimuove script obsoleti e valori
hardcoded, documenta architettura attuale (induttoreX/, report dinamico,
T∞ da start/report.md, corporate identity in report_completo.py).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-14 11:11:48 +02:00

149 lines
4.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Analisi Termica Forno — Cevolani
Script Python per l'analisi del profilo termico di una scatola che attraversa un forno industriale, con acquisizione tramite sensori IR.
## Setup (Windows)
```bat
python -m venv venv
venv\Scripts\activate
pip install -r requirements.txt
```
## Avvio rapido
Tutto il progetto è accessibile tramite un menu interattivo:
```bat
python main.py
```
Il menu si ripete dopo ogni operazione finché non si preme `0` per uscire.
Le voci del menu vengono costruite automaticamente in base alle cartelle presenti nel progetto: aggiungere una nuova cartella `induttoreX/` con un `appX.py` la fa apparire automaticamente.
---
## Struttura del progetto
```text
temperatura/
├── data.csv # dati acquisiti (input)
├── main.py # menu interattivo
├── report_completo.py # generatore report PDF + LaTeX
├── algoritmo.md # descrizione dell'algoritmo di regressione
├── clear.sh # elimina tutti i file generati
├── requirements.txt
├── start/
│ ├── calcola_t_amb.py # calcola T∞ media ponderata
│ └── plot_temperatura.py # visualizza i dati raw
└── induttoreX/ # una cartella per ogni induttore
├── appX.py # script di fit (parametri hardcoded)
├── induttoreX.png # grafico generato
└── reportX.md # report generato
```
---
## Voci del menu
### Calcola T ambiente
**Script:** `start/calcola_t_amb.py`
Calcola la temperatura ambiente media ponderata sul tempo (regola dei trapezi) usando la colonna `temp_amb IR [C]` dell'intera acquisizione. Stampa i risultati a console e genera `start/report.md`.
> Il valore ottenuto viene usato come costante `T∞` in tutti i fit.
---
### Plot dati raw
**Script:** `start/plot_temperatura.py`
Visualizza il profilo grezzo di entrambe le serie (`temp_obj IR` e `temp_amb IR`) nell'intervallo definito dalle variabili `T0` e `T_END` in cima al file. Salva il grafico in `start/plot_temperatura.png`.
---
### Induttore X — appX.py
**Script:** `induttoreX/appX.py`
Esegue la regressione non lineare sul tratto di acquisizione definito dalle variabili `T0` e `T_END` in cima allo script (modificabili manualmente). Produce:
- `induttoreX/induttoreX.png` — grafico con dati raw e curva di fit sovrapposti
- `induttoreX/reportX.md` — equazione trovata, parametri stimati con incertezze (1σ) e R²
Per aggiungere un nuovo induttore: copiare uno script esistente, aggiornare `T0`, `T_END` (e `W0_START`/`W0_END` se serve escludere un intervallo), e salvarlo in una nuova cartella `induttoreX/`.
---
### Algoritmo di regressione
**File:** `algoritmo.md`
Spiega l'algoritmo usato per tutti i fit: minimi quadrati non lineari, metodo Trust Region Reflective (TRF), gestione dei pesi, stima iniziale dei parametri e metriche di qualità (R², incertezze dalla matrice di covarianza).
---
### Report completo (PDF + LaTeX)
**Script:** `report_completo.py`
Legge automaticamente tutti i `reportX.md` presenti nelle cartelle `induttore*/` e genera:
- `report_completo.tex` — sorgente LaTeX compilabile con MikTeX o TeX Live
- `report_completo.pdf` — PDF professionale con cover page, scheda documento, header/footer e tabella riepilogativa finale
Il PDF viene generato direttamente da Python tramite `reportlab` (nessuna dipendenza esterna richiesta).
---
### Pulizia file generati
**Script:** `clear.sh`
Elimina tutti i file prodotti dagli script (`*.md` e `*.png` in `start/` e `induttore*/`, più `report_completo.tex` e `report_completo.pdf`). I sorgenti e `data.csv` non vengono toccati.
```bash
bash clear.sh
```
---
## Requisiti di data.csv
### Formato
| Proprietà | Valore richiesto |
| --- | --- |
| Formato | CSV |
| Separatore | `,` (virgola) |
| Encoding | UTF-8 |
| Prima riga | intestazione (header) |
### Colonne obbligatorie
I nomi delle colonne devono corrispondere **esattamente** (spazi e maiuscole inclusi):
| Colonna | Unità | Descrizione |
| --- | --- | --- |
| `time since start [ms]` | ms | Tempo dall'inizio acquisizione — convertito in secondi (`/ 1000`) da tutti gli script |
| `temp_obj IR [C]` | °C | Temperatura dell'oggetto misurato (target del fit) |
| `temp_amb IR [C]` | °C | Temperatura ambiente (usata per calcolare T∞) |
Le colonne aggiuntive presenti nel file vengono ignorate.
### Copertura temporale
Il file deve contenere campioni nei range temporali usati da ciascuno script. I parametri `T0` e `T_END` in ogni `appX.py` devono ricadere all'interno dei valori di `time since start [ms]` presenti nel CSV (convertiti in secondi).
## Modello di fitting
Tutti i fit usano il modello di raffreddamento di Newton:
```text
T(t) = T∞ + A · exp( -(t - t₀) / τ )
```
con `T∞` fissa (calcolata da `calcola_t_amb.py`) e parametri `A`, `τ` liberi, stimati con regressione non lineare (metodo TRF di `scipy.optimize.curve_fit`).