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.
Un fichier GXYZF consiste en quatre partie, dans l'ordre suivant :
Les fichiers commencent par une « ligne magique » permettant d'identifier le type de fichier.
L'en-tête consiste en plusieurs lignes de la forme
nom
=valeur
définissant les différents paramètres.
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.
Les données binaires sont données au format 64 bits à virgule flottante.
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).
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 :
Nom | Type | Valeur |
---|---|---|
NChannels | Obligatoire |
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 .
|
NPoints | Obligatoire | Nombre de points dans le fichier. |
XYUnits | Optionnel |
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é.
|
XRes | Optionnel | 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. |
YRes | Optionnel | 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
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) :
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.