Figura 4
La interfaz gráfica de usuario de Avogadro. Tomada en Mac OS X, mostrando la interfaz de edición de una molécula.
El conjunto de herramientas Qt da a Avogadro un aspecto nativo en los tres principales sistemas operativos soportados-Linux, Apple Mac OS X y Microsoft Windows. Se ha implementado la funcionalidad básica esperada en un constructor y visor molecular, junto con varias características menos comunes. Es muy fácil para los nuevos usuarios instalar Avogadro y construir sus primeras moléculas en cuestión de minutos. Gracias a la biblioteca Open Babel , Avogadro soporta una gran parte de los formatos de archivos químicos de uso común. La gran mayoría de esta funcionalidad se ha escrito utilizando la interfaz puesta a disposición de los escritores de plugins, y se carga en tiempo de ejecución. Discutiremos estas interfaces de plugin y las descripciones de los tipos de plugin más adelante.
Química semántica
Avogadro ha utilizado CML como su formato de archivo por defecto desde una etapa muy temprana; esto fue elegido sobre otros formatos de archivo debido a la estructura extensible y semántica proporcionada por CML, y el apoyo disponible en Open Babel . El formato CML ofrece una serie de ventajas con respecto a otros de uso común, como la posibilidad de ampliar el formato. Esto permite que Avogadro y otros programas estén preparados para el futuro, añadiendo nueva información y características necesarias para un editor avanzado con conciencia semántica en un momento posterior, sin dejar de ser legible en versiones anteriores de Avogadro.
A través del uso de Open Babel , se puede interpretar una gran variedad de formatos de archivo. Al ampliar Avogadro para leer mayores cantidades de la salida de los códigos cuánticos, fue necesario dedicar importantes recursos de desarrollo para comprender y añadir significado semántico a la salida del código cuántico. Este trabajo se desarrolló en un plugin, que posteriormente se dividió en una pequeña biblioteca independiente llamada OpenQube . Más recientemente, el proyecto Quixote, JUMBO-Converters y el taller de Ciencia Física Semántica han realizado una gran cantidad de trabajo para aumentar los códigos cuánticos y obtener más datos directamente del código. Dado que CML puede ser extendido, es posible reutilizar las convenciones existentes para los datos de la estructura molecular, y añadir nuevas convenciones para los datos cuánticos adicionales.
Construyendo una molécula: átomo por átomo
Después de abrir Avogadro se presenta una ventana como la que se muestra en la Figura 4. Por defecto, la herramienta de dibujo está seleccionada. Un simple clic con el botón izquierdo del ratón en la parte negra de la pantalla permite al usuario dibujar un átomo de carbono. Si el usuario presiona el botón izquierdo del ratón y lo arrastra, se dibuja un átomo de carbono enlazado entre el punto de inicio y la posición final en la que se suelta el ratón.
Se ha realizado un gran esfuerzo para crear una herramienta intuitiva para dibujar moléculas pequeñas. Los elementos químicos comunes se pueden seleccionar de una lista desplegable, o se puede mostrar una tabla periódica para seleccionar elementos menos comunes. Al hacer clic en un átomo existente, éste se convierte en el elemento actualmente seleccionado; si se arrastra, el átomo vuelve a su elemento anterior y se dibuja un nuevo átomo unido al original. Si se hace clic con el botón izquierdo del ratón en los enlaces, el orden de los mismos cambia entre simple, doble y triple. También se dispone de teclas de acceso rápido, por ejemplo, al escribir el símbolo atómico (por ejemplo, «C-o» para el cobalto) se cambia el elemento seleccionado, o al escribir los números «1», «2» y «3» se cambia el orden de los enlaces.
Al hacer clic con el botón derecho del ratón en los átomos o enlaces se borran. Si la casilla «Ajustar hidrógenos» está marcada, el número de hidrógenos unidos a cada átomo se ajusta automáticamente para satisfacer la valencia. Alternativamente, esto también se puede hacer al final de una sesión de edición utilizando la extensión «Añadir hidrógenos» en el menú de construcción.
Además de la herramienta de dibujo, hay dos herramientas para ajustar la posición de los átomos en las moléculas existentes. La herramienta «atom centric manipulate» puede utilizarse para mover un átomo o un grupo de átomos seleccionados. La herramienta «manipular centrado en el enlace» se puede utilizar para seleccionar un enlace y, a continuación, ajustar la posición de todos los átomos en relación con el enlace seleccionado de varias maneras (por ejemplo, alterando la longitud del enlace, los ángulos de enlace o los ángulos diedros). Estas tres herramientas permiten una gran flexibilidad en la construcción de pequeñas moléculas de forma interactiva en la pantalla.
Una vez que la estructura molecular está completa, la extensión del campo de fuerza se puede utilizar para realizar una optimización de la geometría. Haciendo clic en «Extensions» y «Optimize Geometry» se realiza una rápida optimización de la geometría de la molécula. El campo de fuerza y los parámetros de cálculo pueden ajustarse, pero los valores por defecto son adecuados para la mayoría de las moléculas. Este flujo de trabajo es típico cuando se construyen pequeñas estructuras moleculares para su uso como entrada a los cálculos cuánticos, o figuras de calidad de publicación.
Una alternativa es combinar la herramienta «Auto Optimization» con la herramienta de dibujo. Esto presenta una forma única de esculpir la molécula mientras la geometría se minimiza constantemente en el fondo. La optimización de la geometría es animada, y el efecto de cambiar el orden de los enlaces, añadir nuevos grupos o eliminar grupos puede observarse de forma interactiva.
Se implementan varios diálogos para proporcionar información sobre las propiedades de la molécula y para cambiar con precisión los parámetros, como las coordenadas cartesianas de los átomos de la molécula.
Construir una molécula: a partir de fragmentos
Además de construir moléculas átomo a átomo, los usuarios pueden insertar fragmentos preconstruidos de moléculas comunes, ligandos o secuencias de aminoácidos, como se muestra en la Figura 5. En todos los casos, después de insertar el fragmento, se selecciona la herramienta de manipulación centrada en el átomo, lo que permite mover o rotar el fragmento en su posición fácilmente.
Figura 5
Diálogos para insertar fragmentos preconstruidos. La izquierda muestra moléculas, y la derecha secuencias de aminoácidos.
Los usuarios también pueden insertar una cadena SMILES para una molécula. En este caso, se genera una geometría 3D aproximada utilizando Open Babel y una rápida optimización del campo de fuerza.
Preparación de la entrada para los códigos cuánticos
Se han desarrollado varias extensiones para Avogadro que ayudan al usuario a preparar los archivos de entrada para los códigos cuánticos más populares como GAMESS-US, NWChem, Gaussian, Q-Chem, Molpro y MOPAC200x . Los diálogos gráficos presentan las características necesarias para ejecutar cálculos cuánticos básicos; algunos ejemplos se muestran en la Figura 6.
Figura 6
Diálogo para generar la entrada para los códigos cuánticos. Diálogos para generar entradas para Q-Chem, NWChem, Molpro y MOPAC200x. Tenga en cuenta que los diálogos son similares en la interfaz, lo que permite a los usuarios utilizar múltiples paquetes de química computacional.
La vista previa del archivo de entrada en la parte inferior de cada diálogo se actualiza a medida que se cambian las opciones. Este enfoque ayuda a los nuevos usuarios de los códigos cuánticos a aprender la sintaxis de los archivos de entrada para diferentes códigos, y a generar rápidamente archivos de entrada útiles a medida que aprenden. La entrada también puede editarse a mano en el diálogo antes de guardar el archivo y enviarlo al código cuántico. La extensión MOPAC también puede ejecutar el programa MOPAC200x directamente si está disponible en el ordenador del usuario, y luego recargar el archivo de salida en Avogadro una vez completado el cálculo. Esta característica se extenderá a otros códigos cuánticos en futuras versiones de Avogadro.
El plugin GAMESS-US es uno de los más desarrollados, presentando un diálogo básico presente en la mayoría de los otros generadores de mazos de entrada, así como un diálogo avanzado que expone muchos de los tipos de cálculo más inusuales y complejos. Además del cuadro de diálogo avanzado, el mazo de entrada puede editarse en línea y cuenta con el resaltado de sintaxis (Figura 7) que se utiliza en muchos editores populares dirigidos a los desarrolladores de software. Esto puede indicar simples errores de escritura en las palabras clave, así como errores de espacio en blanco más difíciles de detectar que de otro modo harían que la cubierta de entrada editada a mano fallara al ser leída por GAMESS-US.
Figura 7
El generador de mazos de entrada de GAMESS-US. Este generador de entradas tiene un panel avanzado y resaltado de sintaxis.
Alineación y medidas
Una de las herramientas especializadas incluidas en la distribución estándar de Avogadro es la herramienta de alineación. Esta herramienta del ratón facilita la alineación de una estructura molecular con el origen de coordenadas si se selecciona un átomo, y a lo largo del eje especificado si se seleccionan dos átomos. La herramienta de alineación puede combinarse con las herramientas de medición, selección y manipulación para crear entradas para códigos cuánticos en los que la posición y la orientación de la molécula son importantes. Un ejemplo de esto son los cálculos en los que se aplica un campo eléctrico externo a la molécula. En este tipo de cálculos, la alineación de la molécula puede tener un gran efecto. La figura 8 muestra la herramienta de medición en acción con el diálogo de configuración de la herramienta de alineación visible en la esquina inferior izquierda.
Figura 8
La herramienta de medición. La herramienta de medición que se utiliza para medir ángulos y longitudes de enlace (en Linux con KDE 4).
Se podrían crear herramientas de alineación más complejas para tareas específicas. La herramienta de alineación fue creada en pocas horas para un proyecto de investigación específico. Este es un ejemplo excelente en el que la extensibilidad era muy importante para realizar una investigación utilizando una herramienta de química computacional gráfica. No valdría la pena la inversión de crear una nueva aplicación sólo para alinear estructuras moleculares a un eje, pero crear un plugin para un proyecto extensible no es descabellado.
Visualización
La aplicación Avogadro utiliza OpenGL para renderizar representaciones moleculares a la pantalla de forma interactiva. OpenGL ofrece una API de alto nivel y multiplataforma para renderizar imágenes tridimensionales utilizando gráficos acelerados por hardware. En la mayor parte del código de renderizado se utiliza OpenGL 1.1 e inferior, por lo que Avogadro puede utilizarse incluso en sistemas informáticos más antiguos o sin gráficos acelerados más modernos. Es capaz de aprovechar algunas de las nuevas características disponibles en OpenGL 2.0 como se describe a continuación, pero esto se ha mantenido como una característica extra opcional cuando se trabaja en nuevas visualizaciones de la estructura molecular.
Representaciones estándar
En química, hay varias representaciones estándar de la estructura molecular, originalmente basadas en las posibles con modelos físicos. La aplicación Avogadro implementa cada una de estas representaciones mostradas en la Figura 2 como un plugin. Éstas van desde la representación simple de marco de alambre, palo/licorrea, bola y palo, y esferas de Van der Waals.
También es posible combinar varias representaciones, como la bola y el palo con la representación de anillos (Figura 2 (d)), y una representación semitransparente de llenado de espacio de Van der Waals con una representación de palo para elucidar la columna vertebral molecular (Figura 2 (f)).
Cálculos cuánticos y estructura electrónica
Los códigos cuánticos se desarrollaron originalmente para impresoras de líneas, y desafortunadamente poco ha cambiado desde entonces en los archivos de registro estándar. Hay varios formatos desarrollados para su uso en otros códigos y específicamente para la visualización y el análisis, pero hay poco acuerdo sobre cualquier formato de archivo estándar en la comunidad de la química cuántica computacional. Se desarrolló un plugin en Avogadro para visualizar la salida de varios códigos cuánticos, y obtener los datos en el formato adecuado para su posterior visualización y análisis.
Inicialmente se añadió y amplió el soporte en Open Babel para los archivos de cubos gaussianos. Este formato proporciona coordenadas atómicas y una o más cuadrículas regularmente espaciadas de valores escalares. Esto se puede leer y se pueden utilizar técnicas como el algoritmo de cubos de marcha para calcular mallas triangulares de isosuperficies en valores de densidad de electrones, por ejemplo. Una vez que se ha desarrollado el código para visualizar estas isosuperficies, quedó claro que sería útil poder calcular estos cubos sobre la marcha, y a diferentes niveles de detalle dependiendo del uso previsto.
El primer formato, que estaba algo documentado en el momento en que se desarrolló, es el formato gaussiano de punto de control. Este formato es mucho más fácil de analizar que los archivos de registro generados a medida que el programa se ejecuta, y proporciona todos los detalles necesarios para calcular los valores escalares del orbital molecular o la densidad de electrones en cualquier punto del espacio. Una vez que se desarrolló una estructura de clases para los orbitales de tipo gaussiano, el enfoque se amplió para leer otros formatos de archivo de salida populares, como Q-Chem, GAMESS-US, NWChem y Molpro. Más tarde se añadió el soporte de MOPAC200x, junto con el soporte para el formato AUX y los orbitales de tipo Slater utilizados en ese código. Todos estos códigos dan salida a sus configuraciones finales utilizando la combinación lineal estándar de orbitales atómicos, lo que significa que la paralelización es extremadamente sencilla.
El plugin fue desarrollado para aprovechar el enfoque map-reduce ofrecido por QtConcurrent con el fin de utilizar todos los núcleos de procesador disponibles. Esto ofrece un escalado casi lineal ya que cada punto de la malla puede ser calculado independientemente de todos los demás puntos, cuyos resultados pueden verse en la Figura 9. Un enfoque alternativo para el cálculo de los orbitales moleculares se desarrolló en un segundo plugin que desde entonces se ha dividido en un proyecto separado llamado «OpenQube». La biblioteca «OpenQube» también se ha añadido como un backend opcional en VTK durante el Google Summer of Code de 2011, aportando soporte para varios formatos de archivo de salida y el cálculo de archivos de cubos que posteriormente pueden ser alimentados en tuberías de datos más avanzadas.
Figura 9
Orbitales y superficies moleculares. Representación de una isosuperficie orbital molecular (izquierda) y de un potencial de superficie electrostático mapeado en la densidad de electrones (derecha).
Se proporciona una jerarquía de clases con una API estándar para la salida cuántica. La adición de soporte para nuevos códigos implicó el desarrollo de un nuevo analizador sintáctico y la garantía de que el conjunto de Gauss o Slater se rellena con el ordenamiento correcto y el esquema de normalización esperado. Se admiten los orbitales gaussianos de tipo s, p y d, y está previsto que se admitan los de tipo f y g para dar soporte al creciente número de cálculos que utilizan estos orbitales de orden superior. El intercambio de conjuntos de bases alojado en EMSL proporciona acceso a los conjuntos de bases de uso común, aunque en la actualidad estos conjuntos de bases suelen leerse directamente de los archivos de salida. Hay varios proyectos relacionados para añadir significado semántico a este tipo de salida, incluyendo el proyecto JUMBO-Converters y Quixote. Se espera que más códigos adopten la salida semántica en el futuro, utilizando un formato común para que el intercambio de datos, la validación y el análisis sean más fáciles entre varios códigos. Este fue el tema de una reciente reunión en la que varios códigos de química computacional empezaron a utilizar FoX para dar salida a CML. Se ha comenzado a desarrollar un código para leer la salida de CML, ya sea directamente desde los códigos o desde la conversión de otros formatos utilizando Open Babel o los convertidores JUMBO. Si se puede añadir suficiente estructura semántica a CML, y los convertidores soportan una gama suficientemente amplia de la salida, esto podría reemplazar la mayor parte del código de análisis sintáctico presente en OpenQube. El significado semántico es uno de los más difíciles de extraer de los archivos de registro, y unirse como comunidad ayudará a proyectos como Avogadro a obtener más significado de las salidas de estos códigos.
Estructura biológica secundaria
Avogadro utiliza el lector PDB de Open Babel para leer la estructura biológica secundaria. Existen dos plugins para procesar y renderizar esta información. El primero es un plugin que renderiza un simple tubo entre los átomos de la columna vertebral de la biomolécula. Un segundo plugin más avanzado calcula mallas para las hélices alfa y las hojas beta. Mientras que el primer plugin es mucho más rápido, el plugin avanzado produce con mayor precisión el resultado esperado en el campo. Esto permite a los usuarios flexibilidad para renderizar estructuras biológicas secundarias.
GLSL, visualización novedosa
GLSL, o Lenguaje de Sombreado OpenGL, es una sintaxis parecida a C que puede utilizarse para desarrollar código que se ejecutará en tarjetas gráficas y que se incluye en la especificación OpenGL 2.0. Se ha utilizado con gran éxito en la industria de los juegos, así como en muchos ámbitos de la visualización de datos. Varios trabajos recientes destacan el potencial en química, como QuteMol al añadir soporte para características como la oclusión ambiental para añadir profundidad a las imágenes.
Avogadro tiene soporte para programas de sombreado de vértices y fragmentos, y varios ejemplos se incluyen en el paquete. Si la tarjeta gráfica del usuario es capaz, estos programas pueden cargarse en tiempo de ejecución y utilizarse con gran efecto para visualizar la estructura. Algunos de ellos incluyen técnicas de síntesis como el renderizado de isosuperficies, en el que sólo son visibles los bordes ortogonales al plano de visión, lo que proporciona una representación mucho mejor de la estructura molecular y electrónica (Figura 10).
Figura 10
Rendimiento de orbitales moleculares utilizando shaders GLSL. Renderización de una isosuperficie de orbitales moleculares utilizando dos shaders GLSL para resaltar los bordes de las superficies. El efecto de rayos X (izquierda) y rojo y azul (derecha) mostrando las formas orbitales moleculares positivas y negativas.
Trazado de rayos
Avogadro utiliza una abstracción de pintor que hace mucho más fácil para los desarrolladores añadir nuevos tipos de visualización. También abstrae el renderizador, haciendo posible añadir soporte para backends alternativos. Actualmente sólo se soportan OpenGL y POV-Ray. Debido a la abstracción, podemos utilizar las superficies implícitas disponibles en los trazadores de rayos para renderizar la estructura molecular con niveles muy altos de claridad y sin ninguno de los artefactos triangulares presentes en las imágenes renderizadas de OpenGL estándar. La transparencia y la reflexión de mayor calidad también permiten que las imágenes se utilicen en pósteres y presentaciones orales, así como en artículos de investigación (Figura 11).
Figura 11
Isuperficies HOMO trazadas por rayos de densidad cúbica variable. Renderizado de una isosuperficie orbital molecular usando POV-Ray con cubos de baja (izquierda) y alta (derecha) densidad.
Esta característica está implementada en una extensión, con una clase pintora adicional que deriva de la clase base y un diálogo que permite al usuario editar los controles básicos de renderizado. El archivo de entrada de POV-Ray también puede conservarse y editarse para producir imágenes más complejas, o para permitir un control mucho más fino del proceso de renderizado si se desea.
La biblioteca Avogadro en uso
El primer uso de la biblioteca Avogadro fue la aplicación Avogadro, seguida de cerca por el programa de la tabla periódica Kalzium que forma parte de la colección de software KDE. Este trabajo inicial fue financiado en parte por el programa Google Summer of Code en 2007, y también dio lugar a la adición de varias otras características en la biblioteca Avogadro para apoyar Kalzium y la visualización y edición general de la estructura molecular (Figura 12).
Figura 12
La aplicación Kalzium en KDE usando Avogadro para renderizar estructuras moleculares.
El paquete Q-Chem ha desarrollado «QUI – The Q-Chem User Interface» alrededor de Avogadro, originalmente como una extensión de Avogadro. Se trata de una versión más avanzada del generador de entradas desarrollado en Avogadro, con una integración mucho más estrecha. Molpro también ha publicado algunos resultados de su desarrollo de una interfaz Molpro utilizando la biblioteca Avogadro.
Packmol
Packmol es un paquete de terceros diseñado para crear configuraciones iniciales «empaquetadas» de moléculas para la dinámica molecular u otras simulaciones . Los ejemplos incluyen rodear una proteína con disolvente, mezclas de disolventes, bicapas de lípidos, micelas esféricas, colocar contraiones, añadir ligandos a nanopartículas, etc. Normalmente, los usuarios pueden tener «cajas de disolvente» equilibradas que se han ejecutado durante largas simulaciones para garantizar la densidad adecuada y las interacciones de corto y largo alcance entre las moléculas de disolvente. El uso de estas cajas de disolvente permite colocar las moléculas de soluto, como las proteínas, en una estructura inicial aproximadamente correcta, como la que se muestra en la figura 13. El soluto se añade a la caja y se eliminan las moléculas de disolvente con átomos superpuestos. Aunque estas utilidades suelen ser suficientes, crear archivos de entrada complejos no siempre es fácil. Para sistemas más complicados, Packmol puede crear una configuración inicial basada en densidades definidas, geometrías (por ejemplo, esfera, caja, etc.) y las moléculas a colocar. Un desarrollador de Avogadro escribió un plugin externo para facilitar el uso de Packmol, incluyendo la estimación del número de moléculas en un volumen determinado.
Figura 13
La capa de lípidos de PackMol producida por la extensión PackMol.
El plugin no se distribuye actualmente con Avogadro como característica estándar, aunque está previsto para alguna versión futura. Sirve como ejemplo de cómo Avogadro puede facilitar un flujo de trabajo con un paquete orientado a texto (Packmol), incluyendo el guardado de archivos en el formato PDB requerido por Packmol, la generación de un archivo de entrada y la lectura de la salida para su visualización, análisis y simulaciones posteriores.
XtalOpt
El paquete de software XtalOpt se implementa como una extensión C++ de terceros para Avogadro y hace un uso intensivo de la API de libavogadro. La extensión implementa un algoritmo evolutivo adaptado a la predicción de estructuras cristalinas. El equipo de desarrollo de XtalOpt eligió Avogadro como plataforma por su licencia de código abierto, su API bien diseñada, sus potentes herramientas de visualización y su intuitiva interfaz de usuario. XtalOpt existe como una ventana de diálogo (Figura 14) y utiliza la ventana principal de Avogadro para visualizar las estructuras candidatas a medida que evolucionan. La API se adapta bien a las necesidades de XtalOpt, proporcionando un mecanismo sencillo que permite al usuario ver, editar y exportar las estructuras generadas durante la búsqueda. Aprovechando las capacidades multiplataforma de Avogadro y sus dependencias, XtalOpt está disponible para Linux, Windows y Mac.
Figura 14
La extensión XtalOpt. Extensión de XtalOpt mostrando un gráfico de estabilidad frente al progreso de la búsqueda para una supercélula de TiO2.