Vai al contenuto

Software

WebDAQ

Acquisizione dati via browser, sviluppata per LUNA

WebDAQ è il sistema di acquisizione dati via browser sviluppato per LUNA. Configura i digitizzatori CAEN, li regola guardando uno spettro in tempo reale, avvia i run, sorveglia i rate e il fascio, e accompagna ogni run con una documentazione pensata per durare più del turno. Gestisce le misure di 12C + 12C, di SHADES (22Ne(α,n)25Mg), di EASY (22Ne(α,γ)26Mg), di 19F + p, di 10B + α (il progetto NUCLEAR guidato da Marialuisa Aliotta) e di 24Mg + p.

La demo gira nel tuo browser con rivelatori simulati: niente di ciò che vedi è hardware vero o dati veri.

Il cruscotto di WebDAQ, diviso in diagonale tra tema chiaro e tema scuro: riquadri per lo stato del run, la corrente del fascio, la carica accumulata e la banda dei dati, i conteggi di tre regioni di interesse, i pulsanti Start e Stop e la tabella dei parametri di acquisizione.
Il cruscotto, nel tema chiaro e in quello scuro. Immagine dal repository di WebDAQ (licenza MIT); da allora l'interfaccia è un po' cambiata.

Perché da un browser

LUNA misura reazioni nucleari sotto circa 1,4 km di roccia, nel laboratorio del Gran Sasso, dove l'accesso alle sale sotterranee è regolato. Stare accanto ai digitizzatori non può essere una condizione per far funzionare l'esperimento. Con WebDAQ l'acquisizione si comanda da qualunque computer che raggiunga la macchina DAQ, e i turni si possono fare da remoto.

Il progetto discende da qui. L'acquisizione gira dentro il server DAQ, non nella pagina: chiudere il browser, ricaricarlo o perdere la rete non tocca il run in corso. Una scheda che smette di rispondere fa scattare un allarme e, con il riavvio automatico, il run viene fermato, segnalato e ripartito: un turno di notte perde un run, non il resto della notte.

Come è fatto

Due processi sulla macchina DAQ, un'interfaccia web e un server Python, e nessun passaggio di rete sul percorso dei dati: le schede vengono lette, decodificate e scritte su disco da una libreria C++ dentro il server stesso.

Schema di WebDAQ. Il browser parla con il server WebDAQ via HTTP. Nello stesso processo del server, CaenDAQ legge i digitizzatori CAEN e scrive i file del run in data/run<N>/, che RUReader converte in ROOT. CaenDAQ pubblica anche i rate su Graphite, mostrati da Grafana. Il server legge il picoamperometro, scrive nel logbook ELOG e manda gli allarmi su Telegram o Zulip.ELOG9Picoamperometro8TelegramZulip10Browserqualunque PC in rete1Server WebDAQPython · Flask2CaenDAQC++ · stesso processo3DigitizzatoriCAEN4data/run<N>/5GraphiteGrafana7RUReader6HTTPrate

percorso dei daticontrollo e monitoraggioun solo processo

  1. Il browser: l'interfaccia, un'applicazione React. Chiede tutto al server via HTTP, con un token di accesso, e non custodisce nulla di cui un run abbia bisogno.
  2. Il server WebDAQ (Python, Flask): controllo dei run, il database dei run, i metadati di ciascun run e gli istogrammi passati al browser.
  3. CaenDAQ, una libreria C++ inserita nello stesso processo: apre le schede, ne legge e decodifica i dati, scrive i file .caendat e intanto riempie gli spettri in tempo reale.
  4. I digitizzatori CAEN, via USB, fibra ottica o VME: firmware DPP-PHA per i rivelatori al germanio, DPP-PSD per gli scintillatori.
  5. La cartella del run, data/run<N>/: i dati, la configurazione delle schede, la corrente del fascio, i valori monitorati, le regioni di interesse e metadata.json.
  6. RUReader, il convertitore offline da .caendat a ROOT. Legge solo l'intestazione del file, ed è per questo che un solo convertitore legge i run di ogni versione di WebDAQ.
  7. Graphite e Grafana: CaenDAQ pubblica i rate, Grafana li disegna e custodisce le regole di allarme che WebDAQ attiva allo Start e spegne allo Stop.
  8. Il picoamperometro (TetrAMM, RBD 9103, o un valore che l'acceleratore già pubblica): corrente del fascio e carica accumulata.
  9. L'ELOG PSI della collaborazione: letto, scritto e precompilato dal controllo dei run.
  10. Allarmi su Telegram o Zulip: guasto di una scheda, una scheda che smette di mandare dati, la corrente del fascio o qualunque valore monitorato.

Schema. I numeri rimandano all'elenco qui sotto.

Cosa fa

  • Schede

    Cerca i digitizzatori collegati (USB, fibra ottica, A4818, VME), li aggiunge e conserva l'intera configurazione dei registri di ogni scheda in un file. Da quel momento quel file è la configurazione della scheda, e ogni run ne porta con sé una copia.

  • Acquisizione

    Un solo file .caendat per run per tutte le schede insieme, avviate in sincronia dal loro stesso meccanismo di partenza.

  • Regolazione in linea

    Cambia soglie, finestre e filtro trapezoidale mentre il run è in corso, e osserva come cambiano la traccia e lo spettro: un fit in tempo reale dello spettro raccolto dall'ultima modifica dà la risoluzione di ogni impostazione. Alla scheda arriva solo ciò che si può toccare durante l'acquisizione, e in un run di produzione solo dopo una tua conferma; il resto aspetta il run successivo.

  • Monitoraggio

    Spettri, forme d'onda e grafici di forma dell'impulso per ogni canale; rate di eventi, pile-up, persi e saturati canale per canale; corrente del fascio e carica accumulata.

  • Spettri e regioni di interesse

    Regioni di interesse con nome e conteggi in tempo reale, definite una volta sola sul server: lo stesso cruscotto su ogni schermo, ripristinato dopo un riavvio e scritto in ogni run come roi.json.

  • Slow control

    La corrente del fascio da un TetrAMM, da un RBD 9103 o da un valore che l'acceleratore già pubblica, e qualunque altro valore monitorato, registrati nel file stats.csv di ogni run con nome e unità di misura.

  • Documentazione dei run

    I metadati del run scritti accanto ai dati, un registro di tutti i run con ricerca, valutazione e note, l'ELOG della collaborazione e le regole di allarme di Grafana legate al run.

  • Sorveglianza

    Contatori di lettura per ogni scheda, allarmi su Telegram o Zulip e uno storico di ciò che è successo, con accanto le azioni per rimediare.

Un turno, in sei passi

In breve, dal capitolo «una sessione completa» della documentazione di WebDAQ. La visita guidata della demo percorre gli stessi passi.

  1. 1. Apri l'esperimento.

    Avvia WebDAQ e scegli la cartella di lavoro della campagna. Il server parte lì e crea ciò che gli serve: configurazione, calibrazioni, dati e database dei run. La cartella è l'esperimento.

  2. 2. Controlla l'hardware.

    Le schede compaiono con modello, firmware e collegamento, in verde quando il server le ha aperte. Il picoamperometro segna quasi zero a fascio spento, e si scelgono i valori da monitorare (tensione di terminale, rate), ognuno con nome e unità di misura.

  3. 3. Regola un canale.

    Nel tuner, con il salvataggio dei dati spento, imposta la soglia, poi il trapezio (o, per uno scintillatore, le finestre di carica) guardando l'impulso e lo spettro.

  4. 4. Avvia il run.

    Inserisci bersaglio, tensione di terminale e di sonda e tipo di run, e premi Start. WebDAQ copia nel run la configurazione di ogni scheda, avvia insieme le schede, la registrazione della corrente e le statistiche, e attiva le regole di allarme del run.

  5. 5. Tienilo d'occhio.

    Spettri, rate, corrente del fascio e carica, e i contatori delle schede, da dovunque si faccia il turno. Se una scheda si guasta, l'allarme arriva sul telefono e la pagina Troubleshoot propone il rimedio.

  6. 6. Ferma e scrivi.

    Lo Stop scrive la carica, i conteggi delle regioni di interesse e i metadati del run. La voce del logbook viene precompilata dalla documentazione del run; chi è di turno aggiunge il perché.

FAIR in pratica

I dati FAIR sono reperibili, accessibili, interoperabili e riutilizzabili (findable, accessible, interoperable, reusable). Per un esperimento tutto comincia dall'acquisizione: ciò che non viene annotato mentre il run è in corso è difficile da ricostruire dopo. WebDAQ è progettato perché ogni run lasci una documentazione predisposta per i principi FAIR, che ruota attorno al suo metadata.json. Ecco su cosa poggia oggi ciascuna lettera, nel codice, e quali sono i prossimi passi.

Reperibili

Cosa fa WebDAQ oggi (nel suo codice)

  • Ogni run è una cartella, data/run<N>/, con un metadata.json versionato (schema 1): numero del run, inizio e fine, durata, bersaglio, tensione di terminale e di sonda, tipo di run, carica accumulata, valutazione di qualità e note.
  • Lo stesso file elenca tutti i file del run con il loro ruolo (dati grezzi, configurazione delle schede, corrente del fascio, statistiche, ROOT) e la loro dimensione.
  • Il registro cerca i run per numero, bersaglio, note e tensioni, li filtra per tipo e valutazione ed esporta la selezione in CSV.

Prossimi passi

  • Un identificativo persistente (DOI o simile) per ogni run o serie di dati, oltre al numero di run della cartella di lavoro.
  • La voce ELOG del run registrata nei suoi metadati.

Accessibili

Cosa fa WebDAQ oggi (nel suo codice)

  • Formati aperti e leggibili (JSON, CSV, testo) accanto ai dati binari. metadata.json viene riscritto in modo atomico a ogni modifica, così chi lo legge non trova mai un file a metà.
  • I programmi che scrivono e leggono i dati sono open source con licenza MIT: WebDAQ, CaenDAQ e RUReader.
  • Tutto ciò che l'interfaccia mostra viene dall'API HTTP del server, con accesso autenticato, che può usare anche uno script.

Prossimi passi

  • Il deposito delle serie di dati pubblicate in un archivio a lungo termine, con le loro condizioni di accesso.

Interoperabili

Cosa fa WebDAQ oggi (nel suo codice)

  • I file .caendat mantengono in ogni versione di WebDAQ la stessa intestazione documentata, così un solo convertitore, RUReader, li legge tutti.
  • RUReader scrive file ROOT che riportano l'unità dei tempi, l'istante di inizio e l'elenco delle schede accanto all'albero degli eventi.
  • I dump dei registri danno a ogni registro nome e indirizzo, come nei manuali CAEN; stats.csv dà a ogni colonna nome, unità e provenienza.

Prossimi passi

  • I metadati del run riportati anche nel file ROOT convertito; oggi RUReader prende solo ciò che contiene l'intestazione del .caendat.
  • Uno schema JSON pubblicato per metadata.json.

Riutilizzabili

Cosa fa WebDAQ oggi (nel suo codice)

  • La provenienza, registrata allo Start: per ogni scheda modello, numero di serie, firmware, tipo di DPP, bit dell'ADC, campionamento e ruolo nella sincronizzazione; le versioni di WebDAQ, CaenDAQ, Python e del sistema operativo; e se i dati vengono da schede vere o dalla modalità di prova.
  • La configurazione completa dei registri di ogni scheda, copiata nel run.
  • Corrente del fascio e carica accumulata; definizioni e conteggi delle regioni di interesse.
  • Una valutazione di qualità e le note, compresa la nota automatica [AUTO-RESTART] quando il guasto di una scheda fa ripartire un run.

Prossimi passi

  • Un campo con la licenza dei dati in metadata.json.

Provalo: fai un run nella demo, apri Run files e leggi il suo metadata.json. Ha le stesse chiavi, più un blocco Demo che dice che il run è simulato.

Un metadata.json abbreviato. Le chiavi e il loro ordine sono quelli di WebDAQ; i valori sono inventati per l'esempio.
{
  "Schema Version": 1,
  "Run Number": 1276,
  "Start Time": "2025-11-14T21:03:12",
  "Stop Time": "2025-11-15T05:47:40",
  "Duration (s)": 31468.0,
  "Terminal Voltage": 380,
  "Run Type": "beam",
  "Target Name": "TiN #4",
  "Accumulated Charge": 2.71,
  "Flag": "good",
  "Acquisition": {
    "Synchronisation": "daisy-chain",
    "Software": { "webdaq": "…", "caendaq": "…", "acquisition_mode": "hardware" },
    "Boards": [ … ]
  },
  "Files": {
    "Data": ["run_1276_0000.caendat"],
    "Board Configuration": ["V1730_0.json"],
    "Current": ["current.txt"],
    "Statistics": ["stats.csv"],
    "Manifest": [ { "Name": "run_1276_0000.caendat", "Role": "raw-data", "Bytes": 1843200000 } ]
  }
}

Prova la demo

La vera interfaccia di WebDAQ, costruita dal suo codice e collegata a un'acquisizione simulata che gira nel tuo browser. Scegli i rivelatori: al germanio (HPGe) per la risoluzione, scintillatori BGO per l'efficienza, oppure rivelatori di neutroni, scintillatori liquidi come l'EJ-309 che distinguono i neutroni dai raggi γ dalla forma dell'impulso. Poi scegli una sorgente, regola un canale mentre il run va avanti, segna un picco e scarica i file che lascerebbe un run vero, metadata.json compreso.

La demo gira nel tuo browser con rivelatori simulati: niente di ciò che vedi è hardware vero o dati veri. WebDAQ è pensato per lo schermo di un computer; sul telefono la demo funziona, ma le sue tabelle scorrono di lato.