Fichier de données XYZ

Bien que Gwyddion fonctionne avec des donnée XYZ et que les données XYZ brutes soient interpolées selon une grille régulière lors de l'import, il s'est avéré nécessaire de développer un format de fichier dans le même esprit que le fichier à champ simple (.gsf) mais représentant les données au format XYZ. Ce format, appelé Gwyddion XYZ (.gxyzf), est décrit dans cette section.

On notera que le Z correspond ici à une valeur quelconque. Les valeurs Z peuvent être effectivement des coordonnées (hauteurs) ou bien des courants, des tensions, etc.

Les fichiers GXYZF peuvent être écrit avec la version 2.31 ou supérieure de Gwyddion. Ils peuvent aussi être lus à partir de cette version, bien que la régularisation de la grille puisse être assez grossière.

Structure globale

Un fichier GXYZF consiste en quatre partie, dans l'ordre suivant :

ligne magique

Les fichiers commencent par une « ligne magique » permettant d'identifier le type de fichier.

texte d'en-tête

L'en-tête consiste en plusieurs lignes de la forme

nom = valeur

définissant les différents paramètres.

remplissage par octets NUL

L'en-tête se termine par un à huit octets NUL, permettant d'aligner le début des données sur un multiple de 8.

données binaires

Les données binaires sont données au format 64 bits à virgule flottante.

Ligne magique

Les fichiers GXYZF démarrent avec la ligne

Gwyddion XYZ Field 1.0

terminée par le caractère saut de ligne (\n, ASCII 0x0a).

Texte d'en-tête

Chaque ligne d'en-tête est donnée sous la forme

nom = valeur

dans laquelle tout espace avant le nom, autour du signe égal, et en fin de ligne est ignoré. Les noms des champs sont sensibles à la casse et suivent les règles usuelles des langages de programmation concernant les identifiants.

De la même manière que pour la ligne magique, les lignes d'en-tête se terminent par le caractère saut de ligne, tel qu'utilisé sur les système Unix. Cela signifie que l'en-tête doit être lu et écrit en mode binaire pour garantir la préservation des caractères de fin de ligne sur d'autres systèmes d'exploitation (et ne pas changer la taille de l'en-tête, par exemple par une transformation LF → CRLF).

Tous les caractères non ASCII pouvant apparaître par exemple dans le nom des canaux sont encodés au format UTF-8. Le caractère NUL ne peut apparaître dans l'en-tête.

Champs d'en-tête :

NomTypeValeur
NChannelsObligatoire Nombre de canaux de valeurs (Z), sous forme d'entier positif. Les valeurs enregistrées pour chaque point incluent les coordonnées X et Y, mais elles ne sont pas comptées dans NChannels.
NPointsObligatoire Nombre de points dans le fichier.
XYUnitsOptionnel Unité latérale, c'est-à-dire l'unité des coordonnées X et Y. Elle doit être donnée en unité de base, c'est-à-dire m ou A, sans préfixe en puissance de 10 (Gwyddion pourrait le gérer, mais cela poerait certainement problème pour d'autres logiciels). Il n'y a par défaut aucune unité. Cela signifie que dans le cas de données SPM on spécifiera XYUnits avec m car les dimensions latérales sont en mètre.
ZUnits1, ZUnits2, … Optionnel Unité de valeur, c'est-à-dire l'unité des données pour chaque canal. Les cannaux sont numérotés de 1 à NChannels. Voir XYUnits pour plus de détails.
Title1, Title2, … Optionnel Titres de différents canaux. Ceux-ci sont numérotés de 1 à NChannels. Les titres n'ont pas de valeur par défaut, les applications pourront afficher “Inconnu” ou quelque chose de semblable si rien n'est spécifié.
XResOptionnel Indication spécifiant la taille horizontale préférée en pixels si les données sont régularisées en une grille, il s'agit d'une valeur entière positive. Un logiciel pouvant lire le fichier pourra ne pas tenir compte de cette valeur et interpoler les donner selon une grille de dimensions différentes.
YResOptionnel Indication spécifiant la taille verticale préférée en pixels si les données sont régularisées en une grille, il s'agit d'une valeur entière positive. Un logiciel pouvant lire le fichier pourra ne pas tenir compte de cette valeur et interpoler les donner selon une grille de dimensions différentes.

L'en-tête peut contenir d'autres champs, en plus de ceux listés précédemment. Gwyddion les chargera dans les metadonnées. Les champs les plus communs peuvent être par exemple Commentaire, Date ou Direction.

Les champs peuvent être donnés dans n'importe quel ordre, il est toutefois recommandé de démarrer avec les champs oligatoires, puis continuer avec champs optionnels et enfin terminer avec les champs utilisateur.

Voici un exemple d'en-tête basique pour un fichiers contenant deux canaux (incluant aussi la ligne magique) :

Gwyddion XYZ Field 1.0
NChannels = 2
NPoints = 457884
XYUnits = m
ZUnits1 = m
ZUnits2 = V
Title1 = Height
Title2 = ADC2

Remplissage par octets NUL

Le texte d'en-tête est suivi de un à huit octets NUL (\0, ASCII 0x00) qui (a) le termine et (b) aligne le début des données avec un décalage par rapport au début de fichier égal à un multiple de 8. Plus précisément, soit N la longueur totale de la ligne magique et du texte d'en-tête, les données débutent au multiple de 8 supérieur à N le plus proche.

Ce remplissage au multiple de 8 garantit un alignement de l'accès mémoire lorsque le fichier est mis en mémoire. Le nombre d'octets NUL est uniquement déterminé par le reste de la longueur modulo huit (N mod 8) :

ResteNombre d'octets NUL
08
17
26
35
44
53
62
71

Données binaires

Les valeurs des données sont enregistrées en virgule flottante double précision IEEE 64 bits, avec un arrangement des octets petit-boutiste (LSB ou Intel). Les points sont enregistrés selon un ordre quelconque. Chaque point est consitué d'un bloc de NChannels+2 valeurs : X, Y puis toutes les valeurs, dans l'ordre des canaux.

Les unités sont données par XYUnits pour X et Y, ZUnits1, ZUnits2, … pour les valeurs de chaque canal.

La taille des données de l'image vaut exactement 8*NPoints*(NChannels+2) octets et plus aucune donnée n'est présente ensuite.