Descarga la aplicación para disfrutar aún más
Vista previa del material en texto
.... _ ·• 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 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 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 Í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 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 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 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 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 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 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ódigofuente 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 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 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 (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 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 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 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 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 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 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 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 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 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 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 programasde 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 • 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 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 ', 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 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, independientementedel 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 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 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 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 verificanal 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 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 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 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 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ónestá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 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 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 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 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 aplicaruna 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 (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 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 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 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 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,
Compartir