Ce format ultra-utilisé est un dérivé de MDL Mol, il en reprends les caractéristiques, et l’étend à plusieurs molécules dans un même fichier. Les blocs MDL Mol seront séparés par un délimiteur particulier (une suite de quatre caractères $$$$) sur une ligne. Le format SDF (parfois nommé SD file) ne se limite pas à ces aspect multimoléculaires car il peut aussi incorporer des champs supplémentaires: attributs, propriétés, descripteurs … Ces champs sont exprimés sous la forme de deux lignes consécutives, une ligne pour la clé (chaine de caractère), une ligne consécutive pour la valeur. La valeur peut être typée en tant que chaine de caractères, entier, réel. Ces champs ne sont pas définis à l’avance, la clé-valeur est définie à la création du fichier. Ces caractéristiques expliquent pourquoi le format SDF sert souvent de support à des bases de données de molécules sous forme texte (base de données orientés texte: flat file database).
Publication initiale sur buildblog.buidez.net (2014) – Article mis à jour en Novembre 2025.
Navigation dans le guide
Guide [ Formats moléculaires (chimie) ]
1. A l’intérieur d’un fichier SDF
Un fichier SDF est analogue à une table de base de données dont une colonne serait occupée par des formules développées (2D) ou des structures (3D) de molécules. Un fichier SDF est donc un support intéressant pour toute collection moléculaire, sachant que des listes à plusieurs milliers ou dizaine de milliers de molécules existent et peuvent être pris en compte par des parseurs ou des codes en mode lecture/écriture (rarement édition).
Prenons le cas d’une série de molécules (un envoi vers la Chimiothèque Nationale) issues du laboratoire, elles sont organisées dans un fichier SDF que l’on peut visualiser avec Chemaxon Marvin View :
![]() |
L’affichage montre une matrice de molécules, associée à 6 champs (au dessous de la molécule) correspondant à une forme clé: valeur. Par exemple ‘ID’ pour un numéro identificateur de la molécule (ID=132 pour la première molécule). Si on affiche le contenu du fichier SDF correspondant pour la première molécule et le début de la seconde, nous aurons:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
Marvin 05291215512D 19 20 0 0 1 0 999 V2000 1.4290 -0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 0.7145 -1.2375 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 0.0000 -0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -0.7145 -1.2375 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -1.4290 -0.8250 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -1.4290 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -2.1435 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -2.8579 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -3.5724 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -3.5724 1.2375 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 -4.2870 0.0000 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 -5.0014 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -5.7551 0.0770 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -6.3072 0.6900 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 -5.8947 1.4045 0.0000 N 0 0 0 0 0 0 0 0 0 0 0 0 -5.0876 1.2330 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -4.4746 1.7851 0.0000 O 0 0 0 0 0 0 0 0 0 0 0 0 -0.7145 0.4125 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 0.0000 0.0000 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 1 2 1 0 0 0 0 2 3 1 0 0 0 0 3 19 1 0 0 0 0 3 4 2 0 0 0 0 4 5 1 0 0 0 0 5 6 2 0 0 0 0 6 7 1 0 0 0 0 6 18 1 0 0 0 0 7 8 2 0 0 0 0 8 9 1 0 0 0 0 9 10 2 0 0 0 0 9 11 1 0 0 0 0 11 12 1 0 0 0 0 12 16 1 0 0 0 0 12 13 1 0 0 0 0 13 14 1 0 0 0 0 14 15 1 0 0 0 0 15 16 1 0 0 0 0 16 17 2 0 0 0 0 18 19 2 0 0 0 0 M END > <ID> 132 > <identificateur> PD cycloser/GK 44 > <plaque> pnasm-1 > <labo> umr5068 > <contact> Prithwiraj.DE > <vrac> 19.0 $$$$ Marvin 05291215512D 21 23 0 0 0 0 999 V2000 0.3355 -0.7536 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -0.1493 -1.4212 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -0.9699 -1.3349 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -1.3054 -0.5812 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 -2.1259 -0.4950 0.0000 C 0 0 0 0 0 0 0 0 0 0 0 0 |
Nous reconnaissons un bloc MDL Mol (coordonnées, connectivité) suivi par les champs: ><clé> et valeur à la ligne suivante, puis les délimiteurs pour la molécule suivante, sans entête/titre (la première ligne avant le tag Marvin) est vide.
2. Equivalence SDF et tables de molécules
Prenons le cas d’une table (tableur, CSV, CSVM …) incluant des molécules et des descripteurs, par exemple des masses moléculaires dans une colonne MW, des noms de molécules dans une colonne ID. Les colonnes (MW, ID) sont des clés, le contenu des cellules correspondantes, les valeurs. Et il existe une colonne pour les molécules, à un format compatible (SMILES, objet binaire, MDL Mol) selon le cas.
Formellement cette table chimique est identique à un fichier SDF et peut être convertie à ce format, via un logiciel dédié (par exemple Chemaxon JChem qui agit au niveau de Microsoft Excel) ou via du code (basé sur OpenBabel/Pybel, Rdkit …) sachant gérer des tables (ex: CSVM, Pandas). Il faut apprendre à faire la gymnastique entre SDF (sérialisé) et tables de molécules (matrices) … mais c’est bien les mêmes données que l’on manipule sous des formes différentes. Certaines opérations seront plus intéressantes à faire sur le SDF, d’autres sur la table (par exemple si nous devons comparer des attributs sans intervention des structures).
Le format SDF est très souvent utilisé en chimie médicinale pour stocker des bibliothèques de molécules avec des finalités très différentes: entrepôts de données, calculs, la visualisation, les échanges de données, chimiothèques. Par exemple en matière d’arrimage moléculaire, si la protéine est au format PDB ou PDBQT, voire un format propriétaire, la ligandothèque est la plupart du temps au format SDF. En fait, en dehors des formats de fichiers propriétaires, SDF est au centre des processus de type structure-based ou ligand-based drug design. D’où l’intérêt, de prendre du temps pour ‘apprivoiser’ ce format.
3. Gestion au quotidien
Comme SDF est un format ASCII on peut le travailler ‘à la main’ dans un éditeur de texte, jouer avec des copier-coller pour ajouter ou enlever les molécules, puis rendre l’ensemble cohérent. Mais malgré l’importance de ce type de fichiers, il y a peu d’éditeurs SDF dédiés, la plupart du temps on détourne des suites logicielles qui permettent d’éditer des séries de molécules, pour générer et surtout entretenir ces fichiers.
Ce qui veut dire que s’il y a trop d’échanges, des informations telles que charges formelles, multiplicités de liaisons … peuvent être perdues. Il est possible que l’on soit obligés d’utiliser une table dans un autre format, parfois propriétaire, pour conserver l’intégrité des molécules et les clés/valeurs. On utilisera ce master pour réaliser les opérations de maintenance (modifications des molécules, des clés/valeurs, ordonnancement, ajout/suppression de molécules …) puis on génèrera les fichiers SDF à la demande. Un bon exemple est le format DSV qui est spécifique de Discovery Studio, très utile pour maintenir une ligandothèque 3D (ligands extraits de structures PDB ou construits à la main). Le fichier DSV ne sert pas d’entrée à des processus de modélisation moléculaires, c’est juste la source de données primaires.
4. Les choses qui fâchent
De la même manière que MDL Mol ce format souffre de nombreux défauts. Mais par rapport à ce dernier, ces défauts vont être amplifiés car les fichiers SDF peuvent contenir plusieurs dizaines de milliers de molécules. Et on peut trouver de tout dans un fichier SDF … Par exemple des molécules chargées avec ou sans contre-ions, métaux, isomères, tautomères, molécules avec une stéréochimie définie, d’autres non, hydrogènes ou non, des groupes à problèmes (-NO2 avec différentes répartitions de charge/délocalisation) …
Nous avons parlé précédemment de criblage virtuel, si le logiciel qui va utiliser un fichier SDF ne sait pas comment faire la différence entre une molécule chargée et son contre-ion, il se peut qu’il produise une erreur avec un arrêt du processus, ou un faux positif. Pour avoir quelques idées plus précises, consulter cette vidéo YouTube suggestive ‘Interactive srtructure standardization [ https://www.youtube.com/watch?v=Qxswoh4N4e8 ] (D. Horvàth, CNRS, Université de Strasbourg).
La sérialisation, si elle est bien pratique au niveau de la définition du format, pose également d’autres problèmes. Considérons le fait qu’entre chaque délimiteur $$$$, les colonnes (clés/valeurs) sont affichées à la suite les unes des autres et sur des lignes différentes. Donc il est difficile de vérifier sur un grand nombre de composés si chaque molécule comporte le même nombre de clés. Si les mêmes descripteurs ne sont pas présents d’une molécule à l’autre (même sans valeur définie pour un descripteur donné), certains (beaucoup) parseurs SDF ne supporteront pas ce type d’incohérence, sans parler des outils d’importation dans des SGBDR.
Autre chose, il n’y a pas de normalisation des champs, nous pouvons utiliser l’ordre et l’intitulé que l’on veut. Prenons l’exemple d’une MW pour la masse moléculaire, pour le même descripteur rien n’empêche d’utiliser une clé différente dans un autre fichier. Et si nous voulons réaliser une fusion, des problèmes vont s’inviter. Il n’y a pas non plus de typage des champs, toutes les valeurs sont au format texte. Ce qui veut dire qu’il faut ruser un peu si nous voulons embarquer des unités pour des clés/valeurs référant à des données quantitatives.
Cependant, il s’agit à la fois de problèmes et d’avantages dont on peut tirer parti. Le format n’est pas à mettre en cause, c’est le processus qui doit être adapté: annotation des fichiers, normalisation, détection/correction d’erreurs. Avec cet éclairage, nous concevons que le travail sur des tables (matrices) plutôt que sur les fichiers SDF est d’un grand intérêt.
5. SDF et CSVM
Ces aspects limitent fortement les opérations entre collections(tables) chimiques incluant des descripteurs (colonnes) hétérogènes. Pour ces raisons une option peut être l’utilisation d’un format pivot (comme CSVM) basé sur des tables, qui supporte la plupart des manipulations, et de faire un lien avec SDF. On profite alors du meilleur des deux mondes, ce qui permet de réaliser des opérations (la plupart du temps impossibles) telle que l’ajout de molécules, de colonnes ou la fusion de tables SDF en conditions hétérogènes. C’est le cas dans plusieurs modules de buildez.chem: pybel_interface avec Openbabel/Pybel ou rdkit_interface avec Rdkit. Je reviendrais sur ces cas dans des articles portant sur de la programmation, on utilise un objet CSVM temporaire (interne) pour réaliser la fusion des tables SDF hétérogènes. On peut aussi travailler d’une manière plus explicite: transformer directement chaque fichier SDF en fichier CSVM puis appliquer toutes les opérations possibles sur les tables CSVM (fusion, intersections, filtres …) puis exporter en fichier SDF.
6. Conclusion
Nous aurons compris qu’au niveau des descripteurs, un fichier SDF peut être hétérogène en interne, mais aussi que deux fichiers SDF peuvent être hétérogènes entre eux. Au niveau des molécules SDF n’est ni plus, ni moins que du format MDL Mol avec ses avantages et inconvénients. Mais cette absence de standardisation est également une chance, car cela permet de faire à peu près tout ce que l’on veut coté descripteurs. Au pire on peut se servir d’autres formats (y compris tabulaires comme CSVM) en tant que master pour stocker des informations qu’il sera difficile d’encoder dans la syntaxe SDF. Au final, toutes les problématiques ‘données’ et ‘métadonnées’ liées aux tables s’appliquent à ce type de format, ce qui le rends également intéressant de ce point de vue.
Plus sur SMILES
- Chemical table file [ https://en.wikipedia.org/wiki/Chemical_table_file ].
- Chemical file format [ https://en.wikipedia.org/wiki/Chemical_file_format ].
- Sérialisation [ https://fr.wikipedia.org/wiki/S%C3%A9rialisation ].
- JMol wiki [ http://wiki.jmol.org/index.php/File_formats/Coordinates ].
- Flat-file database [ https://en.wikipedia.org/wiki/Flat-file_database ].
- L’article [Technical report: CSVM Ecosystem – http://arxiv.org/abs/1209.2946 ] qui montre un exemple de travail sur les tables CSVM dans le cas de collections moléculaires (composés issus de la banque PDB au travers du dépôt Ligand Expo).
