# LSD 3.4.8

Dernière modification: 02 avril 2013.

## Table des matières

Passer des spectres aux données
Interpréteur de commandes
Passer des données aux structures
Pour les impatients
Améliorer les dessins des molécules
Structure des fichiers de données

Les commandes de base
Définition des listes d'atomes
Contrôle de l'exécution
Informations de sous-structure

Créer des fichiers de sous-structure avec mol2ab
Traiter les résultats avec outlsd
Visualiser les résultats avec genpos

## Passer des spectres aux données

Le but de LSD est d'aider l'utilisateur à proposer une ou plusieurs structures moléculaires à partir de données issues très majoritairement de la RMN 2D. Les spectres qui doivent nécessairement être enregistrés sont les spectres HMQC (ou HSQC), COSY et HMBC. Sans ces trois spectres, il n'est pas envisageable de vouloir utiliser LSD. LSD ne contient aucune base de données de déplacement chimique. Il n'y a par ailleurs aucun moyen de lui indiquer la liste des déplacements chimiques de la molécule étudiée, pour quel type de noyau que ce soit. LSD utilise les informations de déplacement chimique et de couplage que l'utilisateur voudra bien lui indiquer, que ce soit pour définir l'hybridation des atomes ou pour imposer à un atome d'avoir un nombre de voisins donné dans une liste d'atomes déterminée.

Le codage des données de RMN pour en faire un fichier texte traitable par LSD est un exercice un peu déroutant pour le débutant. Les paragraphes suivants essaieront de vous donner une méthode pour y arriver. Il n'est pas inutile de regarder dans le dossier Data les exemples qui s'y trouvent. Un fichier de données pour LSD est constitué de commandes ayant un plusieurs paramètres. Les commandes les plus utiles seront d'abord introduites, sachant qu'une description exhaustive du langage de commande est fournie au paragraphe Structure des fichiers données. L'interface de type texte peut sembler un peu démodée, mais il est parfois plus simple d'éditer un texte que de se perdre dans un dédale de menus et sous-menus dont les fonctions ne sont pas nécessairement explicites.

La première étape à franchir pour déterminer une structure inconnue consiste à faire l'hypothèse d'une formule brute et à déterminer le statut de tous les atomes, hydrogènes exceptés. Le statut est constitué d'un numéro, d'un symbole chimique, d'une hybridation (sp, sp2 ou sp3), d'un nombre d'hydrogènes portés par l'atome et d'une charge. Définir un statut est contraignant pour l'utilisateur. Il n'est pas toujours possible a priori de définir le statut des hétéroatomes, surtout lorsqu'il y en a de natures chimiques différentes. Même pour les carbones, le déplacement chimique ne suffit pas toujours pour déduire de manière non-ambigüe l'hybridation. Il faut alors créer plusieurs jeux de données et les essayer tous. Cette nécessité devrait être levée au moins partiellement dans un proche avenir, mais il faut faire avec pour l'instant.

La numérotation des atomes peut se faire de manière arbitraire. Une manière commode de procéder consiste par exemple à numéroter les carbones à partir de 1 par ordre décroissant de déplacement chimique du 13C, puis de donner les numéros suivants aux autres atomes (azotes, oxygènes, ...). Les numéros des carbones issus du spectre 1D seront reportés sur les projections des spectres 2D HMQC et HMBC. Il est possible d'avoir un autre type d'atome (X) à condition que sa valence soit définie par l'utilisateur.

La commande qui définit le statut s'appelle `MULT` (les majuscules sont importantes) et est suivie du numéro d'atome, de son symbole chimique, de 1, 2 ou 3 pour l'hybridation (sp, sp2 ou sp3), de la multiplicité, c'est-à-dire du nombre d'hydrogènes portés et de la charge (facultative). Ainsi, `MULT 1 C 2 0` indique que l'atome 1 est un carbone (`C`) sp2 (`2`) quaternaire (`0`). Il y aura dans le fichier de données autant de lignes commençant par `MULT` que d'atomes dans la molécule, atomes d'hydrogène exceptés.

L'étape suivante consiste à numéroter sur les spectres les atomes d'hydrogène. Là encore la numérotation est arbitraire, mais il est préférable de donner à un hydrogène le même numéro que celui du carbone auquel il est lié. Le spectre HMQC (ou HSQC) sert à établir cette correspondance. Deux hydrogènes inéquivalents d'un groupe méthylène auront le même numéro. Les numéros ainsi attribués seront reportés sur les spectres 2D COSY et HMBC. Une corrélation dans un spectre 2D est caractérisée par le type du spectre, le numéro d'atome dans la dimension 1 (c'est-à-dire du carbone pour HMQC, HSQC et HMBC) puis du numéro d'atome en dimension 2 (toujours un numéro d'hydrogène). Ainsi `HMQC 4 4` indique que le carbone 4 et l'hydrogène 4 sont liés ensemble. Les commandes HMQC et HSQC sont équivalentes. On code de manière similaire les commandes `HMBC` et `COSY`.

Toute liaison évidente à établir doit l'être par une commande `BOND` dont les deux paramètres sont les numéros des deux atomes à lier. Si le carbone 1 est celui d'une cétone et qu'un oxygène 22 a été déclaré sp2, il est possible d'établir dès le début une liaison entre 1 et 22 par la commande `BOND 1 22`.

En théorie et sauf exceptions, l'ordre des commandes dans un fichier n'est pas imposé. Le texte qui suit la commande `EXIT` est ignoré. En plus des commandes qui décrivent le problème, il en existe d'autres pour le contrôle de l'exécution. Il est préférable de les regrouper en début de fichier. Après elles, on trouve les commandes `MULT`, `HMQC`, `COSY`, `HMBC` et `BOND`. Cela forme le contenu minimum d'un fichier de données pour LSD.

Une partie moins évidente dans l'écriture de fichiers pour LSD est la définition de propriétés et des listes associées. Une propriété d'atome (commande `PROP`) est l'indication pour un atome ou une liste d'atomes d'un nombre (supérieur ou égal à 1) de voisins qui doivent appartenir à une autre liste d'atomes. On peut aussi indiquer le nombre 0, qui signifie alors "tous les voisins". Par exemple, les carbones 8, 9 et 10 ont un déplacement chimique vers 15 ppm et portent les protons 8, 9 et 10 de trois méthyles singulets aux environs de 1 ppm. Les carbones 8, 9 et 10 sont très probablement liés à des carbones quaternaires. Pour coder cela avec LSD, il faut définir deux listes : celle des atomes 8, 9 et 10 et celle des carbones quaternaires. Une liste d'atome est caractérisée par son numéro et par son contenu. Le contenu est définissable soit de manière explicite (en donnant les numéros de tous les atomes de la liste) soit à partir du statut des atomes. Il est aussi possible de combiner des listes entre elles par les opérations de la théorie des ensembles. Pour revenir à l'exemple, `LIST L1 8 9 10` définit la liste 1 et y met les numéros 8, 9 et 10. `QUAT L2` définit la liste 2 et y met tous les carbones quaternaires. Ceci étant fait, la restriction sur les atomes 8, 9 et 10 qui consiste à imposer à tous leurs voisins d'être quaternaires s'écrit `PROP L1 0 L2`. On aurait pu aussi écrire `PROP L1 1 L2` sachant qu'un carbone de groupe méthyle ne possède toujours qu'un seul voisin. Les commandes de définition de listes et de propriétés sont traitées dans l'ordre où elles apparaissent dans le fichier de données. En changer l'ordre peut en changer la signification.

Un tentation fréquente consiste à vouloir sur-interpréter les spectres, c'est-à-dire de leur faire dire ce qu'ils ne disent pas. Introduire des propriétés fausses ou contradictoires conduit LSD à ne pas fournir de solutions et à produire un message qui indique le niveau de recherche le plus profond atteint par LSD au cours de sa recherche (le si détestable message "max stack level: "). De la même manière, introduire des corrélations nJ avec n supérieur à 3 dans une commande `HMBC` ou `COSY` conduira à l'échec de LSD, sauf incation contaire (voir ci aprè). Il veut mieux dans un premier temps mettre les commandes relatives aux corrélations COSY et HMBC de faible intensité en tant que commentaires, c'est-à-dire en les faisant précéder par un point-virgule. Si le nombre des solutions produites est trop grand, il faut alors tenter de le diminuer en rajoutant des correlations ou des propriétés aux atomes.

Nouveau avec la version 3.1.0 : élimination des corrélations HMBC invalides.
L'analyse d'une corrélation HMBC peut ne conduire à aucune solution pour deux raisons : soit la partie de la molécule qui a été construite sur la base des corrélations précédemment examinées est incompatible avec la nouvelle corrélation (cas 1), soit celle-ci est erronée (cas 2). Ceci arrive soit de manière fortuite (artefact dans le spectre HMBC, ou faute de frappe, par exemple) soit parce que la corrélation HMBC observée est issue d'un couplage à travers plus de 3 liaisons. Dans le cas 1, le mécanisme de résolution remettra en cause les choix précédents et devrait conduire à une solution si toutes les données sont correctes. Dans le cas 2, cette remise en cause sera incapable de fournir une solution. La corrélation en question peut être éliminée afin de vérifier si elle est la cause du blocage.

La commande `ELIM` permet de spécifier un nombre maximal de corrélations qu'il est possible d'éliminer pour obtenir au moins une solution. La commande `ELIM` permet aussi de spécifier le nombre maximal autorisé de liaisons entre les atomes qui interviennent dans toutes les corrélations éliminées. Cette contrainte peut être désactivé pour la détection des erreurs accidentelles.

Ce bref aperçu sur les fichiers de données de LSD permettra aux utilisateurs de prendre contact avec LSD, mais une lecture de la section Structure des fichiers de données reste indispensable.

## Interpréteur de commandes

Pour traiter les informations contenues dans un fichier de données de LSD en tapant des commandes système, les utilisateurs(trices) de Linux ou de Mac doivent ouvrir une application "Terminal", qui s'appelle "Invite de commandes" sous Windows.

La syntaxe des commandes système n'est pas exactement la même sous Linux/Mac et Windows.

Les deux interpréteurs de commandes indiquent que l'utilisateur peut commencer à taper une commande en affichant une chaîne de caractères nommée "prompt".

Dans les paragraphes ci-dessous, `UNIXprompt$` est le prompt affiché sous Linux/Mac et `DOSprompt$` est le prompt de Windows. Les commandes qui suivent le simple `prompt$` sont valides pour les deux types d'interpréteurs.

Dans les deux cas, il faut utiliser la commande `cd` pour que l'exécutable de LSD se trouve dans le dossier courant.

Les utilisateurs de Linux/Mac doivent avoir le dossier courant (nommé .) dans la liste des dossiers dans lesquels le Terminal recherche les exécutables. Cela peut être réalisé temporairement en tapant

`UNIXprompt$ export PATH=.:$PATH`

## Passer des données aux structures

Un fichier de données nommé "pinene" est fourni dans le répertoire "Data" .
Son traitement par LSD est effectué par :

`UNIXprompt$ cp Data/pinene .`
`DOSprompt$ copy Data\pinene.lsd .`

`UNIXprompt$ lsd pinene`
`DOSprompt$ lsd pinene.lsd`

LSD indique qu'il a trouvé une solution.
Le fichier "pinene.sol" qui a été créé contient les informations de connectivité pour la solution au problème.
De manière générale un fichier de données abc ou abc.xyz fournit un fichier de solution nommé abc.sol ou abc.xyx.sol.
Un fichier de coordonées 2D peut ensuite être obtenu par:

`prompt$ outlsd 6 < pinene.sol > pinene.coo`

Le programme outlsd produit des coordonnées 2D à partir des connectivités.
Le résultat est visualisé par une visionneuse Postscript®.
Le dessin en langage Postscript est d'abord produit par :

`prompt$ genpos < pinene.coo > pinene.ps`

et affiché par :

`prompt$ xpsview pinene.ps`

si xpsview est le programme de visualisation Postscript de votre matériel (ce pourraît être gv ou gsview32).
Un double click sur l'icône du fichier pinene.ps montre aussi le résultat.

## Pour les impatients

La commande :

`prompt$ solve pinene`

enchaîne toutes les étapes : résolution du problème de structure, création et affichage graphique de la solution.
Il n'est généralement pas souhaitable de procéder ainsi pour un nouveau jeu de données. Cela n'est envisageable que si lsd donne un nombre raisonnable de solutions (voir Passer des données aux structures).

## Amélioration des dessins de molécules

Les coordonnées produites par outlsd fournissent parfois des dessins difficiles à interpréter.
Un programme simple nommé m_edit a été écrit pour améliorer la qualité des visuelle des structures moléculaires.
Il faut que Tcl/Tk et la commande `wish` soient installés pour pouvoir utiliser m_edit (version 8.0 ou plus récente).
La commande

`prompt$ m_edit`

lance m_edit.
Le menu File permet de lire et de sauvegarder des fichiers et de sortir du programme. Le menu View est utilisé pour naviguer en avant et en arrière dans un ensemble de structures groupées dans un même fichier. Les formats de fichiers supportés par m_edit sont ".coo" (le format spécifique de LSD) et ".mol".

L'usage de m_edit est très simple : les atomes sont déplacés à l'aide du bouton gauche de la souris.
Il n'y a pas encore possibilité de sélectionner plusieurs atomes, désolé.

Les molécules sont toutes sélectionnées par défaut, comme indiqué par leur titre écrit en noir. Le menu Select permet de désélectionner (titre en rouge)/sélectionner des molécules. Le statut de la molécule courante peut être changé en cliquant sur le titre. Les molécules sélectionnées peuvent être gardées (et les autres supprimées) en utilisant l'item Keep du menu Select.

Les molécules sont inversées horizontalement ou verticalement à l'aide du menu Arrange.
Un buffer (menu Buffer) a été ajouté, de manière à ce qu'une situation antérieure préalablement sauvée (item Save To) puisse être rechargée (item Load From).

## Structure des fichiers de données

Un fichier de données contient des commandes et des commentaires.
Le nombre de commandes par fichier est limité par défaut à 300.
Un commentaire est tout ce qui se trouve entre un ";" et la fin de la ligne.

Une commande est constituée d'un mnémonique de commande généralement suivi de 1 à 5 paramètres.
Les parties d'une commande sont séparées par des blancs. Les majuscules doivent être respectées.
A partir de la version 3.2.0 incluse, la commande `EXIT` peut être omise. Si elle existe, tout ce qui se trouve au delà est ignoré.

Tous les mnémoniques sont constitués de 4 caractères alphanumériques.
Certains se terminent par un ou deux blancs (`^`), comme `CH^^`.

Les mnémoniques sont suivis par des paramètres séparés par des blancs.
Les types possibles pour les paramètres sont décrits de la manière suivante :

- I : un entier positif ou nul.
- T : -1, 0 ou 1.
- V : un seul entier positif ou nul ou un ensemble d'entiers positifs ou nuls.
  Un ensemble est délimité par des parenthèses et les éléments sont séparés par des blancs.
  Le nombre d'éléments est limité à 4 (inclus).
- A : un symbole atomique : `C N N5 O S S4 S6 F Cl Br I P P5 Si B X` seulement.
  Ce peut aussi être `A` pour la définition des sous-atomes, voir au paragraphe Informations de sous-structure.
- Ln : la référence à une liste d'atomes, n est strictement positif.
- B : remplace I ou Ln
- S : un ensemble d'entiers positifs séparés par des blancs.
  La différence avec le type V est l'absence de parenthèses.
  Un argument de type S est toujours le dernier de la commande.
- Sn : La référence d'un atome dans la description d'une sous-structure. Exemple : `S1`.
- R : un nombre réel.
- Fn : la référence d'une sous-structure, n est un entier strictement positif.
- C : une chaîne de caractères, encadrée par des guillemets ("). Sa longueur n'est pas limitée et elle peut s'étendre sur plusieurs lignes.
- H : un signe optionnel : + ou -.
- O : un entier positif ou nul optionnel.
- Z : -1, 0, 1 ou 2.

Les paramètres d'une commande sont désignés par P1, P2, P3, P4 et P5 suivant leur position après le mnémonique.
La commande `EXIT` est la seule qui n'ait pas de paramètre.

### Les commandes de base

- `MULT` I A I I Z : définit le statut des atomes.
  - P1: numéro d'atome, donné arbitrairement. L'atome 0 n'est pas défini.
    Les numéros doivent être compris entre 1 et 60.
    Laisser des numéros inutilisés entre 1 et le nombre d'atomes est théoriquement possible mais n'a pas été testé.
  - P2 : symbole de l'atome. Les symboles possibles sont `C N N5 O S S4 S6 F Cl Br I P P5 Si B X`.
    `S` est un atome de soufre divalent, `S4` est tétravalent et `S6` est hexavalent.
    `N5` et `P5` sont des atomes d'azote et de phosphore pentavalents.
    La valence et la masse de l'atome `X` sont définies par une commande `VALE`.
  - P3 : 1, 2 ou 3, pour les atomes hybridés sp, sp2 ou sp3.
    Les règles suivantes définissent l'hybridation de l'atome :
    Un atome impliqué dans exactement une double liaison est sp2.
    Un atome impliqué dans une triple liaison ou deux doubles liaisons est sp.
  - P4 : nombre d'atomes d'hydrogène portés par l'atome.
  - P5 : charge électrique formelle : -1, 0, 1 ou 2 (facultative, égale à 0 par défaut).
  Exemple : `MULT 1 C 2 0`. L'atome 1 un carbone (`C`) sp2 (`2`) quaternaire (`0`).

- `VALE` A I R : définit la valence et la masse des atomes de type X.
  - P1 : symbole (X).
  - P2 : valence.
  - P3 : masse.
  Remarque : `VALE` est incompatible avec la commande `DUPL 2`.

- `BOND` I I : liaison.
  - P1 : atome 1.
  - P2 : atome 2.

- `HMQC` (ou `HSQC`) I I : corrélation hétéronucléaire à travers 1 liaison.
  - P1 : numéro de l'atome (non hydrogène).
  - P2 : numéro de l'atome d'hydrogène.
  Deux atomes d'hydrogène non équivalents liés au même atome peuvent porter des numéros différents.
  Il est utile (mais pas obligatoire) de donner le même numéro à un atome non-hydrogène et à l'atome (ou aux atomes) d'hydrogène qui sont directement liés.
  Exemple : `HSQC 4 4`. Le carbone 4 et l'hydrogène 4 sont liés ensemble.

- `COSY` V I O O : corrélation COSY à travers trois liaisons.
  - P1 : numéro d'atome d'hydrogène ou un ensemble de tels numéros.
  - P2 : numéro d'atome d'hydrogène.
  - P3 : longueur de chemin de couplage optionnelle (limite inférieure).
  - P4 : longueur de chemin de couplage optionnelle (limite supérieure).
  La longueur du chemin de couplage peut être étendue par une commande `ELIM`.
  Si P3 est le seul argument optionnel, il définit la seule longueur possible du chemin de couplage. Sa valeur minimale est 3.
  Si P3 et P4 sont présents, avec P3 supérieur ou égal à 3 et P4 supérieur ou égal à P3, la longueur du chemin de couplage doit se situer dans l'intervalle [P3, P4]. Si P4 est nul, alors la longueur est supérieure à P3.
  Si une commande `ELIM` est présente, la longueur du chemin de couplage ne pourra pas excéder la valeur de la longueur imposée par la commande `ELIM` + 1.
  Exemples :
  - `COSY 2 9` : l'hydrogène 2 corrèle avec l'hydrogène 9.
  - `COSY (4 6) 9` : soit l'hydrogène 4 soit le 6 (ou les deux) corrèle(nt) avec l'hydrogène 9.
  - `COSY 5 9 3 4` : l'hydrogène 5 corrèle avec l'hydrogène 9 à travers 3 ou 4 liaisons. Cette corrélation ne sera jamais éliminée, même si une commande `ELIM` est présente.

- `HMBC` V I O O : corrélation hétéronucléaire à travers 2 ou 3 liaisons.
  - P1 : numéro d'atome non-hydrogène ou un ensemble de tels numéros.
  - P2 : numéro d'atome d'hydrogène.
  - P3 : longueur de chemin de couplage optionnelle (limite inférieure).
  - P4 : longueur de chemin de couplage optionnelle (limite supérieure).
  La longueur du chemin de couplage peut être étendue par une commande `ELIM`.
  Si P3 est le seul argument optionnel, il définit la seule longueur possible du chemin de couplage. Sa valeur minimale est 2.
  Si P3 et P4 sont présents, avec P3 supérieur ou égal à 2 et P4 supérieur ou égal à P3, la longueur du chemin de couplage doit se situer dans l'intervalle [P3, P4]. Si P4 est nul, alors la longueur est supérieure à P3.
  Si une commande `ELIM` est présente, la longueur du chemin de couplage ne pourra pas excéder la valeur de la longueur imposée par la commande `ELIM`.
  Exemples :
  - `HMBC 3 8` : l'atome 3 corrèle avec l'hydrogène 8.
  - `HMBC (4 5) 8` : soit l'atome 4 soit le 5 (ou les deux) corrèle avec l'hydrogène 8.
  - `HMBC 6 8 2` : l'atome 6 corrèle avec l'hydrogène 8 à travers 2 liaisons.
  - `HMBC 6 8 4` : l'atome 6 corrèle avec l'hydrogène 8 à travers 4 liaisons. Ce n'est possible que si une commande `ELIM` est présente.
  - `HMBC 6 8 2 3` : l'atome 6 corrèle avec l'hydrogène 8 à travers 2 ou 3 liaisons. Cette corrélation ne sera jamais éliminée, même si une commande `ELIM` est présente.
  La somme des nombres de corrélations HMBC et COSY est limitée par défaut à 100.

- `LIST` Ln S : définit une liste d'atomes.
  - P1 : référence de la liste, n est compris entre 1 et 20.
  - P2 : numéros d'atomes non-hydrogènes.
  D'autres commandes de définition de listes sont définies ci-dessous.
  Exemple : `LIST L1 4 6 14` : La liste L1 contient les atomes 4, 6 et 14.

- `PROP` B I Ln H : environnement des atomes
  - P1 : les atomes références dans P1 ont exactement P2 voisins dans P3.
  - P2 : nombre exact de voisins. La valeur 0 signifie "tous".
  - P3 : liste de voisins.
  Exemples:
  - `PROP L1 0 L2` : chaque atome de L1 a tous ses voisins dans L2.
  - `PROP 12 1 L3` : l'atome 12 a exactement 1 voisin dans L3.
  - `PROP 12 1 L3 +` : l'atome 12 a 1 voisin ou plus dans L3.
  - `PROP 12 1 L3 -` : l'atome 12 a 1 voisin ou moins dans L3.
  - `PROP 12 0 L3 -` : l'atome 12 a 0 voisin ou moins (c'est-à-dire exactement 0) dans L3.

- `SHIX` I R: déplacement chimique des atomes non-hydrogène
  - P1: numéro d'atome (l'atome doit être défini par une commande `MULT`).
  - P2: valeur de déplacement chimique.
  Exemple: `SHIX 1 210.5`: Le déplacement chimique de l'atome 1 est 210.5 ppm.

- `SHIH` I R: déplacement chimique des atomes d'hydrogène
  - P1: numéro d'hydrogène (l'hydrogène doit être défini par une commande `HSQC` ou `HMQC`).
  - P2: valeur de déplacement chimique.
  Exemple: `SHIH 15 5.4`: Le déplacement chimique de l'hydrogène 15 est 5.4 ppm.

- `EXIT` : fin du jeu de données. (facultatif)

### Définition des listes d'atomes

Les commandes décrites dans cette section permettent de définir des listes d'atomes utilisées par la commande `PROP`.
Elle sont interprétées dans l'ordre où elles apparaissent dans le fichier de données.
Elles sont listées ci-dessous en fonction de leur nombre d'arguments :

- 1 argument.
  P1, de type Ln, est la référence de la liste qui est créée.
  - `CARB` : les atomes de carbone.
  - `HETE` : les atomes qui ne sont pas des carbones (et pas des hydrogènes).
  - `SP3` : les atomes qui n'ont que des liaisons simples (`SP3^`, avec un espace final).
  - `SP2` : les atomes avec exactement une double liaison (`SP2^`).
  - `SP` : les atomes avec une triple liaison ou deux doubles liaisons (`SP^^`).
  - `FULL` : la liste de tous les atomes.
  - `QUAT` : les carbones liés à 0 atome d'hydrogène.
  - `CH` : les carbones liés à 1 atome d'hydrogène (`CH^^`).
  - `CH2` : les carbones liés à 2 atomes d'hydrogène (`CH2^`).
  - `CH3` : les carbones liés à 3 atomes d'hydrogène (`CH3^`).
  - `CHAR` : les atomes chargés.
  - `CPOS` : les atomes portant une charge positive.
  - `CNEG` : les atomes portant une charge négative.
  Exemple : `CARB L5`. L5 est la liste de tous les carbones de la molécule.

- 2 arguments.
  P1, de type Ln, est la référence de la liste qui est créée. P2, de type A est un symbole atomique.
  - `ELEM`: liste de tous les atomes de symbole atomique A.
  Exemple: `ELEM L2 N`. L2 est la liste de tous les atomes de type N.

  P1, de type Ln, est la référence de la liste qui est créée. P2, de type I est un entier qui sert de valeur de comparaison.
  - `GREQ` : les atomes dont le numéro est supérieur ou égal à P2.
  - `LEEQ` : les atomes dont le numéro est inférieur ou égal à P2.
  - `GRTH` : les atomes dont le numéro est strictement supérieur à P2.
  - `LETH` : les atomes dont le numéro est strictement inférieur à P2.
  Exemple : `GREQ L1 10`. L1 est la liste de tous les atomes dont le numéro est supérieur ou égal à 10.

- 3 arguments.
  P1, de type B, est un numéro d'atome ou une liste de numéros. P2, de type B, est un numéro d'atome ou une liste de numéros. P3, de type Ln, est la référence de la liste qui est créée.
  - `UNIO` : P3 est l'union de P1 et P2.
  - `INTE` : P3 est l'intersection de P1 et P2.
  - `DIFF` : P3 contient les numéros des atomes de P1 qui ne sont pas dans P2.
  Exemple : `UNIO L1 10 L2`. L2 contient les atomes de L1 et l'atome 10.

### Contrôle de l'exécution

- `ENTR` I : imprime l'état du problème avant sa résolution.
  - P1 = 0 : pas d'impression (défaut).
  - P1 = 1 : état actif.

- `HIST` I : imprime le détail des étapes de la résolution.
  - P1 = 0 : pas d'impression (défaut).
  - P1 = 1 : état actif.

- `DISP` I : format de sortie
  - P1 = 0 : imprime des listes de liaisons.
  - P1 = 1 : le résultat est formatté pour outlsd (défaut).

- `VERB` I : verbosité
  - P1 = 0 : muet (défaut).
  - P1 = 1 : état actif.
  - P1 = 2 : très verbeux.

- `PART` I : production des solutions incomplètes
  - P1 = 0 : non (défaut).
  - P1 = 1 : oui.
  La production des structures incomplètes permet de réduire le nombre de solutions en les groupant en ensembles présentant une sous-structure commune issue de l'analyse des corrélations.
  Une solution incomplète tient compte de toutes les corrélations mais possède des atomes qui n'ont pas un nombre de liaisons égal à leur valence (atomes incomplets).
  Une solution complète se déduit d'une solution incomplète par appariement de tous les atomes incomplets.
  Une solution incomplète peut toujours être complétée.

- `STEP` I : exécution pas-à-pas.
  - P1 = 0 : non (défaut).
  - P1 = 1 : état actif.
  Un numéro d'analyse est indiqué pour suivre la progression de la résolution.
  Le mode pas-à-pas n'est pas très utile, par manque d'une interface graphique intégrée.
  Il faut utiliser `VERB 2` avec `STEP 1`. A chaque pas l'utilisateur peut indiquer une action à effectuer (continuer, finir, abandonner)

- `WORK` I : recherche des solutions.
  - P1 = 0 : LSD lit et interprète le fichier de données mais ne lance pas la recherche des solutions.
  - P1 = 1 : état actif (défaut).

- `MLEV` I : arrêt de l'analyse à l'étape P1.
  - P1 = 0 : rien (défaut).
  - P1 = le numéro d'étape fourni par LSD quand aucune solution n'est produite...

- `DUPL` I : élimination des solutions dupliquées.
  - P1 = 0 : des structures dupliquées peuvent être produites.
  - P1 = 1 : les solutions dupliquées sont éliminées.
  - P1 = 2 : les structures dupliquées sont éliminées (défaut).

- `SUBS` T : validation de sous-structure.
  - P1 = 0 : pas de recherche de sous-structure.
  - P1 = 1 : accepte les solutions qui valident la contrainte de sous-strucure (défaut).
  - P1 = -1 : accepte les solutions qui ne valident pas la contrainte de sous-strucure.

- `ELIM` I I : élimination de corrélations HMBC et/ou COSY invalides.
  - P1 : nombre maximum de corrélations à éliminer.
  - P2 : nombre maximum de liaisons admissible pour une corrélation éliminée.
    La limite supérieure est P2 pour une corrélation HMBC et P2 + 1 pour une corrélation COSY.
    La valeur 0 signifie "pas de limitation".
  Exemple : `ELIM 3 5`. Il est possible d'éliminer jusqu'à 3 corrélations HMBC et/ou COSY. Chacune des corrélations HMBC éliminées doit correspondre à un couplage 4J (limite inférieure, nécessairement) ou 5J (limite supérieure imposée). Dans le cas d'une corrélation COSY, il doit s'agir d'un couplage 5J (limite inférieure, nécessairement) ou 6J (limite supérieure imposée).

- `FILT` I : mode filtrage par sous-structure.
  - P1 = 0 : usage normal de LSD (défaut).
  - P1 = 1 : active le mode filtre.
  En mode filtre, LSD utilise les commandes `VALE`, `MULT`, `BOND` et celles qui concernent la définition des sous-structures pour rechercher si la structure présente dans les données contient la sous-structure indiquée. Dans ce contexte, la commande "lsd < file > &>/dev/null" constitue un appel typique de LSD. La valeur retournée par LSD est :
  - -1 : données invalides.
  - 0 : la sous-structure n'est pas trouvée.
  - 1 : la sous-structure est touvée.
  Ce mode a été créé pour utiliser LSD à l'intérieur d'un shell script ou dans tout contexte où la valeur de retour peut être utilisée.

- `CNTD` I : élimination des solutions non connexes (en plusieurs morceaux)
  - P1 = 0: aucune vérification n'est effectuée.
  - P1 = 1: seules les solutions connexes (en un seul morceau) sont retenues (défaut).

- `MAXS` I : limitation du nombre de structures produites
  - P1 = 0: aucune limitation (défaut).
  - P1 > 0: LSD s'arrête après avoir produit P1 solutions.

- `MAXT` I : limitation du temps de résolution
  - P1 = 0: aucune limitation (défaut).
  - P1 > 0: LSD s'arrête après P1 secondes.

- `CCLA` I : Contrôle l'usage des classes d'atomes de C équivalents
  - P1 = 0: aucune classe, toutes les attributions des 13C sont produites (défaut).
  - P1 = 1: les atomes de C initialement non liés et non correlés sont équivalents.

- `COUF` C : définit le nom du fichier de comptage des solutions
  - P1 : nom du fichier de comptage des solutions (défaut : solncounter).
  La seule ligne du fichier de comptage des solutions indique le nombre actuel de solutions trouvées.

- `STOF` C : définit le nom du fichier d'arrêt de lsd
  - P1 : nom du fichier d'arrêt de lsd (défaut : stoplsd).
  Si le fichier d'arrêt est créé pendant l'exécution, alors lsd est stoppé.

- `BRUL` I: test pour les structures anti-Bredt
  - P1 = 0: pas de vérification.
  - P1 = 1: les structures anti-Bredt sont exclues (défaut).

### Informations de sous-structure

Des solutions trouvées par LSD à l'issue de l'analyse des corrélations et de l'appariement des atomes encore incomplets peuvent n'être sélectionnées que si elles satisfont à une contrainte de sous-structure.
Une contrainte de sous-structure est fournie par des définitions de sous-structure et une recette pour combiner les résultats de leur recherche dans la structure.
Une sous-structure est soit native (définie dans le fichier du problème, comme c'est la cas avant la version 3.2.0) soit définie de manière externe.
Le fichier Data/pinene contient un exemple de codage d'une contrainte de sous-structure.

Une sous-structure est un ensemble de sous-atomes (commande `SSTR`) connectés par des sous-liaisons (commande `LINK`) et éventuellement pré-attribués (commande `ASGN`).

- `SSTR` Sn A V V : statut des sous-atomes.
  - P1 : numéro de sous-atome.
  - P2 : symbole du sous-atome.
  - P3 : état d'hybridation, `1` (sp), `2` (sp2) ou `3` (sp3) ou `(2 3)` (l'un des deux) ou `(1 2 3)` (l'un des trois).
  - P4 : multiplicité.
  Exemple : `SSTR S1 C (2 3) (0 1 2)`. L'atome 1 de la sous-structure est un carbone, soit sp2 soit sp3, avec soit 0, soit 1, soit 2 atomes d'hydrogène liés à lui.
  Il n'y a aucune relation a priori entre la numérotation des atomes et celle des sous-atomes.
  P2 peut aussi valoir "A", ce qui signifie "Any".
  Les sous-atomes de type A peuvent être identifiés à tout atome de la structure.
  Le nombre de sous-atomes est limité par défaut à 60.

- `LINK` Sn Sn : sous-liaisons.
  - P1 : premier sous-atome de la sous-liaison.
  - P2 : second sous-atome de la sous-liaison.
  Exemple : `LINK S1 S2`. Les sous-atomes 1 et 2 sont liés.
  Le nombre de sous-liaisons est limité par défaut à 60.

- `ASGN` Sn I : attribution d'un sous-atome.
  - P1 : numéro de sous-atome.
  - P2 : numéro de l'atome correspondant.
  Exemple : `ASGN S3 5`. Le sous-atome 3 est identifié comme étant l'atome 5.

Une sous-structure externe est identifiée par un numéro de fragment et le nom (chemin) du fichier qui contient sa définition. Cette dernière est codée exactement comme l'est une sous-structure native.

- `DEFF` Fn C : definit un fragment externe à partir d'un nom de fichier.
  - P1: numéro de fragment, supérieur ou égal à 1.
  - P2: nom (chemin) du fichier où le fragment est défini.
  Exemple: `DEFF F3 "Filters/ring3"`. Le fragment F3 est un cycle de trois atomes quelconques.

- `SKEL` Fn C : définit un fragment externe à partir d'un nom de squelette.
  - P1: numéro de fragment, supérieur ou égal à 1.
  - P2: Nom de squelette. Plus de détails ici.
  Exemple: `SKEL F4 "PINANE"`. Le fragment F4 est le squelette du pinane.
  A partir de la version 3.4.1, cette commande n'est plus obligatoire. Une sous-structure externe peut être identifiable directement à partir du nom de squelette sans utiliser de numéro de fragment.

- `PATH` C : définit les dossiers où sont stockés les squelettes.
  - P1: chemin d'accès à un dossier de squelettes Plus de détails ici.
  Exemple: `PATH "Filters/TERPENES/MONOTERP"`. Ajoute Filters/TERPENES/MONOTERP à la liste des endroits où les squelettes seront recherchés.

Les résultats des recherches de sous-structure dans la structure courante sont combinés pour déterminer sa validité :

- `FEXP` C : expression logique entre fragments.
  - P1: expression logique qui combine les résultats de recherche des fragments.
    Dans une telle expression, les fragments sont définis chacun par un numéro précédé par "F" ou directement par un nom de squelette encadré par deux guillemets inversés "`" (possible uniquement à partir de la version 3.4.1).
    Si P1 est une chaîne de caractères qui commence par ">", la suite de la chaîne est interprétée comme un nom de fichier. Ce fichier doit contenir une expression logique qui combine les résultats de recherche des fragments. Les définitions de fragments sont reliées entre elles par les opérateurs `NOT`, `AND` et `OR` listés ici par ordre de précédence décroissant.
  Exemples :
  - `FEXP "NOT F1 AND F2"`. Est équivalent à `FEXP "(NOT F1) AND F2"`.
  - `FEXP "F1 AND F2 OR F3"`. Est équivalent à `FEXP "(F1 AND F2) OR F3"`.
  - `FEXP "`LABDANE` OR `CLERODANE``.

Les commandes `DEFF`, `SKEL`, `PATH` et `FEXP` implantent dans LSD la fonctionnalité du filtrage des solutions.
S'il n'y a pas de commande `FEXP` dans le fichier, la sous-structure native est seule prise en compte, si elle existe.
Si la commande `FEXP` est présente, la sous-structure native est accessible via `F0` comme si une commande `DEFF F0 "..."` existait. Si aucune sous-structure native n'est définie, `F0` est la sous-structure vide, celle qui est toujours présente dans une structure.
Si le paramètre de `SUBS` vaut 0, aucune recherche de sous-structure n'est effectuée. S'il vaut -1, le résultat final de l'évaluation de l'expression logique fournie par la commande `FEXP` est inversé.

La commande `SKEL` associe un numéro de fragment (comme `DEFF`) avec un nom de squelette, comme PINANE, qui fait référence à une sous-structure compatible avec la molécule de pinène, comme bien d'autres molécules.
LSD recherche dans une base de squelettes fournie par l'utilisateur un fichier qui décrit le squelette. En cas de succès, le numéro de fragment est alors associé avec ce fichier.
L'emplacement par défaut de la base de squelettes est le dossier Filters qui est fourni avec LSD. Une première commande `PATH` remplace l'emplacement par défaut par celui indiqué. Les commandes `PATH` suivantes définissent d'autres emplacements possibles où des définitions de squelettes sont recherchées.
Chaque fois qu'une commande `SKEL` est analysée tous les dossiers indiqués sont explorés ainsi que tous leurs sous-dossiers inclus. Chaque fois qu'un fichier nommé toc (Table of Contents) est trouvé au cours de cette exploration, son contenu est analysé. Si le nom du squelette recherché est trouvé à la ligne n d'un fichier toc, alors un fichier nommé filen doit exister dans le même dossier et doit être le fichier de description de sous-structure qui correspond au squelette recherché.
La commande `PATH` n'a pas d'influence sur le comportement de la commande `DEFF`. Un fichier toc ne doit contenir qu'un nom de squelette par ligne et un nom ne doit contenir ni blanc ou tabulation.
Un convertisseur nommé mol2ab est disponible pour traduire des fichiers MDL .mol en fichiers de description de sous-structure.

LSD est fourni avec une collection non-exhaustive de squelettes de substances naturelles. L'ensemble de ces squelettes est présent sous forme de fichiers MDL .mol dans le dossier MOL. L'utilisateur est libre de les utiliser pour créer des fichiers de sous-structure à sa convenance à l'aide de mol2ab. Le résultat de la conversion de tous les fichiers présents dans le dossier MOL est rangé dans le dossier Filters/TERPENES.

## Créer des fichiers de sous-structure avec mol2ab

Le programme mol2ab convertit des structures au format .mol en sous-structures pour LSD.
L'utilisateur peut convertir les fichiers .mol distribués avec LSD ou ses propres fichiers édités à l'aide d'un logiciel usuel de dessin de structures.
Les règles suivantes s'appliquent durant la conversion :

- Tout atome d'hydrogène de la structure peut être substitué
- Toute liaison simple peut être transformée en double liaison
- Toute double liaison peut être transformée en triple liaison
- Une triple liaison reste une triple liaison
- La nature chimique des atomes est préservée

Usage:
`prompt$ mol2ab Dossier fichier-pilote`

Chaque ligne du fichier-pilote doit contenir deux champs :

- le premier champ est le nom de squelette qui sera associé au fichier .mol
- le second champ est le nom d'un fichier .mol qui doit être présent dans le dossier courant

Le dossier "Dossier" doit exister et être vide. Il sera rempli avec les fichiers .mol initiaux (renommés en file1.mol ... filen.mol) et avec les fichiers de sous-structure équivalents (file1 ... filen), où n est le nombre de lignes dans le fichier-pilote.
Un fichier toc est également créé afin que LSD puisse retrouver les fichiers de sous-structure à partir des noms de squelettes.

Exemple: La fabrication de Filters/MONOTERP.
Les commandes qui suivent sont écrites pour un système de type UNIX. Le dossier courant de l'interpréteur de commandes est initialement celui de LSD.
Sous windows il suffit de remplacer les `/` par des `\`.

     prompt$  cd MOL
     prompt$  cd Monoterp_mol
     prompt$  mkdir MONOTERP
     prompt$  ../../mol2ab MONOTERP ../monoterp_mol.txt

## Traiter les résultats avec outlsd

Pour utiliser outlsd, il ne faut pas que le fichier de données contienne la commande `DISP 0`.
Le programme outlsd lit sur l'entrée standard et écrit sur la sortie standard.
Il prend comme argument un entier entre 1 et 9.

`prompt$ outlsd 7 < pinene.sol > pinene.mol`

Selon la valeur de l'argument n, le résultat produit par outlsd contient

- n = 1 : des listes de paires d'atomes liés (sans grand intérêt)
- n = 5 : des chaînes SMILES
- n = 6 : des coordonnées 2D pour genpos et m_edit (extension .coo)
- n = 7 : des molécules au format MOL ou SD (extension .mol ou .sdf) pour certains produits propriétaires et m_edit
- n = 8 : des coordonnées 3D fantaisistes au format SD (extension .sdf), H implicites
- n = 9 : des coordonnées 3D fantaisistes au format SD (extension .sdf), H explicites

Les options 2, 3 et 4 ne sont plus disponibles à partir de la version 3.4.1.

Les logiciels commerciaux peuvent lire les fichiers contenant plusieurs structures qui sont produits par l'option 7 si leur extension est .sdf.

## Visualiser les résultats avec genpos

L'option 6 de outlsd produit un texte qui commence avec DRAW sur la ligne 1, et dans un format utilisé par le programme genpos. Genpos lit sur l'entrée standard et écrit sur la sortie standard des instructions en langage Postscript.

`prompt$ genpos < pinene.coo > pinene.ps`

Le fichier résultant (pinene.ps) peut être ouvert par des visionneuses Postscript pour être analysé et imprimé.

Copyright(C)2000 CNRS-UMR 7312-Jean-Marc Nuzillard