# 3.1 SMILES

La nomenclatura SMILES (del inglés; *Simplified Molecular Input Line Entry Specification*) representa a las estructuras químicas usando cadenas de caracteres alfanuméricos de tipo ASCII. Esta nomenclatura utiliza las siguientes reglas básicas para la codificación de moléculas:

* Los átomos son representados a través de su símbolo atómico. Los hidrógenos de átomos saturados no se representan explícitamente.

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FmG1vlaGw3XhKt1TUay4w%2Fimage.png?alt=media&#x26;token=4ac109b9-67cb-4d3b-9f9d-d41a07a03764" alt=""><figcaption></figcaption></figure>

* Los átomos vecinos son colocados uno junto a otro. Los enlaces simple son representados a través de un guión simple (-), los enlaces dobles mediante el signo de igualdad (=); mientras que los enlaces triples con un símbolo de numeral (#).&#x20;

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FsPt7cMwsNhRjufbED836%2Fimage.png?alt=media&#x26;token=3f2dc4ff-5d94-4090-bc30-185c1d879415" alt=""><figcaption></figcaption></figure>

* Los paréntesis especifican ramificaciones dentro de la estructura. Las ramificaciones abarcan no sólo cadenas carbonadas sino también grupos funcionales. Por ejemplo, los grupos carbonilo se escriben como C(=O) ya que el átomo de oxígeno se encuentra por fuera de la cadena y se considera una ramificación.

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FIaMsG7Vhlbv1omcOPwbk%2Fimage.png?alt=media&#x26;token=9f5b196f-1d43-4c4e-8de4-151ccc359854" alt="" width="458"><figcaption></figcaption></figure>

* Para la representación lineal de estructuras cíclicas, un enlace se "rompe" en cada anillo y los átomos de conexión entre anillos continúan con el mismo dígito en la representación. Los átomos dentro de un anillo aromático se indican con letras minúsculas.&#x20;

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FTDrcuJoKnOhfJEO49fPq%2Fimage.png?alt=media&#x26;token=c432e21c-05f7-4bf0-bdab-ea07bcc50709" alt=""><figcaption></figcaption></figure>

Aunque la notación de SMILES son una forma clara de describir estructuras químicas, pueden existir múltiples representaciones SMILES válidas para el mismo gráfico molecular. Por ese motivo se generaron los SMILES canónicos para garantizar la existencia de una sola representación de un compuesto en una base de datos o identificar compuestos duplicados, pero es dependiente del programa utilizado. Por lo tanto, se recomienda generar los SMILES utilizando un solo programa.

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FemmvcDvFVRInG92wR2xO%2Fimage.png?alt=media&#x26;token=f0b76793-fd2d-470d-a46b-c5048ae7406b" alt=""><figcaption></figcaption></figure>

A continuación, se muestran ejemplos para obtener representaciones SMILES usando la librería `RDKit`.

## <mark style="color:orange;">Ejercicios:</mark>

#### <mark style="color:orange;">1. Conversión directa a partir de</mark> <mark style="color:orange;"></mark>*<mark style="color:orange;">SMILES</mark>*

En este ejercicio se codifica en formato molécula la estructura química del fármaco [ponatinib](https://go.drugbank.com/drugs/DB08901), el cual es utilizado para tratar determinados tipos de leucemia mieloide crónica.&#x20;

a) Como primer paso, se dibuja la estructura del ponatinib en *MarvinSketch* y se selecciona la opción de copiar la estructura molecular en formato *Daylight SMILES*.

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FVw3OtWC3i0tB3z9DeGAx%2Fimagen.png?alt=media&#x26;token=cd8be26a-8534-4f3c-b5cf-e5771cbf9a1e" alt=""><figcaption><p><em><strong>Figura 1.</strong> Generación de SMILES en MarvinSketch.</em></p></figcaption></figure>

b) A través de `RDKit` y de la función *MolFromSmiles* se convierte el SMILES generado a formato molécula utilizando el siguiente código:

```python
from rdkit import Chem
drug = Chem.MolFromSmiles('CN1CCN(CC2=CC=C(NC(=O)C3=CC=C(C)C(=C3)C#CC3=CN=C4C=CC=NN34)C=C2C(F)(F)F)CC1 |c:18,27,29,34,t:6,8,13,15,23,25|')
drug     # 'drug' es la variable en la cual se almacena la representación molecular
```

El resultado que se imprime es el siguiente:&#x20;

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FaLkwTAWZN1pUAlcHyuX2%2Fimagen.png?alt=media&#x26;token=1b8c1637-bb50-47ca-b35f-0665d65466fc" alt=""><figcaption><p><em><strong>Figura 2.</strong> Molécula generada a través de RDKit.</em></p></figcaption></figure>

#### <mark style="color:orange;">2. Conversión y uso del formato '</mark>*<mark style="color:orange;">MOLFILE</mark>*<mark style="color:orange;">'</mark>

Se obtendrá el SMILES de mismo compuesto a partir del formato  '*molblock*' reportado en la base de datos [*DrugBank* ](https://go.drugbank.com/)*(*&#x76;er la sección de [Bases de datos moleculares](https://difacquim.gitbook.io/quimioinformatica/4.-bases-de-datos-moleculares) para mayor información).

a) Ingrese a DrugBank (<https://go.drugbank.com>) y busque información relacionada con el fármaco ponatinib.

b) En la sección de "*Structure*" seleccione la opción '*MOL*'.&#x20;

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2Fqm3uFFuA7tL6L1fIUbeY%2Fimagen.png?alt=media&#x26;token=f03ee522-6445-4ba0-bfc5-75f856e6604e" alt=""><figcaption><p><em><strong>Figura 3.</strong> Uso de Drugbank para la consulta de estructura moleculares.</em></p></figcaption></figure>

c) Esta opción lo llevará a una nueva página que contiene una serie de números y letras que describen la estructura molecular. Copie el *link* de esta página.

e) En un cuaderno de código escriba las siguientes líneas y pegue el link  después de la función *`request.get.`*&#x20;

<pre class="language-python"><code class="lang-python"># La siguiente linea de código es para leer el formato MOL. En este caso se obtiene directamente del link de Drugbank.
<strong>
</strong>ponatinib = requests.get('https://go.drugbank.com/structures/small_molecule_drugs/DB08901.mol').text

mol = Chem.MolFromMolBlock(ponatinib)  # el archivo de texto fue procesado y ahora es convertido a una estructura molecular en 2D.
mol.smile = Chem.MolToSmiles(mol)      # con la estructura molecular también podemos obtener el formato SMILES

print("El formato SMILES de esta molécula es: " , mol.smile)
mol
</code></pre>

Estas líneas de código arrojan la estructura y el SMILES del fármaco ponatinib.

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FkhtBWnIeJ7FBYqTTL7ES%2Fimage.png?alt=media&#x26;token=1ee40311-a7eb-467e-b8ad-ad87046cc1e3" alt=""><figcaption><p><em><strong>Figura 4.</strong> Uso del formato mol en la librería RDKit.</em></p></figcaption></figure>

#### <mark style="color:orange;">**3. Lista de compuestos usando SMILES**</mark>&#x20;

Si se desea analizar un conjunto de compuestos al mismo tiempo es posible hacer uso de una lista como se muestra a continuación:

<pre class="language-python"><code class="lang-python">
<strong>group_smiles = ['CC1=CC=C(C=C1)S(=O)(=O)NC(=O)NN1CCCCCC1', 'N[C@@H](CCC(O)=O)C(O)=O', 'CCN(CC)CC#CCOC(=O)C(O)(C1CCCCC1)C1=CC=CC=C1']
</strong>group_mol = []
for smiles in group_smiles:
  mol_i = Chem.MolFromSmiles(smiles)
  group_mol.append(mol_i)
  
fig_list = Draw.MolsToGridImage(group_mol)
fig_list
</code></pre>

El código anterior permite visualizar estructuras moleculares presente en una lista:

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FNIKqCMZBGUVVQR7uFsmE%2Fimage.png?alt=media&#x26;token=a6d301d1-5909-4cfd-af1b-4585f6562e1a" alt=""><figcaption><p><em><strong>Figura 5</strong>. Lista de compuestos.</em></p></figcaption></figure>

#### <mark style="color:orange;">**4. Búsqueda de patrones en estructuras**</mark>&#x20;

Si el usuario desea conocer si en un conjunto determinado de moléculas existen subestructuras específicas (por ejemplo, un grupo carbonilo) entonces puede hacer uso de la función '*`Substructure Match`*' y '*`HasSubstructure Match`*'.

```python
# Conjunto de compuestos 

group_smiles = ['CC1=CC=C(C=C1)S(=O)(=O)NC(=O)NN1CCCCCC1', 'N[C@@H](CCC(O)=O)C(O)=O', 'CCN(CC)CC#CCOC(=O)C(O)(C1CCCCC1)C1=CC=CC=C1']

group_mol = []
for smiles in group_smiles:
  mol_i = Chem.MolFromSmiles(smiles)
  group_mol.append(mol_i)

count = 0  # variable que sirve para contar el número de coincidencias encontrado entre las subestructuras
substructure_c = Chem.MolFromSmiles ('C(=O)') # en esta linea se especifica la estructura a buscar
for mol in group_mol:
    a = mol.HasSubstructMatch(substructure_c)
    if a is True:
      count += 1
print("Se ha encontrado coincidencias en",count,"estructuras.")

fig_substructures = Draw.MolsToGridImage(group_mol, highlightAtomLists=[mol.GetSubstructMatch(substructure_c) for mol in group_mol])
fig_substructures         

```

Este código arroja como resultado:

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FusYLIjgg7lwtpLBWUzyz%2Fimage.png?alt=media&#x26;token=b3a649bf-5961-4b6d-9e39-639146113249" alt=""><figcaption><p><em><strong>FIgura 6.</strong> Búsqueda de subestructuras.</em></p></figcaption></figure>

{% hint style="info" %}
En este caso se definió el grupo carbonilo a partir de SMILES, en la sección de [SMARTS](https://difacquim.gitbook.io/quimioinformatica/3.-representacion-molecular/3.2-smarts) notará la limitación que tiene este enfoque y la importancia de utilizar  caracteres y símbolos de propiedades atómicas y de enlaces más allá de los utilizados en SMILES.
{% endhint %}

### <mark style="color:orange;">**5. Visualización de estructuras en 3D**</mark>

Para este ejercicio se hará uso de la libreria `py3Dmol`, desarrollada para crear visualizaciones de sistemas moleculares. Es de importancia recalcar que, si el usuario desea visualizar una estructura en 3D, la conversión debe suceder desde el formato 'mol', es decir, no es posible trabajar con las notaciones lineales SMILES, SMARTS e InChI.&#x20;

```python
import py3Dmol
def drawit(m,p=None,confId=-1):
        mb = Chem.MolToMolBlock(m,confId=confId)
        if p is None:
            p = py3Dmol.view(width=400,height=400)
        p.removeAllModels()
        p.addModel(mb,'sdf')
        p.setStyle({'stick':{}})
        p.setBackgroundColor('0xeeeeee')
        p.zoomTo()
        return p.show()

structure_example = Chem.MolFromMolFile("ChEBI_9123.mol",removeHs=False)
drawit(structure_example)
```

El resultado del código anterior se muestra a continuación:

<figure><img src="https://4235622825-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FyzFDWCsANohM6QBx4kmk%2Fuploads%2FGSyE8IjsG98aKtr42u65%2Fimage.png?alt=media&#x26;token=38bcf632-db1e-4587-abfe-69fd26b62ae3" alt=""><figcaption><p><em><strong>Figura 7.</strong> Visualización de sertraline en 3D.</em></p></figcaption></figure>

## <mark style="color:orange;">Para saber más:</mark>

* SMILES - A Simplified Chemical Language <https://daylight.com/dayhtml/doc/theory/theory.smiles.html>. Fecha de acceso: Noviembre 2023.
* Weininger D (1988) [SMILES, a chemical language and information system. 1. Introduction to methodology and encoding rules](https://doi.org/10.1021/ci00057a005). *J. Chem. Inf. Comput. Sci.* 28, 1, 31–36.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://difacquim.gitbook.io/quimioinformatica/3.-representacion-molecular/3.1-smiles.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
