Vai ai contenuti

Cos'è NetCDF? - MetCast

Le meraviglie dell'atmosfera, un progetto di Vittorio Villasmunta
Salta menù
Cos'è NetCDF?
NetCDF (Network Common Data Form) è un formato di file per dati scientifici autodescrittivi (Self-Describing Files, SDF). Questo significa che il file NetCDF contiene sia i dati grezzi che i metadati (informazioni sui dati, come unità, dimensioni, coordinate, ecc.) confezionati insieme.
Nel contesto di GrADS, i file NetCDF e HDF (un formato simile) sono chiamati SDF perché racchiudono dati e metadati nello stesso contenitore. GrADS è in grado di leggere i dati da file NetCDF e HDF, a condizione che i dati siano organizzati su una griglia regolare e che rientrino nello spazio della griglia interna a 5 dimensioni di GrADS (longitudine, latitudine, livello verticale, tempo ed ensemble).
Come GrADS Legge i File NetCDF
GrADS offre tre modi principali per leggere i metadati da un file NetCDF e posizionarli nel suo spazio di griglia interno:
  1. Comando sdfopen:
    • È il metodo più semplice: basta fornire il nome del file (o un URL OPeNDAP) e GrADS cerca di fare il resto.
    • Tuttavia, richiede che tutti i metadati nel file NetCDF siano conformi alle convenzioni COARDS (Cooperative Ocean/Atmosphere Research Data Service).
    • Il comando sdfopen non supporta il formato HDF5.
  2. Comando xdfopen:
    • Questo metodo richiede un po' più di sforzo da parte dell'utente, in quanto devi scrivere un file descrittore di dati per integrare o sostituire i metadati esistenti nel file NetCDF, in modo che GrADS possa interpretarli correttamente.
    • La sintassi del file descrittore utilizzato con xdfopen è leggermente diversa da quella per i file binari grigliati.
    • xdfopen consente l'accesso a un numero maggiore di file SDF, inclusi quelli che non aderiscono a standard noti.
    • Anche xdfopen non supporta il formato HDF5.
  3. Comando open:
    • Questo è il metodo che richiede all'utente di scrivere un file descrittore GrADS completo per sovrascrivere tutti i metadati presenti nel file NetCDF. I metadati originali nel file vengono ignorati.
    • È il metodo raccomandato per scenari complessi, come l'aggregazione di un gran numero di file dati tramite "templating", quando i dati sono pre-proiettati su una griglia diversa da lat/lon, quando le variabili hanno valori indefiniti diversi, o quando i dati sono stati "impacchettati" (packed) in modo non standard.
    • È l'unico modo per leggere i file HDF5 con GrADS (dalla versione 2.0.a7+).
Componenti di un File Descrittore GrADS per NetCDF
Quando si usa il comando open per i file NetCDF (o HDF-SDS/HDF5), il file descrittore GrADS (.ctl) è un file ASCII a formato libero, dove i componenti di ogni riga sono delimitati da spazi e possono apparire in qualsiasi ordine. Ogni riga inizia con un nome di voce specifico, seguito da argomenti o parole chiave.
Ecco alcune voci chiave e le loro specifiche per i file NetCDF:
  • DSET: Specifica il nome del file di dati NetCDF. Se il file descrittore e il file di dati non sono nella stessa directory, è necessario un percorso completo o l'uso del carattere ^ per indicare un percorso relativo al file descrittore.
    • Esempio: DSET ^sample_data.nc (se sample_data.nc si trova nella stessa directory del file .ctl).
  • DTYPE: Per i file NetCDF, questa voce deve contenere la parola chiave netcdf o hdfsds. Per i file HDF5, si usa hdf5_grid (dalla versione GrADS 2.0.a7+).
  • TITLE: Una descrizione concisa del contenuto del dataset, che apparirà nell'output dei comandi di query.
  • UNDEF: Specifica il valore dei dati indefiniti o mancanti. È un campo obbligatorio, anche se non ci sono dati indefiniti.
    • Per i file NetCDF/HDF-SDS, è possibile specificare un secondo argomento opzionale: il nome dell'attributo nel file SDF che contiene il valore indefinito (es. _FillValue). GrADS convertirà tutti i valori mancanti al valore UNDEF specificato nel descrittore.
    • Esempio: UNDEF -9.99e8 _FillValue.
  • UNPACK: Utilizzato per dati non-float "impacchettati" che devono essere convertiti in float applicando una formula (y = x * scale_factor + add_offset).
    • Si specificano i nomi degli attributi per il fattore di scala (scale_factor_attribute_name) e l'offset (add_offset_attribute_name). Se l'offset non esiste, il secondo argomento può essere omesso (l'offset predefinito sarà 0.0). Se c'è solo l'offset, si usa "NULL" per il fattore di scala (dalla versione GrADS 2.0.0+).
    • Esempi: UNPACK scale_factor add_offset, UNPACK NULL add_offset.
  • XDEF, YDEF, ZDEF, TDEF, EDEF: Queste voci definiscono le coordinate delle dimensioni (longitudine, latitudine, livello verticale, tempo ed ensemble) nel file NetCDF. La sintassi è la stessa dei file binari. Puoi usare l'output di ncdump -c per ottenere informazioni su queste dimensioni.
  • VECTORPAIRS: Specifica esplicitamente le coppie di componenti vettoriali (es. u,v) se i dati sono su una proiezione nativa diversa da lat/lon e i venti devono essere ruotati da un senso relativo alla griglia a un senso relativo alla Terra.
  • VARS ... ENDVARS: Questo blocco descrive tutte le variabili contenute nel dataset.
    • varname (nome della variabile): Per i file NetCDF/HDF-SDS/HDF5, il varname può seguire la sintassi SDF_varname=>grads_varname. SDF_varname è il nome originale nel file NetCDF (come mostrato da ncdump) e deve corrispondere esattamente. grads_varname è un alias (nome più breve o conforme alle convenzioni GrADS). L'aliasing può essere omesso se SDF_varname già rispetta le convenzioni di GrADS.
      • Se SDF_varname contiene spazi, sostituire ~ per ogni spazio (dalla versione GrADS 2.0.a3+).
      • Per HDF5, SDF_varname può essere molto lungo e includere i nomi dei gruppi nidificati (separati da /).
      • Esempio: /HDFEOS/GRIDS/EarthSurfaceReflectanceClimatology/Data~Fields/MonthlySurfaceReflectance=>msr.
    • levs (livelli verticali): Un intero che specifica il numero di livelli verticali della variabile. Se una variabile non ha una dimensione Z, levs sarà 0. Se ha una dimensione Z, levs deve essere uguale al valore znum specificato nella voce ZDEF.
    • units (unità/dimensioni variabili): Per i file NetCDF/HDF-SDS/HDF5, questo campo è un elenco delimitato da virgole delle dimensioni variabili della variabile. Le dimensioni sono espresse come x, y, z, t ed e, corrispondenti ai cinque assi definiti da XDEF, YDEF, ZDEF, TDEF ed EDEF.
      • L'ordine delle dimensioni in questo elenco è fondamentale, poiché deve descrivere la forma della variabile così come è stata scritta nel file SDF.
      • Esempi:
        • Height=>hgt 17 t,z,y,x Geopotential Height (m)
        • presSFC=>psfc 0 y,x Surface Pressure
      • Se il file contiene una variabile che varia in una dimensione non-coordinate (es. intervallo istogramma, banda spettrale, numero ensemble), puoi inserire un numero intero non negativo nell'elenco delle dimensioni variabili che diventerà l'indice dell'array della dimensione extra.
        • Esempio: VAR=>hist0 0 0,y,x First historgram interval for VAR VAR=>hist1 0 1,y,x Second historgram interval for VAR VAR=>hist2 0 2,y,x Third histogram interval for VAR
        • Un'alternativa è utilizzare un asse Z non utilizzato per queste dimensioni extra, ma questo potrebbe non essere la rappresentazione più accurata.
  • @ (Attribute Metadata): Usato per aggiungere metadati supplementari al file descrittore, come unità o documentazione.
Note sull'Utilizzo e Limitazioni
  • Tipi di dati: GrADS gestisce i tipi di dati NetCDF short, long e float. Questi vengono convertiti in tipo float dopo l'I/O.
  • Unpacking automatico: sdfopen/xdfopen possono gestire l'unpacking automatico se i dati impacchettati sono di tipo "short", le costanti per la trasformazione sono "float" e i nomi degli attributi sono "scale_factor" o "slope" e "add_offset" o "intercept". Altrimenti, è necessario usare il comando open con un file descrittore completo e specificare gli attributi UNPACK.
  • Dati non floating-point: Se i dati non sono numeri floating-point e richiedono una trasformazione con gli attributi UNPACK, GrADS assume che il valore indefinito della variabile corrisponda ai valori dei dati prima della trasformazione.
  • Griglie multiple: GrADS può gestire solo una griglia 4D per file di dati. Se un file NetCDF contiene variabili definite su griglie diverse (es. assi di longitudine e latitudine sfalsati), sarà necessario scrivere più file descrittori, uno per ogni griglia.

In sintesi, NetCDF è un formato efficiente per dati scientifici che integra dati e metadati. GrADS offre diversi livelli di interazione con questi file, dal semplice sdfopen (per file COARDS-compliant) al più dettagliato open con un file descrittore completo, che offre la massima flessibilità per dati complessi o non standardizzati.
Torna ai contenuti