síntesis orgánica asistida por computadora

97
.... _ ·• SÍNTESIS ORGÁNICA ASISTIDA POR COMPUTADORA Tesis presentada por EDUARDO ALEJANDRO TUBERT BROHMAN Presentada ante la Dirección Académica de la Universidad Virtual del Instituto Tecnológico y de Estudios Superiores de Monterrey como requisito parcial para optar al título de MAESTRO EN CIENCIAS COMPUTACIONALES MAYO DE 2001

Upload: others

Post on 15-Oct-2021

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Síntesis orgánica asistida por computadora

.... _ ·•

SÍNTESIS ORGÁNICA ASISTIDA POR COMPUTADORA

Tesis presentada por

EDUARDO ALEJANDRO TUBERT BROHMAN

Presentada ante la Dirección Académica de la Universidad Virtual del Instituto Tecnológico y de Estudios Superiores de Monterrey como requisito parcial para

optar al título de

MAESTRO EN CIENCIAS COMPUTACIONALES

MAYO DE 2001

Page 2: Síntesis orgánica asistida por computadora

RESUMEN

SÍNTESIS ORGÁNICA ASISTIDA POR COMPUTADORA

MAYO DE 2001

EDUARDO ALEJANDRO TUBERT BROHMAN

INGENIERO EN ELECTRÓNICA Y COMUNICACIONES INSTITUTO TECNOLÓGICO Y DE ESTUDIOS SUPERIORES DE MONTERREY

Dirigida por el Dr. Carlos Rodríguez Lucatero y el M. en C. José Manuel Méndez Stivalet

Esta tesis describe una aplicación de las Ciencias Computacionales al problema

del diseño de síntesis en Química Orgánica. La síntesis orgánica busca obtener algún

compuesto químico de interés a partir de materias primas disponibles en la naturaleza,

aplicando una serie de transformaciones con reglas específicas.

La Síntesis Orgánica Asistida por Computadora (CAOS por sus siglas en inglés,

Computer Aided Organic Synthesis) involucra una serie de problemas interesantes

desde el punto de vista de las Ciencias Computacionales, principalmente en las áreas

de teoría de grafos, combinatoria, teoría de autómatas y lenguajes, y análisis de

algoritmos.

Durante el desarrollo de la tesis se diseñó e implementó un sistema de cómputo

llamado OSET (Organic Synthesis and Exploration Too[). OSET utiliza una arquitectura

cliente/servidor sobre Internet. Con el fin de facilitar la distribución del sistema, el cliente

está escrito como un applet java.

El servidor realiza la función de un motor de retrosíntesis, recibiendo una

molécula objetivo y sugiriendo de qué precursores pudo haberse obtenido, y por medio

de qué reacciones químicas. Para esto, el servidor necesita recopilar información

química sobre la molécula. Algunos problemas particularmente interesantes que surgen

durante este proceso son el reconocimiento de grupos funcionales y anillos; la

detección de moléculas isomórficas, y su expresión en una notación lineal canónica.

iv

Page 3: Síntesis orgánica asistida por computadora

El servidor OSET cuenta con una base de datos de descripciones algorítmicas

de procesos químicos llamados transformadas (equivalentes a reacciones químicas,

pero en sentido inverso). Las transformadas están descritas en un lenguaje llamado

TDL, especificado a detalle durante el desarrollo de la tesis.

El sistema OSET se ha utilizado con éxito para reproducir síntesis publicadas.

Además, se ha aplicado experimentalmente como un auxiliar para la educación

química.

El código fuente del sistema se ha liberado bajo la GNU General Pub/ic License.

Al tratase de un proyecto de software libre, se busca que pueda ser aprovechado para

la solución de problemas similares.

V

Page 4: Síntesis orgánica asistida por computadora

ÍNDICE DE CONTENIDO

AGRADECIMIENTOS ........................................................................................... iii

RESUMEN ............................................................................................................ iv

INTRODUCCIÓN .................................................................................................. 1

Capítulo 1: Introducción a la síntesis orgánica asistida por computadora ............ 7

Conceptos básicos de Química Orgánica ......................................................... 7

Fundamentos teóricos ................................................................................... 7

Notación estructural ..................................................................................... 1 O

Grupos funcionales ...................................................................................... 11

Aromaticidad ................................................................................................ 12

Conceptos de Síntesis Orgánica ..................................................................... 13

Antecedentes históricos de CAOS .................................................................. 16

Aplicaciones de CAOS en la educación .......................................................... 18

Capítulo 2: Arquitectura del sistema OSET ........................................................ 20

Diseño del sistema .......................................................................................... 20

Esquema de comunicación cliente/servidor .................................................... 28

Capítulo 3: Servidor OSET - Percepción ............................................................. 37

Identificación de anillos ................................................................................... 37

Detección de todos los anillos ..................................................................... 41

Detección del ESER .................................................................................... 43

Detección de aromaticidad .......................................................................... 44

Identificación de anillos ................................................................................ 46

Canonización ................................................................................................... 48

Búsqueda en la base de datos de materias primas ........................................ 51

Clasificación de átomos ................................................................................... 51

Identificación de grupos funcionales ............................................................... 52

Cálculo de complejidad molecular ................................................................... 55

Capítulo 4: Servidor OSET - Ejecución ............................................................... 56

vi

Page 5: Síntesis orgánica asistida por computadora

Lenguaje para descripción de transformadas [TDL] ........................................ 56

Introducción ................................................................................................. 57

Analizador léxico .......................................................................................... 59

Analizador sintáctico y traductor .................................................................. 62

Enunciado FORATOM ............................................................................. 64

Enunciado IF ............................................................................................ 64

Enunciado de asignación ......................................................................... 65

Enunciado ADD ........................................................................................ 65

Enunciado BREAKBOND ......................................................................... 65

Enunciado MAKEBOND ........................................................................... 66

Enunciado INCBONDORDER ...... ~ ........................................................... 66

Enunciado DECBONDORDER ................................................................. 66

Enunciado SETBONDORDER ................................................................. 66

Enunciado DONE ..................................................................................... 67

Enunciado ECHO ..................................................................................... 67

Fase de ejecución ........................................................................................... 70

Selección del modo de análisis .................................................................... 70

Identificación de retrones ............................................................................. 71

Aplicación de la transformada ...................................................................... 73

Postprocesamiento .......................................................................................... 74

Capitulo 5: Cliente OSET .................................................................................... 76

Interfase con el usuario ................................................................................... 76

Árbol retrosintético ........................................................................................... 79

Evaluación global de la ruta sintética .............................................................. 80

Capítulo 6: Ejemplos de aplicación ..................................................................... 83

OSET en la educación química ....................................................................... 83

Reproducción de una síntesis publicada (Juvabiona) ..................................... 85

Capítulo 7: Conclusiones .................................................................................... 88

Referencias ......................................................................................................... 89

Referencias en WWW ..................................................................................... 92

vii

Page 6: Síntesis orgánica asistida por computadora

INTRODUCCIÓN

Esta tesis describe una aplicación de las Ciencias Computacionales a un

problema concreto en el campo de la Química Orgánica. La Síntesis Orgánica Asistida

por Computadora (CAOS por sus siglas en inglé~. Computer Aided Organic Synthesis)

involucra una serie de problemas interesantes desde el punto de vista de las Ciencias

Computacionales, principalmente en las áreas de teoría de grafos, combinatoria, teoría

de autómatas y lenguajes, y análisis de algoritmos. Durante el desarrollo de esta tesis

se produjo un sistema de cómputo denominado OSET (Organic Synthesis Exploration

Too/) que puede ser utilizado como herramienta por químicos en todo el mundo, al

haberse desarrollado para ejecutarse en forma distribuida.

Este proyecto interdisciplinario surgió en 1998 en el Departamento de Química

Orgánica de la Facultad de Química de la UNAM. En él estaban involucrados en un

principio mi hermano, Luis lván Tubert Brohman, y el M. en C. José Manuel Méndez

Stivalet, profesor titular de tiempo completo.

Para un químico, el interés en esta área se debe a la forma en que contribuye a

sistematizar el conocimiento de la Química. Los problemas computacionales

involucrados son el tema que se desarrolla en esta tesis.

En posteriores capítulos se explicará a detalle qué es exactamente la Síntesis

Orgánica. Baste por ahora una definición de trabajo: dada la estructura de una

substancia química de interés, se busca una forma de producirla a partir de substancias

más sencillas o fácilmente disponibles, apegándose a un conjunto de reglas químicas

específicas.

Como un ejemplo de la aplicación de la síntesis orgánica, a continuación se

plantea una de las posibles síntesis para la aspirina (ácido acetilsalicilico, analgésico de

uso común), que se muestra en la Figura 1. El proceso se muestra de manera

simplificada, evitado detalles innecesarios, ya que se trata únicamente de mostrar el

concepto. Todas las substancias utilizadas son materias primas ampliamente

disponibles.

1

Page 7: Síntesis orgánica asistida por computadora

1. Partiendo del benceno (C6H6, obtenido directamente del petróleo).

2. Se agrega ácido sulfúrico (H2S04, obtenido a partir de azufre mineral, aire y agua).

El resultado es ácido bencensulfónico.

3. Después se agrega hidróxido de sodio (NaOH, obtenido a partir de sal y agua). El

resultado es fenol.

4. Se carboxila con dióxido de carbono (C02, obtenido a partir de la calcinación de

piedra caliza). El resultado es ácido salicílico.

5. Finalmente se hace reaccionar con ácido acético (CH3COOH, vinagre) para

obtener el ácido acetilsalicílico.

OH 1

O=S=O OH OH o

o H2S04 ó NaOH ó C02 &'OH Benceno (1] [2] [3] [4]

Acido acetilsalicílico [5]

Figura 1 Slntesis del ácido acetilsalicllico

Una síntesis terminada, como la que se acaba de presentar, es la solución a un

problema de retrosíntesis. Esta solución puede parecer sencilla; haciendo la analogía a

un análisis de complejidad, podemos pensar que la lectura y verificación de una

solución particular puede hacerse en tiempo polinomial. Pero la generación de la

solución (el proceso que tuvo que seguir el químico que diseño esta síntesis) involucra

partir de la molécula objetivo y pensar en todas las reacciones que pudieron haberla

generado en un paso, obteniendo una lista de moléculas más sencillas que a su vez

deben analizarse recursivamente. De esta manera se genera un árbol retrosintético que

generalmente explota de manera exponencial. Como ejemplo, en la Figura 2 se

presenta un fragmento del árbol retrosintético para el ibuprofeno, otro analgésico de

uso común.

2

Page 8: Síntesis orgánica asistida por computadora

lbuprofeno

OH

~ YyoH

o

V

<--===

Br

Figura 2 Arbol retrosintético parcial para el ibuprofeno

En la representación de este diagrama se utiliza la notación retrosintética (flecha

doble); para leer una síntesis específica es necesario seguir las flechas en sentido

contrario, como se explica en el siguiente capítulo. En el diagrama pueden leerse trece

posibles síntesis diferentes para la molécula objetivo ibuprofeno.

3

Page 9: Síntesis orgánica asistida por computadora

Puede notarse que el "árbol retrosintético" presentado en realidad no es un árbol,

ya que incluye varios ciclos. Esto es porque se trata de una representación abreviada;

es posible pasar a un árbol en el sentido topológico mediante la repetición de

moléculas. Otra abreviatura importante utilizada fue la omisión de materias primas

auxiliares utilizadas durante la síntesis.

En la Figura 3 se presentan algunas moléculas sintetizadas recientemente.

Puede notarse que el grado de complejidad es significativamente mayor que el de los

ejemplos anteriores. La síntesis de la Brevetoxina B comprende más de 60 pasos

(Nicolaou, K.C. y Sorensen, E.J., 1996); asumiendo cuatro opciones para cada paso de

la síntesis, el árbol retrosintético correspondiente tendría más de 1036 nodos.

o

O,

H H o

H

Taxol (Nicolaou, 1994)

o

Brevetoxina B (Nicolaou, 1995)

AcO

Figura 3 Algunas slntesis recientes

HO

CHO

La sintesis orgánica ha sido comparada muchas veces con un juego de ajedrez.

Roald Hoffmann, en su libro Lo mismo y no lo mismo (1995), escribió lo siguiente en un

capítulo acerca de la síntesis del cubano, compuesto mostrado en la Figura 4:

La estrategia de la síntesis tiene una lógica contundente. El esquema de una síntesis de múltiples pasos se parece al planteamiento de un problema de ajedrez. Al final está el cubano: el jaque mate. En el ínterin hay jugadas, con reglas que las determinan. Las reglas son

4

Page 10: Síntesis orgánica asistida por computadora

mucho más interesantes y flexibles que en el ajedrez. El problema del químico dedicado a las síntesis es planear un movimiento en el tablero diez jugadas antes, que tenga una apariencia de lo más común. Pero desde esa posición, un jugador (o un equipo de qui micos), mediante una ingeniosa serie de jugadas, logra el jaque mate sin importar lo que haga el más recalcitrante y formidable oponente de todos: la naturaleza.

H

Figura 4 Cubano.

Pero la síntesis orgánica resulta ser un problema mucho más complejo que el

ajedrez. Hippe, Fic y Mazur (1992) comparan el espacio de estados de los dos

problemas, con la siguiente conclusión: para un límite arbitrario de 100 átomos, se

estima que una síntesis orgánica tendría 10120 estados, mientras que para el ajedrez se

calculan 1 oªº. La búsqueda exhaustiva de soluciones no es una opción viable para encontrar

buenas rutas de síntesis. Sin embargo, es posible diseñar algoritmos de búsqueda que

utilicen criterios heurísticos para obtener soluciones aceptables. Pero antes de llegar a

este paso, se necesita una infraestructura de percepción molecular y un motor de

análisis retrosintético. En los próximos capítulos se describen a detalle precisamente

estos aspectos.

Aunque el sistema OSET cumplió con los objetivos planteados para el desarrollo

de esta tesis, todavía se pueden hacer muchas mejoras. Precisamente por eso, OSET

es software libre, distribuido bajo la GNU General Public License. Cuando un software

es "libre", c_ualquier usuario puede utilizarlo para cualquier propósito; estudiar el código

fuente para entender cómo funciona y/o adaptarlo a sus necesidades; redistribuirlo para

que otros usuarios puedan utilizarlo y, finalmente, mejorarlo y hacer públicas sus

modificaciones para que toda la comunidad se beneficie (Free Software Foundation,

WWW).

La intención al liberar el código fuente de OSET es precisamente permitir que

quienes estén interesados en el tema puedan contribuir a su desarrollo. Como se busca

5

Page 11: Síntesis orgánica asistida por computadora

que este trabajo quede abierto a la comunidad internacional, se ha procurado escribir

los nombres de variables, comentarios y mensajes en inglés, que es el idioma que

comprende un mayor número de programadores en el mundo.

Para acceder a la última versión del sistema, debe consultarse la pagina

http://litio.pquim.unam.mx/caos, desde donde se puede ejecutar el applet para análisis,

u obtener el código fuente del sistema.

La estructura de este documento es la siguiente:

El capítulo 1 presenta un rápido repaso de los conceptos químicos utilizados

durante el desarrollo de esta tesis, así como una breve historia del desarrollo de CAOS.

En el capítulo 2 se describe el diseño del sistema OSET en forma global. En este

capítulo se encuentra descrita la arquitectura cliente/servidor, y el esquema de

comunicación a través de Internet.

Los capítulos 3 y 4 describen el funcionamiento del servidor OSET. Este servidor

implementa un motor de análisis retrosintético, por lo que es el que tiene que

encargarse de la percepción estructural en grafos moleculares, así como de la

interpretación y ejecución de transformadas retrosintéticas.

El capítulo 5 describe la parte de OSET que se ejecuta en la computadora

cliente. En este caso, la dificultad es la administración y visualización del árbol

retrosintético.

Para demostrar la aplicación de herramientas de CAOS, en el capítulo 6 se

describe un experimento educativo realizado con el sistema OSET, así como la

reproducción de una síntesis no trivial publicada.

Finalmente, el capítulo 7 presenta conclusiones.

6

Page 12: Síntesis orgánica asistida por computadora

CAPÍTULO 1: INTRODUCCIÓN A LA SÍNTESIS ORGÁNICA ASISTIDA POR COMPUTADORA

En este capítulo se describe el campo de la síntesis orgánica. Se comienza con

un breve repaso de los conceptos químicos indispensables, que puede ser omitido sin

pérdida de continuidad por lectores familiarizados con esta área. Posteriormente se

introduce el vocabulario de la síntesis orgánica en general, para después pasar a la

historia de la síntesis orgánica asistida por computadora.

Conceptos básicos de Química Orgánica

El término "química orgánica" se refería en sus orígenes (principios del siglo XIX)

al estudio de las substancias encontradas en los organismos vivos. Esto en contraste

con la "química inorgánica", que estudiaba las substancias de origen mineral.

Fue necesario redefinir la química orgánica en 1828, cuando Friedrich Wohler

logró convertir el cianato de amonio (substancia inorgánica) en urea (substancia

orgánica) (Wade, 1993). Con esto quedó demostrado que las substancias orgánicas no

pueden ser producidas solamente por los seres vivos.

Actualmente se reconoce como química orgánica a la química del carbono. El

carbono tiene la peculiaridad de que puede formar cadenas largas y estables,

incluyendo también átomos de otros elementos; además, por ser tetravalente permite

ramificaciones que dan lugar a una inmensa diversidad de compuestos orgánicos, que

constituye la base para la vida.

Fundamentos teóricos

Las substancias que los químicos sintetizan están formadas por átomos. Existen

más de cien tipos de átomos diferentes; a cada tipo se le denomina elemento químico y

se caracteriza por la estructura de su núcleo. En química orgánica se trabaja

regularmente con un pequeño subconjunto de elementos; los principales son carbono

7

Page 13: Síntesis orgánica asistida por computadora

(representado por el símbolo "C"), hidrógeno (H), oxígeno (O) y nitrógeno (N), y los

halógenos (F, CI, Br, 1).

Los átomos son considerados como la unidad estructural mínima desde un punto

de vista químico. Son sumamente pequeños: un gramo de materia tiene alrededor de

1023 átomos. Las propiedades físicas y químicas de una substancia dependen de los

tipos de átomos que la componen y de su arreglo espacial. A este arreglo se le conoce

como estructura química. Es importante notar que aun un elemento puro puede tener

propiedades diferentes si sus átomos se arreglan en estructuras diferentes (por

ejemplo, tanto el grafito como el diamante se componen de carbono puro).

El arreglo estructural de los átomos en el espacio se mantiene mediante enlaces

químicos. Los enlaces químicos unen a unos átomos con otros. Existen varios tipos de

enlaces químicos, pero el que sirve de base a la química orgánica es el llamado enlace

cova/ente. Es una unión entre dos átomos, y se debe a la interacción entre sus

electrones.

Los átomos están compuestos de electrones distribuidos alrededor de un núcleo

cargado positivamente. Los electrones se distribuyen en diversos niveles energéticos,

pero solamente los electrones del nivel de mayor energía participan directamente en los

procesos químicos. Para que un átomo se encuentre en un estado estable (de mínima

energía), su último nivel electrónico debe encontrarse lleno; para la mayor parte de los

elementos esto significa que debe contener ocho electrones (regla del octeto). Un

enlace covalente se forma cuando dos átomos comparten un par de electrones (cada

átomo contribuye uno), con el objetivo de llenar el último nivel de los dos, como se

muestra en la Figura 5. Es posible formar enlaces múltiples entre átomos compartiendo

más de un par de electrones.

:CI· + ·CI: -----.. .. ..

·O· + ·O· ---.. ..

Figura 5 Estructuras de Lewis representando enlaces covalentes sencillo y doble. Cada punto representa

un electrón en la capa de valencia.

El número de enlaces covalentes que puede tener un átomo se conoce como

valencia y es función del número de electrones en su última capa electrónica (una

8

Page 14: Síntesis orgánica asistida por computadora

función periódica de su número atómico). En la siguiente tabla se muestra la valencia

de los elementos más comunes en química orgánica.

Elemento # electrones # electrones valencia= en última para estado B-A capa (A) estable (B)

H (hidrógeno) 1 2 1 C (carbono) 4 8 4 N (nitrógeno) 5 8 3 O (oxígeno) 6 8 2 F, CI, Br, 1 7 8 1 (halógenos)

A una estructura discreta formada por la unión de varios átomos en su estado de

mínima energía se le conoce como molécula. Desde el punto de vista de las Ciencias

de la Computación, podemos pensar en una molécula como un grafo conexo no

dirigido, donde cada átomo es un vértice y cada enlace una arista. Se consideran los

enlaces dobles o triples como aristas de diferente tipo o costo, más que como aristas

múltiples, por lo que la molécula no constituye un multigrafo. Las matrices de

adyacencia de los grafos moleculares son porosas, ya que normalmente la valencia

máxima posible es de 4. Además, en la mayor parte de los casos, se trata de grafos

planos.

Las estructuras químicas pueden sufrir cambios cuando se encuentran en las

condiciones apropiadas, con el fin de minimizar su energía potencial química. A estos

cambios se les conoce como reacciones químicas. Una reacción consiste en la ruptura

de algunos enlaces, seguida por la formación de nuevos enlaces, y suele involucrar

varias moléculas diferentes. Por ejemplo, en la Figura 6 se muestra la reacción del

hidrógeno con el oxígeno para dar agua.

H-H + H-H + O=O H-0-H + H-0-H

Las moléculas que aparecen a la izquierda de la flecha se conocen como

reactivos; las que aparecen a la derecha son los productos. La flecha representa el

proceso. En algunas ocasiones se escriben sobre la flecha detalles adicionales acerca

de las condiciones de la reacción.

9

Page 15: Síntesis orgánica asistida por computadora

Notación estructural

Las moléculas pueden ser representadas en papel de diversas maneras. A

continuación se muestran cuatro maneras diferentes de representar la misma molécula,

conocida como 2-metilpentano.

HHH '1' H C H H H

1 1 1 1 1 H-C-C-C-C-C-H

1 1 1 1 1 H H H H H

1 2 3 4

Figura 7 Diferentes representaciones del 2-metilpentano

La estructura número 1 es la representación en forma de grafo de la molécula.

Cada vértice se representa con el símbolo del elemento y cada arista con una línea.

Lamentablemente, esta representación puede resultar incómoda debido a la gran

cantidad de átomos involucrados.

Los químicos han desarrollado diversas maneras de abreviar esta notación. En la

estructura 2 los átomos de hidrógeno se encuentran asociados al átomo de carbono

con el que están enlazados (el hidrógeno sólo puede formar un enlace y por lo tanto

siempre está asociado a un átomo específico). Los enlaces que involucran hidrógeno

se encuentran implícitos.

La notación 3 se conoce como notación lineal. Busca representar la molécula en

forma textual (como una cadena). Las ramificaciones se indican con paréntesis.

La notación 4 es la más abreviada y es la más usada por los químicos orgánicos

en la actualidad. Los átomos de carbono son implícitos y se encuentran en cada

vértice. Los átomos de hidrógeno también son implícitos y se supone que cada carbono

tiene siempre suficientes hidrógenos para satisfacer sus cuatro valencias.

En esta notación, los heteroátomos (átomos que no son de carbono ni de

hidrógeno) se representan explícitamente. Por ejemplo en la Figura 8 se muestra una

molécula con un átomo de oxigeno.

o A

Figura 8 Representación explicita de los heteroátomos

10

Page 16: Síntesis orgánica asistida por computadora

Aunque en general no se escriben los hidrógenos, hay ocasiones en las que se

prefiere representarlos explícitamente para mayor claridad, énfasis, o estética. Por

ejemplo, se acostumbra escribir los hidrógenos enlazados a heteroátomos (Figura 9).

~OH

Figura 9 Representación expllcita del hidrógeno

Grupos funciona/es

Las propiedades de una molécula dependen de su estructura. En el caso de la

química orgánica, los compuestos se pueden clasificar en grupos con características

físicas y químicas comunes. A éstos se les llama grupos funcionales, y se distinguen

por tener ciertas subestructuras comunes. Por ejemplo, el grupo de los alcoholes

consiste en las moléculas con la subestructura -OH, como se ve en la Figura 10. ,.... - - -'OH' - - - ,

~'~~: r---

- - - - - - , OH I

~~~-:~ Of 1 1 •-----

Figura 10 Grupo funcional alcohol

En la siguiente tabla se muestran ejemplos de algunos de los grupos funcionales

más importantes, señalando con una línea punteada la parte de interés.

Grupo funcional Estructura alcohol r:----,

~9_H_: cetona r -

,o'

~ I_ - "'

aldehído r----, I o I

~I 1 1 , H,

L - - - - ..,

ácido ------I o I

~: 1

OH' 1 1 ------

11

Page 17: Síntesis orgánica asistida por computadora

Grupo funcional éster

éter

alqueno (u olefina)

Estructura

r---- ,

~º~ , _____ J

- - - , ~

1 - - - -

Estas definiciones de grupos funcionales son las que suelen manejar los

químicos de manera informal; sin embargo, como veremos más adelante, para fines

computacionales se requieren definiciones más formales.

Aromaticidad

La aromaticidad es un fenómeno que causa que ciertas moléculas presenten

propiedades atípicas que deben reconocerse, al igual que los grupos funcionales.

El ejemplo más sencillo de un anillo aromático es el benceno (C6H6), que se

muestra en la Figura 11; estructuralmente este anillo de seis átomos de carbono

debería tener tres enlaces sencillos y tres dobles alternados, y puede representarse

gráficamente de esa manera (estructura a). Pero en realidad los electrones no se

encuentran asociados a un enlace en particular, sino que se mueven alrededor del

anillo, comportándose como si cada enlace fuera de orden 1.5. Por esta razón, a veces

se representa el benceno con los enlaces deslocalizados mediante un círculo, como se

muestra en la estructura b. Los compuestos aromáticos son muy estables, al contrario

de los compuestos con dobles enlaces, que reaccionan con facilidad.

o a b

Figura 11 Benceno. a) Representación estructural con enlaces sencillos y dobles. b) Representación

hlbrida.

12

Page 18: Síntesis orgánica asistida por computadora

Conceptos de Síntesis Orgánica

La síntesis orgánica consiste en preparar compuestos orgánicos en el laboratorio

o en la industria a partir de materiales más sencillos o fácilmente disponibles. La

actividad principal de los químicos orgánicos se centra en la síntesis, lo que ha hecho

que el número de substancias conocidas crezca exponencialmente desde 1800,

llegando a casi 20 millones en el año 2000 (Schummer, 1997). Aunque sólo una

pequeña fracción de estas substancias tiene una aplicación conocida, en la actualidad

nos encontramos rodeados de productos de origen sintético: pinturas, plásticos,

insecticidas, fertilizantes, medicinas, fibras, explosivos, colorantes, saborizantes,

conservadores, etc.

A finales del siglo XIX empezó la aplicación de la síntesis orgánica a partir de

subproductos de la purificación del carbón o de otros productos orgánicos naturales. Se

trataba de síntesis sencillas que requerían poca planeación; las síntesis se

desarrollaban por analogía o asociación (Carey y Cheng, 1989). Con el paso del tiempo

se fueron complicando las síntesis, pero sin un avance correspondiente en una teoría

general. Quienes se dedicaban a esta actividad aplicaban al máximo su creatividad e

imaginación, partiendo de la experiencia de todas las síntesis realizadas anteriormente.

Cada síntesis se analizaba en forma independiente, como un caso especial.

Woodward, el mayor exponente de esta etapa de la síntesis, llegó a decir que "aunque

algunos de los aspectos experimentales de algunos tipos de actividad sintética pueden

ser susceptibles de mecanización, los aspectos creativos del diseño sintético no lo

serán (¡nunca!)" (citado en Serratosa, 1975). Cuando le otorgaron a Woodward el

Premio Nobel de Química en 1965, lo hicieron "por sus sobresalientes logros en el arte

de la síntesis orgánica" (Fredga, WWW).

Durante este período la enseñanza de la síntesis orgánica se hacía como una

presentación de síntesis ilustrativas (Corey y Cheng, 1989), con el resultado de que los

químicos absorbían las técnicas en forma intuitiva, o en el peor de los casos no las

adquirían. Aún en la actualidad, las bases de la síntesis orgánica se enseñan a nivel

licenciatura de la misma manera {por ejemplo, en la UNAM).

El siguiente paso en la evolución de la síntesis orgánica se dio en los 60s,

cuando se desarrolló un acercamiento más sistemático, que analizaba las

características estructurales de los productos de reacción y su manipulación en un

13

Page 19: Síntesis orgánica asistida por computadora

sentido retrosintético o antitético (de productos a materias primas, o sea, al revés de

cómo se piensa normalmente en química). El principal proponente de esta idea fue

Carey, quien obtuvo el Premio Nobel de Química en 1990 "por su desarrollo de la teoría

y metodología de la síntesis orgánica" (Electronic Nobel Museum Project, WWW).

Carey (Carey y Cheng, 1989) describe el análisis retrosintético de la siguiente

manera:

El análisis retrosintético (o antitético) es una técnica de resolución de problemas para la transformación de una molécula objetivo sintético (MOB) en una secuencia de estructuras cada vez más simples a lo largo de un camino que lleva finalmente a materias primas simples o comercialmente disponibles para la síntesis química. La transformación de una molécula en un precursor sintético es realizada mediante la aplicación de una transformada, el inverso exacto de una reacción química, a la molécula objetivo. Cada estructura derivada antitéticamente de una MOB se convierte entonces en una nueva MOB para analizar. La repetición de este proceso produce finalmente un árbol de intermediarios que tiene estructuras químicas como nodos y donde los caminos de abajo hacia arriba corresponden a posibles rutas sintéticas de la MOB.

En este capítulo ya se definió el vocabulario utilizado para describir una reacción

química. Al realizar un análisis retrosintético, aunque se está hablando de los mismos

elementos semánticos, se utiliza un vocabulario diferente para permitir reconocer que

se está hablando de la síntesis en sentido contrario. En la siguiente tabla se compara la

nomenclatura utilizada en la dirección sintética y retrosintética, y en la Figura 12 se

compara una reacción con su correspondiente transformada retrosintética.

elemento dirección sintética dirección retrosintética paso reacción transformada

flecha ), <~

estructura de partida (cola reactivo objetivo de la flecha) estructura resultante producto precursor {punta de la flecha) subestructura requerida grupos funcionales retrones para la operación

14

Page 20: Síntesis orgánica asistida por computadora

grupos funcionales

¡ ()~- ~ ""' }l

1 \

: + ~--~ ' OH' ,HO ' 1 - - - - _1 " - - - - -

o

~º~ reacción

reactivos producto

~ retrón r----~ I o I

: 11 : transformada

--r'o~ :> 1 - - - - _,

o

~OH+ HO~

objetivo precursores

Figura 12 Reacción y transformada de condensación aldólica.

Un retrón es una subestructura que debe reconocerse en la molécula objetivo

para sugerir la aplicación de cierta transformada específica. Puede ser un grupo

funcional (como en el ejemplo presentado, donde el retrón es el grupo funcional éster);

dos grupos funcionales separados por una cadena de longitud específica; un anillo de

cierto tamaño y tipo, o un patrón cualquiera. En general resulta más eficiente utilizar

retrones de grupo funcional o anillo siempre que sea posible, ya que la localización de

patrones arbitrarios involucra una complejidad significativa.

En algunos casos es posible reconocer también un "retrón parcial", es decir, una

subestructura que sugiera un posible retrón, pero que no esté completa. Si se

encuentra un retrón parcial, es posible aplicar una transformada auxiliar para

completarlo y permitir la aplicación de una transformada simplificativa utilizando el

retrón completo. En la Figura 13 se muestra un ejemplo. La molécula objetivo tiene el

retrón parcial para la transformada de condensación aldólica. Mediante una

transformada auxiliar de hidrogenación, se obtiene el retrón total, y después se aplica la

transformada simplificativa.

Figura 13 Ejemplo de transformada auxiliar que convierte un retrón parcial en uno total.

15

Page 21: Síntesis orgánica asistida por computadora

Antecedentes históricos de CAOS

Carey caracterizaba a la síntesis orgánica como una actividad lógica, y para

demostrarlo propuso y realizó junto con Wipke en 1969 un programa computacional

capaz de llevar a cabo un análisis retrosintético (Corey y Wipke, 1969), dando origen al

campo de la síntesis orgánica asistida por computadora (CAOS, por sus siglas en

inglés, Computer-Aided Organic Synthesis).

Las reacciones de los químicos ante este avance no fueron muy positivas,

variando del escepticismo a la franca hostilidad (lhlenfeldt y Gasteiger, 1995). El

químico promedio no empezó de inmediato a utilizar computadoras en el laboratorio por

varias razones, principales entre ellas el rechazo a la mecanización y el costo nada

despreciable de los equipos de cómputo. Estos químicos siguieron trabajando de la

manera tradicional, pero se continuó la investigación en el área de CAOS en diversas

universidades. Durante los años 70s hubo al menos 28 proyectos diferentes

mencionados en la literatura científica (Barone y Chanon, 1986).

Los programas de CAOS no reemplazan al químico; cada uno tiene sus puntos

fuertes y débiles. El químico tiene una intuición, imaginación y percepción que

difícilmente puede alcanzar la computadora, además de la experiencia práctica; por

otro lado, la computadora puede recordar cientos o miles de reacciones perfectamente,

y puede realizar un análisis relativamente exhaustivo que para un humano sería tedioso

o imposible (Barone y Chanon, 1986). La necesidad de dicho análisis exhaustivo puede

observarse en este comentario (altamente optimista) de Smit et al. (1988):

[ ... ] el poder de la síntesis orgánica moderna ha llegado al nivel en el que un quf mico orgánico es capaz de preparar, por lo menos en principio, "lo que sea que necesite a partir de lo que escoja"

Aunque seguramente no todos los químicos estarán de acuerdo con esta cita,

resaltando las limitaciones inherentes a cualquier área del conocimiento humano, es

interesante observar que el poder de transformar cualquier cosa en cualquier otra

implica que hay un número infinito de caminos para realizar cualquier síntesis orgánica.

Algunos de estos caminos serán obviamente más eficientes en cuanto a rendimiento,

número de pasos, tiempo y energía invertidos, etc. Por supuesto, no es posible

examinar todas las posibles síntesis, por lo que el químico se enfrenta a un complejo

problema de optimización combinatoria para decidir qué caminos vale la pena explorar

16

Page 22: Síntesis orgánica asistida por computadora

y cuáles no tienen futuro. Como ya se mencionó, la capacidad de búsqueda incansable

de la computadora le da una ventaja importante para atacar este tipo de problemas.

La genealogía de los programas de CAOS tiene su raíz en el programa

propuesto en la primera publicación de Carey y Wipke, bautizado OCSS. Este

programa aplica directamente el concepto de retrosíntesis utilizando una base de datos

de transformadas. A partir de OCSS, se generaron dos de los programas que más se

han desarrollado a lo largo de los años, y que a la fecha se siguen utilizando: LHASA

(Carey, 1971) y SECS (Wipke y Gund, 1974).

Otras corrientes en el campo de CAOS tienen su origen en los trabajos de

Hendrickson (1990), quien utilizó el concepto de "medias reacciones"; y Ugi (descrito

por Brandt et al., 1977, y Haggin, 1983), quien introdujo el concepto de la química

constitucional. Un enfoque completamente opuesto es el de Jorgensen (Salatin y

Jorgensen, 1980), con el programa CAMEO, que trata el problema del análisis en la

dirección sintética, con el objetivo de predecir los productos para un conjunto dado de

reactivos y condiciones de reacción, simulando el razonamiento mecanístico de los

químicos orgánicos.

Recientemente los programas de análisis retrosintético, entre ellos LHASA, han

tratado de incluir el análisis sintético como lo hace CAMEO. Primero se decide

retrosintéticamente cual es el último paso con el que se forma el producto, y luego se

analizan sintéticamente los reactivos para asegurarse de que den única o

predominantemente el producto deseado (Carey, Long y Rubenstein, 1985).

En los últimos años los esfuerzos para la creación de nuevos programas de

síntesis orgánica han disminuido, substituyéndose por la sistematización de grandes

bases de datos de reacciones, que han resultado muy útiles para los químicos en la

industria y la academia (lhlenfeldt y Gasteiger, 1995). Aunque varios proyectos con más

de 20 años de historia siguen desarrollándose (ej. LHASA), las aportaciones nuevas

son escasas (ej. WODCA). Estos sistemas se ejecutan en ambiente UNIX (AIX, HP-UX

o IRIX para LHASA; Linux para WODCA). La elección del ambiente limita en cierta

manera su difusión, especialmente para aplicaciones educativas, en las que se prefiere

Windows. Como referencia, prácticamente todos los equipos workstation RS-6000 (que

ejecutan AIX, una versión de UNIX de IBM) del ITESM CCM han sido substituidos por

computadoras personales ejecutando Windows.

17

Page 23: Síntesis orgánica asistida por computadora

La última publicación que se ha localizado sobre el tema se refiere a un esfuerzo

para distribuir algunos algoritmos del sistema SYNCHEM, originado en 1973

(Krebsbach, Gelernter y Sieburth, 1998). Se percibe en general una notoria

desaceleración en el área de CAOS. Pero la experiencia en otros campos (ej.

inteligencia artificial, biotecnología), que pasaron por la misma secuencia de gran

entusiasmo seguido por una desaceleración, nos muestra que poco después del bache

renacen con nuevos bríos. Esta tesis espera contribuir al renacimiento de CAOS.

Aplicaciones de CAOS en la educación

Las aplicaciones de los programas de CAOS a la educación química no han sido

muchas. Una razón importante es que la mayor parte de los programas disponibles se

ejecutan en mainframes o minicomputadoras, y ha habido muy pocos esfuerzos para

crear programas equivalentes para computadoras personales.

En orden cronológico, se han documentado los siguientes esfuerzos:

• Universidad de lllinois, 1971: Smith desarrolló un programa educativo con interfase

de texto, con una base de datos de 53 reacciones específicas y 134 reactivos. El

programa realmente no realizaba ningún análisis, y funcionaba únicamente como un

examen de opción múltiple (Smith, 1971 ).

• Universidad de Harvard, 1973-74: el profesor Orf tomó el LHASA y lo probó con un

grupo piloto de 15 estudiantes voluntarios. LHASA fue diseñado para ser utilizado

por profesionales, no por estudiantes; sin embargo, su interfase gráfica (toda una

novedad en aquel momento) facilitaba mucho la comunicación al nivel de permitir

que se utilizara para la enseñanza. El autor concluyó que el potencial de LHASA

como una herramienta educativa para la síntesis orgánica había quedado

demostrado. El experimento otorgó confianza a los alumnos para trabajar con

problemas de síntesis no triviales, aun sin ayuda de la computadora. (Orf, 1975).

• Universidad de Tufts, 1978-79: A partir de LHASA, Stolow y Joncas crearon una

"versión estudiantil". Realizaron modificaciones para dejar en la base de datos

únicamente las transformadas retrosintéticas que enseñaban en sus cursos y,

además, cambiaron la operación del programa para que planteara preguntas a los

estudiantes en cada paso del análisis, con el fin de reforzar el aprendizaje. La

respuesta de los estudiantes fue muy positiva (Stolow y Joncas, 1980).

18

Page 24: Síntesis orgánica asistida por computadora

• St. Jerome (Francia), 1986: El programa SOS se utilizó para la enseñanza del

análisis retrosintético. La aportación más importante de este programa fue que se

ejecutaba en una microcomputadora Apple 11+, por lo que era más factible su

utilización en universidades con menores recursos de cómputo (Bertrand, Monti y

Barone, 1986). En una aplicación documentada del uso de este programa, los

estudiantes discutieron las rutas posibles de síntesis con ayuda del instructor, y

finalmente llevaron una de ellas a la práctica.

En todos los casos mencionados, las experiencias relatadas por los autores

fueron positivas. Sin embargo, como la mayoria de los programas requerian recursos

computacionales poco disponibles (o en peligro de extinción, como en el caso de la

Apple 11+ en 1986), el impacto de esta técnica pedagógica ha sido limitado.

En este capitulo se ha buscado dar una visión global del área de aplicación de

esta tesis, empezando desde conceptos básicos para permitir que un lector del área de

Ciencias Computacionales se forme una idea clara. En el próximo capitulo se describe

el diseño del sistema OSET.

19

Page 25: Síntesis orgánica asistida por computadora

CAPÍTULO 2: ARQUITECTURA DEL SISTEMA OSET

En este capítulo se describen las consideraciones que influyeron en el diseño del

sistema OSET, y como nos llevaron a la elección de la plataforma de ejecución.

Posteriormente se explica la arquitectura del sistema OSET en forma de bloques,

detallando la relación entre ellos.

Desde el punto de vista del usuario, el sistema OSET le permite capturar como

entrada una molécula objetivo y solicitar un análisis retrosintético. El sistema contesta

con un árbol de posibles rutas sintéticas, y le permite navegar libremente en forma

interactiva para explorar las diversas alternativas, recibiendo información adicional

sobre cada una, tal como el tipo de transformada utilizada. Posiblemente el sistema le

permite también realizar una búsqueda automática, sugiriéndole cierto número de rutas

que considera "buenas".

Con esta breve descripción empezamos el diseño considerando antes que nada

la plataforma de ejecución.

Diseño del sistema

Como se relató en la introducción, los sistemas CAOS históricamente han tenido

una difusión muy limitada, debido principalmente a que fueron diseñados para

ejecutarse en plataformas de hardware poco populares o muy caras. De hecho, en el

momento en que se crearon varios de estos sistemas no había otra opción, ya que esto

sucedió antes de la revolución de las microcomputadoras (PCs).

Nuestra principal consideración de diseño fue entonces crear un sistema CAOS

que pudiera ejecutarse en computadoras PC, bajo ambiente Windows, por tratarse de

la plataforma más popular (definiendo plataforma como combinación de hardware I

sistema operativo). Pero aún esto resulta discriminatorio para una difusión global, ya

que existen personas que se niegan rotundamente a utilizar ya sea PCs o Windows,

prefiriendo algún otro hardware (ej. Macintosh, Amiga, workstations), o sistema

operativo (ej. Linux para PCs, o el sistema operativo que dicte el hardware, ej. Macos ,:::,,:,; .. --.·~~e~, ~ . ...

20 <.\ ¡qb22(c ',

Page 26: Síntesis orgánica asistida por computadora

para Macintosh). Idealmente el sistema OSET tendría que poderse ejecutar en todas

estas plataformas.

Entonces, el primer paso para que nuestros usuarios potenciales utilicen OSET

es que tengan acceso a él, sin importar su plataforma. La tecnología de internet

(abreviatura de intemetworking, interconexión de redes), consta de una serie de

convenciones o protocolos de comunicación que permiten interconectar redes

heterogéneas que estén formadas por diferentes tipos de hardware (Comer, 1995). A la

gran red de redes que se forma al utilizar estos protocolos se le conoce como el

Internet (con mayúscula). Decidimos entonces publicar el sistema OSET en Internet,

cumpliendo con el requisito de acceso independiente de plataforma.

El medio utilizado para publicar información en Internet se conoce como World

Wide Web (WWW). El WWW es "un conjunto de tecnologías que implementan un

modelo de documento hipermedia distribuido [a través del] Internet" (Wilde, 1999). La

palabra "hipermedia" es una combinación de "hipertexto" (contenido con vínculos que

permiten hacer referencia a otro contenido para una lectura no lineal) y "multimedia"

(integración de diferentes medios de comunicación: texto, imágenes, gráficos, video,

programas, etc.) El esquema básico del WWW permite almacenar en equipos

"servidores" cualquier tipo de contenido, que puede ser consultado por los usuarios a

través de equipos "clientes", utilizando un programa conocido como browser

(visualizador).

Aunque en principio podría ser posible publicar en el WWW una página con

vínculos a diversas versiones ejecutables del sistema, una para cada plataforma, esta

no sería una solución práctica ni permanente, ya que el esfuerzo de instalar cada

sistema operativo, portar el sistema y asegurarnos de que funcione resultarla inmenso,

y tendríamos que repetir el proceso para cada nuevo sistema operativo o plataforma de

hardware que fuera surgiendo.

Históricamente este problema se asemeja a lo que sucedió cuando en 1973

Dennis Ritchie y Ken Thompson decidieron reescribir el kernel de UNIX en lenguaje C

para permitir que pudiera portarse rápidamente a cualquier plataforma de hardware

para la cual ex.istiera un compilador de C (Abrahams y Larson, 1992). Utilizando

compiladores cruzados (que generan código de máquina para hardware diferente a

aquel en el que se están ejecutando), llegó a omitirse el requerimiento del compilador

21

Page 27: Síntesis orgánica asistida por computadora

en el hardware de destino, por lo que el compilador de C también pudo escribirse en

lenguaje C y portarse fácilmente a cualquier tipo de hardware.

Lamentablemente, escribir y distribuir el sistema OSET en lenguaje C para que

el usuario lo recompile no es una opción viable. Nuestros usuarios objetivo son

químicos, cuyas habilidades computacionales resultan insuficientes para esta tarea.

Surge entonces un nuevo objetivo: distribuir la aplicación a través de

lnternet/WWW de tal manera que el usuario no tenga que realizar ningún esfuerzo para

instalarlo y/o ejecutarlo, independientemente del tipo de hardware y sistema operativo

que esté utilizando. Lo único que nos atrevemos a suponer del usuario es que cuenta

con una conexión a Internet, un browser, y hardware con capacidades gráficas.

Analicemos a detalle estos tres puntos:

• Conexión a Internet: el crecimiento del Internet ha sido explosivo en los últimos

años. En febrero de 2001 se estimaba que había más de 41 O millones de usuarios

conectados a Internet (6.7% de la población mundial), y que esta cantidad se

incrementaba por un millón diariamente (Netsizer, WWW; Nua, WWW).

Particularmente, considerando que nuestros usuarios vendrían principalmente del

medio académico (estudiantes, profesores, investigadores) o industrial, es posible

suponer que tienen actualmente acceso a Internet en sus lugares de estudio o

trabajo, o que en el peor de los casos tendrán acceso en un futuro cercano.

• Browser: para muchas personas, el Internet y el WWW son sinónimos: la aplicación

más popular para usuarios de Internet es la navegación del WWW utilizando un

programa visualizador o browser. Por esta razón suponemos que si nuestro usuario

potencial tiene una conexión a Internet, contará entonces con un browser. Nos

atrevimos a suponer también que el usuario sabría como utilizar el browser, aunque

tuvimos que revisar esta idea al hacer pruebas con usuarios reales ... Pero siguiendo

con el argumento del punto anterior, con el paso del tiempo será más común que

cualquier persona pueda utilizar un browser sin problemas.

• Hardware con capacidades gráficas: Es cada vez más difícil encontrar equipos

ejecutándose utilizando una interfase de texto. Aún los equipos UNIX que operan

tradicionalmente a través de una consola de comandos, ejecutan ahora X-Windows

como ambiente gráfico. Por otro lado, una interfase gráfica es un requisito

indispensable para trabajar con moléculas permitiendo que el usuario las visualice

22

Page 28: Síntesis orgánica asistida por computadora

correctamente. Aunque existen formas de representar moléculas en modo de texto

(por ejemplo el formato SMILES que se describe en un capítulo posterior), su uso es

incómodo y definitivamente resultaría inaceptable para esta aplicación. Por estas

razones, suponemos que el usuario utilizará hardware con capacidades gráficas

para el sistema OSET.

Con esta nueva lista de condiciones, reanalizamos el diseño del sistema OSET,

buscando que se ejecute únicamente utilizando un browser.

Originalmente el WWW permitía únicamente publicar contenido estático, definido

como contenido que se encontraba almacenado en su forma definitiva en los

servidores. Posteriormente se introdujo el estándar Common Gateway Interface (CGI)

para permitir la publicación de contenido dinámico, generado en el momento como

respuesta a una solicitud del usuario (Gundavaram, 1996). Con la utilización de

programas CGI, el WWW dejó de ser únicamente una plataforma para publicación,

para convertirse también en una plataforma para ejecución de aplicaciones. Cualquier

programa cuya salida pueda representarse en WWW por medio del Hypertext Markup

Language (HTML) puede reprogramarse como un CGI y ejecutarse a través del WWW.

La tecnología CGI es la que permite que existan aplicaciones como los

buscadores de información en Internet (Google, Go, Altavista, etc.), sin las cuales

encontrar algún recurso en el WWW sería más difícil que localizar una aguja en un

pajar. Sin embargo, aunque esta tecnología permite hacer cosas muy interesantes,

tampoco es la panacea.

El modelo WWW/CGI recuerda a un sistema mainframe. En este tipo de

sistemas toda la capacidad de procesamiento está centralizada en el equipo servidor

(mainframe), y los clientes son "terminales tontas" que constan de un teclado para

recibir la entrada del usuario y una pantalla para desplegar la salida, pero que no

realizan ningún otro procesamiento (Beekman, 1994).

Para un ejemplo de lo que esto significa en una aplicación implementada en un

CGI, consideremos la siguiente situación. Un usuario realiza una consulta y recibe

como resultado una lista de registros, posteriormente decide que los quiere ordenar

alfabéticamente por ciudad. En ese momento el usuario debe realizar otra consulta al

servidor, que devolverá la lista ordenada (el cliente no ordena la lista localmente).

23

Page 29: Síntesis orgánica asistida por computadora

Aunque esto es perfectamente válido, presenta algunas desventajas: desaprovecha la

capacidad de procesamiento del equipo cliente, sobrecarga de solicitudes al servidor

para prácticamente cualquier acción del usuario, e introduce el retraso de un viaje

redondo por la red para cada solicitud. El efecto final puede resumirse en que para una

aplicación altamente interactiva el usuario recibe una respuesta muy lenta y

probablemente inaceptable.

En consecuencia, para el desarrollo de OSET necesitamos otra tecnología, que

permita transportar un programa a través de Internet y ejecutarlo en el equipo del

usuario, independientemente de la plataforma. La solución a este problema es Java.

Java es una tecnología desarrollada por Sun Microsystems para poder crear

programas que pudieran ejecutarse en una forma homogénea y libre de errores

independientemente de la plataforma de hardware. La idea era utilizar esta tecnología

para producir artículos electrónicos de consumo, pero cuando se popularizó el WWW

los arquitectos de Java vieron un área de oportunidad y reorientaron sus esfuerzos.

Para permitir que un programa escrito en Java pueda ejecutarse

independientemente del hardware, el compilador de Java produce un código

intermedio, neutro en cuanto a arquitectura, conocido como byte code. Para ejecutar

este byte code en cierta plataforma de hardware específica, ésta debe contar con un

componente de software conocido como la Java Virtual Machine (JVM), y un ambiente

de ejecución que provea ciertas funciones básicas.

Sun Microsystems ha liberado JVMs para diversas plataformas de hardware y,

además, ha publicado un documento con especificaciones (Lindholm y Yellin, 1997)

que en teoría permite a cualquier programador crear una JVM compatible. La mayor

parte de los browsers disponibles actualmente incluyen una JVM que les permite

ejecutar un tipo particular de programas de Java conocidos como applets, que

aparecen incrustados en una página HTML.

Pero el byte code y la JVM no son todo lo que ofrece Java. Se trata de un

lenguaje y ambiente diseñados específicamente con requerimientos que se adaptan

muy bien a su distribución a través del WWW. Java está basado en el lenguaje C, pero

realmente se trata de un nuevo lenguaje, fuertemente orientado a objetos (esto significa

que todos los tipos de datos son objetos), y que busca precisamente evitar los "malos

24

Page 30: Síntesis orgánica asistida por computadora

hábitos" de los programadores de C. Algunas otras características interesantes de Java

son:

• Por tratarse de un lenguaje que pretende generar programas portables, Java define

en forma muy precisa todos los tipos de datos, tanto enteros como de punto

flotante, y no permite acceder a ellos en forma indiscriminada como sucede en el

lenguaje C. Lo que esto significa es que una expresión como *(char *)variable_int,

que en C puede devolver ya sea el byte alto o bajo de variable_int dependiendo de

la plataforma de hardware, en Java estaría perfectamente definida ... claro está, si es

que se permitiera. Java no cuenta con apuntadores precisamente para evitar

situaciones como ésta.

• Java procura producir programas seguros y sólidos. El que los programas sean

seguros significa que no pueden acceder a los recursos de la computadora en que

se ejecuten a menos que el usuario lo autorice. Para lograrlo, el byte code se

ejecuta en un ambiente controlado, conocido como el sandbox. Según McGraw y

Felten (1999), la seguridad de Java se implementa en cuatro capas básicas: acceso

restringido al sistema de archivos y a la red; acceso restringido al interior del

browser; un conjunto de reglas para programas byte code que se verifican al cargar

el programa y durante su ejecución, y un sistema para firmar el código. En cuanto a

la solidez del programa, se refiere a la resistencia a fallas. La solidez se origina en

las verificaciones de tipos durante la compilación de programa, se apoya en

características del lenguaje, como la ausencia de apuntadores y la recolección

automática de basura, y termina por un modelo para manejo de excepciones. Un

programa en Java no debería ser capaz de fallar catastróficamente en la

computadora del usuario.

• Desde su origen, Java está pensado para ejecutarse en forma distribuida, por lo

que cuenta con soporte directo para comunicarse por red utilizando diversos

protocolos de Internet. Además, tiene soporte para aplicaciones concurrentes por

medio de ejecución multihilos (multithreaded).

Para el sistema OSET, Java parece ser una solución interesante. Cumple con el

requisito de distribuirse a través de un browser, y poderse ejecutar independientemente

de la plataforma. Es verdad que no todos los browsers cuentan con una JVM, pero esto

25

Page 31: Síntesis orgánica asistida por computadora

se irá corrigiendo naturalmente en el futuro. La independencia de plataforma trae a la

mente algunas ideas excitantes, tales como ejecutar OSET en un PDA tal como un

Palm, que cuenta con un microbrowsery una JVM limitada.

La distribución del sistema se hace automáticamente, sin requerir intervención

del usuario para instalarlo o ejecutarlo. El usuario simplemente se dirige a una página

HTML que contienei el applet OSET, y su browser decide en forma transparente si es

necesario bajar el applet de la red, o si puede ejecutarse a partir de una copia local en

el cache.

Pero no todo es tan maravilloso. Para empezar, las limitaciones que se imponen

a Java por razones de seguridad pueden resultar engorrosas, cuando haya que

explicarle al usuario que no puede almacenar su trabajo en el disco duro local.

Afortunadamente, utilizando algunos programas CGI, aunados con scripts ejecutándose

en el browser, es posible saltar esta restricción en una forma completamente

controlada, que no viola la seguridad del sistema.

Un problema más serio es que hasta este momento no hemos considerado la

dificultad del trabajo computacional que realizará el sistema. Pero una vez que vemos

que las tareas involucradas incluyen trabajo de reconocimiento de patrones, detección

de isomorfismo en grafos, detección y análisis de todos los anillos (ciclos) de la

molécula, etc., podemos suponer que la necesidad de procesamiento será intensa. En

este sentido, la ejecución del byte code Java, que finalmente es un lenguaje

interpretado, puede resultar demasiado lenta.

Por otro lado, el análisis retrosintético requiere una base de datos de

transformadas, que se irá creando gradualmente. La transmisión a través de la red de

esta base de datos y/o de toda la aplicación cada vez que se haga un cambio también

puede resultar lenta.

La obsesión por la velocidad de respuesta está justificada por el comportamiento

de los usuarios. La mayoría de ellos abandonan un sitio de Internet si no obtienen una

respuesta suficientemente rápida (Reynolds, 2000).

Pero aparentemente ya no hay mejores opciones para cumplir con este nuevo

requerimiento de velocidad cambiando de lenguaje o tecnología del lado del cliente. Si

substituimos Java por otro tipo de lenguaje multiplataforma (por ejemplo, C# de

Microsoft, que surgió recientemente para competir con Java), seguirá tratándose de un

26

Page 32: Síntesis orgánica asistida por computadora

lenguaje interpretado. Existen opciones como la compilación Just In Time (JIT) que

toman el byte code ,Java y lo compilan a código nativo justo antes de ejecutarlo en una

plataforma especifica. Pero seguiríamos con el problema de la actualización frecuente

del programa y base de datos, que obliga a la actualización (y recompilación JIT) de

OSET con su consiguiente retraso.

Afortunadamente, una característica de Java nos permite librar este problema.

Como ya se mencionó, Java está diseñado para ejecutarse en un ambiente distribuido,

por lo que tiene integradas rutinas para comunicación eficiente por la red. La propuesta

que surge es diseñar OSET como un sistema cliente/servidor.

El modelo cliente/servidor es el que ya hemos mencionado en el contexto de la

arquitectura del WWW. En su forma más sencilla, este modelo permite partir la carga

de procesamiento de una aplicación en dos diferentes procesos, conocidos como

cliente y servidor (Linthicum, 1997). En la práctica, el proceso servidor se ejecuta en un

sistema de cómputo y espera a que un proceso cliente solicite algún servicio; cuando el

servidor recibe una solicitud, la procesa y envía una respuesta al cliente. Aunque los

procesos cliente y servidor pueden ejecutarse en un mismo equipo, lo más tipico es

que se encuentren en diferentes equipos separados por una red (Stevens, 1990). La

distribución del trabajo normalmente asigna al cliente únicamente la interfase gráfica

(GUI) y la inteligencia suficiente para crear una solicitud, comunicarla al servidor,

analizar los resultados y mostrarlos en una forma apropiada al usuario. Mientras tanto,

al servidor se le asigna la actividad intensa de procesamiento y muy frecuentemente la

capacidad de atender a varios clientes en forma simultánea (Sinha, 1996).

En el caso del sistema OSET, un servidor centralizado puede tener la capacidad

para realizar el análisis retrosintético, con la consecuente carga de procesamiento, y

tener acceso directo (y rápido) a una única base de datos de transformadas, que puede

actualizarse en cualquier momento. El proceso servidor ni siquiera requiere estar

escrito en Java, ya que como tenemos control sobre la plataforma de hardware,

podemos escribir este proceso utilizando un lenguaje que se compile directamente a

código máquina, por ejemplo C, con la consecuente mejora en su desempeño. La única

restricción es que hay que lograr que el proceso servidor (escrito en C) se comunique

con el proceso cliente (escrito en Java); afortunadamente para esto pueden utilizarse

los pro.tocolos del Internet (específicamente, TCP/IP).

27

Page 33: Síntesis orgánica asistida por computadora

En caso de que el servidor requiera más capacidad para procesar la carga de

trabajo impuesta por los clientes, podemos realizar un cambio de hardware en forma

transparente. Si aún con esto el servidor resultara insuficiente, se pueden instalar

varios servidores, ya sea para repartir la carga de los clientes, o para poder procesar en

forma distribuida una solicitud compleja de un cliente específico. El modelo

cliente/servidor nos permite realizar todos estos cambios sin afectar a los clientes de

ninguna forma.

Por otro lado, la aplicación cliente resulta relativamente ligera, dedicándose

únicamente a la captura y despliegue de moléculas y a la administración del árbol

retrosintético.

Con esto llegamos a una arquitectura para el sistema OSET que nos resulta

satisfactoria. A continuación hablaremos un poco más sobre las funciones que

desempeñan el cliente y el servidor, y la forma en que se comunican.

servidor cliente

[ CGls applet de dibujo

HTML

._[ __ se_rv_i_do_r _ _____.1~<::=====:::;:::::::::::::, applet de análisis

HTML

..................... ' ......................... ·

Figura 14 Esquema de la arquitectura del sistema.

Esquema de comunicación cliente/servidor

Como puede verse en la Figura 14, el cliente está clarar:nente dividido en dos

componentes: uno para dibujo y otro para análisis. Del lado del servidor contamos con

un proceso principal para análisis, y varios programas CGI auxiliares.

28

Page 34: Síntesis orgánica asistida por computadora

El usuario inicia su interacción con el sistema introduciendo una molécula

objetivo que desea analizar. Puede dibujar la estructura de la molécula en el momento,

o tal vez ya la haya creado en otro programa.

Para la tarea del dibujo de estructuras, decidimos utilizar un applet disponible

gratuitamente llamado MarvinSketch, de la compañía ChemAxon (Csizmadia, 2000).

Este applet y su documentación están disponibles en http://www.chemaxon.com. Si

fuera necesario, este componente de software puede intercambiarse por otro similar

que realice la misma función (de hecho, esto ya lo hicimos en una ocasión;

anteriormente utilizábamos otro applet).

Para poder leer moléculas generadas por otros programas, aprovechamos el

formato MOLFILE (Dalby et al., 1992), que consiste básicamente en una lista de

átomos con su coordenadas espaciales, seguida de una lista de enlaces, como puede

verse en la Figura 15. Este formato es globalmente aceptado para el intercambio de

información entre programas que manejan estructuras químicas (ej. ISISDraw,

ChemSketch, ChemWin, etc.) El app/et MarvinSketch incluye funciones públicas para

importar y exportar moléculas en formato MOLFILE. El problema es que el applet no

puede acceder al sistema de archivos local para grabar o leer el archivo

correspondiente. Afortunadamente, los programas CGI pueden saltar esta restricción,

siempre y cuando la comunicación sea autorizada por el usuario y se envíe

directamente al servidor.

4 4

4 1.2125 -3.7500 0.0000 e o 2.0375 -3.7500 0.0000 e

,l, 1.6250 -3.0338 0.0000 e 1.6275 -2.2054 0.0000 o 2 1 1 3 2 1 1 3 1 3 4 2 M END

Figura 15 Representación de la estructura de la molécula de ciclopropanona (izquierda) en el formato

MOLFILE (derecha).

Para leer un archivo del sistema de archivos local, se puede utilizar una forma

que incluya un comando HTML <input type=file>, que es interpretado por el browser

como una instrucción para capturar el nombre de un archivo; al enviar la forma, se

transmite al servidor el contenido del archivo seleccionado por el usuario. Utilizando

JavaScript (un lenguaje para ejecución de comandos limitados dentro de un browser) y

29

Page 35: Síntesis orgánica asistida por computadora

un CGI apropiado, se puede devolver el contenido del archivo al equipo cliente,

importándolo al appfet de dibujo; este proceso se muestra en la Figura 16 . .. ... ... ... ...... ... . .. . .. . .. . .. '.. .. . .................................................. . i servidor ! : cliente : . . . . : : : : ·-. . . . . . applet de . ' . . script LOAD . . . .

dibujo : : . . ' . . . . . . . . . . . ~~ HTML . . . . : : . . . . . . . . . . . .

G)

• • ! • : LOADMOL (C~._-:_M_O_~-;-IL_E __ ...,.\-+- (

', MOLFILE

MOLFILE

@

forma de lectura de archivo

..

HTML 0

.... Íclose ,,•""'•,, .. !

ventana temporal

HTML

. . .................................... , .................................................. :

Figura 16 Lectura de MOLFILE desde sistema de archivos local.

Para grabar un archivo en el sistema de archivos local puede utilizarse

JavaScript y una forma HTML para enviar la información de la molécula por la red al

servidor a un CGI que la rebote indicando que se trata de un archivo de datos. El

usuario verá entonces una ventana preguntándole si desea grabar la información, y con

qué nombre; este proceso se muestra en la Figura 17.

servidor

SAVEMOL(~ MOLFILE ....

~

G)

. . : x-molfile (tipo MIME) :

cliente

applet de script SAVE +- dibujo

HTML

abrir/guardar

browser

Figura 17 Escritura de MOLFILE a sistema de archivos local.

30

Page 36: Síntesis orgánica asistida por computadora

Una vez que la interfase para captura y almacenamiento de molécuias está

dominada, podemos definir cómo OSET realizará su labor principal: el análisis

retrosintético. Para iniciar el análisis, se utiliza nuevamente JavaScript y un programa

CGI para enviar la información molecular al servidor, que contesta indicándole al cliente

que debe invocar al applet de navegación, llamado CAOS (ver Figura 18) . ...... ························· .... ······················· ............................... . . . . . . . . : servidor : : cliente : . . . . . . . . . . . . . . . . . . . . : STARTAN (CGl)J ... _...._: _M_O_L_F_IL_E ___ : -- script ANALYZE ._ applet de :

G) dibujo

¡ save H TML j ____ _

L-MOLFILij ®[ ¡

SERVER J ~

:comando "LOAD" @( applet CAOS ....

MOLTRAN 0\

i load

"'

HTML . . \,,, ............................... · \ .................................................... .. :

Figura 18 Inicio del análisis retrosintético.

• El applet CAOS inmediatamente se comunica con el proceso servidor (que por

una no muy afortunada decisión se llama SERVER) para solicitar la molécula de

trabajo. La comunicación entre CAOS y SERVER se realiza utilizando sockets. La

interfase de sockets de Berkeley (abreviado como BSI; descrita a detalle por Comer y

Stevens, 1996) abstrae las dificultades inherentes a la comunicación por red. En la

medida de lo posible, un socket se comporta como si fuera un archivo común y

corriente: se puede abrir, leer, escribir y cerrar. En otros aspectos no se puede

mantener la semejanza (por ejemplo, no se le puede pedir a un archivo que espere una

conexión).

Los sockets utilizados por OSET están configurados en modo orientado a

conexión. Lo que esto significa es que el intercambio de datos es confiable: un

protocolo de nivel intermedio se encarga de verificar la comunicación, solicitando

retransmisión si fuera necesaria por un error en el medio, asegurándose de que los

paquetes vengan en orden, etc. Los sockets orientados a conexión utilizan el protocolo

31

Page 37: Síntesis orgánica asistida por computadora

TCP, aunque en teoría la BSI es suficientemente abstracta como para utilizar otra

familia de protocolos completamente diferente.

La operación del servidor en cuanto a comunicaciones es la siguiente:

• Se inicializa un socket TCP en modo pasivo (es decir, que espera una conexión).

• Cuando se recibe una conexión, se genera un nuevo socket para comunicarse con

el cliente, y un subproceso ligero (thread o hilo) para que lo atienda. El servidor

continúa esperando conexiones.

• El subproceso recibe uno o más comandos del cliente, los ejecuta y devuelve los

resultados. Cuando el cliente indica que quiere terminar la comunicación, se cierra

el socket y se cancela el subproceso.

El comportamiento descrito es bastante estándar para cualquier servidor

concurrente, excepto que normalmente los procesos que se ejecutan para darle

servicio a los clientes son programas completos, cada uno con sus propios recursos y

almacenamiento independiente en memoria. En este caso decidimos utilizar

subprocesos ligeros o threads porque como estos comparten los recursos y memoria

con el programa principal (Northrup, 1996), podemos realizar una sola vez la carga y

preprocesamiento de la base de datos de transformadas, mejorando el tiempo de

respuesta para el cliente.

Para la transferencia de comandos o datos entre el cliente y servidor utilizamos

un protocolo privado de comunicación a través del puerto 6000/TCP (aunque esto es

configurable). Nuestro protocolo está basado actualmente en comunicación por texto

(similar a otros protocolos como SMTP, POP3, FTP, etc.) para permitirnos realizar

pruebas del sistema con un cliente TELNET. Para mejorar el desempeño, en cualquier

momento podemos cambiar a un protocolo binario, que transmita la información de

manera más eficiente.

Los comandos a los que responde el servidor se describen a continuación. La

función de estos comandos se irá aclarando a medida que se explique el

funcionamiento del servidor y cliente.

• LOAD [filename]: Lee del almacenamiento local del servidor el archivo filename, lo

analiza como si fuera una molécula en formato MOLFILE, y lo transmite al cliente en

32

Page 38: Síntesis orgánica asistida por computadora

un formato propietario para intercambio de moléculas, que llamamos MOL TRAN y

se describe más adelante.

• ANAL YZE [mol]: Recibe la información de una molécula mol en formato MOL TRAN

y realiza un paso de análisis retrosintético, devolviendo la lista de posibles

transformadas y precursores en el mismo formato.

• ANALAUX [atom] [mol]: Al igual que la opción anterior, analiza la molécula mol, pero

en este caso busca aplicar una transformada auxiliar (FGI o FGA) sobre el átomo

atom.

• ANALFGO [bond] [mol]: Igual que las anteriores, pero busca aplicar una

transformada de desconexión sin retrón (FGO) sobre el enlace bond.

• RXNINFO [num]: pide información detallada sobre una transformada particular de la

base de datos, para poder presentarla al usuario.

• CAS [smiles]: consulta una base de datos de compuestos para ver si encuentra una

coincidencia para la molécula smiles (en notación lineal). Si se encuentra la

molécula, se podrá presentar al usuario su nombre correcto y su número de

identificación CAS (Chemical Abstracts Service registry number), con el que puede

averiguarse su costo.

• SA VETREE [tree]: recibe del cliente una síntesis completa en forma de árbol tree

(en un formato propietario TREETRAN que se describe más adelante) y devuelve

una representación gráfica en formato ChemSketch (.SK2), que puede editarse o

imprimirse utilizando diversos programas.

• START [mol]: escribe a disco la molécula mol (en formato MOLFILE) y después

invoca el comando LOAD para devolverla al cliente convertida a formato MOLTRAN.

• QUIT: es la forma en que el cliente puede indicarle al servidor que ya no necesita

más procesamiento. El servidor responde terminando el thread.

• HELP [command]: sin parámetros despliega una lista de los comandos permitidos.

Con el nombre de un comando (command) como parámetro, presenta una breve

descripción de su modo de operación.

La respuesta del servidor a una solicitud del cliente empieza con una línea

indicando el status. Si el comando se pudo completar, la línea empieza con el signo +

33

Page 39: Síntesis orgánica asistida por computadora

(ej. "+ OK"); de lo contrario, empieza con el signo - (ej. "- File not found"). Esto le

permite al cliente interpretar rápidamente la respuesta.

Varios de los comandos del servidor tienen como parámetro o resultado

información molecular extendida en un formato que bautizamos MOL TRAN. Aunque

este formato está basado en el MOLFILE, contiene información adicional para permitir

el correcto y eficiente funcionamiento de OSET. A continuación se describe el formato

MOLTRAN1•

<atorn> <bond>

xpos ypos Z charge atoml atom2 arder

<mol> : : = STARTMOL ATOMS numatoms

<a torn>numatoms BONOS numbonds

<bond>numbonds

[SMILES "smiles"] [CMPLX complexity] [NAME "dbname"]

ENDMOL <transforrn> ::=

STARTTRANSFORM HEADER

RXN numrxn RATING rating SIMPLIFICATION simplification [ECHO \\echo"]

MOLS nummols <mol>nummols

ENDTRANSFORM <transforrnlist> : :=

STARTTRANSFORMLIST TRANSFORMS numtrans

<transform>n=tuns ENDTRANSFORMLIST

Las dos estructuras básicas son el átomo (descrito por su posición [x,y), su

número atómico Z y su carga) y el enlace (descrito por los dos átomos que conecta y su

orden). Estas estructuras nunca se transmiten en forma independiente, por lo que no

incluyen textos de control.

1 Se indica el nombre de la estructura entre llaves (ej. <atom>), seguida de su contenido. Los textos en negritas son parte del protocolo de comunicación; los textos en itálicas indican parámetros variables. Los corchetes se utilizan para elementos opcionales.

34

Page 40: Síntesis orgánica asistida por computadora

La siguiente estructura, y la más importante, es la molécula <mol>. La

descripción de una molécula incluye como mínimo listas de átomos y enlaces.

Opcionalmente se puede agregar un SMILES (descripción textual de la molécula, se

explica en la página 50), una estimación de complejidad y un nombre para la molécula,

extraído de una base de datos. Para transmitir la molécula por la red, se incluyen varios

textos para control, definidos en el formato.

Al aplicar una transformada específica, el resultado es una lista de precursores

químicos. La estructura que describe la transformada nos indica el número de la

transformada aplicada (índice a la base de datos), varios datos para evaluarla (rating y

simplificación), posiblemente una lista de comentarios sobre su aplicación, y lo más

importante, una lista de las moléculas de los precursores.

Durante un paso de análisis, el servidor aplica varias transformadas para sugerir

diferentes rutas en el árbol retrosintético. Por esta razón, la respuesta a un comando de

análisis es una lista de las transformadas aplicadas, donde cada transformada se

describe como se explicó en el párrafo anterior.

Otro formato creado para la transmisión por la red de información molecular fue

el TREETRAN, que permite enviar árboles sintéticos completos. Para esto, se recorre

el árbol en forma recursiva empezando por la raíz (molécula objetivo) y enviando la

información correspondiente a cada nodo, como se muestra a continuación.

<treenode> ::= NODE depth width smiles

<mol> [STARTPRECS

PRECS numprecs <t reenode>numprecs

ENDPRECS]

Por medio de los datos depth y width se describe el tamaño del subárbol

completo correspondiente a un nodo; esta información ya la tiene el cliente porque la

utilizó para desplegar el árbol en la pantalla. El árbol puede reconstruirse fácilmente en

forma gráfica del lado del servidor, y escribirse a disco sin demasiado procesamiento.

En este capítulo se ha descrito el proceso de diseño del sistema OSET, que nos

llevó a una arquitectura cliente/servidor, con el cliente implementado como un applet

JAVA, y el servidor como un programa en ANSI C. Se describió la forma en que se

35

Page 41: Síntesis orgánica asistida por computadora

conectan estas partes, y el protocolo de comunicación utilizado para permitir que

interactúen a través de Internet.

En los próximos capítulos se explica a más detalle el funcionamiento del servidor

y el cliente, incluyendo los problemas específicos que atacan y los algoritmos utilizados

para resolverlos.

36

Page 42: Síntesis orgánica asistida por computadora

CAPÍTULO 3: SERVIDOR OSET - PERCEPCIÓN

El servidor OSET recibe del cliente un grafo que representa la molécula a

analizar. A partir de esta lista de átomos y enlaces, es necesario identificar las

características estructurales de interés químico, que indicarán más adelante cuáles

transformadas retrosintéticas puede aplicarse y cómo.

La etapa de percepción se divide en seis partes: identificación de anillos,

canonización, búsqueda en base de datos de materias primas, clasificación de átomos,

identificación de grupos funcionales y cálculo de complejidad molecular. Terminando

esta etapa, tendremos suficiente información estructural para pasar al análisis

retrosintético de la molécula.

Identificación de anillos

La identificación de los anillos es una de las partes fundamentales de la

percepción de una estructura química, ya que la presencia de anillos puede influir en

las propiedades químicas o físicas de los compuestos orgánicos (Gasteiger y Jochum,

1979). Desde el punto de vista de CAOS:

• Es necesario identificar los anillos aromáticos de la molécula, ya que tienen una

reactividad característica que se debe tomar en cuenta para el análisis retrosintético.

• Existen muchas transformadas cuyo retrón incluye un anillo. Por ejemplo, la

cicloadición de Diels-Alder, la anillación de Robinson, la adición de carbenos a

dobles enlaces, la epoxidación, así como las diversas reacciones de síntesis de

sistemas heterociclicos.

• Los anillos son el principal elemento de complejidad topológica, por lo que deben

ser detectados para poder estimar la complejidad de la estructura, así como para la

identificación de los enlaces estratégicos.

37

Page 43: Síntesis orgánica asistida por computadora

Desde 1857, en que Cayley utilizó la teoría de grafos para encontrar el número

de isómeros de CkH2k+2, se estableció que esta teoría permite un manejo simplificado

de los problemas de Química (Balakrishnan y Ranganathan, 2000).

Lo que para un químico es un "anillo" es lo que conocemos en teoría de grafos

como un ciclo. La identificación de anillos puede en principio aproximarse a dos

problemas: encontrar el conjunto de la base de ciclos de un grafo, o encontrar el

conjunto de todos los ciclos elementales de un grafo. Sin embargo, como veremos más

adelante, lo que se necesita desde un punto de vista químico no es ninguno de estos

dos conjuntos, sino un intermedio.

A continuación se presentan algunas definiciones básicas, tomadas de Berge,

1991 y Vismara, 1997:

• Ciclo: Para un grafo no dirigido (V,E), donde V es el conjunto de vértices y E el de

las aristas, un ciclo se define como una secuencia de aristas µ=(e1,e2 , ... ,eq), tal que

cada arista ek (1 <k<q) tiene un vértice en común con la arista anterior ek.1 y el otro

vértice en común con la arista siguiente ek+1; no se repite ninguna arista en la

secuencia, y el vértice inicial y final son el mismo. También puede definirse como un

subgrafo en el que el grado de cada vértice (número de aristas que lo incluyen) es

par.

• Ciclo elemental: Un ciclo en el que no se recorre más de una vez ningún vértice,

excepto el vértice inicial que es igual al vértice final. Visto de otra manera, un ciclo

elemental es aquel en el cada vértice tiene grado 2. Un ciclo no elemental puede

representarse como la unión de dos o más ciclos elementales.

• Base de ciclos: Un conjunto (µ1, µ2, ... , µk) de ciclos elementales independientes tal

que cualquier ciclo del grafo puede expresarse como la suma de uno o más de los

ciclos del conjunto, donde se define la "suma de ciclos" como la diferencia simétrica

de conjuntos: para los ciclos µ¡, µi, su suma se representa como (µ¡ u µi)\(µ¡ n µi)).

Un grafo puede tener múltiples bases de ciclos.

• Número ciclomático: la dimensión del conjunto de la base de ciclos (k). Puede

calcularse corno IEI - IVI + p, donde p es el número de componentes conectados

independientes del grafo. Para el caso de la química orgánica, p siempre es igual a

1 (aun para compuestos iónicos que tienen varias partes, sólo una de ellas suele ser

38

Page 44: Síntesis orgánica asistida por computadora

orgánica), y el número ciclomático se conoce como número de Frérejacque2 y se

expresa como #anillos = #enlaces - #átomos + 1. El número total de ciclos en el

grafo es menor a 2\ que es la magnitud del conjunto potencia de la base de ciclos.

Para encontrar una base de ciclos, un algoritmo sencillo es realizar una

búsqueda a profundidad primero (DFS), y al encontrar una arista hacia atrás agregar el

ciclo correspondiente a la base; este algoritmo es O(IVl+IEI). A partir de una base de

ciclos se pueden generar todos los ciclos elementales del grafo por combinaciones

lineales; esto puede realizarse como 2k sumas de conjuntos de tamaño IEI.

El problema es que en la base de ciclos encontrada siguiendo el algoritmo

anterior puede suceder que, para i, j arbitrarios, la longitud de (µ¡ + µi) sea menor que la

longitud de(µ¡). Por ejemplo, en la Figura 19 (representación de la molécula de indano),

podemos ver tres ciclos de longitud 5, 6 y 9 respectivamente. Existen tres posibles

bases de ciclos: la que incluye los ciclos de longitud 5 y 6; la que incluye los ciclos de

longitud 5 y 9; y la que incluye los ciclos de longitud 6 y 9. Sin embargo, los anillos

relevantes desde un punto de vista químico son únicamente los de longitud 5 y 6, por lo

que se vuelve necesario encontrar esa base de ciclos en particular.

co Figura 19 Estructura del indano.

Lo que se necesita es encontrar una base mínima de ciclos, definida como

aquella base de ciclos en la que la suma de las longitudes de sus miembros es mínima.

Los químicos conocen esta base mínima de ciclos como el conjunto mínimo de anillos

mínimos (Smallest Set of Smallest Rings, o SSSR). Se publicaron múltiples algoritmos

de diversa efectividad para encontrar este conjunto (Gasteiger y Jochum, 1979; Roos­

Kozel y Jorgensen, 1981; Figueras, 1996), hasta que Horton (1987) propuso un

algoritmo para obtenerlo en tiempo polinomial O(IEIIVlk\

Sin embargo, el SSSR presenta varios problemas desde un punto de vista

químico:

2 Frérejacque, 1939, calcula el número de anillos en una molécula mediante un análisis matemático, pero

39

Page 45: Síntesis orgánica asistida por computadora

• En estructuras poliédricas, el SSSR omite arbitrariamente anillos con valor químico.

Por ejemplo, en el cubano (Figura 20), que es una molécula con forma cúbica, el

SSSR incluye únicamente cinco ciclos (cinco caras del cubo, que pueden verse en

su proyección plana; este SSSR es una base de ciclos perfectamente válida,

pudiendo generar los 28 ciclos elementales). Pero por un argumento de simetría

puede observarse que las seis caras son idénticas, con el mismo valor químico, y

por lo tanto deberían incluirse todas.

a b

Figura 20 Cubano en dos representaciones: a) proyección tridimensional; b) proyección de Schlegel

(plana).

• Para compuestos heterocíclicos, es necesario agregar al SSSR algunos anillos con

importancia sintética. Por ejemplo, los tres compuestos mostrados en la Figura 21,

que desde un punto de vista de teoría de grafos serían equivalentes, tienen

diferente valor químico. En la molécula a, únicamente son importantes los tres

anillos de longitud 6 (equivalentes al SSSR), mientras que en b y e también es

importante el anillo exterior, de longitud 12. (Fujita, 1988).

a b e

Figura 21 Tres estructuras "triclclicas". En la estructura a el anillo exterior de doce miembros no se

considera de interés químico, pero en b y en e sr.

• El SSSR por definición no incluye estructuras químicas con anillos fusionados (ej.

indol, quinolina, ver Figura 22).

nunca presenta la fórmula que lleva su nombre.

40

Page 46: Síntesis orgánica asistida por computadora

O) H

co indol quinolina

Figura 22 Estructuras con anillos fusionados.

Para evitar el primer problema, es necesario considerar un conjunto de ciclos

relevantes como la unión de todas las posibles bases mínimas de ciclos (Vismara,

1997). Esta es la solución definitiva para un SSSR completo desde un punto de vista

teórico, y puede obtenerse en tiempo polinomial. Sin embargo, para fines de análisis

retrosintético, todavía deja mucho que desear.

La discusión sobre como encontrar el conjunto de anillos que deben

considerarse para realizar un análisis retrosintético continúa. Para OSET, decidimos

basarnos en Fujita, 1988, que define un conjunto esencial de anillos esenciales

(Essential Set of Essential Rings, ESER) partiendo del conjunto de todos los anillos, y

eliminando lo que define como anillos amarrados, multi-amarrados y dependientes. El

ESER soluciona los dos primeros problemas mencionados arriba, a cambio de requerir

la generación del conjunto de todos los anillos. Aunque el ESER tampoco incluye

anillos fusionados, posteriormente podemos encontrarlos a partir del conjunto producto

P(ESER).

OSET separa la percepción de anillos en cuatro fases: detección de todos los

anillos, detección del ESER, detección de aromaticidad, e identificación de anillos.

Detección de todos los anillos

Como ya se ha mencionado, es posible generar todos los ciclos elementales de

un grafo a partir de su base de ciclos, pero esto requiere cuando menos O(IEIIVl2\ Un

algoritmo alternativo, propuesto por Hanser, Jauffret y Kauffmann (1996), obtiene la

lista de todos los ciclos elementales sin requerir la obtención de la base de ciclos.

El algoritmo de Hanser et al. va colapsando el grafo de la molécula, eliminando

los vértices uno a uno, y simultáneamente calcula la cerradura transitiva del grafo,

como se ve en la Figura 23.

41

Page 47: Síntesis orgánica asistida por computadora

a

[aJ~a-b]

e b [b-c)

-b a

[a-e]/\ v[a-b-c]

e

-e o [a-b-c-a]

Figura 23 Colapsado de grafo para encontrar ciclos.

Cada vez que se elimina un vértice que cuente con un lazo reflexivo, este lazo

representa un ciclo en el grafo original. La complejidad de este algoritmo puede

asemejarse a la de encontrar la cerradura transitiva de un grafo, que es O(IVl3)

(Gormen, Leiserson y Rivest, 1990), lo que concuerda con el análisis de Hanser et al.

para casos promedio. Sin embargo, para casos degenerados (ej. cliques), el tiempo de

ejecución explota como 2k, como comprobamos al tratar de aplicar el algoritmo a la

molécula del buckminsterfullereno (C60 , k=31, Figura 24) Afortunadamente, las

moléculas que OSET puede llegar a analizar no tienen esta complejidad.

Figura 24 Buckminsterfullereno en representación tridimensional y proyección de Schlegel.

A continuación se presenta el algoritmo en forma de pseudocódigo

FINDALLRINGS(graph): rings <- {} CONVERT(graph, V, E) while V != {} choose x in V (lower to higher conectivity) REMOVE(x,V,E,rings)

CONVERT(graph,V,E): V <- {}; E <- {}; foreach vertex x in graph

V<- V U {x} foreach edge (x,y) in graph

p(x,y) <- (x,y) E<- E U {p(x,y)}

42

Page 48: Síntesis orgánica asistida por computadora

REMOVE(x,V,E,rings): foreach p(x,y) lx!=y, p(x,z) lx!=z in E"2

if p(x,y) and p(x,z) = {x} then p(y,z) <- p(x,y).p(x,z) E <- E U { p (y, z) }

foreach p(x,y) in E if x=y then

rings <- rings U {p(x,y)} E<- E - {p(x,y)}

V<- V - {x}

Detección del ESER

A partir del conjunto de todos los anillos, el algoritmo de Fujita (1988) encuentra

el ESER eliminando aquellos anillos que considera sin valor para el análisis

retrosintético. Su algoritmo tiene las siguientes fases:

• Detectar todos los k anillos (como ya se explicó en la sección anterior) [O(IVl3) en

promedio, 0(2k) en el peor de los casos]

• Ordenar la lista de k anillos en forma ascendente por tamaño [O(k·log(k))]

• Examinar cada anillo y determinar su clase; puede ser normal (sólo incluye átomos

de carbono), heterogéneo (puede incluir nitrógeno, oxígeno, fósforo y azufre), o

anormal (incluye algún otro tipo de átomo) [examina cada átomo, O(IVI)].

• Examinar cada anillo y determinar si está amarrado (tied), es decir, que existe un

enlace que no es parte del anillo y que conecta dos átomos del anillo [examina cada

átomo contra sus vecinos inmediatos, O(IVI)].

• Examinar cada anillo y ver si es dependiente, es decir, que sus enlaces pueden

cubrirse utilizando el conjunto de anillos amarrados que sean de su misma clase y

de tamaño menor [examina cada anillo contra todos los demás, O(k2)].

• Incluir en el ESER los anillos que no sean amarrados ni dependientes [O(k)].

Como puede observarse, la parte más compleja del algoritmo es encontrar todos

los ciclos.

Una vez que se determina el ESER, para cada anillo de la lista se calcula un

valor hash para permitirnos identificar rápidamente la composición del anillo sin tener

que examinarlo a detalle. Este valor hash se calcula como:

43

Page 49: Síntesis orgánica asistida por computadora

.'1:e(rtn¡:)

hash = n prime(ring[i]) 1=0

donde ring[i] es el número atómico del átomo i del anillo; size(ring) es el

tamaño del anillo, y prime es una secuencia de números primos. Aplicando en forma

inversa el teorema fundamental de la aritmética (Silverman, 1997), el producto de una

secuencia de primos da un mapeo único contra los enteros (dos secuencias que

contengan diferentes números primos al multiplicarse no pueden darnos el mismo

número entero).

Sin embargo, este valor hash no identifica en forma única el anillo porque, como

consecuencia de la conmutatividad de la multiplicación, ignora las posiciones de los

átomos: nos permite distinguir rápidamente entre un anillo CCCCCN y un anillo

CCCCCC, pero no entre CNCNCC y CNCCNC. Aún así, este paso es poco complejo y

facilita la identificación de los anillos más adelante.

Detección de aromaticidad

Una vez que se tienen todos los anillos del ESER, es necesario determinar

cuáles de ellos son aromáticos.

Los anillos aromáticos presentan el fenómeno de resonancia, en el que la

molécula es un híbrido entre diversos estados o formas resonantes; esto les da la

reactividad especial que se mencionó en el capítulo 1, y simultáneamente dificulta su

identificación, ya que su representación gráfica o en formato MOLFILE muestra

únicamente uno de los estados. Por ejemplo, en la Figura 25 se muestran dos formas

resonantes del naftaleno; su representación en forma de grafo nos dirá que no existe

isomorfismo, cuando en realidad se trata de la misma molécula.

Figura 25 Dos formas resonantes del naftaleno. En qulmica se acostumbra el uso de la flecha de dos

puntas para indicar la resonancia.

Desde un punto de vista químico, para ser aromático, un compuesto debe tener

" ... un anillo continuo de orbitales 1t superpuestos, en una configuración planar [ ... ] una

vez cubiertos estos requisitos se aplica la regla de Hückel" (Wade, 1993). Los dos

44

Page 50: Síntesis orgánica asistida por computadora

primeros criterios resultan difíciles de determinar, por lo que limitamos el examen de

aromaticidad a anillos con cinco, seis o siete átomos, ya que puede suponerse que son

planos. La regla de Hückel dice que " ... el número de electrones 1t en el sistema cíclico

es (4N+2), donde N es un entero" (Wade); esta regla es fácil de aplicar suponiendo que

sepamos cuantos electrones 1t hay en el anillo. 3

Nuestro algoritmo para detectar la aromaticidad de un anillo es el que se

presenta a continuación, basado en una propuesta de Weininger (1988). Desde un

punto de vista químico no es totalmente riguroso, ya que ignora los anillos aromáticos

con más de siete átomos o menos de cinco, y no considera factores como la

electronegatividad de los átomos. Sin embargo, se trata de una definición de trabajo

que ha funcionado bien en el tipo de problemas que ataca OSET.

Si el anillo no tiene entre cinco y siete átomos, no es aromático. FIN.

Para cada átomo: Si el átomo participa en un solo doble enlace,

contribuye con un electrón 1t

Si el átomo no participa en ningún doble enlace, dependiendo del tipo de átomo:

Nitrógeno sin carga positiva, contribuye con dos electrones 1t.

Oxígeno o azufre, contribuye con dos electrones 1t.

Carbono, dependiendo de su carga: Negativa, participa con dos electrones 7t

Positiva, participa con O electrones 7t

y un "hueco"

3 Los electrones 1t son los que se encuentran fuera del plano del anillo. Para los fines de nuestro análisis, existen dos tipos de electrones 1t.

1) Los que participan en enlaces dobles. Desde el punto de vista de estructura electrónica, un enlace doble no es equivalente a dos enlaces sencillos, sino que se compone de dos enlaces diferentes: 1t y cr. El enlace cr se encuentra en la linea recta definida por los dos átomos enlazados, mientras que el enlace 1t

se encuentra en dos rectas paralelas. Cada átomo en un enlace doble contribuye al sistema con un electrón 1t.

2) Los electrones no compartidos. Si recordamos la regla del octeto, un átomo combinado suele tener ocho electrones en su órbita externa (con excepción del hidrógeno que sólo tiene capacidad para dos electrones). Considerando que cada enlace químico involucra dos electrones, un elemento tetravalente como el carbono ocupa todos sus electrones en enlaces. Pero elementos con menor valencia como el oxigeno (divalente) y el nitrógeno (trivalente) no utilizan todos sus electrones. Los electrones sobrantes, llamados electrones no compartidos, también pueden participar como electrones 1t en un ciclo aromático. Hay que notar que un átomo puede contribuir con un máximo de dos electrones 1t de esta manera.

45

Page 51: Síntesis orgánica asistida por computadora

El anillo es aromático hasta que se demuestre lo contrario

Si alguno de los átomos no participa con electrones o huecos, el anillo no es aromático.

Si la cuenta de electrones TI no es igual a 6 (4N+2 con N=l), el anillo no es aromático.

Identificación de anillos

Una vez que tenemos todos los anillos y conocemos su aromaticidad, podemos

identificar aquellos que son de especial interés sintético. Para esto, se compara cada

anillo contra una lista de estructuras de interés. Estas estructuras están definidas en un

archivo externo (rings.chm) para permitir que se agreguen a medida que se vayan

necesitando.

Por ejemplo, definimos el ciclohexeno (anillo de 6 carbonos con un doble enlace,

mostrado en la Figura 26) como:

cyclohexene = "C=CCCCC", 10

donde la expresión se compone del nombre del patrón de interés, seguida por su

definición en forma de cadena, y un valor relativo de complejidad. Para compuestos

aromáticos como la piridina (anillo aromático de cinco carbonos y un nitrógeno,

mostrado en la Figura 26), se utilizan letras minúsculas y no es especifican los enlaces:

pyridine = "nccccc", 25

o o N

ciclohexeno piridina

Figura 26 Estructuras del ciclohexeno y de la piridina.

El algoritmo de identificación compara la aromaticidad y valor hash de un anillo

del ESER contra cada patrón. Si se encuentra una coincidencia, aún falta examinar a

detalle el anillo para determinar si el orden de los átomos y enlaces es el mismo; para

esto se generan todas las rotaciones del anillo a examinar (2xsize(ring)) y se comparan

contra el patrón. En algunos casos puede haber múltiples coincidencias (ej. en el

ciclohexano = "CCCCCC" habría 12, mostradas en la Figura 27), que se registran en

46

Page 52: Síntesis orgánica asistida por computadora

forma independiente, para tomarlas todas en cuenta al momento de ejecutar una

transformada. 1 2 3 4 5 6 602 103 204 305 406 501

5 3 6 4 1 5 2 6 3 1 4 2

4 5 6 1 2 3

1 2 3 4 5 6 206 301 402 503 604 105 3 5 4 6 5 1 6 2 1 3 2 4

4 5 6 1 2 3

Figura 27 Las doce rotaciones del ciclohexano.

Una vez que se han identificado todos los anillos sencillos, se buscan estructuras

de anillos fusionados. El patrón para este tipo de estructuras se describe como la unión

de dos o más anillos simples, especificando para cada anillo un enlace de fusión. Por

ejemplo,

indo le (pyrrole,A=[S,4]) (benzene,A=[2,3]) ,40

4 50~3 6 ~ 2

benceno

4 3

• sÜ 2

N 1 H

pirrol

co N H

indol

Figura 28 Descripción del indol como fusión del benceno con el pirrol.

El algoritmo para identificación recorre la lista de anillos de la molécula,

buscando el primer elemento del anillo fusionado (en el caso del ejemplo, pirrol). En

caso de encontrarlo, repite la búsqueda en forma recursiva para los demás elementos

(en este caso, benceno). Una vez que encuentra una combinación válida, compara la

intersección de los múltiples anillos con la especificada en el patrón (en este caso, los

átomos 5 y 4 del pirrol deben coincidir con los átomos 2 y 3 del benceno, como se

muestra en la Figura 28). Aunque en principio la idea es sencilla, la implementación de

este algoritmo resulta bastante enredada.

47

Page 53: Síntesis orgánica asistida por computadora

Canonización

OSET se encuentra en múltiples ocasiones con el problema de determinar si dos

estructuras moleculares son iguales. Esto se necesita para eliminar duplicados después

de aplicar una transformada, limitando la explosión del árbol retrosintético, y también se

utiliza para realizar búsquedas en bases de datos de materias primas.

El determinar si dos grafos son iguales (o si tienen isomorfismo) es un clásico

problema NP-completo. Afortunadamente, para el caso específico de los grafos

correspondientes a moléculas orgánicas, es posible canonizarlos, obteniendo una

representación única para cada molécula, con un algoritmo polinomial O(IVl2 loglVI).

El algoritmo de canonización que utilizamos es el propuesto por Weininger, D.,

Weininger, A. y Weininger, J.L. (1989). Lo que ellos sugieren es dividir los átomos de

la molécula en clases de equivalencia y simultáneamente ordenarlos en "rangos". Cada

clase de equivalencia incluye los vértices del grafo que sean topológicamente

equivalentes.

La búsqueda combinatoria para determinar las clases de equivalencia tendría

una complejidad O(max(IVl,IEI)!), correspondiente al problema NP mencionado. Sin

embargo, utilizando únicamente búsquedas locales (comparando un vértice contra sus

vecinos), es posible evitar este nivel de complejidad. La búsqueda local nos da una

visión limitada del grafo, pero para nuestros fines es suficiente.

El primer paso para poder canonizar una molécula es determinar un orden para

sus átomos, basado en características invariantes, por ejemplo: número de conexiones,

número de enlaces a átomos diferentes al hidrógeno, número atómico, carga, número

de átomos de hidrógeno asociados, etc. Las clases de equivalencia generadas se

numeran secuencialmente. Para una molécula específica este orden será siempre el

mismo, pero puede suceder que dos moléculas diferentes presenten el mismo orden,

por lo que no es suficiente para una clasificación única.

A continuación, para cada átomo de la molécula se examinan sus vecinos, para

producir una diferenciación que nos conduzca a una función biyectiva (cada molécula

debe tener una sola representación canónica, y cada representación canónica debe

corresponder a una sola molécula). La primera idea que surgió fue substituir el rango

de cada átomo por la suma de sus vecinos (propuesto por Morgan, 1965, y utilizado

ampliamente para indexar el Chemical Abstracts), pero esta función puede resultar

48

Page 54: Síntesis orgánica asistida por computadora

ambigua (ej. 2+3=1 +4=5, al realizar la suma perdemos información sobre si los vecinos

eran de clases 2,3 o de clases 1,4). Pero aplicando el teorema fundamental de la

aritmética (mencionado en la página 44), podemos resolver el problema (2x3=6, que es

diferente de 1 x4=4; además, para cada número entero existe una y sólo una

combinación de números primos que lo pueden generar por medio de la multiplicación).

Para aplicar este paso, se substituye el rango de cada átomo por el número

correspondiente en la secuencia de primos (ej. p[1]=2, p[2]=3, p[3]=5, p[4]=7, p[5]=11,

etc.) y después se substituye el rango de cada átomo por la multiplicación de los

valores asociados a sus vecinos. Finalmente se ordenan los nuevos rangos y se

renumeran. Este paso se repite hasta que el vector de rangos no cambie de una

iteración a la siguiente, momento en el que se tienen los átomos perfectamente

clasificados en clases de equivalencia topológica.

Con el fin de determinar una notación canónica para la molécula, es necesario

llegar a un orden de los átomos en el que no haya repeticiones. Para esto, se rompen

los empates de rango causados por la equivalencia topológica substituyendo para cada

caso el rango del primer átomo de la primera clase con empates por 2xrango-1, y para

todos los demás átomos de la clase por 2xrango, y se repite el algoritmo hasta que el

número de clases sea igual al número de átomos de la molécula.

En resumen, el algoritmo es el siguiente:

l. Se asigna a cada átomo una función invariante que depende del número atómico, número y tipo de enlaces, carga y número de átomos de hidrógeno vecinos.

2. Se ordenan los átomos según el valor de la función invariante y a cada uno se le asigna secuencialmente un n~mero de clase. Los átomos con igual valor de la función invariante tienen el mismo número de clase.

3. A cada átomo se le asigna un número primo que, para un átomo clase i, es el elemento i-ésimo de la secuencia de los números primos (2,3,5,7,11, ... )

4. A cada átomo se le asigna un valor de ordenamiento que es igual al producto de los números primos de todos sus vecinos inmediatos.

5. Se ordenan los átomos según este producto y se asignan nuevos números de clase. Los átomos con igual producto de números primos siguen teniendo igual número de clase.

6. Si aumentó el número de clases diferentes, regresar al paso 3. De lo contrario, continuar al paso 7.

7. En la primera pasada, registrar las clases de simetría. Los átomos con igual número de clase son estructuralmente equivalentes.

49

Page 55: Síntesis orgánica asistida por computadora

8. Si el número de clases diferentes es igual al número de átomos, FIN.

9. Multiplicar todos los números de clase por 2 y restarle 1 a cualquiera de los átomos de la primera clase degenerada.

10. Ir al paso 3.

Terminando la ejecución, ya se cuenta con una molécula expresada en forma

canónica. Pero para realizar búsquedas en bases de datos puede ser interesante

encontrar una forma abreviada de representar la molécula. Este es el formato SMILES

( Simplified Molecular Input Une Entry System), una notación lineal fácil de leer y escribir

(para los usuarios), y que representa la molécula en forma completa. En la actualidad,

SMILES es una notación ampliamente difundida, por lo que puede utilizarse para

realizar búsquedas en bases de datos o interactuar con otros programas.

El formato SMILES tiene un número limitado de reglas muy sencillas para

representar una molécula. Los átomos se representan con su símbolo, los enlaces

sencillos se omiten, los dobles se representan por el símbolo "=" y los triples por "#".

Cuando se presenta una ramificación de la molécula, esta se indica utilizando

paréntesis. Para un anillo, se elimina uno de los enlaces y se marcan los dos átomos

asociados utilizando un número. Por ejemplo, el SMILES para el 1-metil-3-

bromociclohexeno (Figura 29) es CC 1 =CC(Br)CCC 1.

ó: Br

Figura 29 1-metil-3-bromociclohexeno. La flecha indica el inicio de la trayectoria seguida para generar el

SMILES CC1=CC(Br)CCC1.

Para pasar del gráfico canónico de una molécula a su representación SMILES,

partiendo del átomo con menor número de clase se realiza una búsqueda a

profundidad primero (DFS), prefiriendo en cada punto de decisión el átomo con menor

número de clase. A partir del árbol generado se escribe directamente el SMILES,

indicando cada ramificación con paréntesis, y los enlaces hacia atrás con la notación

numérica para ciclos.

50

Page 56: Síntesis orgánica asistida por computadora

Búsqueda en la base de datos de materias primas

Contando con un SMILES canónico de la estructura molecular, consultamos una

base de datos de materias primas esenciales (archivo sm.chm). Este archivo cuenta

con alrededor de ochenta compuestos que son considerados como las materias primas

"de libro de texto".

Esta etapa tiene dos funciones: primero, sirve para sugerirle al usuario que ya

encontró una materia prima ampliamente disponible y que no necesita continuar el

análisis en esa dirección; segundo, a las materias primas que aparecen en la lista se

les asigna una complejidad menor en la etapa de cálculo de complejidad.

Adicionalmente contamos con otra base de datos de moléculas en la que

aparecen casi 100,000 compuestos, con su SMILES, número CAS (con el que se

encuentran indexadas las materias primas en múltiples bases de datos comerciales, lo

que nos permitiría averiguar su precio) y nombre. Durante la fase de percepción no

consultamos esta base de datos por considerarlo innecesario: aunque podemos

reconocer estas materias primas, eso no indica que sean sencillas (por ejemplo, en la

base de datos aparece el LSD, mostrado en la Figura 30, y que definitivamente no es

una materia prima fácil de obtener comercialmente). Sin embargo, el usuario en forma

interactiva puede solicitarle al servidor una consulta para obtener información que le

permita evaluar más a detalle su síntesis propuesta.

o

~N

)

Figura 30 Estructura del LSD.

Clasificación de átomos

Al momento de aplicar una transformada, ésta puede no permitirse, o tener una

variación en su rendimiento, dependiendo de condiciones de los átomos de la

51

Page 57: Síntesis orgánica asistida por computadora

molécula. Aunque la evaluación de estas condiciones podría realizarse durante la fase

de ejecución, resulta más eficiente clasificar los átomos una sola vez durante la

percepción de la molécula.

Los átomos se clasifican utilizando un vector binario de propiedades químicas.

Esta clasificación es muy sencilla, basándose en características del átomo (tipo,

número de enlaces, número de hidrógenos) y de sus vecinos. Un átomo puede tener

varias propiedades simultáneamente.

La rutina de clasificación está escrita directamente en el programa; es decir, los

tipos de átomos no son configurables externamente. Esto tiene la ventaja de acelerar la

clasificación, lo que resulta valioso ya que este proceso se realiza repetidamente para

cada átomo de la molécula, en cada paso de la síntesis. Además, los tipos de átomos

no son demasiados (OSET reconoce en este momento alrededor de 40 propiedades),

por lo que no es imposible definirlos completamente.

Identificación de grupos funcionales

La parte más importante de la fase de percepción es la identificación de grupos

funcionales, que son subestructuras de una molécula que le confieren una reactividad

característica. La mayor parte de las transformadas retrosintéticas tienen como

precondición para su aplicación la presencia de uno o más grupos funcionales en la

molécula. La identificación de grupos funcionales es un problema de reconocimiento de

patrones sintácticos (Tou y Gonzalez, 1974), que puede asemejarse también al

problema de isomorfismo de subgrafos. Este problema, expresado como "dados los

grafos no dirigidos G y G', encontrar si G' es isomórfico a un subgrafo de G" es NP­

completo (Aho, Hopcroft, Ullman, 1974).

Para poder localizar los grupos funcionales, el primer paso es definirlos en una

forma no ambigua. Lamentablemente esto no es sencillo, sobre todo si partimos de una

definición quimica tal como "los alcoholes tienen la forma R-OH" (donde la R indica el

resto de la molécula). En la Figura 31 se muestran cuatro moléculas que cumplen con

esta definición, pero sólo una de ellas es un alcohol; la segunda es un ácido, la tercera

un enol, y la cuarta un gem-diol. El problema es que tal vez un químico reconozca un

enol como un tipo de alcohol (cuando le conviene), pero es un tipo muy peculiar que no

52

Page 58: Síntesis orgánica asistida por computadora

reacciona de la misma manera que los demás alcoholes, por lo que para un programa

de cómputo se vuelve necesario diferenciarlo.

o OH

~OH ~OH ~OH ~OH

alcohol ácido enol gem-diol

Figura 31 Diversos grupos funcionales tipo R-OH.

Los grupos funcionales se definen para OSET como patrones en forma de árbol.

Se define un átomo raíz, y una serie de condiciones que deben cumplirse en su

entorno. Por ejemplo, en la Figura 32 se muestra el árbol con el que definimos el grupo

funcional éster. El átomo raíz es un carbono, que numeramos como [1], y que

forzosamente debe tener como vecinos un oxígeno con doble enlace [2] y un oxígeno

con enlace sencillo [3], a los que llamaremos "átomos duros" porque son obligatorios en

el patrón. Como el carbono es tetravalente, nos falta definir uno de sus enlaces; en

principio podríamos ignorarlo, pero esto puede causarnos problemas: si en este enlace

hay otro oxígeno, estaríamos hablando de un grupo funcional carbonato, con

características diferentes a las del éster. En este enlace adicional definimos que puede

haber un carbono o hidrógeno y, además, que no nos importa cuál y por esa razón no

lo numeramos; a estos átomos los llamaremos "átomos suaves". El patrón indica

adicionalmente que el oxígeno [3] debe tener adyacente otro carbono [4], unido con un

enlace sencillo. Los otros tres enlaces del carbono no nos importan, pero requerimos

que tengan carbono o hidrógeno para evitar problemas de definición.

c1 [CH]/11"'-o 3

o2 1

c4

[CH]/ l ""'[CH] [CH]

Figura 32 Árbol para definir el grupo funcional éster.

53

Page 59: Síntesis orgánica asistida por computadora

Los grupos funcionales se definen por medio de un archivo de configuración

(funcgrp.chm), en el que se indica en forma de texto el patrón asociado a cada uno de

ellos. Continuando con el ejemplo del éster, el patrón correspondiente es:

ESTER= "C(=O O(C([CH]"3)) [CH])", 10

Dentro de la cadena que identifica el patrón, el primer símbolo C indica la raíz del

árbol [1], seguida por unos paréntesis que nos indican que empieza la lista de sus

vecinos. Los vecinos de [1] deben ser =O [2], O [3], y el tercer enlace es un átomo

suave (indicado con los corchetes), que puede ser ya sea C o H. El átomo [3] a su vez

indica su lista de vecinos con paréntesis; su único vecino es un C [4], que tiene como

vecinos dentro del paréntesis átomos suaves, que deben ser tres e o H.

La gramática que especifica los patrones de grupos funcionales, escrita en BNF,

es la siguiente:

<PATRON> : := /<ATOMR> I <ATOMR> <ATOMR> : := <ATOM> I <ATOM>(<NEIGHLIST>) <ATOM> : : = e I e I o I o I N I n I s I s 1 ... <NEIGHLIST> : := <ATOMB> 1 <ATOMB><SP><NEIGHLIST> <ATOMB> : := ~<ATOME> I =<ATOME> I #<ATOME> I

<A TOME> <ATOME> : : = [<ATOMS>] 1 [<ATOMS>] "<SEQ> 1 <PATRON> <ATOMS> : := <ATOM> I <ATOM><ATOMS> <SEQ> ::= <NUM> I {<NUM>-<NUM>} <NUM> : := 1 I 2 1 3 1 4 <SP> : : = ' ' ; (espacio en blanco)

Con las siguientes observaciones:

Secuencia Sianificado -átomo El enlace hacia el átomo siguiente es cualquiera (no nos importa el

orden) =átomo El enlace hacia el átomo siQuiente es doble forzosamente #átomo El enlace hacia el átomo siguiente es triple forzosamente átomo Si no se especifica lo contrario, el enlace hacia el átomo siguiente debe

ser sencillo forzosamente /átomo El átomo debe ser alifático (no aromático) forzosamente C, N, S, ... (mayúsculas) El átomo correspondiente puede ser aromático o alifático (no nos

importa) c, n, s, ... (minúsculas) El átomo correspondiente debe ser aromático forzosamente [átomos] Indican que los átomos entre corchetes son suaves (no esenciales) [átomosl"num Indica que los átomos suaves deben ser exactamente num r átomos]"{ num 1-num2} Indica que los átomos suaves pueden variar entre num1 v num2. (lista) Indica que entre los paréntesis aparece una lista de vecinos al átomo

que los precede

54

Page 60: Síntesis orgánica asistida por computadora

Los patrones para definición de grupos funcionales se leen del archivo de

configuración y se preprocesan para almacenarse en memoria en forma de árbol. El

algoritmo que busca los grupos funcionales en la molécula examina cada átomo y trata

de utilizarlo como raíz para cada patrón registrado. Si la raíz coincide, el algoritmo

realiza una búsqueda recursiva (probando todas las combinaciones de átomos vecinos

contra el patrón) hasta terminar el patrón, lo que corresponde a una coincidencia; o

encontrar una diferencia, lo que aborta la rama de búsqueda.

Cada coincidencia de grupo funcional se registra en una lista asociada a la

molécula. Si el patrón es simétrico (por ejemplo, olefina), el algoritmo lo identifica dos

veces, una para cada sentido en que se puede recorrer.

En pruebas realizadas, la detección de grupos funcionales llegó a representar

más del 75% del tiempo de ejecución de OSET, lo que indica que este algoritmo es uno

de los puntos críticos que pueden tratar de mejorarse a futuro, aunque se ha

demostrado teóricamente que no existe una solución en tiempo polinomial.

Cálculo de complejidad molecular

El objetivo del análisis retrosintético es simplificar la molécula objetivo; para

poder evaluar esta simplificación, es necesario un índice que permita comparar la

complejidad de la molécula objetivo contra la de sus precursores. La función de

complejidad que utilizamos fue determinada de manera empírica, considerando los

siguientes factores:

• Número de átomos de la molécula

• Grado de ramificación (cantidad de átomos terciarios y cuaternarios)

• Número y tipo de anillos (cada patrón de anillo tiene una complejidad asociada, y los

anillos no identificados se evalúan por su tamaño)

• Número y tipo de grupos funcionales (cada grupo funcional tiene una complejidad

asociada)

• Si la molécula está en la base de datos de materias primas esenciales (lo que

reduce su complejidad por un factor constante)

Con esto termina la etapa de percepción. La información recolectada nos

ayudará a decidir qué transformadas retrosintéticas pueden aplicarse a la molécula.

55

Page 61: Síntesis orgánica asistida por computadora

CAPÍTULO 4: SERVIDOR OSET - EJECUCIÓN

OSET utiliza una representación algorítmica para describir las transformadas que

puede aplicar para simplificar una molécula. En este capítulo se describe el lenguaje

para descripción de transformadas y la fase de ejecución.

Lenguaje para descripción de transformadas [TDL]

El lenguaje para descripción de transformadas (TDL) es un lenguaje procedural,

que recuerda vagamente al BASIC. Como se trata de un lenguaje para propósito

específico tiene algunas limitaciones, aunque resulta suficiente para su fin.

OSET lee la base de datos de transformadas y la analiza al inicializar el servidor,

almacenando en memoria un código intermedio. Posteriormente, durante la fase de

ejecución este código intermedio se interpreta. En esta sección se explica a detalle la

fase de análisis; posteriormente describiremos la ejecución.

La implementación de la fase de análisis del lector de transformadas se hizo

mediante un traductor dirigido por la sintaxis (syntax directed translator, Aho, Sethi y

Ullman, 1986). Este traductor se genera a partir de una gramática sin recursión

izquierda, y en la que sea posible decidir cuál es la regla que corresponde aplicar

analizando únicamente su primer símbolo. Cumpliendo con estas restricciones, un

traductor dirigido por la sintaxis puede programarse fácilmente a mano a partir de la

gramática.

El esquema de la Figura 33 muestra la relación existente entre las diversas

partes del lector de transformadas. Secuencia de Secuencia de caracteres

Analizador componentes

Traductor Código

Intérprete (archivo tdl) léxicos (tokens) intermedio - léxico - dirigido por la -~ - -

sintaxis

Figura 33 Diagrama de bloques para el lector de transformadas

56

Page 62: Síntesis orgánica asistida por computadora

Introducción

Un archivo de código TDL está compuesto por una serie de transformadas. Cada

transformada es autocontenida, por lo que si existe algún error de sintaxis, el traductor

lo reporta y omite la transformada completa, pasando a la siguiente. Esto permite

agregar transformadas a la base de datos sin el riesgo de que el servidor deje de

funcionar.

La definición de una transformada consta de dos partes: el encabezado y el

mecanismo. El encabezado contiene información utilizada para indexar la

transformada, tal como su nombre, tipo, parámetros, etc. También contiene información

opcional para ayudar al usuario, como una sección de comentarios y un vínculo a una

página WWW con información adicional. El mecanismo de la transformada está escrito

en forma procedural.

En la Figura 34 se muestra un ejemplo de una transformada descrita en TDL. Al

leer esta transformada, puede consultarse el diagrama mostrado en la Figura 35, en el

que se muestra gráficamente su aplicación. 1 2

/****************************** .RXN

3 NAME "Esterification" 4 TYPE GPl 5 Gl ESTER 6 RATING=50

ENCABEZADO******************************/

7 8 9 10 11 12 13 14 15 16 17 18 19

link "reactions/esterification.html"

20 21 22 23 24

.CONDITIONS SOC12

.COMMENTS "Frequently the acyl halide or the anhydride is used instead of the acid. " "The acid can be converted to the halide using SOC12\n" "Reference: March 4th ed. 0-20, 0-21, 0-22"

.START

IF (A4 IS VINYL) THEN RATING=RATING-20

MECANISMO ******************************/

echo("Rating decreased for vinylic substrates"l ENDIF

2 5 BREAK BOND ( A3, A4) 26 ADD(A4, O) 27 DONE

Figura 34 Ejemplo de transformada escrita en TDL

En el ejemplo presentado, la línea 2 indica el inicio del encabezado de la

transformada. Este encabezado incluye un nombre (línea 3), tipo (línea 4, en este caso

es GP1; los tipos de transformadas se describen más adelante), parámetros (línea 5,

indica los grupos funcionales necesarios, en este caso ester), evaluación inicial (línea 6)

57

Page 63: Síntesis orgánica asistida por computadora

e información adicional (líneas 7 a 14). La línea 18 indica el inicio del mecanismo de la

transformada. Las líneas 20-23 evalúan el átomo 4 (carbono) del grupo funcional ester;

en caso de que sea vinílico (que tenga un doble enlace) se modifica la evaluación de la

reacción y se emite un mensaje al usuario. Las líneas 25 y 26 ejecutan el mecanismo:

se rompe el enlace entre el oxígeno [3] y el carbono [4], y al carbono [4] se le agrega

otro átomo de oxígeno. El efecto final de la transformada es tomar un éster y partirlo en

un alcohol y un ácido, como puede verse en la Figura 35.

A2

o 11 A4

~º~ A1 A3

A2 o

,,¿OH Breakbond(A3, A4) Add(A4, O)

A3

+ A4

HO~

Figura 35 Ejemplo de aplicación de la transformada de esterificación.

A continuación se describen algunas convenciones de TDL:

• El "usuario" de TDL es un químico que redacta las transformadas para agregarlas a

la base de datos.

• Las transformadas pueden escribirse en uno o más archivos de texto. OSET lee

únicamente el archivo rxns.chm, pero utilizando el comando include "fname", se

pueden organizar las transformadas a gusto del usuario. El comando include puede

anidarse hasta cierta cantidad limitada de niveles.

• Se distinguen los siguientes tipos de datos: numérico, booleano, átomos, grupos

funcionales, anillos y multianillos. También existen constantes de tipo cadena, pero

no pueden manipularse de ninguna manera.

• OSET preprocesa los archivos de configuración de grupos funcionales

(funcgrp.chm) y anillos (ring.chm) para crear las variables de tipo grupo funcional,

anillo y multianillo; estos tipos no pueden ser instanciados por el usuario ni utilizados

en expresiones. Los tipos numérico, booleano y átomo pueden utilizarse en las

expresiones correspondientes, o asignarse a variables.

• No es necesario declarar variables antes de usarlas. El analizador sintáctico las

declara automáticamente, asignándoles un tipo de datos según el contexto. Aunque

la predeclarac:ión de variables protege al usuario de errores de teclado, resulta

58

Page 64: Síntesis orgánica asistida por computadora

demasiado difícil de explicar, considerando que el usuario no tiene experiencia en

programación.

• La asignación del tipo de datos a las variables es global; esto significa que no puede

utilizarse una misma variable para representar un tipo de datos en una transformada

y otro tipo de datos en otra. Normalmente esto no es un problema, ya que en la

práctica el usuario por lo general utiliza únicamente variables de tipo átomo.

• Antes de ejecutar una transformada, OSET genera y asigna automáticamente las

variables reservadas de tipo átomo A1 .. A9, 81 .. 89, P1 .. P9, R1 .. R9, S, .. S9, T, .. T9, etc.

Las variables AN corresponden al primer grupo funcional en transformadas GP1 y

GP2; A1 corresponde a la raíz, y las demás variables se asignan a los átomos duros

del patrón de grupo funcional en el orden en que aparecen en la definición. Las

variables 8N se asignan al segundo grupo funcional en transformadas GP2,

siguiendo el mismo esquema mencionado para AN. PN se utiliza en transformadas

GP2 para representar el camino (path) entre el primer grupo funcional y el segundo;

donde P1 es la raíz del primer grupo (o sea, que es igual a A1) y las demás variables

siguen el camino más corto hasta la raíz del segundo grupo. Las variables RN, SN,

TN, etc. se utilizan para representar los átomos en transformadas de anillo; R,

corresponde al primer átomo del primer anillo según el patrón que lo define; las

variables SN, TN, etc. corresponden a los demás anillos en un sistema fusionado.

• La variable rating también es reservada; se trata de una variable numérica que se

utiliza para evaluar la evaluación o utilidad de la reacción. Inicialmente se asigna en

el encabezado, pero puede modificarse durante la ejecución del mecanismo

dependiendo de factores estructurales encontrados al analizar la molécula.

Analizador léxico

El analizador léxico (lexica/ analyzer, a veces llamado scanner} es el encargado

de leer un archivo con código TDL y separarlo en componentes léxicos (tokens) que

serán utilizados por el analizador sintáctico (parser} para generar el código intermedio.

Se identifican seis tipos de tokens básicos: números, cadenas, identificadores,

palabras reservadas, operadores y separadores. Los espacios, tabuladores y saltos de

línea se ignoran. Existen dos tipos de comentarios, que también se ignoran: los de

59

Page 65: Síntesis orgánica asistida por computadora

línea, que inician con ; y se extienden hasta el final de la línea, y los de bloque, que

inician con /* y terminan con */.

Los números se definen como una secuencia de dígitos. Únicamente se

manejan constantes enteras positivas en el rango [O .. INT _MAX], donde INT _MAX está

definido por el compilador de C que se utilice; esta no es una restricción significativa, ya

que los cálculos que se pueden llegar a hacer son con números pequeños. A

continuación aparece la definición del token num utilizando una expresión regular: 4

num 7 [0-9) +

Una cadena inicia y termina con el símbolo " y no pueden contener saltos de

línea. Existe una longitud máxima definida para las cadenas.

string 7 ".*"

Los identificadores deben empezar con una letra o los símbolos . o_, seguidos

de cualquier secuencia de letras, dígitos o el símbolo _. Existe una longitud máxima

definida para los identificadores.

id 7 [ ._0-9A-Za-z] [_0-9A-Za-z] *

Después de obtener un identificador, se compara contra la siguiente lista de

palabras reservadas, que incluyen estructuras de control, atributos químicos,

operadores textuales y funciones:

reservado_control: .RXN I NAME I TYPE I GPl I GP2 1 Gl I G2 I .CONDITIONS I .COMMENTS I LINK 1 .START I FORATOM I FORBOND I FROM I NEXT I IF I THEN I ELSE I ENDIF I FGil I FGI2 I GPREC I

FGA I GPO I RING I RINGTYPE I INCLUDE reservado_químico: METHYL I PRIMARY I SECONDARY

TERTIARY I QUATERNARY I VINYL I CARBONYL I ALKYNYL I NITRILE I ALLENE I ALKYL I SP3 I SP2 I SP I PHENYL I NONCARBON I HYDROXYL I PEROXIDE I ALLYL I BENZYL I ALPHA_CARBONYL I

ALPHA_ALKYNYL I ALPHA_NITRILE I HYDROGEN I

CARBON I NITROGEN I OXYGEN I HALOGEN I BROMINE

4 Las expresiones regulares están escritas bajo el estándar utilizado por programas estilo grep. Algunos slmbolos reservados que se utilizan en este documento son: . indica cualquier carácter excepto el fin de linea; * indica que el slmbolo precedente puede repetirse cero o más veces (cerradura de Kleene); + indica que el símbolo precedente puede repetirse una o más veces; con corchetes se pueden especificar rangos o alternativas como por ejemplo [0-9] para referirse a cualquier dígito.

60

Page 66: Síntesis orgánica asistida por computadora

I CHLORINE I IODINE I ALPHA_CH I ALPHA_EWG I ALPHA EWG2 I ALPHA_EWG3

reservado ops: IS I ISNOT I ISEQ I ANO I OR NOT reservado funcs: BREAKBOND I MAKEBOND I ADD

ELIMINATE I DONE I PATH I RINGSIZE I NH ECHO I INCBONDORDER I DECBONDORDER I GETBONDORDER I SETBONDORDER

Los operadores reconocidos, además de los ya mencionados como palabras

reservadas, son los siguientes:

sirnbolo ops: * 1 + 1 - 1 / 1 = 1 < 1 <= 1 <> 1 >= 1

>

Los separadores son los siguientes:

separadores: , ( 1 ) [ 1 ] 1 eof

En la Figura 36 se muestra el diagrama del autómata con el que se diseño el

analizador léxico. El asterisco al lado de un estado indica que se debe volver a analizar

el carácter actual. Los estados finales se indican con el nombre del token que generan.

o 4

WHITESPACE )

•z .. ; .. " + .

+ +

-+ I

-+

( _.. l _.. =

[ _.. 1 -+ <

.. ~

DIOIT

ALPHA l, I_

TOK_EOF

G) @ TOK_MUL

TOK_ADD

TOK_SUB

G) TOK_COMMA

TOK_PARENABRE

TOK_PARENCIERRA

TOK_IGUAL

TOK_OPENBRACK

TOK_CLOSEBRACK

® ® @•

©

oc---'"---~®

ALPHA I DIGIT I _

TOK_LE

TOK NE

TOK_LT'

...___-=E=LS=E.___ _ _.: ~

Figura 36 Diagrama del autómata que describe al analizador léxico.

61

Page 67: Síntesis orgánica asistida por computadora

Analizador sintáctico y traductor

Un archivo TDL contiene una lista de transformadas, cada una definida de la

siguiente manera:

<rxn>::= <header> <body>

La gramática para el encabezado se presenta a continuación. Durante la lectura

del encabezado, el analizador léxico va llenando una estructura con información sobre

la transformada, pero no genera ningún código intermedio.

<header> ::= <rxnblock> <optblock> <rxnblock> ::= .RXN <name> <type> <path> <rating> <name> ::= NAME string <type> ::= TYPE <typedata> <typedata> ::= GPO I GPl <gl> I GP2 <gl><g2> 1 FGil

<gl><gprec> 1 FGI2 <gl><g2><gprec> 1 FGA <gprec> 1 RING <ringtype>

<gl> ::= Gl <fglist> <g2> ::= G2 <fglist> <gprec> ::= GPREC <fglist> <ringt.ype> ::= RINGTYPE <ringlist> <fglist> ::= id(funcgrp) <fgrest> <fgrest> : :=,<fglist> 1 E <ringlist> ::= id(ring) <ringrest> <ringrest> ::=,<ringlist> 1 E

<path>: := PATH = num I E

<rating> : := id("rating") = num <optblock> ::= <conditionsblock> <commentblock>

<linkblock> <conditionsblock>: := .CONDITIONS <condlist> 1 E

<commentblock> : := .COMMENTS <stringlist> 1 E

<linkblock> ::= LINK string I E <condlist> ::= id(cond) <condrest> <condrest> ::=, <condlist> 1 E <stringlist> · ·= string <stringrest> <stringrest> ::= <stringlist> 1 E

La información sobre el tipo de la transformada ( <typedata> y sus reglas

asociadas) se describe a detalle durante la fase de ejecución. Por el momento basta

con mencionar que existen varios tipos de transformadas (GPO, GP1, GP2, FG1, FG2,

FGA, RING), y que cada una de ellas requiere información diferente en el encabezado

para definir sus requerimientos.

62

Page 68: Síntesis orgánica asistida por computadora

Una observación importante es que algunas de las reglas de la gramática están

expresadas en forma poco natural. Por ejemplo, nos gustaría escribir <condlist> de la

siguiente manera:

<condlist> : := id(cond) 1 id(cond), <condlist>

La razón para que la gramática se complique agregando una regla adicional es

que estamos escribiendo un analizador sintáctico predictivo, correspondiente a una

traductor dirigido por la sintaxis. Se necesita que el analizador sintáctico pueda decidir

sin ambigüedad comparando la regla en ejecución con el token actual cuál de las

posibles opciones utilizar. Si escribimos <condlist> en una sola línea, el analizador

sintáctico se encuentra con que tiene el token id listo, pero tiene dos posibilidades:

interpretarlo como un íd(cond) único, o como el principio de la lista íd(cond), <condlist>;

como no se puede tomar esta decisión hasta leer el siguiente token, un analizador

sintáctico predictivo no podría continuar.

El mecanismo de la transformada se describe como una serie de enunciados,

que terminan al encontrar la siguiente transformada o el fin del archivo. En la

especificación de la gramática se agrega entre llaves el esquema de traducción en los

lugares apropiados; la acción emit genera el código intermedio, que se representa

como una secuencia de tokens.

<body> : := .START <statementlist> {emit .RXN} <statementlist> - <statement> <statementrest> <statementrest> ::= <statementlist> 1 E

En este caso, el {emit .RXN} se ejecuta después de procesar la lista de

enunciados, como una forma para señalar el fin de la ejecución de la transformada. En

ejemplos posteriores podrá verse que la acción emit se localiza incrustada en el análisis

sintáctico exactamente en el momento en que se genera el código.

Existen varios tipos de enunciados, los asociados al control del programa

(standard-statement), y los que afectan a la molécula de trabajo (chemistry-statement).

En las siguientes páginas se explica a detalle cada tipo de enunciado.

<statement> : := <standard-statement> 1 <chemistry-statement>

<standard-statement> : := <foratom-statement> <if-statement> 1 <assignment-statement>

<chemistry-statement> ::= <add-statement> 1

<breakbond-statement> 1 <makebond-statement>

63

Page 69: Síntesis orgánica asistida por computadora

<incbondorder-statement> <decbondorder-statement> <setbondorder-statement> <echo-statement>

Enunciado FORA TOM

<done-statement> 1

Este enunciado permite recorrer uno a uno todos los vecinos de un átomo en

particular. Se utiliza para recorrer la molécula en busca de características estructurales

que puedan facilitar o dificultar la aplicación de la transformada. Su estructura es la

siguiente:

f oratom ( a toml f rom a tomO) sta tement list

next

El enunciado busca todos los vecinos del átomo atomO, se los asigna uno a uno

a la variable atom1, y ejecuta el interior del ciclo. La gramática del enunciado es la

siguiente:

<foratom-statement> ::= FORATOM {emit FORATOM} ( id(atom) {emit id.addr} FROM id(atom) {emit id.addr} ) <statementlist> NEXT {emit NEXT}

Enunciado IF

Este enunciado constituye la estructura básica de decisión del lenguaje. Permite

ejecutar un grupo de enunciados u otro dependiendo del valor de una expresión

booleana. Su estructura es la siguiente:

if (boolean expression) then statement list (true)

[else statement list (false)]

endif

Primero se evalúa la expresión booleana que aparece dentro del paréntesis; si

su valor es verdadero, se ejecuta la lista de enunciados que sigue a la palabra then; de

lo contrario, se ejecuta la lista de enunciados que siguen al e/se, o si éste no existe se

salta después del endif. La gramática del enunciado es la siguiente:

<if-statement> : : = IF { emi t IF} ( <expression> ) THEN {emit THEN} <statementlist> <elsepart> ENDIF {emit ENDIF}

64

Page 70: Síntesis orgánica asistida por computadora

<elsepart> ::= ELSE {emit ELSE} <statementlist> 1 E

Enunciado de asignación

Este enunciado permite evaluar una expresión y asignar el resultado a una

variable. Su estructura es la siguiente:

variable= expression

El tipo de la variable y la expresión deben coincidir. Si la variable aún no se ha

definido, OSET la declara automáticamente con el tipo correspondiente. La gramática

del enunciado es la siguiente:

<assignment-statement> : := id {emit =} = <expression> {emit =} {emit id.addr}

Enunciado ADD

El enunciado add toma uno de los átomos de la molécula y le enlaza un nuevo

átomo. Su estructura es la siguiente:

add(atom, element)

A partir del átomo atom, se agrega un nuevo átomo del elemento element y se

crea un enlace sencillo entre los dos. La gramática del enunciado es la siguiente:

<add-statement> : := ADD {emit ADD} id(atom) {emit id.addr} , <element>)

<element>: := CARBON {emit CARBON} NITROGEN {emit NITROGEN} I OXYGEN {emit OXYGEN} I BROMINE {emit BROMINE} I CHLORINE {emit CHLORINE} 1

IODINE {emit IODINE}

Enunciado BREAKBOND

Este enunciado rompe el enlace entre dos átomos. Su estructura es la siguiente:

breakbond(atom0,atom1)

El enunciado identifica el enlace entre los átomos atomO y atom1, y lo elimina

completamente (sin importar su orden). La gramática del enunciado es la siguiente:

<breakbond-statement> ::= BREARBOND {emit BREARBOND} ( id(atom) {emit id.addr} , id(atom) { emi t id. addr} )

65

Page 71: Síntesis orgánica asistida por computadora

Enunciado MAKEBOND

Sirve para crear un enlace entre dos átomos. Su estructura es la siguiente:

makebond(atom0,atom1)

Este enunciado busca el enlace entre los átomos atomO y atom1; si no existe, lo

crea, de lo contrario, incrementa su orden. La gramática aparece a continuación:

<makebond-statement> : := MAKEBOND {emit MAKEBOND} ( id(atom) {emit id.addr} , id(atom) {emit id. addr} )

Enunciado INCBONDORDER

Este enunciado incrementa el orden del enlace entre dos átomos. Su estructura

es la siguiente:

incbondorder ( a tomo, a toml)

El enunciado busca el enlace entre los átomos atomO y atom1; si existe,

incrementa su orden; de lo contrario no hace nada. La gramática del enunciado es la

siguiente:

<incbondorder-statement> : := INCBONDORDER {emit INCBONDORDER} ( id(atom) {emit id.addr} , id(atom) {emit id.addr} )

Enunciado DECBONDORDER

Permite reducir el orden del enlace entre dos átomos. Su estructura es la

siguiente:

decbondorder(atom0,atom1)

Este enunciado busca el enlace entre los átomos atomO y atom1; si existe,

reduce su orden; de lo contrario, no hace nada. La gramática del enunciado es la

siguiente:

<decbondorder-statement> : := DECBONDORDER {emit DECBONDORDER} ( id(atom) {emit id.addr} , id(atom) {emit id.addr} )

Enunciado SETBONDORDER

Este enunciado modifica el orden del enlace entre dos átomos. Su estructura es

la siguiente:

66

Page 72: Síntesis orgánica asistida por computadora

setbondorder(atom0,atom1,num)

El enunciado busca el enlace entre los átomos atomO y atom1; si existe, modifica

su orden para que sea igual a num. La gramática del enunciado es la siguiente:

<setbondorder-statement> ::= SETBONDORDER {emit SETBONDORDER} ( id(atom) {emit id.addr} , id(atom) {emit id.addr} , <setbondorder-rest>)

<setbondorder-rest> : := num {emit num.value} 1

id(num) {emit id.addr}

Enunciado DONE

El enunciado DONE se utiliza para guardar el resultado de una transformada. Si

no se incluye al menos un enunciado DONE, no se almacenarán las operaciones

realizadas. El enunciado tiene la siguiente forma:

done[(atom list)]

Al encontrar este enunciado, se almacena el estado de la molécula de trabajo en

la lista de posibles precursores, y la ejecución continúa en el siguiente enunciado con

otra copia de la molécula original (como era antes de iniciar la ejecución de la

transformada). Si se utiliza el enunciado DONE dentro de un ciclo, pueden generarse

varios posibles precursores utilizando una sola transformada. Sin embargo, es

importante considerar que la variable rating no regresa a su valor original, por lo que

puede ser necesario modificarla manualmente.

El enunciado DONE puede tener como parámetro una lista de átomos separados

por comas. Antes de almacenar el resultado, se eliminan todos los fragmentos

moleculares que incluyan los átomos de la lista. Esto se utiliza para eliminar

precursores inorgánicos o reactivos estándar como el agua o amoníaco.

La gramática del enunciado es la siguiente:

<done-statement> ::= DONE {emit DONE} <donelist> <donelist> ::= ( {emit (} id(atom) {emit id.addr}

<donerest> ) { emi t ) } 1 E.

<doneatomlist> ::= , id(atom) {emit id.addr} <doneatomlist>

Enunciado ECHO

Este enunciado se utiliza para reportar un mensaje informativo al cliente. Su

estructura es la siguiente:

67

Page 73: Síntesis orgánica asistida por computadora

echo (string)

La cadena string se agrega a la información que se devuelve al cliente junto con

los datos de la transformada. Este enunciado normalmente se utiliza para explicarle al

cliente los cambios de rating. Su gramática es la siguiente:

<echo-statement> string. addr)

.. - ECHO {emit ECHO} string {emit

Lo único que falta describir para terminar de definir el lenguaje son las

expresiones. Empezamos por definir los operadores y su precedencia. En la siguiente

tabla se separan los operadores en cuatro grupos según el tipo de los operandos y su

resultado. A la izquierda de la flecha se muestra el nombre del operador en negritas y

los tipos de los operandos con itálicas; a la derecha se muestra el tipo del resultado.

Los operadores que están más arriba en la tabla tienen mayor precedencia.

Lógicos Matemáticos Comparación Atómicos

not bool 7 bool bool and bool 7 bool num * num 7 num

num I num 7 num boo/ or bool 7 bool num + num 7 num

num - num 7 num num < num 7 bool atom is atomtype 7 num <= num 7 bool bool num <> num 7 bool atom isnot atomtype 7 atom <> atom 7 bool bool num >= num 7 bool num > num 7 boo/ num = num 7 bool atom = atom 7 bool

Los operadores is e isnot son los únicos que merecen una mención especial; su

función es evaluar si un átomo tiene o no una propiedad química, por ejemplo si es un

carbono, si es cuaternario, etc.

Los paréntesis tienen su significado usual, modificando la precedencia de los

operadores.

Existen cuatro funciones que pueden mandarse llamar dentro de una expresión.

Estas funciones se describen a continuación.

• RINGSIZE(atom1, atom2) 7 num; recibe como parámetros dos átomos y

determina el tamaño del anillo de menor tamaño que los contiene, regresando

cero si los átomos no están en un anillo.

68

Page 74: Síntesis orgánica asistida por computadora

• NH(atom) 7 num; devuelve el número de hidrógenos conectados al átomo atom.

• GETBONDORDER(atom1, atom2) 7 num; busca el enlace que conecta los

átomos atom1 y atom2, y regresa su orden.

• ADD(atom, element) 7 atom; esta función ya la hemos discutido en forma de

enunciado; lo que hace es agregar un átomo element a la molécula y conectarlo

con el átomo atom, regresa el índice del nuevo átomo para que sea posible

manipularlo (por ejemplo, formando cadenas).

La gramática para el manejo de expresiones es la siguiente:

<expression> ::= <simple_expression> <expressionrest>

<expressionrest> : := IS <atomtype> {emit IS} ISNOT <atomtype> {emit ISNOT} 1 ISEQ <simple_expression> {emit ISEQ} 1

= <simple expression> {emit =} 1

< <simple_expression> {emit <} 1

<= <simple expression> {emit <=} 1

<> <simple_expression> {emit <>) 1

>= <simple expression> {emit >=} 1

> <simple_expression> {emit >} 1 E <simple expression> ::= <term> <termrest> <term> : := <factor> <factorrest> <termrest> ::= + <simple_expression> {emit +} 1

- <simple expression> {emit -} 1

OR <simple_expression> {emit OR} 1 E <factor> ::= num {emit num.value} 1 id {emit

id. addr} 1 ( <expression> ) 1 NOT <factor> {emit NOT} 1 <function>

<factorrest> ::= * <term> {emit *} / <term> {emit /} 1 AND <term> {emit AND} I' E

<function> ::= <ringsize function> <nh function> 1 <add_function> 1 <getbondorder_function>

<ringsize function> ::= RINGSIZE ( id(atom) {emit id.addr} , id(atom) {emit id.addr} ) {emit RINGSIZE}

<nh function> ::= NH ( id(atom) {emit id.addr} ) {emit NH}

<add function> ::= ADD ( id(atom) {emit id.addr}, <element>) {emit ADD}

<getbondorder function> ::= GETBONDORDER ( id(atom) {emit id.addr} , id(atom) {emit id.addr} ) {emit GETBONDORDER}

<atomtype> ::= METHYL {emit METHYL} 1 PRIMARY {emit PRIMARY} 1 SECONDARY {emit SECONDARY} I

69

Page 75: Síntesis orgánica asistida por computadora

TERTIARY {emit TERTIARY} I QUATERNARY {emit QUATERNARY} 1 VINYL {emit VINYL} 1 CARBONYL {emit CARBONYL} I ALKYNYL {emit ALKYNYL} 1

NITRILE {emit NITRILE} 1 ALLENE (emit ALLENE} ALKYL {emit ALKYL} I SP3 {emit SP3} 1 SP2 {emit SP2} I SP {emit SP} 1 PHENYL {emit PHENYL} 1

NONCARBON {emit NONCARBON} I HYDROXYL {emit HYDROXYL} I PEROXIDE {emit PEROXIDE} I ALLYL {emit ALLYL} I BENZYL {emit BENZYL} I ALPHA_CARBONYL {emit ALPHA_CARBONYL} I ALPHA _ALKYNYL { emi t ALPHA _ ALKYNYL} 1

ALPHA_NITRILE {emit ALPHA_NITRILE} I HYDROGEN { emi t HYDROGEN} I CARBON { emi t CARBON} 1

NITROGEN {emit NITROGEN} I OXYGEN {emit OXYGEN} I HALOGEN {emit HALOGEN} I BROMINE {emit

BROMINE} I CHLORINE {emit CHLORINE} I IODINE {emit IODINE} 1 ALPHA_CH {emit ALPHA_CH} 1

ALPHA _ EWG { emi t ALPHA _ EWG} I ALPHA _ EWG2 { emi t ALPHA_EWG2} I ALPHA_EWG3 {emit ALPHA_EWG3}

Fase de ejecución

Para la fase de ejecución del motor de análisis retrosintético se recibe una

molécula a analizar y el modo de análisis solicitado por el usuario. Con esta

información, se debe filtrar la base de datos de transformadas decidiendo cuáles son

aplicables, para después ejecutarlas una a una.

Selección del modo de análisis

OSET maneja diferentes tipos de transformadas que pueden describirse por

medio de TDL. Es importante permitir que el cliente decida qué tipo de transformadas

desea utilizar, ya que algunas de ellas aumentan la complejidad de la molécula, y

únicamente deben utilizarse como un medio para librarse de un mínimo local, o planear

la aplicación posterior de otro tipo de transformada cuando se detecta un retrón parcial.

Mientras que las transformadas simplificativas pueden aplicarse indiscriminadamente,

aquellas que aumentan la complejidad deben usarse como último recurso y en forma

enfocada. Los cuatro modos de análisis disponibles son los siguientes:

1. Desconexión: El modo preferido normalmente, aplica solamente transformadas que

desconectan enlaces C-C o esqueléticos, generalmente simplificando la molécula.

Dentro de esta categoría hay varios tipos de transformadas: las de desconexión de

70

Page 76: Síntesis orgánica asistida por computadora

un grupo funcional (GP1), desconexión de dos grupos funcionales (GP2), y

desconexión de anillos (RING).

2. Intercambio de grupo funcional (FGI): Este es un modo auxiliar de análisis, aplica

transformadas que intercambian un grupo funcional por otro. Dada la gran cantidad

de transformadas FGI disponibles (prácticamente puede cambiarse cualquier grupo

funcional por cualquier otro), su aplicación puede causar una explosión en el

tamaño del árbol retrosintético. Además, este tipo de transformada en promedio no

resulta simplificativo (pero como introduce un paso extra a la ruta de síntesis,

reduce el rendimiento y por lo tanto no puede utilizarse sin un propósito específico).

Para utilizar este modo, es necesario especificar un grupo funcional que nos

interesa modificar; se tratarán de aplicar todas las posibles transformadas FGI que

tengan como objetivo ese grupo funcional en particular. Dentro de esta categoría

existen las transformadas de intercambio de un grupo funcional (FGl1) e

intercambio de dos grupos funcionales (FGl2).

3. Adición de grupo funcional (FGA): Otro modo auxiliar de análisis, que agrega

grupos funcionales a la molécula (incrementando su complejidad). Como sería

posible agregar grupos funcionales en varios lugares de la molécula y este tipo de

transformada debe aplicarse únicamente en forma enfocada, es necesario

especificar el átomo donde se desea agregar el nuevo grupo funcional. Sólo existe

un tipo de transformada para adición de grupo funcional (FGA).

4. Desconexión sin retrón (GPO): Este modo de análisis incluye transformadas que

pueden aplicarse aunque la molécula no tenga ningún grupo funcional. Como no es

posible identificar ningún retrón en la molécula objetivo que nos induzca a utilizar

este tipo de transformada, el cliente debe solicitarla específicamente, indicando el

enlace que desea desconectar. Sólo existe un tipo de transformada para

desconexión sin retrón (GPO).

Identificación de retrones

Una vez que se ha escogido el modo de análisis y el servidor tiene información

suficiente sobre la molécula, se realiza una búsqueda en la base de datos de

transformadas para decidir cuáles pueden llegar a utilizarse. Para poder realizar esta

71

Page 77: Síntesis orgánica asistida por computadora

búsqueda rápidamente, se utiliza el encabezado de la transformada, que especifica su

tipo y posibles retrones.

Para cada modo de análisis se sigue un proceso diferente, descrito a

continuación.

1. Desconexión: Para cada grupo funcional encontrado en la molécula, se examina la

lista G1 (primer grupo funcional) de cada transformada GP1 y GP2. En caso de que

haya una coincidencia, si la transformada es GP1 se aplica directamente. Si es

GP2, se compara la lista de grupos funcionales de la molécula contra la lista G2

(segundo grupo funcional) de la transformada. Si se cumple esta segunda

condición, se realiza una búsqueda de expansión (BFS) para localizar todos los

caminos entre los grupos funcionales elegidos; si la longitud del camino coincide

con el parámetro PATH de la transformada, ésta se aplica.

Posteriormente se intentan aplicar las transformadas de anillos. Para cada anillo

localizado en la molécula, se busca en la lista RINGTYPE de cada transformada tipo

RING. Si hay una coincidencia entre los tipos de anillos, se aplica la transformada.

Como puede verse, toda la información para aplicar las transformadas en modo de

desconexión está en el encabezado, y no se requiere más intervención de parte del

usuario.

2. Intercambio de grupos funcionales: El funcionamiento es similar a las

transformadas de desconexión GP1 y GP2, pero en este caso se conoce además

de parte del usuario en qué átomo desea realizar el intercambio. El primer paso es

determinar a qué grupo funcional pertenece el átomo en cuestión; posteriormente,

se compara contra las listas G1 y G2 de las transformadas FGl1 y FGl2 para decidir

cuáles pueden aplicarse. Adicionalmente, el usuario puede determinar exactamente

por qué grupo funcional desea realizar el intercambio; si se cuenta con esta

información, se compara contra la lista GPREC de las transformadas, para limitar

aun más su aplicación.

3. Adición de grupos funcionales: Para aplicar este tipo de transformada, el usuario

debe especificar un átomo. Se buscan en la base de datos todas las transformadas

de tipo FGA y se aplican dándoles como parámetro el átomo en cuestión.

Adicionalmente, el usuario puede determinar exactamente qué grupo funcional

72

Page 78: Síntesis orgánica asistida por computadora

desea agregar; si se cuenta con esta información, se aplica para limitar la selección

analizando la lista GPREC.

4. Desconexión sin retrón: El usuario debe haber especificado un enlace; se

seleccionan de la base de datos todas las transformadas tipo FGO y se aplican

dándoles como parámetro el enlace seleccionado.

Aplicación de la transformada

Al analizar la transformada, el traductor generó una descripción ya procesada en

forma de código intermedio. El paso faltante para tener un compilador completo sería la

emisión de código máquina, pero en esta ocasión preferimos no realizarlo,

quedándonos con un intérprete. La razón es que con este intérprete, escrito en ANSI-C,

el servidor puede ejecutarse en diversos equipos independientemente del hardware. Si

realizáramos la emisión de código máquina, estaríamos enfocándonos a una

arquitectura en particular.

Durante la fase de ejecución, para cada transformada aplicable (según una

comparación de su encabezado contra las características estructurales de la molécula),

se sigue este procedimiento:

• Se genera una copia de trabajo de la molécula por analizar, se asignan todas las

variables automáticas AN, BN, etc., y se inicializa el rating según instrucciones del

encabezado.

• Se inicializa un apuntador de instrucción al principio del código intermedio para la

reacción.

• Se interpreta el código; las instrucciones que alteran la molécula lo hacen sobre

la copia de trabajo.

• Cuando se encuentra un código DONE, se transfiere la copia de trabajo de la

molécula a una lista de precursores, señalando la transformada que se aplicó, la

evaluación correspondiente (variable rating), así como cualquier información

adicional generada por la transformada mediante códigos ECHO. En ese

momento se crea una nueva copia de trabajo de la molécula y se continúa la

ejecución.

73

Page 79: Síntesis orgánica asistida por computadora

Postprocesamiento

Una vez que se termina la ejecución de todas las transformadas aplicables, es

necesario postprocesar la lista de precursores obtenida. Este postprocesamiento

permite evitar duplicados y calcular la simplificación obtenida.

El primer paso del postprocesamiento es separar las moléculas precursoras

para cada transformada aplicada. Al romper enlaces, es muy probable que el grafo de

la molécula se haya dividido en varios componentes no conexos, los cuales es

necesario reorganizar como moléculas separadas.

Posteriormente se realiza la percepción de los precursores. Para ello se utiliza

exactamente el mismo algoritmo mencionado en el capítulo anterior: detección y

clasificación de anillos, canonización, clasificación de átomos, detección de grupos

funcionales y cálculo de complejidad.

Una vez que se han. canonizado los precursores, es posible compararlos para

detectar duplicados. Los duplicados surgen cuando se aplica una transformada a una

molécula con varios átomos topológicamente equivalentes. Por ejemplo, en la Figura 37

se muestra lo que sucede al aplicar la transformada "adición de Grignard a carbonilo" al

alcohol ter-butílico: se obtienen tres veces los mismos precursores (acetona y

bromometano).

o 11

Br + 1

OH/ o + ~> 1r + -Br

' -i + Br-

Figura 37 Ejemplo de desconexiones que generan resultados redundantes.

La eliminación de duplicados es deseable para no mostrar al usuario información

redundante, y limitar la explosión del árbol retrosintético.

74

Page 80: Síntesis orgánica asistida por computadora

Para poder comparar varias transformadas, se consideran dos factores: la

evaluación interna de la transformada (rating), que toma en cuenta factores de

selectividad que

pueden afectar su implementación o rendimiento; y la diferencia entre la

complejidad de la molécula objetivo y sus precursores. Para el cálculo de la

simplificación se divide la complejidad de la molécula objetivo entre la complejidad del

más complejo de sus precursores, multiplicando el resultado por 100 para normalizar.

En la Figura 38 se muestra un ejemplo de este cálculo.

+

87 70 30

Figura 38 Ejemplo de cálculo de simplificación. En este caso el resultado es 87/70 x 100 = 124.

Con esto termina la fase· de ejecución, quedando pendiente únicamente enviar la

lista de precursores al cliente para su visualización. Después de esto el servidor finaliza

el subproceso correspondiente y regresa a esperar la siguiente solicitud de parte de un

cliente.

En el siguiente capítulo se describe el cliente OSET.

75

Page 81: Síntesis orgánica asistida por computadora

CAPÍTULO 5: CLIENTE OSET

El cliente OSET tiene dos funciones principales: es la interfase con el usuario y,

además, administra el árbol retrosintético de la molécula. El cliente OSET no tiene

ningún conocimiento químico, dejando este aspecto enteramente al servidor.

Interfase con el usuario

El cliente OSET está escrito en forma de applet Java. Esto permite su

integración dentro de una página HTML, de tal forma que se ve como un elemento

incrustado, que interactúa con el usuario a través de la pantalla del browser. Dado que

la información manejada por la interfase es puramente gráfica, se prefiere el ratón

como medio de interacción.

En la Figura 39 se muestra una imagen de pantalla del applet OSET. La pantalla

está dividida en cuatro partes: la· barra superior para menús; el panel superior izquierdo

que presenta la síntesis actual de la molécula objetivo; el panel inferior izquierdo

presentando las materias primas, y el panel derecho para información.

El árbol retrosintético completo para una molécula presenta demasiada

información, que resulta muy difícil de procesar para el usuario. Por esta razón, OSET

muestra únicamente una posible síntesis en pantalla, permitiendo al usuario

desplazarse por el árbol retrosintético modificando la "síntesis de trabajo", sin que en

ningún momento se le muestre el árbol en forma global.

Cuando el usuario empieza a utilizar el cliente OSET, en el panel inferior

izquierdo le aparece la molécula a analizar, es decir, la molécula objetivo. El usuario

debe decidir el modo de análisis que desea aplicar: desconexión, auxiliar (intercambio o

adición de grupo funcional) o desconexión sin retrón. Estos modos de análisis se

describieron en el capítulo anterior.

76

Page 82: Síntesis orgánica asistida por computadora

:CAOS . T",;,~ :"," -'.r.-.::,, r,~ - r, . • •

~ 1

(113)

m.ihanol

o

o

E sterificalion Ratng • 50 S~ication· 11 O F~ness: 51.27 (49,11 53,43)

F requently the acyl halide or the anhyoide is u sed inslead ol the acid. T he acid can be conveiled lo lhe haide umg S OCl2 Relerence: March 41h ed. 0·20. 0-21. 0·22

o~/º J.

-------lormaldeh)ld•

Mode: ® Disc. 0 AuM. 0 FGO

Figura 39 Imagen de pantalla del applet OSET

Posteriormente, debe hacer clic en la molécula objetivo para analizarla. En ese

momento el cliente se comunica con el servidor y solicita el análisis de la molécula

específica. Como resultado recibe una lista de posibles transformadas que pueden

aplicarse, cada una con la lista de precursores que generaría.

En el panel inferior aparece la lista de precursores correspondientes a la

aplicación de la transformada más prometedora a juicio del servidor; en el panel

superior se muestra el esquema de la síntesis hasta el momento, y a la derecha

aparece información sobre la transformada utilizada, así como valores de evaluación

(rating) de la transformada, la simplificación asociada, y una evaluación global (fitness)

de la ruta sintética.

Utilizando una barra de desplazamiento, el usuario puede ver las demás

transformadas propuestas para este paso; en cualquier momento puede hacer clic en

alguno de los precursores para analizarlo retrosintéticamente. Al realizar este nuevo

paso de análisis, el precursor seleccionado se convierte en una molécula objetivo y se

envía al servidor una solicitud para analizarlo. Los precursores no seleccionados se

77

Page 83: Síntesis orgánica asistida por computadora

siguen reportando como moléculas "huérfanas", representadas en un tamaño menor y

en color gris, para que el usuario pueda analizarlas posteriormente. Las moléculas

huérfanas son importantes para permitir la creación de una síntesis convergente. En la

Figura 39 se muestra la representación de una síntesis con moléculas huérfanas, que

son las cuatro estructuras pequenas que aparecen a la derecha del panel inferior.

Para regresar a un nivel superior del árbol, el usuario puede utilizar el botón

etiquetado como Up. En ese caso, se señalarán las moléculas ya analizadas con un

color verde. Si el usuario hace clic en una molécula ya analizada, no se enviará ninguna

solicitud al servidor; simplemente se localizará la información correspondiente en la

memoria del cliente y se mostrará nuevamente en la pantalla.

Este sistema de navegación le permite al usuario desplazarse por todo el árbol

retrosintético. La visión del usuario se centra en un "nivel" de análisis, formado por la

lista de transformadas obtenidas del análisis de cierta molécula objetivo. El usuario

puede moverse por todo ese nivel utilizando la barra de desplazamiento; puede

navegar hacia un nivel "inferior" haciendo clic en alguna de las moléculas objetivo

pendientes, o puede regresar hacia un nivel "superior" utilizando el botón Up.

El problema que presenta este modelo de navegación es que resulta difícil

regresar a un punto específico del árbol. Por ejemplo, si el usuario encuentra una

síntesis interesante, pero después continua explorando otras opciones, cuando decida

regresar posiblemente tendrá que ir a la raíz y reproducir todo el camino recorrido. Para

evitar esto, es posible utilizar opciones en el menú para colocar marcas (bookmarks) en

el árbol, y posteriormente saltar directamente a alguna de ellas.

En el menú se incluyen también opciones para dirigir al usuario a recursos en

Internet que contengan mayor información sobre aspectos de la síntesis. Por ejemplo,

utilizando la opción get info del menú, el usuario puede abrir una nueva ventana en su

browser que lo lleve a una página con información sobre la transformada que está

viendo en la pantalla. Por supuesto esta página puede darle acceso a cualquier número

de recursos de interés. La opción get CAS consulta una base de datos para tratar de

localizar cada una de las materias primas de la síntesis en pantalla; si se localizan, se

reporta su fórmula en notación lineal, su nombre común y su número de clasificación

CAS (Chemical Abstracts Service registry number), con el que puede averiguarse su

precio y disponibilidad.

78

Page 84: Síntesis orgánica asistida por computadora

Árbol retrosintético

El cliente OSET es el encargado de administrar el árbol retrosintético de la

molécula. Aunque sería posible transferir esta opción al servidor, obteniendo una

reducción en el tráfico por la red, preferimos no hacerlo para lograr que el servidor sea

completamente independiente de estado (state/ess). Los servidores que no almacenan

información de estado son más eficientes y más fácilmente escalables.

El árbol retrosintético se almacena en la memoria del cliente utilizando la

estructura mostrada en la Figura 40. Las clases mol, mollist, molmetalist representan

moléculas, transformadas y listas de transformadas respectivamente. Estas tres clases

corresponden al formato MOL TRAN, descrito en el capítulo 2, para transmitir

información de análisis a través de la red. El árbol retrosintético se forma uniendo

objetos molmetalist en forma estructurada; para esto, se encierra el molmetalist en

una clase analysisnode, que contiene todos los elementos relacionales.

Paralelamente, el cliente va creando una base de datos de las moléculas

utilizadas, con dos fines: ahorrar espacio de almacenamiento local al eliminar

duplicados, e informarle al usuario cuando durante la navegación del árbol encuentre

una molécula que ya ha analizado anteriormente en otra rama.

A partir de un árbol retrosintético creado con objetos analysisnode, es posible

obtener el árbol de la síntesis actual. Este es el que se representa en el panel superior.

MOL[¿]

MOLLIST 1 [X] [X] • • • [X] 1 RXNINFO 1 1

lllmBD=I ... ~11

ANALYSISNODE

I i::i:m::a:i:115 allZElD=.I · · · mm:ma l

Figura 40 Estructuras utilizadas para la representación del árbol retrosintético.

79

Page 85: Síntesis orgánica asistida por computadora

Evaluación global de la ruta sintética

Para poder comparar rutas sintéticas diferentes y decidir cuál es mejor, se

necesita un criterio de evaluación global. Este criterio resulta útil (mas no indispensable)

para un químico que esté planeando una síntesis en forma manual, aunque también

puede apoyarse en su intuición para la evaluación global de la ruta sintética. Sin

embargo, cuando se realiza una búsqueda automática la computadora no cuenta con la

experiencia e intuición del químico, y tiene que basarse únicamente en un criterio que

pueda definirse algorítmicamente.

La medida que debería usarse para evaluar una síntesis es su costo, que

buscamos minimizar. El costo de la síntesis se compone de dos partes: la materia

prima utilizada y el tiempo necesario para realizar las reacciones. Pero como OSET no

conoce directamente estos factores, se ve forzado a utilizar indicadores secundarios.

El costo de una materia prima normalmente es proporcional a la complejidad de

la molécula5• Por esta razón, se busca minimizar la complejidad de las materias primas

utilizadas.

El costo de una síntesis es proporcional a su número de pasos, ya que cada

paso tiene un rendimiento limitado. Dado un requerimiento fijo de molécula objetivo,

entre más larga sea la síntesis, se requerirá una mayor cantidad de materia prima

inicial. Por otro lado, cada paso de la síntesis toma tiempo y consume energía,

reactivos secundarios, solventes, etc. Por estas razones se busca minimizar el número

de pasos de la síntesis.

OSET utiliza un criterio llamado fitness para una evaluación global de la ruta

sintética. Este valor debe minimizarse para obtener una síntesis óptima.

Para el cálculo del fitness se parte de valores de evaluación local. Cada

molécula tiene asociado un valor de complejidad, cuyo cálculo se explicó en el capítulo

3, y cada paso de la ruta sintética tiene asociados dos valores: el rating y la

simplificación, explicados en el capitulo 4. El rating se determina durante la ejecución

de la transformada correspondiente, con base en características estructurales de la

molécula, y está directamente relacionado con el rendimiento. La simplificación se

5 Existen excepciones a esta regla: las moléculas generadas en abundancia por procesos bioquímicos

c?mo 'ª· glucosa, .suelen ser bastante complejas y su costo es bajo. Por esa razón, si existe una síntesi~ b1oqulm1ca para cierta molécula, no se utiliza una síntesis química (por /o menos a nivel industrial).

80

Page 86: Síntesis orgánica asistida por computadora

calcula a partir de la complejidad de la molécula objetivo y sus precursores. El fitness

debe ser una función creciente respecto a la complejidad de las materias primas y

número de pasos de la síntesis, y decreciente respecto al rating y simplificación de

cada paso.

Dividimos el cálculo del fitness en dos funciones independientes, una que toma

en cuenta los factores crecientes y otra los decrecientes. La primera función, llamada

fitness1, se calcula como el máximo de la multiplicación para cada materia prima de su

complejidad por una función que crece exponencialmente relativa a su profundidad en

el árbol de síntesis. Finalmente se normaliza dividiendo entre la complejidad de la

molécula objetivo global de la síntesis. El algoritmo es el siguiente:

fitnessl = O para cada materia prima mp,

fitnessl = max(fitnessl, mp.complejidad * eA(K*mp.profundidad))

fitnessl = fitnessl / objetivo.complejidad

La desventaja del fitness1 como medida de evaluación global es que al tomar en

cuenta únicamente la materia prima de mayor complejidad/profundidad, puede suceder

que al agregar un paso a la síntesis el valor de fitness1 no cambie porque las nuevas

materias primas no son más complejas ni profundas. Esto puede hacer que algunos

pasos no tengan costo aparente.

La función fitness2 toma en cuenta únicamente los factores decrecientes. Para

cada paso de la síntesis se calcula un valor Kl(rating * simplificación). El fitness2 se

calcula multiplicando los valores correspondientes a cada paso lineal de la síntesis, y

obteniendo una media geométrica en los pasos convergentes. El algoritmo es el

siguiente, se ejecuta recursivamente empezando desde la raíz (molécula objetivo):

fitness2(nodo): ret = 1.0; si nodo tiene precursores,

nprec = O; para cada precursor,

++nprec ret *= fitness2(precursor)

ret = ret A (1/nprec) return(ret * K / (nodo.rating *

nodo.simplificacion))

81

Page 87: Síntesis orgánica asistida por computadora

La desventaja del fitness2 como medida de evaluación global es que es poco

tolerante a las transformadas auxiliares (que incrementan la complejidad de una

molécula para crear el retrón de una transformada simplificativa). Otro efecto

indeseable es que si la ruta de síntesis parte de varias materias primas muy simples y

una muy compleja que se utilice en uno de los últimos pasos, el resultado parece

indicar que la síntesis es mejor de lo que se esperarla.

Las desventajas de los criterios fitness1 y fitness2 son complementarias; uno se

concentra demasiado en las materias primas más complejas, y el otro las ignora porque

se enfoca más en acumular la simplificación de los pasos de síntesis. El valor fitness,

que presenta OSET como evaluación global de la síntesis, se calcula como la media de

fitness1 y fitness2.

Realizando pruebas con OSET para comparar las variaciones de fitness

reportadas para cada paso adicional en el análisis retrosintético, y contrastándolo

contra la evaluación intuitiva de un químico, encontramos que en general el fitness

resulta un buen indicador, pero que en ciertas ocasiones se desvía de lo esperado.

Con pruebas adicionales se irá reuniendo información que permita afinar el

indicador para que se apegue más a la evaluación de un químico, para poder mejorar

los resultados de búsquedas automáticas. De cualquier forma, la evaluación de los

usuarios ha sido que es mejor presentarles una lista relativamente grande de posibles

síntesis y permitirles escoger, que tratar de presentar únicamente un "óptimo" a criterio

del programa.

Con esto concluye la descripción del cliente OSET. En el siguiente capítulo se

describen algunas aplicaciones del sistema.

82

Page 88: Síntesis orgánica asistida por computadora

CAPÍTULO 6: EJEMPLOS DE APLICACIÓN

OSET en la educación química

Como se mencionó en el capítulo 1, el objetivo principal de la química orgánica

es la síntesis de nuevos compuestos. Sin embargo, el aprendizaje de esta disciplina

sigue un camino muy diferente. Los estudiantes de química orgánica en la UNAM (y

muchas otras universidades) reciben a lo largo de varios semestres una exposición

exhaustiva de reacciones con sus respectivos mecanismos, condiciones, etc. El

problema es que muchos de ellos nunca logran saltar de este nivel de detalle a una

visión global que les permita analizar efectivamente problemas de síntesis. Como

resultado, los estudiantes no entienden para qué están estudiando las reacciones,

pierden interés, y nunca adquieren los principios generales.

La utilización didáctica de una herramienta computacional para la planeación de

síntesis orgánica tiene efectos positivos sobre los alumnos, al permitirles ver cómo se

relacionan unas reacciones con otras y cómo se aplican en la dirección retrosintética.

Esto se ha observado en los diversos casos mencionados en el capítulo 1; sin

embargo, básicamente por problemas tecnológicos, la utilización de las herramientas

que se propusieron en ese momento no se ha diseminado.

Durante el desarrollo de esta tesis se realizaron algunas pruebas de campo en

las que estudiantes de química utilizaron el sistema OSET. Específicamente en

septiembre de 2000 durante el curso de Desarrollo y Optimización de Procesos de

Síntesis // (una asignatura optativa programada para el último semestre de la

licenciatura en Química de la Facultad de Química de la UNAM) se ofrecieron sesiones

de laboratorio para que los estudiantes utilizaran OSET para planear una síntesis.

El compuesto propuesto fue el 3-(6, 1 O-diisobutil-1,4-dioxaspiro[4.5]dec-8-

il)pentan-3-ol, una estructura imaginaria mejor conocida como "marciano!", y que es

utilizada frecuentemente en la Facultad de Química como ejemplo didáctico. Además

83

Page 89: Síntesis orgánica asistida por computadora

de su nombre y estructura singular, se trata de una molécula moderadamente compleja

ya que cuenta con anillos, ramificaciones y varios grupos funcionales.

En las Figura 41 se presentan varias posibles rutas para la síntesis del

marciano!. Durante la sesión de laboratorio se les pidió a los alumnos que navegaran

por el árbol retrosintético buscando la mejor síntesis posible.

Figura 41 Varias rutas para la síntesis del marciano!

Los alumnos reportaron que el sistema era razonablemente fácil de aprender a usar,

aunque nos obligaron a revisar nuestra suposición de que cualquier persona puede

utilizar un browser sin problemas. Los obstáculos con que se encontraron eran relativos

a la navegación general en Internet más que al uso del sistema OSET.

Algunas otras observaciones de las pruebas de campo fueron:

• El applet para dibujo de estructuras les causó cierta dificultad, ya que utiliza

convenciones distintas a las de los programas de dibujo de estructuras más

populares entre los estudiantes de química. Sin embargo, pudieron dominarlo en un

tiempo relativamente corto. Independientemente de esto, el usuario tiene la libertad

de dibujar la molécula utilizando cualquier otro programa que pueda generar

archivos MOLFILE, y posteriormente cargarlo en OSET para su análisis.

• Durante las pruebas se encontraron varios bugs en el sistema OSET, que no habían

aparecido durante pruebas con un número limitado de usuarios simultáneos. Estos

errores han sido corregidos, y esperamos que con el apoyo de un proyecto open

source cualquier otro problema que surja pueda ser corregido en poco tiempo.

• No todas las computadoras pudieron correr el applet cliente OSET

satisfactoriamente. Esto se debía a browsers mal configurados u obsoletos, pero

84

Page 90: Síntesis orgánica asistida por computadora

esperamos que con el tiempo el problema se vaya corrigiendo al surgir nuevas

versiones de estos programas.

• En algunos casos, por ejemplo al utilizar computadoras en el ITESM, nos

encontramos con que el proxy bloqueaba el puerto utilizado para la comunicación

cliente/servidor. Este es un efecto desafortunado, que solamente hemos podido

evitar tratando de utilizar otros puertos libres, pero no es sencillo predecir si en otros

lugares del mundo aparezcan los mismos problemas.

• Para utilizar OSET en la planeación de una síntesis compleja, los estudiantes

tuvieron que explorar varias posibilidades, aplicando sus conocimientos. El sistema

no les "resolvía la tarea", sino que funcionaba como una herramienta auxiliar para

ayudarles a pensar más rápidamente, o sugerirles caminos que normalmente no se

les hubieran ocurrido.

En general las experiencias con estudiantes de química fueron positivas, ya que

pudieron utilizar el sistema para explorar una síntesis moderadamente compleja,

encontrando rutas sintéticas de interés químico. Los estudiantes obtuvieron una nueva

visión sobre la actividad de análisis retrosintético.

Reproducción de una síntesis publicada (Juvabiona)

Con el fin de evaluar las posibles aplicaciones de OSET, químicos en la UNAM

utilizaron el sistema para reproducir algunas síntesis publicadas. Sus conclusiones

fueron que OSET maneja una cantidad adecuada de estructuras químicas (grupos

funcionales, anillos, etc.) y su base de datos de transformadas es suficiente para

generar rutas retrosintéticas completas para moléculas no triviales. Sin embargo, no

siempre es sencillo encontrar estas rutas, ya que el usuario debe tener una idea acerca

de la estrategia que desea utilizar, y aplicar las transformadas auxiliares que permitan

lograr la desconexión deseada.

En este momento OSET resulta una herramienta interesante para el químico,

pero su funcionamiento no es automático. Esto nos indica un área de oportunidad que

podría atacarse en futuras aportaciones a este trabajo.

La juvabiona, molécula mostrada en la Figura 42, es una substancia producida

por las coníferas, similar a una hormona de insecto perjudicial; por ello, podría utilizarse

85

Page 91: Síntesis orgánica asistida por computadora

para el control natural de las plagas, evitando que los insectos alcancen la madurez

(Warren, 1978). Se localizaron dos síntesis publicadas para este compuesto y se

reprodujeron con OSET.

o

Juvabiona

Figura 42 Estructura molecular de juvabiona

La síntesis de Ayyar y Rao (1968), mostrada en la Figura 43, pudo reproducirse

con OSET, ya que todas las transformadas utilizadas se encuentran en la base de

datos (las reacciones correspondientes son ampliamente conocidas y se estudian

durante cursos de Química a nivel Licenciatura). Sin embargo, sería raro encontrar esta

síntesis en un primer análisis, ya que algunos pasos como el 5-6 y 9-10, que buscan

"proteger" el alcohol, normalmente se agregan a la síntesis en un momento posterior; lo

mismo sucede con los pasos 2-3 y 10-11. El paso 9-1 O aparece en OSET como dos

reacciones independientes, aunque en la práctica pueden realizarse simultáneamente.

-- 1 -- 1 -- 11 --~ ~ \Ü o OMe O .& OMe HO .& OMe HO OMe

1 2 3 4

P-J:. \Ú -- \Ú't.o-- ~o -- \Ú't.o ·o CN HO O O OH OH O Me

9 10 11 Juvablona

Figura 43 Slntesis de juvabiona de Ayyar y Rao (1968)

En resumen, la síntesis de Ayyar y Rao puede reproducirse con OSET, pero

sería raro que un usuario la encontrara por accidente. Esta síntesis aplica varios pasos

86

Page 92: Síntesis orgánica asistida por computadora

que requieren un conocimiento qulmico de parte del usuario para pedir y seleccionar

transformadas auxiliares.

Otra síntesis publicada es la de Mori y Matsui (1967), que tiene la ventaja de

empezar con un compuesto más sencillo que en la síntesis de Ayyar y Rao. Esta

síntesis se muestra en la Figura 44.

º~~ ·~Uu-.QMe OMe

EtO~ ---- HO~ ----- UOMe - UOMe

12 13 14 15

M ---- ~ ---- M ____ M ____ HO~ ~OMe HO~ ~o HO~ '-...Ao Ac.o~ '-...Ao

4 5 19 7

Ac. ,S:OoH ___ Ac. {o- \Ü't.0 ---- \Ü't.0 ----O CN O CN HO O OH OH

8 9 10 11

Mº O~~Me

Juvabiona

Figura 44 Síntesis de juvabiona de Morí y Matsui (1967)

La síntesis de Mori y Matsui también puede reproducirse con OSET, aunque los

pasos 17-18 y 12-13 deben realizarse utilizando reacciones alternativas, ya que la base

de datos no cuenta con las transformadas correspondientes a las reacciones utilizadas

por los autores. La síntesis sugerida por OSET resulta más corta.

De esta síntesis también se concluye que aunque OSET difícilmente propone

rutas de síntesis "listas para usarse", puede ayudar a proponer un esquema que debe

ser afinado por un químico con experiencia.

87

Page 93: Síntesis orgánica asistida por computadora

CAPÍTULO 7: CONCLUSIONES

Los aspectos computacionales de la síntesis orgánica presentan un reto

interesante. Durante el desarrollo de esta tesis se buscó proponer una solución

concreta a estos problemas computacionales a través del sistema OSET.

Por supuesto, hay oportunidades de mejora, sobre todo en las siguientes áreas:

• Percepción de grupos funcionales

• Evaluación global de rutas sintéticas

• Búsqueda automática

Al liberar el código fuente a la comunidad, se ofrece la posibilidad de que otras

personas trabajen para mejorar estos aspectos (y otros), buscando que la actividad

colaborativa resulte en una oportunidad para el aprendizaje conjunto.

En principio el sistema OSET puede usarse para la planeación de síntesis en

cualquier ámbito (incluyendo actividades de investigación o industriales). Sin embargo,

la primera aplicación que se sugiere es su utilización como un auxiliar para la

enseñanza. En las pruebas realizadas se ha encontrado que el sistema puede

presentar la actividad de síntesis a los estudiantes de una manera concreta,

permitiéndoles interactuar con ella y, en el mejor de los casos, facilitar su comprensión.

Para ver si realmente esto tiene efectos positivos, es necesario que el sistema se utilice

más ampliamente.

Se hace la invitación a que cualquier persona interesada en el área de la síntesis

orgánica asistida por computadora utilice esta tesis, ya sea como una solución de

referencia a los problemas computacionales involucrados, o como una herramienta

educativa o para la planeación de síntesis. Espero que resulte de utilidad.

Para quien desee más información, el hogar del proyecto OSET se encuentra

actualmente en:

http://litio.pquim.unam.mx/caos

88

Page 94: Síntesis orgánica asistida por computadora

REFERENCIAS

ABRAHAMS, P.W.; LARSON, B.R. (1992): UNIX for the lmpatient. Reading, MA: Addison­Wesley.

AHO, A.V., HOPCROFT, J.E.; ULLMAN, J.O. (1974): The Design and Analysis of Computer Algorithms. Reading, MA: Addison-Wesley.

AHo, A.V., SETHI, R.; ULLMAN, J.O. (1986): Compilers. Principies, Techniques and Tools. Reading, MA: Addison-Wesley.

AYYAR, S., K.; RAO, G. S. K. (1968): "Studies in Terpenoids. IV. Synthetic Studies in Juvabiones and Analogues. Conversion of ar-(+)-turmerone to ar-(+)-juvabione". Ganad. J. Chem. 46, 1467-1472, 1968.

BAASE, S.; VAN GELDER, A. (2000): Computer Algorithms, lntroduction to Design and Analysis. Reading, MA: Addison-Wesley (3ra. edición).

BALAKRISHNAN, R.; RANGANATHAN, K. (2000): A Textbook of Graph Theory. New York: Springer-Verlag.

BARONE, R.; CHANON, M. (1986): "Computer-Aided Organic Synthesis (CAOS)" en Vernin, G.; Chanon, M. (eds.) Computar Aids to Chemistry. Ellis Horwood, 1986, pp. 19-102.

BEEKMAN, G. (1994): Computer Currents. Navigating Tomorrow's Technology. Redmond City, CA: Benjamin/Cummings.

BERGE, K. (1990): Graphs. Amsterdam: North Holand, 1991 (3ra. edición).

BERTRAND, M.P.; MONTI, H.; BARONE, R. (1986): "Computer-Assisted Organic Synthesis: An Undergraduate Experiment". J. Chem. Educ., 63, 624, 1986.

BRANDT, J. ET AL. (1977): "Computer Programs for the Oeductive Solution of Chemical Problems on the Basis of a Mathematical Model of Chemistry" en Wipke, W.T.; Howe, W.J. (eds.) Computer-Assisted Organic Sythesis. Washington: ACS, 1977.

COMER, O.E. (1995): lntemetworking with TCP/IP. Principies, Protocols and Architecture (volumen 1). Upper Saddle River, NJ: Prentice-Hall (tercera edición).

COMER, O.E. & STEVENS, 0.L. (1996): lntemetworking with TCPIIP. Client-Server Programming and Applications (volumen 111). Upper Saddle River, NJ: Prentice­Hall (segunda edición).

COREY, E.J. (1971): Quart. Rev. Chem. Soc. 25, 455, 1971.

COREY, E.J.; CHENG, X. (1989): The Logic of Chemical Synthesis. New York: Wiley (segunda edición).

COREY, E.J.; LONG, A.K.; RUBENSTEIN, S.O. (1985): "Computer-Assisted Analysis in Organic Synthesis". Science, 228, 408-418, 1985.

89

Page 95: Síntesis orgánica asistida por computadora

COREY, E.; WIPKE, W.T. (1969): "Computer-Assisted Design of Complex Organic Syntheses". Science, 166, 178-192, 1969.

CORMEN, T.H., LEISERSON, e.E.; RIVEST, R.L. (1990): lntroduction to Algorithms. Cambridge, MA: McGraw-Hill.

CSIZMADIA, F. (2000): "JChem: Java Applets and Modules Supporting Chemical Database Handling from Web Browsers". J. Chem. lnf. Comput. Sci. 40, 323-324, 2000.

DALBY, A. ET AL. (1992): "Description of Several Chemical Structure File Formats Used by Computar Programs Developed at Molecular Design Limitad". J. Chem. lnf. Comput. Sci., 32, 244-255, 1992.

FIGUERAS, J. (1996): "Ring Perception Using Breadth-First Search". J. Chem. lnf. Comput. Sci., 36, 986-991, 1996.

FUJITA, S. (1988): "A New Algorithm for Selection of Synthetically lmportant Rings. The Essential Set of Essential Rings for Organic Structures". J. Chem. lnf. Comput. Sci. 28, 78-82, 1988.

GASTEIGER, J.; JOCHUM, C. (1979): "An Algorithm for the Perception of Synthetically lmportant Rings". J. Chem. lnf. Comput. Sci. 19, 43-48, 1979.

GUNDAVARAM, S. (1996): CGI Programming on the World Wide Web. Sebastopol, CA: O'Reilly.

HAGGIN, J. (1983): "Computers Shift Chemistry to More Mathematical Basis". C&EN, 7-20, may 9, 1983.

HANSER, T.; JAUFFRET, P.; KAUFMANN, G. (1996): "A New Algorithm for Exhaustive Ring Perception in a Molecular Graph". J. Chem. lnf. Comput. Sci. 36, 1146-1152, 1996.

HENDRICKSON, J. (1990): "Organic Synthesis in the Age of Computers". Angew. Chem. lnt. Ed. Engl., 29, 1286-1295, 1990.

HIPPE, Z.S.; F1c, G.; MAZUR, M. (1992): "A Preliminary Appraisal of Selected Problems in Computer-Assisted Organic Synthesis". Recl. Trav. Chim. Pays-Bas, 111, 255-261, 1992.

HOFFMANN, R. (1995): Lo mismo y no lo mismo. México: Fondo de Cultura Económica, 1997.

HORTON, J.D. (1987): "A Polynomial-Time Algorithm to Find the Shortest Cycle Basis of a Graph." SIAM J. Comput., 16(2): 358-366, 1987.

IHLENFELDT, W.; GASTEIGER, J. (1995): "Computer-Assisted Planning of Organic Syntheses: The Second Generation of Programs". Angew. Chem. lnt. Ed. Engl., 34, 2613-2633, 1995.

KREBSBACH, D.; GELERNTER, H.; SIEBURTH, S. (1998): "Distributed Heuristic Synthesis Search". J. Chem. lnf. Comput. Sci., 38, 595-604, 1998.

LINDHOLM, T.; YELLIN, F. (1997): The Java Virtual Machine Specification. Reading, MA: Addison-Wesley.

90

Page 96: Síntesis orgánica asistida por computadora

LINTHICUM, D. (1997): David Linthicum's Guide to Client/Server and Intranet Development. New York: Wiley.

McGRAw, G.; FELTEN, E. (1999): Securing Java. Getting Down to Business with Mobile Code. New York: Wiley.

MORGAN, H. L. (1965): "The Generation of a Unique Machine Description far Chemical Structures-A Technique Developed at Chemical Abstracts Service". J. Chem. Doc. 5, 107-113, 1965.

MORI, K.; MATSUI, M. (1967): "Synthesis of Compounds with Juvenile Hormone Activity-1 (±)-Juvanione (Methyl (±)-Todomatuate)". Tetrahedron 24, 3127-3138, 1967.

NICOLAOU, K.C.; SoRENSEN, E.J. (1996): Classics in Total Synthesis: Targets, Strategies, Methods. VCH: Alemania.

NORTHRUP, C.J. (1996): Programming with UNIX Threads. New York: Wiley.

ORF, H.W. (1975): "Computer-Assisted lnstruction in Organic Synthesis". J. Chem. Educ., 52, 464-467, 1975.

REYNOLDS, M. (2000): Begginning E-Commerce. UK: Wrox.

Roos-KozEL, B. L.; JoRGENSEN, W. L. (1981): "Computer-Assisted Mechanistic Evaluation of Organic Reactions. 2. Perception of Rings, Aromaticity, and Toutomers". J. Chem. lnf. Comput. Sci. 21, 1 O 1-111, 1981.

SALATIN, T.; JORGENSEN, W. (1980): "Computer-Assisted Mechanistic Evaluation of Organic Reactions. Overview." J. Org. Chem., 45, 2043-2050, 1980.

SCHUMMER, J. (1997): "Challenging Standard Distinctions between Science and Technology: The Case of Preparative Chemistry". HYLE-An lntemational Journal for the Philosophy of Chemistry, 3, 81-94, 1997.

SERRATOSA, F. (1975): Heurisko, introducción a la síntesis orgánica. Barcelona: Alhambra.

SILVERMAN, J.H. (1997): A Friendly lntroduction to Number Theory. Upper Saddle River, NJ: Prentice-Hall.

SINHA, A.K. (1996): Network Programming in Windows NT. Reading, MA: Addison­Wesley.

SMIT, W. ET AL. (1988): Organic Synthesis, The Science behind the Arl. Cambridge: The Royal Society of Chemistry.

SMITH, S.G. (1971): "Computer-Aided Teaching of Organic Synthesis". J. Chem. Educ., 48, 727-729, 1971.

STEVENS, W.R. (1990): UNIX Network Programming. Englewood Cliffs, NJ: Prentice­Hall.

STOLOW, R.O.; JONCAS, L.J. (1980): "Computer-Assisted Teaching of Organic Synthesis". J. Chem. Educ., 57, 868-873, 1980.

Tou, J.T.; GONZALEZ, R.C. (1974): Pattern Recognition Principies. Reading, MA' Addison-Wesley, 197 4. .

91

Page 97: Síntesis orgánica asistida por computadora

VISMARA, P. (1997): "Union of AII the Minimum Cycle Bases of a Graph". The Electronic Journal of Combinatorics 4, #R9, 1-15, 1997.

WADE, L.G. (1993): Química Orgánica. México: Prentice-Hall (segunda edición).

WARREN, S. (1978): Diseño de síntesis orgánica: introducción programada al método del sintón. Alhambra, 1983.

WEININGER (1988): "SMILES, a Chemical Language and lnformation System. 1. lntroduction to Methodology and Encoding Rules". J. Chem. lnf. Comput. Sci. 28, 31-36, 1988.

WEININGER, D.; WEININGER, A.; WEININGER, J.L. (1989) "SMILES. 2. Algorithm for Generation of Unique SMILES Notation". J. Chem. lnf Comput. Sci. 29, 97-101, 1989.

WILDE, E. (1999): Wilde 's WWW. Technica/ Foundations of the World Wide Web. Berkeley, CA: Springer-Verlag.

WIPKE, W.T., GUND, P. (1974): J. Am. Chem. Soc. 96, 299, 1974.

Referencias en WWW

ELECTRONIC NOBEL MUSEUM PROJECT: "The 1990 Nobel Prize in Chemistry." http://www.nobel.se/laureates/chemistry-1990-press.html (consultado en mar/00).

FREDGA, A. "The Electronic Nobel Museum Project: Nobel Prize in Chemistry 1965". http://www.nobel.se/laureates/chemistry-1965-press.html (consultado en mar/00).

FREE SOFTWARE FOUNDATION: "The Free Software Definition." http://www.gnu.org/philosophy/free-sw.html (consultado en abr/01 ).

NETSIZER: "Evaluating the Size of the Internet." http://www.netsizer.com (consultado en feb/01).

NuA: "Nua Internet How Many Online." http://www.nua.ie/surveys/how_many_online/index.html (consultado en feb/01).

92