Format des fichiers Gwyddion

Les fichiers de données au format Gwyddion consistent en une structure en arborescence de plusieurs objets sérialisés. En général ces objets peuvent être de différents types ou même contenir d'autres objets (ce qui explique l'arborescence). L'utilisation de gwydump, peut être très instructive pour examiner le contenu de divers fichiers, il s'agit d'un simple visualisateur de structure de fichier disponible sur le site internet du projet.

Nous allons tout d'abord décrire la structure physique du fichier sans considérer l'interprétation possible des données contenues dans celui-ci.

Ordre des octets

Toutes les données sont enregistrées avec l'ordre des octets little-endian (« petit-boutiste » ou « miniboutiste », aussi connu sous le nom LSB ou Intel).

En-tête de Fichier

L'en-tête de fichier est constitué de quatre octets (nombre magique) avec avec les valeurs ASCII correspondant aux caractères GWYP.

Il s'agit du nouveau format de fichier, une version plus ancienne contenant l'en-tête maqigue GWYO existe aussi. Ce point ne sera pas discuté ici.

Données

Le reste du fichier consiste en un objet GwyContainer contenant toutes les données. Il est enregistré exactement de la même manière que tout autre objet, telle que décrit dans la section qui suit.

Structure d'un Objet

Un objet est constitué de trois parties (dans l'ordre suivant) :

  • Nom du type d'objet, enregistré sous la forme d'une chaîne de caractères ASCII se terminant par NUL. Il s'agit du nom dans le système de types GObject.
  • Tailles des données sérialisées, enregistrée sous la forme d'un entier non signé de 32 bits. Il n'inclue pas la taille du nom du type ni sa propre taille.
  • La liste des composants. Ceux-ci sont des parties nommées des données de l'objet, un pour chaque type de données : un type atomique, un tableau de types atomiques, ou encore un objet. Ils ne sont enregistrés dans aucun ordre particulier.

Composants

Chaque composant est constitué de trois parties (dans l'ordre suivant) :

  • Le nom, enregistré sous la forme d'une chaîne de caractères se terminant par NUL.
  • Le type, enregistré sous la forme d'un unique octet non signé (caractère). La table des types de composants est présentée plus bas.
  • Les données, enregistrées sous la forme adéquate en fonction du type.

Types de Données

Les types atomiques de données sont listés dans le tableau suivant :

TypeCaractèreNote
booléenb Stocké sous forme d'octet, zéro correspond à faux, et non nul ( normalement 1) correspond à vrai
caractèrec 
entier 32 bitsi 
entier 64 bitsq 
doubled Nombre fini à virgule flottante en double précision IEEE 754, i.e. les fichiers ne doivent pas contenir des infinités et des non-nombres
chaîne de caractèress Se terminant par NUL
objeto Objet tel que décrit plus haut

Chaque type atomique, sauf le booléen, possède son tableau équivalent. Les types de caractère des tableaux sont les mêmes que leur équivalent atomique, à part le fait qu'ils sont en majuscule. Les tableaux sont enregistrés sous la forme d'une valeur non signée en 32 bits (donnant le nombre d'éléments), suivie des valeurs des éléments. Les types de tableaux de données sont listés dans la table suivante :

TypeCaractèreNote
tableau de caractèresC Ne se terminant pas par NUL
tableau d'entiers 32 bitsI 
tableau d'entiers 64 bitsQ 
tableau de doublesD 
tableau de chaînes de caractèresS 
tableau d'objectsOO majuscule, et non zéro

Conteneur GwyContainer de premier niveau

Les noms (clés) des objets dans un GwyContainer représentant un fichier Gwyddion ressemblent fortement aux noms de fichiers UNIX, i.e. ils sont sous la forme de de chemins séparés par le caractère /, et présentent une structure arborescente. Par exemple, le titre du premier canal, numéroté 0, est enregistré dans la clé /0/data/title. Notez que certaines données ou informations se trouvent dans des clés parfois illogiques, la raison est en général de nature historique.

Les sections qui suivent décrivent l'organisation des données et informations intéressantes présentes dans le GwyContainer. La liste n'est pas nécessairement exhaustive. Toutefois, comme tous les éléments d'un fichier spécifient toujours leur nom, type et taille en octets, il est toujours possible de sauter des types de données inconnus ou des données n'ayant pas d'intérêt pour vous, et n'extraire que les éléments souhaités.

Canaux

Le tableau qui suit résume les clés des données relatives au canal 0 dans le conteneur de premier niveau. Pour les autres canaux, il suffit de remplacer le nombre 0 par le numéro du canal correspondant. Notez que les canaux sont généralement numérotés de manière séquentielle, en partant de 0, toutefois les canaux peuvent avoir n'importe quel numéro, et l'ensemble des numéros des canaux ne sont pas nécessairement contigus.

CléTypeSignification
/0/dataGwyDataField Données du canal.
/0/data/titlechaîne de caractères Titre du canal, tel qu'affiché dans le navigateur de données.
/0/data/visiblebooléen Détermine si le canal doit être affiché lors du chargement du fichier.
/0/base/palettechaîne de caractères Nom du gradient de fausses couleurs utilisé pour afficher le canal.
/0/base/range-typeentier 32 bits Type de visualisation (tel que défini par l'outil Visualisation des couleurs), la valeur provient de la liste GwyLayerBasicRangeType.
/0/base/mindouble Valeur minimum utilisée pour la plage d'affichage définie par l'utilisateur.
/0/base/maxdouble Valeur maximum utilisée pour la plage d'affichage définie par l'utilisateur.
/0/maskGwyDataField Données du masque. Les dimensions en pixels de ces données doivent correspondre à celles des données du canal.
/0/mask/reddouble Composante rouge de la couleur du masque.
/0/mask/greendouble Composante verte de la couleur du masque.
/0/mask/bluedouble Composante bleue de la couleur du masque.
/0/mask/alphadouble Composante alpha (opacité) de la couleur du masque.
/0/showGwyDataField Données de présentation. Les dimensions en pixels de ces données doivent correspondre à celles des données du canal.
/0/metaGwyContainer Métadonnées du canal. Les clés correspondent directement aux noms affichées dans le navigateur de métadonnées, et les chaînes de caractères en sont les valeurs.
/0/select/fooune sous-classe de GwySelection Données de sélection. Chaque type de sélection a (généralement) un type d'objet différent et est enregistré sous un nom différent ; le nom spécifique foo est identique à celui affiché dans le gestionnaire de sélection.

Les canaux sont représentés sous forme d'objets GwyDataField. Les composants de GwyDataField sont résumés dans le tableau suivant :

ComposantTypeSignification
xresentier 32 bits Taille horizontale en pixels.
yresentier 32 bits Taille verticale en pixels.
xrealdouble Dimension horizontale en unités physiques.
yrealdouble Dimension verticale en unités physiques.
xoffdouble Décalage horizontal du coin supérieur gauche en unités physiques. Il n'apparaît normalement que s'il est non nul.
yoffdouble Décalage vertical du coin supérieur gauche en unités physiques. Il n'apparaît normalement que s'il est non nul.
si_unit_xyGwySIUnit Unités des dimensions latérales.
si_unit_zGwySIUnit Unités des valeurs de hauteur.
datatableau de doubles Données, enregistrées sous forme d'un tableau de taille xres×yres, allant du haut vers le bas et de gauche à droite.

Graphes

Les tableaux qui suivent donnent les clés les plus courantes relatives aux données des graphes dans le conteneur de premier niveau du graphe numéro 1. Pour les autres graphes le numéro 1 doit être remplacé par le numéro de graphe correspondant. Notez que les graphes sont généralement numérotés de manière séquentielle, en partant de 1, toutefois ils peuvent avoir n'importe quel numéro positifs, et l'ensemble des numéros des graphes n'est pas nécessairement contigu. Le numéro 0 utilisé en prefixe des clés des graphes est de nature historique, il n'a pas de signification particulière et vaut toujours 0.

CléTypeSignification
/0/graph/graph/1GwyGraphModel Objet de données de graphe.
/0/graph/graph/1/visiblebooléen Détermine si le graphe doit être affiché lors du chargement du fichier.

Les graphes sont représentés par des objets GwyGraphModel. Les composants de GwyGraphModel sont résumés dans la table qui suit :

ComposantTypeSignification
curvestableau de GwyGraphCurveModels Courbes de graphes individuelles.
titlechaîne de caractères Titre du graphe tel qu'affiché dans le navigateur de données.
x_unitGwySIUnit Unités des abscisses.
y_unitGwySIUnit Unités des ordonnées.
top_labelchaîne de caractères Label de l'axe du haut.
bottom_labelchaîne de caractères Label de l'axe du bas.
left_labelchaîne de caractères Label de l'axe de gauche.
right_labelchaîne de caractères Label de l'axe de droite.
x_is_logarithmicbooléen Spécifie si l'échelle des abscisses est logarithmique.
y_is_logarithmicbooléen Spécifie si l'échelle des ordonnées est logarithmique.
x_mindouble Valeur minimum des abscisses définie par l'utilisateur.
x_min_setbooléen Spécifie si la valeur minimum des abscisses définie par l'utilisateur doit être utilisée (dans le ca contraire la plage est déterminée automatiquement).
x_maxdouble Valeur maximum des abscisses définie par l'utilisateur.
x_max_setbooléen Spécifie si la valeur maximum des abscisses définie par l'utilisateur doit être utilisée (dans le ca contraire la plage est déterminée automatiquement).
y_mindouble Valeur minimum des ordonnées définie par l'utilisateur.
y_min_setbooléen Spécifie si la valeur mimimum des ordonnées définie par l'utilisateur doit être utilisée (dans le ca contraire la plage est déterminée automatiquement).
y_maxdouble Valeur maximum des ordonnées définie par l'utilisateur.
y_max_setbooléen Spécifie si la valeur maximum des ordonnées définie par l'utilisateur doit être utilisée (dans le ca contraire la plage est déterminée automatiquement).
grid-typeentier 32 bits Type de la grille affichée. La valeur provient de la liste GwyGraphGridType.
label.has_framebooléen Spécifie si le graphe a une grille.
label.frame_thicknessentier 32 bits Epaisseur de la grille du graphe.
label.reversebooléen Spécifie s'il faut inverser la grille du graphe.
label.visiblebooléen Spécifie si le label du graphe est visible.
label.positionentier 32 bits Position (coin) dans lequel est placé le label du graphe. La valeur provient de la liste GwyGraphLabelPosition.

Les courbes de graphes sont représentées par des objets GwyGraphCurveModel. Les composants de GwyGraphCurveModel sont résumés dans la table qui suit :

ComposantTypeSignification
xdataarray of doubles Points d'abscisse. Le nombre doit correspondre à ydata.
ydataarray of doubles Points d'ordonnée. Le nombre doit correspondre à xdata.
descriptionchaîne de caractères Description de la courbe (nom).
typeentier 32 bits Mode de la courbe (points, ligne, etc.) La valeur provient de la listeThe value is from GwyGraphCurveType.
color.reddouble Composante rouge de la couleur de la courbe.
color.greendouble Composante verte de la couleur de la courbe.
color.bluedouble Composante bleue de la couleur de la courbe.
point_typeentier 32 bits Type de symbole représentant les points de données. La valeur provient de la liste GwyGraphPointType.
point_sizeentier 32 bits Taille des symboles représentant les points.
line_typeentier 32 bits Type de lignes connectant les points. La valeur provient de la liste GwyGraphLineType.
line_sizeentier 32 bits Epaisseur des lignes reliant les points.

Spectre

Le tableau qui suit résume les clés les plus courantes relatives aux données des spectres dans le conteneur de premier niveau de l'ensemble des spectres 0. Pour les autres ensemble de spectres il faut remplacer le nombre 0 par le numéro de l'ensemble de spectres correspondant. Notez que les ensemles despectres sont généralement numérotés de manière séqentielle, en partant de 0, toutefois ceux-ci peuvent avoir n'importe quel numéro, et l'ensemble des numéros des spectres ne sont pas nécessairement contigus.

CléTypeSignification
/sps/0GwySpectra Données de spectre.

Les spectres d'un type donné sont représentés par des objets GwySpectra. Les composants de GwySpectra sont résumés dans le tableau qui suit :

ComposantTypeSignification
titlechaîne de caractères Titre du spectre tel qu'affiché dans le navigateur de donnée.
si_unit_xyGwySIUnit Unités des coordonnées de position du spectre.
coordstableau de doubles Coordonnées des points où les spectres ont été mesurés, en unités physiques. Chaque spectre comporte deux éléments : les coordonnées horizontale et verticale. Le nombre de coordonnées doit correspondre au nombre de courbes dans data.
datatableau de GwyDataLines Courbes de spectres individuels.
selectedtaleau d'entiers 32 bits Indices des courbes de spectres sélectionnées.

Les courbes individuelles des spectres sont représentées par des objets GwyDataLine. Les composants de GwyDataLine sont résumées dans le tableau suivant :

ComposantTypeSignification
resentier 32 bits Nombre de points de données.
realdouble Longueur en unités physiques.
offdouble Décalage du début en unités physiques. Il n'apparaît normalement que s'il est non nul.
si_unit_xGwySIUnit Unités des abscisses.
si_unit_yGwySIUnit Unités des valeurs des données.
datatableau de doubles Données de ligne, enregistrées sous forme d'un tableau de res, allant de gauche à droite.

Objets auxiliaires

Les composants d'un GwySIUnit sont résumés dans le tableau qui suit :

ComposantTypeSignification
unitstrchaîne de caractères Représentation textuelle des unités, par exemple "A" ou "m^-1" (pour les unités SI, les préfixes sont ignorés).

Les composants d'un GwySelection sont résumés dans le tableau suivant. Certains types de sélection peuvent avoir d'autres éléments de données ; référez-vous à la documentation des classes de sélection spécifiques pour savoir comment interpréter les données.

ComposantTypeSignification
maxentier 32 bits Nombre maximum d'objets qu'une sélection peut détenir (il s'agit du nombre défini par gwy_selection_set_max_objects()).
datatableau de doubles Données de sélection. Le nombre d'éléments formant un objet sélection est déterminé par le type de sélection.