Les outils de base


Unidata fournit un certain nombre de commandes de base pour pour manipuler du NetCDF : https://www.unidata.ucar.edu/software/netcdf/workshops/2009/utilities/index.html

  • ncdump : convertit un fichier binaire netcdf en représentation texte appelée CDL (common data language)
  • ncgen : réciproquement, crée un fichier binaire netcdf à partir de sa représentation texte .cdl

Nous allons dans cette section faire quelques premières manipulations pour visualiser et fabriquer de manière très simple des fichiers NetCDF.

Se connecter à la machine virtuelle

  • Soit vous pouvez utiliser l'outil x2go soit la commande ssh (avec l'option -X pour déporter l'affichage des applications vers votre propre machine).
  • L'adresse IP pour se connecter à la machine est 139.124.2.115
  • Votre login est de la forme sistx, x étant un chiffre qui vous a été déjà attribué :-)
  • Ici sera rajouté un accès vers les fichiers hors séminaire

ncdump

ncdump : Permet de visualier le contenu d'un fichier NetCDF sous forme textuelle.

Usage : man ncdump

  • ncdump file.nc : affiche un fichier “file.nc” au format textuel “cdl” ; Visualise le header et les données
  • ncdump -h file.nc : affiche la section entête (header)
  • ncdump –c -t : affiche les dates à un format humainement lisible
  • ncdump -b/-f f : affiche les index de chaque valeur (brief/full)
  • ncdump -v(nom_de_variable) : extrait une variable du fichier
  cd tp/outilsDeBase
  ncdump -v airTemp  PortCros_Data_2024-01.nc`
[header....]

data:
 airTemp = 12.3, 12.35, 12.35, 12.3, 12.25, 12.3, 12.3, 12.25, 12.25, 12.2, 
    12.25, 12.25, 12.25, 12.5, 12.6, 12.5, 12.4, 12.4, 12.4, 12.35, 12.3, 
    12.35, 12.3, 12.25, 12.25, 12.2, 12.25, 12.2, 12.2, 12.2, 12.2, 12.2, 
    12.15, 12.1, 12.15, 12.2, 12.15, 12.15, 12.15, 12.1, 12.1, 12.05, 12.05, 
    12.35, 12.45, 12.4, 12.35, 12.3, 12.25, 12.2, 12.2, 12.15, 12.15, 12.1, 
    12.1, 12.15, 12.1, 12.15, 12.1, 12.15, 12.15, 12.1, 12.1, 12.15, 12.05, 
    12.1, 12.1, 12.05, 12.1, 12.05, 12.05, 12.05, 12, 12.3, 12.45, 12.35, 
    12.35, 12.25, 12.15, 12.15, 12.15, 12.1, 12.1, 12.1, 12.05, 12.05, 12.05, 
    12, 12.05, 12, 12, 12.05, 12.05, 12, 11.95, 11.95, 11.9, 11.95, 11.95, 
    11.9, 11.95, 11.95, 11.95, 12.15, 12.25, 12.15, 12.15, 12.15, 12.1, 
    12.05, 12, 12, 12.05, 12, 11.95, 11.95, 11.9, 11.9, 11.95, 11.9, 11.9, 
    11.85, 11.85, 11.85, 11.85, 11.85, 11.85, 11.8, 11.85, 11.8, 11.8, 11.85, 
    11.85, 12.15, 12.3, 12.25, 12.15, 12.15, 12.05, 12.05, 12.05, 12, 11.95, 
    11.95, 11.95, 11.9, 11.9, 11.9, 11.95, 11.95, 11.9, 11.85, 11.85, 11.85, 
    11.85, 11.85, 11.85, 11.85, 11.85, 11.85, 11.85, 11.85, 11.8, 12.15, 
    12.25, 12.15, 12.15, 12.1, 11.95, 12.05, 12, 12, 11.95, 11.9, 11.95, 
    11.95, 11.85, 11.9, 11.85, 11.95, 11.9, 11.9, 11.85, 11.85, 11.85, 11.9, 
    11.9, 11.85, 11.95, 11.9, 11.9, 11.9, 11.95, 12.2, 12.35, 12.35, 12.3, 
    12.2, 12.1, 12.15, 12.15, 12.15, 12.15, 12.1, 12.15, 12.1, 12.1, 12.1, 
    12.1, 12.1, 12.15, 12.1, 12.1, 12.1, 12.1, 12.15, 12.1, 12.1, 12.1, 

ncgen

ncgen : ncgen permet de generer un fichier au format netCDF à partir d'un fichier texte au format CDL (réalisé par ncdump) voire un programme C ou Fortran qui fabriquera lorsqu'on l'executera un fichier NetCDF conforme au CDL d'origine.

Usage : man ncgen

  • ncgen -o file.nc file.cdl : fabriquer un fichier “file.nc” à partir du format textuel “file.cdl”
  • ncdump -lf77 file.cdl > file.f : génère le code Fortran 77 capable de fabriqueer file.nc
  • ncdump –lc file.cdl > file.c : génère le code C capable de fabriqueer file.nc

Quelques exercices simples pour découvrir par soi même

Dans le répertoire tp/outilsDeBase, vous trouverez un fichier netCDF, PortCros_Data_2024-01.nc et PortCros_Data_2024-02.nc. Testez les commandes ncdump et ncgen avec les différentes options proposées ci dessus pour vous familiariser avec ces outils.

On pourra par exemple visualiser le contenu du header d'un fichier NetCDF :

ncdump -h PortCros_Data_2024-01.nc

netcdf PortCros_Data_2024-01 {
dimensions:
    time = UNLIMITED ; // (18930 currently)
variables:
    float airTemp(time) ;
        airTemp:units = "degrees celsius" ;

[.....]

        :cdm_timeseries_variables = "station_name,latitude,longitude" ;
        :license = "The data may be used and redistributed for free but is not intended for legal use, since it may contain inaccuracies. Neither the dataContributor, MIO, OSU Pytheas, CNRS, nor the French Government, nor any of their employees or contractors, makes any warranty, express or implied, including warranties of merchantability and fitness for a particular purpose, or assumes any legal liability for the accuracy, completeness, or usefulness, of this information." ;
}

Ou encore, on pourra fabriquer la version texte (format cdl) d'un fichiers NetCDF :

ncdump PortCros_Data_2024-01.nc > PortCros_Data_2024-01.cdl

On retrouve facilement le format textuel permettant de visualiser le contenu d'un fichier NetCDF. Vous pouvez visualiser à l'aide d'un simple éditeur de texte (scite, vim, emacs, ...) le contenu du fichier .cdl obtenu. On notera que la taille du fichier sous format texte est plus importante que sous le format nc (on s'en doutait) mais est particulièrement "facile" à lire, voire à fabriquer. On pourra à cette étape modifier le nom d'une variable (ainsi que ses attributs, et le nom dans la section data) ou rajouter ou modifier des attributs globaux, ou rajouter à la main des attributs sur des variables avant de regénérer le format .nc par exemple.

-rw-rw-r-- 1 sist sist 1,1M mars   8 13:54 PortCros_Data_2024-01.cdl
-rw-r--r-- 1 sist sist 783K févr. 13 09:19 PortCros_Data_2024-01.nc

On peut une fois notre fichier cdl modifié créer à nouveau un fichier NetCDF binaire à partir de cette information cdl. Vous pouvez par exemple refabriquer le fichier que vous venez de décoder avec la commande suivante :

ncgen -o PortCros_Data_2024-01-From-ncgen.nc PortCros_Data_2024-01.cdl

On notera que les tailles de fichiers résultant diffèrent légèrement même sans aucune modification. La taille du fichier NetCDF final est fonction de son format (ncgen -3, ncgen -4, etc...voir le man) mais aussi de la librairie ou de l'outil qui a servi à fabriquer ce fichier .nc. En l'occurence ici, les fichiers manipulés ici ont étés générés avec le langage Julia et le ncgen ne génère pas exactement les mêmes fichiers. Un strings PortCros_Data_2024-01-From-ncgen.nc et un strings PortCros_Data_2024-01.nc vous montrera d'ailleurs de "subtiles" différences entre les fichiers...

-rw-rw-r-- 1 sist sist 1,1M mars   8 13:54 PortCros_Data_2024-01.cdl
-rw-rw-r-- 1 sist sist 746K mars   8 14:03 PortCros_Data_2024-01-From-ncgen.nc
-rw-r--r-- 1 sist sist 783K févr. 13 09:19 PortCros_Data_2024-01.nc

Conclusion

Nous concluerons cette partie en disant que ces deux outils permettent donc déjà de se familiariser avec le format NetCDF et même, de manière très simple de fabriquer un fichier ou de modifier le contenu d'un fichier sans aller chercher d'autres solutions que ces deux outils et votre editeur de texte préféré.