34
ACD/ChemBasic Versión 5.0 para Microsoft Windows Tutorial Comenzando con ChemBasic

ACD Chembasic

Embed Size (px)

Citation preview

Page 1: ACD Chembasic

ACD/ChemBasicVersión 5.0 para Microsoft Windows

Tutorial

Comenzando con ChemBasic

Page 2: ACD Chembasic

Advanced Chemistry Development Inc.

Copyright © 1994-2001 Advanced Chemistry Development Inc.Todos los derechos reservados.ACD/Labs es una marca registrada de Advanced Chemistry Development Inc.Microsoft y Windows son marcas registradas de Microsoft Corporation.Todas las otras marcas mencionadas dentro de este manual son propiedad de sus respectivosdueños.

La información en este documento está sujeta a cambio sin previo aviso y se provee "como seofrece" sin garantía. Advanced Chemistry Development Inc. no se responsabiliza de nada en cuantoal contenido de este material, incluido su limite a las no garantías de mercadeo y adecuación paraun propósito en particular. Advanced Chemistry Development Inc. no será responsable de erroresinternos o por cualquier daño directo, indirecto, especial, incidental o consecuente al uso de estematerial.

Parte Numero: G14_2805

Page 3: ACD Chembasic

ACD/ChemBasic Getting Started 3

Notas del Traductor

La traducción de este documento fue realizada por CARLOS A. FRANCO R., Licenciado en Químicay Magíster en Docencia de la Química en la Universidad Pedagógica Nacional, Facultad de Cienciay Tecnología, Departamento de Química, Bogotá (Colombia), con la debida autorización de:> Technical Support Manager> Advanced Chemistry Development,Inc..En esta traducción se mantuvo el esquema del documento original sin alterar su esencia. Enalgunas oportunidades se da la traducción y entre paréntesis se deja el término original con el fin deque el lector pueda referenciar fácilmente los nombres de los comandos, menús, botones, etc.Cualquier sugerencia al respecto, gustoso la atenderé en mi correo personal,[email protected] o por intermedio del soporte técnico de ACD/labs.

Page 4: ACD Chembasic

ACD/ChemBasic Comenzando i

TABLA DE CONTENIDOS1. Introducción a ChemBasic.................................................................................. 1

1.1 Objetivos......................................................................................................................11.2 Qué es ChemBasic?....................................................................................................11.3 Qué hay Nuevo en 5.0.................................................................................................21.4 Por Qué Usar ChemBasic?..........................................................................................21.5 Qué es lo que hace? ...................................................................................................21.6 Mostrarme Ejemplos! ...................................................................................................31.7 Por qué “Basic”? ..........................................................................................................31.8 Cómo Trabaja? ............................................................................................................31.9 Acerca de este Tutorial................................................................................................5

2. Comenzando: Diga Hola!..................................................................................... 62.1 Objetivos......................................................................................................................62.2 Crear el Sistema del Programa....................................................................................62.3 Hola, Todos! ................................................................................................................72.4 Objetos en ChemBasic ................................................................................................92.5 Páginas y Coleccines en ChemSketch ......................................................................102.6 Hola, Sr. Propano! .....................................................................................................112.7 Hola a diferentes Individuos ......................................................................................14

3. Los Frutos del Arbol Molecular ........................................................................ 173.1 Objetivos....................................................................................................................173.2 Informe de Proyectos.................................................................................................173.3 Referencia de Objetos Moleculares...........................................................................173.4 Cómo Crear y Destruir Objetos?................................................................................203.5 Elaborar un Arbol Molecular ......................................................................................21

3.5.1 Tomar Existencias ........................................................................................................... 233.5.2 Optimización y Medidas................................................................................................... 243.5.3 Puliendo la Salida ............................................................................................................ 243.5.4 Redimensionar el Diagrama Molecular............................................................................ 25

4. Apéndice. Texto Completo de Muestras.......................................................... 274.1 HELLO.BAS...............................................................................................................274.2 OXCARBOX.BAS ......................................................................................................28

Page 5: ACD Chembasic

ACD/ChemBasic Comenzando 1

1. Introducción a ChemBasic

1.1 Objetivos

En este Capítulo aprenderá a: Por qué aparece ACD/ChemBasic; Qué hay nuevo en la versión 5.0; Cuáles son las ayudas para resolver las tareas de ChemBasic; Cuáles son los problemas de ejemplo que se resuelven con ChemBasic; Cuál es el proyecto detrás del lenguaje de programación; Cómo correr técnicamente los programas ChemBasic; y una unión de palabras acerca de este tutorial.

1.2 Qué es ChemBasic?

ChemBasic es un simple, conveniente y funcionalmente rico lenguaje de programación para lapresentación y manipulación de estructuras moleculares, que relaciona objetos y todos loscontenidos actuales y de futuros programas de ACD/Labs. Se encuentra que ChemBasic escompletamente funcional con ACD/Labs. De la misma manera, ChemBasic tiene todas lascaracterísticas que un lenguaje de programación debe tener: variables numéricas y de cadena,arreglos, control de flujo y operadores condicionales, procedimientos de entrada y salida, etc.

ChemBasic ha heradado cosas del BASIC genérico y algunas de sus extensiones. Más evidente esla opción de Microsoft'Visual Basic para Aplicaciones (VBA) y para algunas extensiones, extensionesANSI del BASIC completo. Sin embargo, hay simplificaciones importantes en el procedimientoprincipal de la estructura del lenguaje, tal como las extensiones sometidas a partes específicas.

Por ser una aplicación universal que extiende la capacidad de los programas existentes, ChemBasicesta designado como un lenguaje orientado a objetos. Esto significa que toda la situacionesquímicas relacionadas se describen como objetos-esto es, que la estructura de datos específicoscorresponden a moléculas, conformaciones, etc. Existe un número métodos predefinidos paramanipular estos objetos. La herencia de los objetos y de los métodos es la esencia de ChemBasic.

Page 6: ACD Chembasic

ACD/ChemBasic Comenzando 2

1.3 Qué hay Nuevo en 5.0

En la versión 5.0, los programas ChemBasic pueden accederse desde la ventana deChemSketch si esta en el modo Estructura o en el modo Dibujo.

El Organizador ChemBasic es una nueva herramienta en ChemSketch que le ayuda a guardarpistas de sus programas ChemBasic. Dependiendo de como agrupe su barra de herramientaspuede colocar un botón ChemBasic para que este disponible en el modo Estructura, en elmodo Dibujo o en ambas o solamente en la barra ChemBasic.

Las características del Manejador de Formas ahora forma parte del ChemSketch dedicado alChemBasic. Con el Manejador de Formas puede designar formas de entrada para losprogramas ChemBasic.

Anteriormente, el ChemBasic usó una serie de cajas de dialogo de entradas secuencialessimples. Ahora, con el Manejador de Formas, puede diseñar formas de entrada paraprogramas ChemBasic que puedan aceptar todos los datos requeridos en una sola instancia.El dialogo de entradas es sencillo. Un menú emergente define los valores de entrada en cadauno de los campos automáticamente posicionados: todos se disponen fácilmente a través delManejador de Formas.

1.4 Por Qué Usar ChemBasic?

Igual que cada químico que maneje un computador con una base normal este tiene un conjunto deoperaciones rutinarias para mostrar una molécula, una muestra, un espectro, etc. Con el softwareACD/Labs, el químico puede reducir significativamente el número de operaciones de rutina, graciasal contenido químico claro y a la interfase intuitiva de los programas ACD. El software ACD/Labs haprobado sucesos en muchas áreas tal como en la manipulación de estructuras moleculares,búsqueda de estructuras, optimización de representaciones gráficas (depuración en 2D),optimización en 3D, cálculo de propiedades moleculares, predicción de espectros RMN, etc.

Sin embargo, con el más actual conjunto de aplicaciones, pensará en un número de situacionesdonde pueda repetir algunos pasos continuamente.....Ha pensado cómo hacer esto con un simplemenú de opciones y hacer que esta serie de pasos ocurra automáticamente? Una situación comúnes cuando quiere examinar sistemáticamente el efecto de un cierto sustituyente sobre un compuesto2D; cuando entra sucesivamente estructuras para hacer constantemente cálculos, adicionarsustituyentes, recalcular e imprimir cada compuesto.

Para resolver el problema esta aquí ACD/ChemBasic! Este tiene la genialidad de nuestro softwarejusto para su computador.

1.5 Qué hace ChemBasic?

ChemBasic está designado (a) para automatizar rutinas sin ACD/Labs y (b) extender la funcionalidadde ACD/Labs. Le permite al usuario acondicionar el software ACD para sus propósitos o paraadecuarlos a las interfases externas de la suite de ACD.

Un programa ChemBasic sencillo puede, por ejemplo, obtener una molécula desde la ventana deACD/ChemSketch, calcular algunas propiedades moleculares, remplazar fragmentos y recalcularlosapropiadamente. O, un programa ChemBasic puede permitir automáticamente el análisisconformacional y representar la estructura 3D más probable para una molécula que haya escogido.O de cualquier forma… esta limitado solo a su imaginación!

Page 7: ACD Chembasic

ACD/ChemBasic Comenzando 3

En este tutorial, consideraremos los siguiente ejemplos como ilustrativos: Obtener todos los diagramas desde una página ChemSketch y generar sus nombres según la

IUPAC (en el modo series) [Capítulo 2]. Crear una serie de ácidos carboxílicos homólogos, ejecutar una optimización 3D, representar

las estructuras resultantes en la ventana de ChemSketch y marcar todas las estructuras endonde el grupo hidroxilo este separado del carboxilo por una distancia menor a 5 Angstroms[Capítulo 3].

1.6 Mostrarme Ejemplos!

Un experto programador sabe que a menudo el mejor camino para empezar es encontrar unaplantilla, por ejemplo, un programa elaborado y luego modificarlo. Algunos ejemplos de la vida real(códigos fuente) están asociados con ACD/ChemBasic. Las muestras de programas ChemBasic sonlas siguientes:

Etiquetas Impresas (Label Printer) – crea e imprime rótulos para material de vidrio de lasestructuras dibujadas en una sesión de ChemSketch.Nombres de Azucares (SugarNames) — transforma cadenas cortas de clases específicas deestructuras (azúcares) en una conformación correcta; esto es, que muestra formulas como•GalNAc(alpha1-3)Gal(beta1-4)[Fuc(alpha1-3)]Glc(betaOMe) y le suministra la estructura 3Dmás probable.Predecir el Log de K (LogK Predicto)r – predice constantes de estabilidad para loscomplejos de aminas y/o carboxilatos que contienen moléculas orgánicas hasta con 31 ionesmetálicos.Editor Molecular 3D (Molecular 3D-editor) – un versátil conjunto de potentes utilidades elcual construye y modifica modelos moleculares en tres dimensiones fácilmente (cambia elángulo de torsión, invierte los centros enantioméricos, analiza anillos plegados y formaspoliédricas, importa y exporta en diferentes formatos moleculares y mucho más).

1.7 Por qué “Basico”?

ACD/ChemBasic esta basado en el antiguo y excelente programa BASIC "Beginners All-purposeSymbolic Instruction Code" (el acrónimo original para BASIC). El Basic es ampliamente aceptadocomo el lenguaje más conveniente para no programadores. Las versiones modernas de BASIC hanprovisto sus éxitos en varios campos- — es suficiente mencionar para aplicaciones el MicrosoftVisual Basic y el Visual Basic.

ACD/ChemBasic es el programa para química “código para principiantes en todos los campos coninstrucción simbólica” "Beginners All-purpose Symbolic Instruction Code". Es heredado del BASICnativo simple y fácil de usar – para el químico, no para el programador guru; adiciona al BASICciertos objetos químicos relacionados de una manera tal que es conocida para los químicos.

1.8 Cómo trabaja?

Técnicamente, ChemBasic no es únicamente un lenguaje de programación, además consiste en uninterpretador y ejecutor de librerías (RTL) que están integradas con ACD/ChemSketch. Para ejecutaruna aplicación ChemBasic, debe tener corriendo ChemSketch. Puede crear un programa

Page 8: ACD Chembasic

ACD/ChemBasic Comenzando 4

ChemBasic con cualquier editor de texto y guardarlo como un archivo en un disco. Así que puedeejecutarlo al seleccionar un comando en ChemSketch: Archivo RunChemBasic.

Page 9: ACD Chembasic

ACD/ChemBasic Comenzando 5

1.9 Acerca de este Tutorial

Los ejercicios en este tutorial están designados para hacerse en un promedio de 10 a 40 minutos,dependiendo de su familiaridad con los lenguajes de programación y con la interfase ACD. Despuésde revisar estos ejercicios y con ayuda en línea, será capaz de usar solo el ChemBasic con poca osin asistencia y con máximo de velocidad y eficiencia.

Este tutorial se provee en forma electrónica legible en los más comunes procesadores de palabra. Sino puede localizar algo que necesite en el índice, escriba una frase para hacer la búsqueda total ode algo que incluya o se relacione con la palabra.

Las fotografías han sido tomadas con la última versión del software.

Este tutorial asume que usted esta familiarizado con el ratón y el manejo de Microsoft Windows.

Gane!!!Su opinión esimportante

paranosotros.

Una vez que ha usado esta guía nos gustaría su retroalimentación.Cómo podemos probar la documentación para este producto?Tenemos un pequeño cuestionario que nos gustaría que contestara.Todos los remitentes enviarán un dibujo para ganar un premio deACD/ChemFolder (o equivalente descuento en la compra decualquiera de l software ACD). Por favor use MS Word 6.0 o posteriorpara abrir el archivo “survey.doc” o use Adobe Acrobat Reader paraabrir “survey.pdf” en la documentación del CD que ha recibido coneste software, o visite la página “Feedback” en nuestro sitio web,http://www.acdlabs.com/feedback/guides.html. El ganador deldibujo será anunciado al final de cada año calendario.

Page 10: ACD Chembasic

ACD/ChemBasic Comenzando 6

2. Comenzando: Diga Hola!

2.1 Objetivos

En este capítulo, aprenderá a Crear un programa ChemBasic; Cuáles son las variables y tipos de datos en ChemBasic; Cómo diseñar un dialogo para los usuarios de su programa; Cómo acceder a las páginas ChemSketch y a su contenido; Cómo implementar control lógico y ciclos en un programa ChemBasic; Cómo generar nombres según la IUPAC para las moléculas.

Tradicionalmente, el primer programa debe decir hola. Dado que el ChemBasic no conjuga conmoléculas. Permítanos mostrar la primera aplicación, decir hola a las moléculas!

2.2 Crear el esqueleto del Programa

Primero que todo, crearemos un esqueleto de la aplicación. Un programa ChemBasic esta hecho defunciones y sub rutinas (procedimientos). Ellos comienzan con la palabra clave de la Función o SubRutina y finaliza con la Función Fin (End) o con End Sub. El programa puede tener muchosprocedimientos pero una y solo una función puede empezar con el nombre especial Principal(Main).Puede ser el primer procedimiento en un programa pero no necesariamente tiene que serlo.

Nota Vea la ayuda ChemBasic para la explicación de la diferencia entre una Función y unaSub Función.

En nuestro programa simple, su esqueleto podría ser:

Function Main As String

‘Here will be the code

End Function

Importante ChemBasic no toma en cuenta si usa mayúsculas o minúsculas en palabrasclaves o en nombre de variables. Función, función, FUNCION, y aun fUnCióNsignifican exactamente lo mismo. Así que es bueno saberlo para saber comoescribirlas.En este Tutorial, todas las palabras clave comienzan con mayúscula, que es locomún en varios apartes de BASIC.

Hay dos cosas más para explicar. Primero, las palabras clave para nuestras funciones COMOCADENAS (As String) aparecen después de la declaración de la Función Principal (Function

Page 11: ACD Chembasic

ACD/ChemBasic Comenzando 7

Main). Esto significa que la función retornará un valor de cadena. Las funciones siempre retornanalgunos valores después de la ejecución, en contraste con las subrutinas.

Así. La variable especial Main tendrá un valor de cadena después que la función sea ejecutada. Elvalor que retorna la función puede invocarse en el programa para propósitos particulares. El llamarel programa para la Funcion Main es hecha por el mismo ChemBasic; este usará el valor paramostrarlo al usuario en una caja de información, que aparece en la pantalla justo después decompletar la aplicación ChemBasic. Un buen hábito de programación en ChemBasic es declararsiempre la función principal como Cadena (puede declararla como entero, doble, etc.) porque esta leda la oportunidad de incluir cualquier mensaje de error o hacer un comentario al final de la cadena.

La segunda cosa, en las tres líneas de código anteriores, es la línea de comentarios. Todo lo queeste entre apóstrofos y al final de la línea será ignorado por Basic. Es una característica muy usada,que le permite clarificar sus programas y hacerlos mucho más legibles, sobre todo cuando haga unarevisión con mucho tiempo de posterioridad.

Nota Existen otras dos formas de comentarios: la declaración REM y la multilínea decomentarios estilo C /* …. */ ; vea la ayuda de ChemBasic para una descripcióncompleta.

2.3 Hola, Todos!

Ahora, podemos llenar la plantilla con código real.

El camino más simple para decir hola, es justamente el siguiente:

Function Main as String

Main="Hello, Molecules!"

End Function

De esta forma, para comenzar, cree un archivo de texto hello.bas que contenga exactamente estastres líneas. Guárdelo e inicie el ACD/ChemSketch. Seleccione Archivo/correr (File/Run) ChemBasicy cuando se le sugiera ejecutar el archivo (en la caja de dialogo estándar “File Open” ), seleccione elarchivo hello.bas.

Su Hola aparecerá en la pantalla como:

el truco es que como lo mencionamos arriba, ChemBasic mostrará el valor que retorna la funciónprincipal en su “caja de información” (“info box”) después de ejecutar la aplicación.

Naturalmente, este no es un camino honesto. Como un truco puede usarse una vez por programa(porque solo una función principal puede estar presente). Permítanos diseñar nuestro saludo de unamanera aplicada más universalmente. ChemBasic tiene una construcción especial de funciones quesoporta diálogos con el usuario: MessageBox, UserIOBox y UserIO. Usaremos MessageBox paranuestros propósitos.

Nota Vea la ayuda de ChemBasic para la descripción de otras funciones de entrada/salida

Page 12: ACD Chembasic

ACD/ChemBasic Comenzando 8

Escribamos el código:

Function Main As StringDim Answer As Integer

Answer=MessageBox("Hello, Molecules!","Example #1", MBB_OK+MBI_INFORMATION)

End Function

Note Corrientemente, ChemBasic no soporta declaraciones multi-línea. Usted debe escribirtextos largos en una sola línea. Sin embargo, en este tutorial, para propósitos delegibilidad, los textos largos pueden aparecer en varias líneas. En tal caso, la primeralínea comenzará en la margen izquierda de la página. Tenga cuidado cuandotransfiera líneas a archivos ejecutables ChemBasic (.BAS) – usted debe enviar laslíneas en una sola.

Una vez que ha transferido el programa a hello.bas y haberlo guardado como archivo de texto(tenga cuidado al declarar líneas múltiples), puede tratar de ejecutar este programa y ver qué pasa:

Exactamente si es lo que deseamos?

En el segundo programa, la declaración Dim que aparece justo después de la función deencabezado, declara la variable “Answer ” que es de tipo Entero. Qué significa esto?

La Variable es un nombre que usted asigna a algún lugar de almacenamiento en la memoria. Unavez introducida, puede ser llenada (o re-llenada) y usada para cualquier propósito. Cada variablepuede corresponder a un dato pre definido, que difiere por los formatos internos y permite métodosde manipulación.

Inclusión de datos Convencionales:Boolean Variable Booleana, valores que son solo Cierto o Falso.

Integer número entero largo 16-bit

Long número entero largo 32-bit

Double número de punto flotante largo 64-bit

String variable de cadena

Nota Vea la ayuda de ChemBasic para la descripción de tipos de datos y declaraciones

En ChemBasic, todas las variables que use deben ser explícitamente declaradas. Si no declara unavariable, esta será considerada como un error. Para declarar una variable, puede usar la declaraciónDIM, exactamente como se muestra arriba para la variable entera Answer.

Regresemos a nuestro programa ejemplo. En la clase de variable Integer, necesitamos tomar elvalor retornado por la función MessageBox. Este valor es un código de retorno- indica cuál botón deusuario ha sido presionado en un mensaje de una caja de dialogo. En el momento este valor no nos

Page 13: ACD Chembasic

ACD/ChemBasic Comenzando 9

preocupa. Sin embargo, no hay posibilidad de llamar una función sin la asignación del valor paraalguna variable. En el ejemplo siguiente usaremos este código de retorno.

Unos comentarios sobre la función. La caja de mensaje ( MessageBox) muestra una caja dedialogo estándar, que contiene el mensaje (primer parámetro en una llamada de función; aquí"Hola, Moléculas!") y el encabezado (segundo parámetro; "Example #1"). Los botones queaparecen en la caja de dialogo son regulados por el tercer parámetro (en este caso se mostrarásolamente el botón “OK” y el signo de exclamación, “!”, indicado en la caja de información).

Nota Vea la ayuda ChemBasic para la lista de parámetros y control de botones de lafunción caja de mensaje.

2.4 Objetos ChemBasic

Sin embargo, su primer hola para las moléculas no era muy adecuado — esto lo decimos para todode una vez. Cada uno tiene un nombre, aunque...cómo preguntamos por el nombre de las moléculasy les enviamos un mensaje personalizado?. Digamos “hola propano” tal como decimos “hola, John!”.Antes de hacer esto pensemos que se necesita entender que las moléculas y otras cosas sondiferentes a simples números o letras tal como se representa en ChemBasic.

Esto es porque en conjunto el lenguaje de programación BASIC de ACD/ChemBasic incluye nosolamente los tipos de datos disponibles en BASIC estandard, sino que también incluye ciertasextensiones que son de propósito general y relacionados con la química. Todas las extensiones sonrepresentadas por objetos, esto es, que son estructuras de datos predefinidas usadas para permitirque se hagan en las páginas sketch, moléculas, conformaciones, etc. En pocas palabra, un objeto escualquier entidad que puede manipular, que no puede ser descrito como una primitiva simple dedatos convencionales tales como enteros, simple, booleana, etc.

Hay un tipo de objeto genérico, llamado Objeto, que es usado para manipular una entidad dada.Este se refiere a cualquier objeto de untito predefinido. La naturaleza exacta del objeto esta ocultaen tipo de nombre. Los tipos (y nombres) están definidos dentro del mismo ChemBasic; usted nopuede crear su propio tipo. A menudo (de hecho, siempre), no debe indicar un tipo de objeto enparticular— ChemBasic los determina cuando se llaman funciones o se obtienen objetos. Todo estorepartido en los nombres de variables de objetos, que sirven para manejar entidades. Por ejemplo,la línea

Dim Doc As Object

Reservará una variable al objeto llamado “Doc”.

Cada objeto tiene su propio conjunto de métodos, que son procedimientos que se les pueden aplicara ellos. Estos procedimientos son cuidadosamente designados para la manipulación fácil de esteobjeto en particular (tipo), sin detalles engorrosos. Ellos y solamente ellos se aplican a los objetos. Silos trata de otra forma, se generará un error.

Considere una analogía con números convencionales. Imagine que tiene dos variables de cadenatradicionales, a y b. Asigne a la variable a "bueno " y a la b "trabajo". Aplicándole la operación deadición, a+b, resulta "buen trabajo". Sin embargo, si trata de dividir, a/b, resulta una acción absurday se generará un error. De hecho, la adición es un método que el BASIC convencional permite paraaplicarse a cadenas, mientras que la división no se permite en este tipo de variables. El BASICestrictamente define todas las operaciones y funciones (métodos) que son aplicables a los objetosde cadena. De esta forma usted debe distinguir entre operaciones legales y operaciones prohibidas.Por ejemplo, si escoge las variables a y b de tipo entero convencional, ellas podrían tener losvalores "10" y "2". Tanto la suma como la división son permitidas para este tipo de variable. De estaforma ChemBasic permite que se hagan ciertas cosas para unas y se restrinjan para otras.

Page 14: ACD Chembasic

ACD/ChemBasic Comenzando 10

Los métodos son simplemente una clase especial de funciones y subprogramas BASIC que setoman como argumentos de los Objetos. Ellos se llaman tecleando un punto seguido del nombre delmétodo exactamente después del nombre del objeto:

SomeObject.ThisObjectMethod(parameters)

Esto puede verse como una digresión, pero estamos interesados en objetos ChemBasic querepresenten moléculas en la ventana de ChemSketch. Para acceder a ellos necesitamos objetos quesean representados con sus contenidos en ChemSketch.

2.5 Páginas y Colecciones en ChemSketch

En términos de ChemBasic su documento ChemSketch actual esta representado por el objetoDocument, que es una colección de objetos de tipo página (collection of objects of type Page). Estosignifica que Document es un conjunto de miembros objeto, cada uno de los cuales es una página(Page); puede fácilmente contarlos, encontrar cualquier miembro, borrarlo o adicionar uno nuevo,llamando el método de colección (aquí, se refiere a Document)

Nota Vea la ayuda ChemBasic para una discusión más detallada sobre colecciones.

Por ejemplo, el texto

DocumentObject.Count

Exige a ChemBasic contar los miembros de la colección.

Usted puede escribir algo como:

Dim Npages As Integer ‘reserve an integer variableDim Doc As Object ‘reserve an object variable

‘Get Doc somewhereNpages=Doc.Count ‘count pagesDoc.AddEmpty ‘add blank pageDoc.AtRemove(1) ‘remove 1st page of document

Nota Ver la ayuda ChemBasic para la descripción de los métodos de colección adicionarpágina vacía (AddEmpty), remover (AtRemove), y alejar (so far).

Una recomendación: la declaración especial con (UIT) drásticamente reduce el volumen delcódigo. Después que haya escrito With SomeObject , no necesita mencionar SomeObject cuandoinvoque su método. Solamente necesita simplificar el nombre del método precedido por un punto.Reescriba nuestro ejemplo:

Dim Npages as Integer ‘reserve an integer variableDim Doc as Object ‘reserve an object variable

‘Get Doc somewhere …

With Doc

Npages=.Count ‘count pages.AddEmpty ‘add blank page.AtRemove(1) ‘remove first page of document

End With

Page 15: ACD Chembasic

ACD/ChemBasic Comenzando 11

Nota Corrientemente no puede usar anidaciones con las asignaciones en ChemBasic.

La función especial ActiveDocument rle retorna una dirección del documento activo. Así, el códigode abajo hace las siguientes acciones en su documento actual:

Dim Npages As Integer ‘reserve an integer variable

With ActiveDocument

Npages=.Count ‘count pages.AddEmpty ‘add blank page.AtRemove(1) ‘remove first page of document

End With

(Note que hemos omitido la variable objeto y simplemente la mencionamos en la asignaciónActiveDocument. Si define ActiveDocument usando “Dim ActiveDocument as Object”entonces observará un mensaje de error en la variable inicializada.)

Suficiente en los documentos; ahora en las páginas. El objeto Página (Page) es un miembrode una colección, como lo ha podido ver. Pero es en sí una colección misma, sin embargo,contiene un número de colecciones correspondiente a diferentes clases de dibujos ChemSketch(cajas de texto, rectángulos, etc.). Hay métodos para los objetos Página, que retornan lascolecciones hijos. El interés para nosotros ahora es el método Diagramas de Página que retornaal objeto Diagramas – una colección de todos los diagramas moleculares dibujados en la página.Una vez que haya la colección, puede adicionar, remover o encontrar cualquier miembro de unobjeto en particular.

2.6 Hola, Sr. Propano!

Regresemos a nuestro objetivo. Como un primer intento, acogeremos la primera molécula en laventana activa de ChemSketch. Para ejecutar esta tarea, accederemos a la página activa deldocumento y obtenemos su primer diagrama molecular. Por conveniencia, encapsularemos todoslos trabajos con diagramas en una subrutina separada; nuestra función principal será responsable depreguntar al usuario si direcciona la molécula ChemSketch personalmente para luego llamar elprocedimiento tratamiento de diagramas (diagram-treating). Mire como:

Function Main as StringDim Answer as Integer

‘Say hello to all

Answer=MessageBox("Hello, Molecules!","Example #1", MBB_OK +MBI_INFORMATION)

‘Ask user if (s)he want to pronounce the name(s)

Answer=MessageBox("Say Hello to all? ","Example #1", MBB_YESNO +MBI_QUESTION)

If Answer= MBR_YES Then

‘yes, (s)he wants Call GreetByName

Page 16: ACD Chembasic

ACD/ChemBasic Comenzando 12

Main=” Everybody welcomed.”

Else

‘No, leave this Main=”Sorry, we leave them.”

End If

End Function

Note, que usamos el valor sin usar que se retorna de la caja de mensaje. También implementamosuna asignación de condicional si...entonces… (conditional statement If … Then … Else) paratrabajar respuetas alternativas del usuario.

Nota Vea la ayuda ChemBasic para más detalles de condicionales si...entonces...(If …Then … Else) y seleccione el caso (Case…)

Si crea un nuevo archivo de texto llamado “hello.bas” desde el ejemplo anterior y seleccionaarchivo/correr (File/Run) en ChemBasic cuando entre en la ventana ChemSketch recibirá unmensaje de error acerca de un identificador no declarado:

significa esto que estamos errados en la subrutina GreetByName. He aquí un primer diseño de comoplaneamos tratar el diagrama:

Sub GreetByNameDim Diagram as Object, Answer as Integer, MolName as String

With ActiveDocument.ActivePage.Diagrams

MolName=.Item(1).GetIUPACName Answer=MessageBox("Hello, "+MolName+"!","Example #1",MBB_OK+MBI_EXCLAMATION)

End With

End Sub

Adicione esta subrutina a la función principal en hello.bas, dibuje unamolécula tal como el propano en ChemSketch y ejecute el programa ChemBasic.Verá al inicio una pregunta:

haga clic en Yes y después de una pausa verá:

Page 17: ACD Chembasic

ACD/ChemBasic Comenzando 13

Observemos la subrutina GreetByname un poco más de fondo. Primero obtendremos los diagramasinvocando ActiveDocument.ActivePage.Diagrams con la asignación With. Despuésobtendremos un diagrama estructural desde una colección usando el ítem método (method). Qué esun diagrama estructural? Lo primero como ve, el número entre paréntesis: “Item(1)”. Y finalmenteaplicamos el método llamado GetIUPACName para el Objeto Diagrama (Diagram object). Estemétodo retorna la cadena que contiene el nombre IUPAC generado al correr la rutina de Librería deACD/ChemBasic (en verdad la mayoría si no todos los métodos de objetos son internamentetrasladados a las llamadas RTL). Note que nuestro código es totalmente equivalente a una formacompleta (sin la abreviatura With):

MolName=ActiveDocument.ActivePage.Diagrams.Item(1).GetIUPACName

Nota El método GetIUPACName retorna el nombre correcto solamente si tiene instalado elpaquete ACD/Name, de otra forma se retorna una cadena vacía.

Repetimos por claridad, que es lo que hace aquí ChemBasic:1. obtiene el documento activo ACD/ChemSketch;2. obtiene su página activa (la ventana visible de ChemSketch);3. obtiene todos los diagramas moleculares de la página:4. extrae el primer diagrama de la colección:5. aplica el método GetIUPACName al diagrama;6. saca el nombre y saluda.

Nota Vea la ayuda ChemBasic para los métodos del objeto Diagrama

Page 18: ACD Chembasic

ACD/ChemBasic Comenzando 14

2.7 Hola a varios Individuos

El paso final que debemos hacer es direccionar todas las moléculas en la página, no solamente laprimera. Para hacer esto, se debe implementar la construcción de un ciclo en ChemBasic. La formamás común en otros lenguajes de programación es la asignación For … To:

Dim i As Integer

For i=1 To 10 Do_Something

Next I

Esto significa que todas las asignaciones encerradas entre el For .. To y Next se repetirán diezveces y la variable i (contador cíclico) se irá incrementando de uno en uno, comenzando desde unohasta llegar al valor de diez, en donde el ciclo termina. En nuestro ejemplo, podríamos repetir unciclo para cada diagrama. De esta forma, primero contamos el número de diagramas:

Sub GreetByName

Dim Answer as Integer, MolName as StringDim i,Ndiagrams as Integer

With ActiveDocument.ActivePage.Diagrams

‘Count the diagramsNdiagrams=.Count

For i=1 To Ndiagrams

MolName=.Item(i).GetIUPACName

Answer=MessageBox("Hello, "+MolName+"!","Example#1",MBB_OKCANCEL+MBI_EXCLAMATION)

If Answer= MBR_CANCEL Then Exit For

Next i

End With

End Sub

Remplace la subrutina en hello.bas por la subrutina anterior, y guarde el archivo de texto. Dibujeotra molécula en la misma página ChemSketch page como la que contiene el propano. Cuandoejecute el programa, verá el saludo individual de cada molécula.

Note, sin embargo, que no tenemos necesidad de aplicar el ciclo i en la subrutina. Todo lo que senecesita es tener los miembros de una colección. Para cada caso, ChemBasic tiene el llamadoobject-loop para cada uno:

For Each MemberObject In CollectionObject

MemberObject.CallSomeMethod

Page 19: ACD Chembasic

ACD/ChemBasic Comenzando 15

Next MemberObject

Esto significa que todas las asignaciones entre cada For … y Next se repetirán con cada miembrode una colección, de tal forma que al rescribir el código quedaría:

Sub GreetByNameDim Diagram as Object, Answer as IntegerDim NextName,Tail as String

Tail=Chr(13)+Chr(13)+Chr(13)+"Greet the next?"

With ActiveDocument.ActivePage.Diagrams

For Each Diagram In .Self

NextName=Diagram.GetIUPACName

Answer=MessageBox("Hello, "+NextName+"!"+Tail,"Example #1",MBB_OKCANCEL+MBI_EXCLAMATION)

If Answer= MBR_CANCEL Then Exit For

Next Diagram

End With

End Sub

Guarde el archivo y córralo después de dibujar para que diga, propano, etano y metano en una solapagina ChemSketch. El primer saludo será el siguiente:

Page 20: ACD Chembasic

ACD/ChemBasic Comenzando 16

observe el método .Self en la subrutina anterior. Si intenta retornar el objeto mismo cuando seaplica sobre cualquier objeto– es aceptable cuando se combina con la construcción Withexactamente como se mostró.

Nota Vea la ayuda ChemBasic para una descripción de la asignación bucle (ciclo)

Ahora el paso final. La situación puede ocurrir donde el RTL no retorne el nombre IUPAC, poralguna razón. En tal caso, GetIUPACName retornará una cadena vacía o una cadena que contieneespacios. Se debe chequear esto y aun trasladar la molécula o llamarla con otro nombre. Esto seimplementa como sigue:

if Trim(MoltName)="" then MolName=" though I can not pronounce yourname"

(La función Basic Trim remueve permitiendo y colocando espacios desde un argumento cadena).

Finalmente… se encuentra que le decimos hola a todas ellas! Felicitaciones!

Nota Vea el texto completo del programa en el Apéndice.

Page 21: ACD Chembasic

ACD/ChemBasic Comenzando 17

3. Los frutos del Arbol Molecular

3.1 Objetivos

En este capítulo aprenderá Cuál es el objeto del árbol molecular ChemBasic; Cómo acceder a sus ramas; Cómo crear nuevos objetos moleculares; Cómo vincular objetos moleculares con páginas ChemSketch; Cómo analizar conformaciones y moléculas.

3.2 Designar Asignaciones (Relaciones)

Consideremos un ejemplo de la vida real. Suponga que estamos interesados en qué ácidoscarboxílicos de la familia HO-(CH2)n-COOH, tienen una corta distancia entre el carbono carboxílico yel oxígeno del grupo hidróxido. Esta situación es concebible si designamos receptores para esosácidos y estamos interesados en enlazar simultáneamente moléculas por los grupos finales carboxie hidroxi.

con ChemBasic, se permite hacer las siguientes asignaciones: Generar las moléculas HO-(CH2)n-COOH con n átomos, decimos, 1 hasta 10; Hacer las estructuras de forma optimizada; Hallar las distancias (H)O --- C(OOH) y si la distancia es menor a 5 Angstroms, marcar la

estructura; Mostrar todas las estructuras en un sola página ChemSketch.

Para acompañar la misión, observe los objetos moleculares en ChemBasic.

3.3 Referencia de Objetos Moleculares

Para describir el mundo molecular ChemBasic usa un árbol de sus propios objetos moleculares.Ellos están relacionados, pero no son idénticos, con los diagramas moleculares ChemSketch(Objetos Diagrama ). Nosotros permitimos "sombras" en 2D y en 3D en ChemSketch, para algunaspinturas de moléculas. Los Átomos en los diagramas de ChemSketch tienen etiquetas, coordenadasde la pantalla (en centímetros o pulgadas), y mucho más. Los átomos en moléculas ChemBasictienen carga nuclear y masas atómicas, las coordenadas 3D (en Angstrom), etc. Naturalmente, estosobjetos están relacionados y esto asegura la oportunidad de crear un modelo molecular enChemSketch. Pero para tratar con este modelo como con una molécula real nosotros debemosconvertirlo en una entidad de ChemBasic.

Page 22: ACD Chembasic

ACD/ChemBasic Comenzando 18

Nota Las diferencias entre los objetos moleculares de ChemSketch y de ChemBasic fueroncreadas intencionalmente. ChemSketch contiene muchas características, tal comocontrol automático de valencia, que es muy conveniente para la aplicación de dibujo.Sin embargo, estas características controladas restringen la libertad de operación conmoléculas, las cuales son necesarias en el manejo del lenguaje de moléculas. Así, losdiagramas ChemSketch y los árboles moleculares ChemBasic están claramenteseparados pero existe un riguroso mecanismo de avance y retroceso entre ellos.

En el mundo ChemBasic, todo esta compuesto de átomos (objeto Atom). Los átomos se puedencoleccionar en grupos llamados objetos ensamblados (Assembly). El esquema de conexión de losátomos de un ensamble dado se llama una Molécula. Una colección de coordenadas atómicas(x,y,z, Angstroms) se llama Conformación. cualquier Molécula o Conformación se basa enArreglos (Assembly).

ChemBasic automáticamente rastrea y actualiza la colección de Moléculas y Conformaciones(auto colecciones), que contienen todas las moléculas y conformaciones ligadas al arregloparticular. puede asociar algunos objetos de Moléculas y Conformaciones ligados almismo Arreglo. Los objetos compuestos que resultan se llaman Estructuras. ObjetosEstructura están también reunidos en objetos Estructuras, ligados al Arreglo.Finalmente, todos los objetos de Arreglos en esta sesión están auto reunidos dentro delobjeto Arreglos. De esta forma, puede acceder a cualquier Arreglo (y a su árbol derivado) comoArreglos. Item (i).

Nota De hecho, ChemBasic maneja su propio pool de datos moleculares y de colecciones.Todas sus operaciones se trasladan dentro de operaciones con objetos de su pooljustamente como lo hace ChemSketch con sus páginas y dibujos. Esto le permiteguardar lo tratado anteriormente sobre colecciones. Los niveles molecularespredefinidos crean una capa abstractiva que custodia sus objetos, la capa manejamemoria, rastrea objetos desaparecidos, su mutua influencia, etc. Sin embargo, no sedebe preocupar con el mecanismo interno, usted trata solamente con sus árbolesmoleculares.

Este paradigma, aunque alguna veces inusual en primera instancia, sigue las rutas que hemosdescrito verbalmente para el mundo molecular. Las bases generales se refieren a átomos y susgrupos. El mismo grupo de átomos puede tener diferente conectividad. Esto significa que tiene unadecuado camino para describir átomos de enlaces isoméricos diferentes en objetos Moléculaunidos al mismo Arreglo. Además, los átomos en el grupo pueden tener diferentes coordenadasde tal forma que tiene una ruta adecuada para describir confórmeros diferentes en los objetosConformación unidos al mismo Arreglo. Note que ninguna conformación se refiere alesquema enlazante ni al esquema de valencia referido a las coordenadas atómicas. Para integraresta clase de datos se debe introducir más de un objeto Estructura.

Como puede ver, todos los objetos forman una especie de árbol. (O mejor enarbolar sería másapropiado?)

Page 23: ACD Chembasic

ACD/ChemBasic Comenzando 19

Atomo

Arreglo

Molecula Conformacion

Estructura

Arbol Molecular ChemBasic

Estructuras

ConformacionesMoleculas

Enlace Punto

Examinemos las ramas del árbol con más detalle.

Atomo

Es el objeto fundamental en la jerarquía, este representa átomos aislados no conectados. Losátomos pueden coleccionarse dentro del objeto Arreglo.

Enlace

Indica la conexión de dos átomos. Los enlaces pueden colectarse dentro del objeto Molécula. Elmismo enlace puede incluirse en muchas moléculas. Para crear un enlace, use la funciónChemBasic Nuevo enlace (NewBond). Para destruir un enlace, use la función Destruir(Kill). Para hacer o romper el enlace en una molécula particular, use el método de objetoMolécula.

Punto

Representa un punto en el espacio ocupado por un átomo. Los puntos se coleccionan dentro de unobjeto Conformación. Los puntos no pueden ser removidos o adicionados a la colecciónConformación. El usuario puede incluir puntos directamente o a través de una Conformación.

Arreglo

Es un grupo de objetos Átomos que sirven como para todas las entradas moleculares. Cualquierátomo puede asociarse con muchos ensambles. Uno puede repartir simultáneamente el naftalenocon su benceno constitutivo como tres moléculas diferentes basadas en tres ensambles hechos delos mismos átomos (por ejemplo. Teniendo los mismos repartos). Cualquier Arreglo puede tenermúltiples uniones en objetos Conformación, Molécula y Estructura, todos los cuales son (auto)colleccionados dentro de las colecciones Conformaciones, Moléculas, y Estructuras. Si elArreglo base es modificado, este involucra todos los objetos chicos. Por ejemplo, removiendo unÁtomo del Arreglo automáticamente destruye todos los Puntos y Enlaces relacionados yactualiza todos los objetos.

Page 24: ACD Chembasic

ACD/ChemBasic Comenzando 20

Molécula

Es un esquema de valencia construido al inicio del Arreglo atómico. Típicamente, esta conectadopero puede desconectarse si se quiere. Aunque Molécula encapsula significados químicos deinformación sobre enlaces de átomos, no se incluye información acerca de la estructura 3D. Paraacceder posteriormente, debe referirse a un objeto separado Conformación. Técnicamentehablando, Molécula es, primariamente, una (auto) colección de objetos Enlaces. Esta colecciónesta estrictamente asociada con su base Arreglo. Este cambia si el arreglo asociado se modifica.Por ejemplo, removiendo un Átomo de un Arreglo automáticamente borra todos los objetosenlace relacionados y actualiza la Molécula (colección enlaces).

Conformación

Representa la posición del Arreglo átomos en el espacio. La razón para separar la conformaciónde su arreglo es que este puede tener muchas conformaciones. De hecho, lo que queremos deciraquí por conformación es que es sólo un instantánea de posiciones atómicas (qué no puede serestable o químicamente razonable). El arreglo puede tener tantas conformaciones como usteddesee. La Conformación esta estrictamente asociada con un Arreglo simple (objeto base).Cualquier Arreglo puede tener múltiples asignaciones a objetos Conformación, todos ellos estáncolectados automáticamente dentro de unos objetos Conformaciones que están siempre ligados alarreglo. Las Conformaciones de objetos derivados (hijos) son objetos Estructura. CualquierConformación puede tener múltiples objetos Estructura asignados todos los cuales están autocolectados dentro de los objetos Estructuras los cuales siempre están disponibles para unirlos aun Arreglo. La Conformación cambia si el Arreglo patrón se modifica. Si se borra el último,todas las conformaciones se destruyen inmediatamente. Los cambios en las Conformacionesmodifican todas sus Estructuras derivadas. Por ejemplo, removiendo un Átomo desde unArreglo automáticamente borra todos los objetos Punto relacionados y actualiza todos los objetosConformación derivados (colecciones Punto). Cambiando las coordenadas atómicas en laConformación tendrá influencia en todas las Estructuras derivadas. Técnicamente hablando,la Conformación es, primariamente, una (auto) colección de objetos Punto.

Estructura

Es el hijo de una Conformación y una Molécula basada en un Arreglo común de átomos. Paraacceder a los objetos padre, use los métodos de referencia de Estructura (vea abajo).

3.4 Cómo Crear y Destruir Objetos?

Para crear un átomo, use la función ChemBasic Nuevo Átomo (NewAtom). Dado que el Átomoestá debajo de todos los otros objetos moleculares, destruirlo es permitido pero es peligroso.Atom.Kill modificará todos los arreglos relacionados con moléculas, estructuras, y conformaciones.Los objetos Enlace y Punto que usen este átomo se destruirán. Así, para destruir un átomo, use lafunción destruir (Kill). Para quitar un átomo de un arreglo particular, use la función .AtRemove.Crear un enlace o un punto, use Nuevo enlace o Nuevo punto (NewBond o NewPoint).

Para crear un nuevo Arreglo, use el método Adicionar vacío (AddEmpty) en la auto colecciónArreglos de ChemBasic. Los Arreglos también pueden crearse al importarlos. Note que una vezcreados, los Arreglos ChemBasic relacionan todas las referencias a las Moléculas y a lasConformaciones.

Para crear un nuevo objeto Molécula para un Arreglo dado, use el método AddEmpty para lacolección Moléculas vinculada a este arreglo.

Para crear un nuevo objeto Conformación para un Arreglo dado, use el método AddEmpty parala colección Conformaciones unidas a este arreglo. Note que el objeto Punto de una Conformación

Page 25: ACD Chembasic

ACD/ChemBasic Comenzando 21

vacía tiene llenos los campos de Átomos y del cero de coordenadas. Puede crear también un objetoConformación invocando el optimizador 3D o importando un archivo con coordenadas.

Para crear una nueva Estructura, use el método derivado (Derive) de la colección Estructurasasociadas con un Arreglo dado.

3.5 Elaborar un Árbol Molecular

Ahora, regresaremos a nuestra misión. Nuestra primera tarea es generar las moléculas HO-(CH2)n-COOH con n, desde 1 hasta 10.

Como en el ejemplo anterior ubiquemos todo el trabajo molecular en una Sub especial llamadaGenerateAndAnalyze:

Function Main As String

Call GenerateAndAnalyzeMain="Completed OK."

End Function

Sub GenerateAndAnalyze

'Generate - optimize - depict – analyze

End Sub

Ahora escriba lo siguiente: el código que sigue crea los 10 ácidos carboxílicos que se necesitan:

Sub GenerateAndAnalyze'Generate - optimize - depict – analyze

Dim n,i as IntegerDim Ent,Mol,Oh, Cox,O1ox,O2ox,AtomCurr,AtomPrev As ObjectConst nmax=10

'In a loop ....

For n=1 To nmax 'Generate

'Create a new assembly

Ent=Assemblies.AddEmpty Mol=Ent.Molecules.AddEmpty

'Add OH (note that we will not add implicit hydrogen)

Oh=NewAtom(8) : Ent.Add(Oh)

'Add COOH

Cox=NewAtom(6) : Ent.Add(Cox) O1ox=NewAtom(8) : Ent.Add(O1ox) O2ox=NewAtom(8) : Ent.Add(O2ox)

Page 26: ACD Chembasic

ACD/ChemBasic Comenzando 22

'Make bonds

Mol.AddBond(Cox,O1ox,2) Mol.AddBond(Cox,O2ox,1) AtomPrev=Oh

'Add (CH2)n

For i=1 To n

AtomCurr=NewAtom(6) Mol.AddBond(AtomCurr,AtomPrev,1) AtomPrev=AtomCurr

Next i

Mol.AddBond(AtomPrev,Cox,1)

Next n

End Sub

Para examinar este bucle, cree un nuevo archivo oxycarb.bas que contenga la función simpleprincipal y la subrutina GenerateAndAnalyze como se mostró. Cuando se este ejecutando,encontrará un código de retorno claro, pero no se sorprenda si no aparecen moléculas…hasta ahorano hemos indicado como pueden mostrarse las moléculas.

Qué toma lugar aquí? Incrementamos el bucle en un ciclo con un contador n, que expresa el númerode metilenos entre los extremos de una molécula. En cada paso del ciclo, primero se crea un nuevoarreglo:

Ent=Assemblies.AddEmpty

Y una molécula nueva

Mol=Ent.Molecules.AddEmpty

En el momento, ambos están vacíos. Ahora se pueden adicionar átomos al arreglo. Para hacer esto,creamos un átomo y se adicionan otros. (Note que NewAtom recibe como un parámetro el númerodel elemento del átomo que se ha creado):

'Add OH (note that we will not add implicit hydrogen)

Oh=NewAtom(8) : Ent.Add(Oh)

'Add COOH

Cox=NewAtom(6) : Ent.Add(Cox) O1ox=NewAtom(8) : Ent.Add(O1ox) O2ox=NewAtom(8) : Ent.Add(O2ox)

Page 27: ACD Chembasic

ACD/ChemBasic Comenzando 23

entonces, adicionamos enlaces a la construcción de la molécula al inicio del arreglo. Podríamoshacer esto como con los átomos a través de subsecuentes iteraciones de NewBond y deMoleculeObject.Add. Sin embargo, mostramos un camino más rápido (note que AddBond permitelas dos funciones y recibe como parámetro el orden de enlace del enlace que se ha creado):

'Make bonds

Mol.AddBond(Cox,O1ox,2) Mol.AddBond(Cox,O2ox,1)

Nota Vea la ayuda ChemBasic para la explicación de NewAtom, NewBond, AddBond yfunciones relacionadas.

Agregamos tanto las mitades del oxígeno y del grupo carboxi como los enlaces a lo último.Adicionar y conectar los grupos metileno es algo más engañoso:

AtomPrev=Oh

'Add (CH2)n

For i=1 to n

AtomCurr=NewAtom(6) Mol.AddBond(AtomCurr,AtomPrev,1) AtomPrev=AtomCurr

Next i

Mol.AddBond(AtomPrev,Cox,1)

Qué significa esto?. Adicionamos carbonos consecutivos en un ciclo (For i=1 To n) yconectamos cada uno de ellos al átomo previo (AtomPrev) de la cadena. Observe el código. Antesde comenzar el ciclo, el primer átomo era el oxígeno del hidroxilo. Así que el primer metileno seráconectado a este oxígeno. Antes de que el metileno se coloque AtomPrev. De esta forma elsiguiente metileno se adicionará en el Segundo paso del ciclo y aparecerá conectado al primero yasí sucesivamente hasta que el límite de carbonos (n) se alcance. Finalmente, formaremos unenlace entre el ultimo metileno en la cadena para conectar al carbono carboxilo (Cox).

3.5.1 La Acción tomar Existencias

A estas alturas, usted podría querer ver su molécula en la Ventana de ChemSketch. Para haceresto, pueden hacerse dos modificaciones a su archivo oxycarb.bas que creó anteriormente.1. escoja un máximo entre uno y 10; note que esto es temporal y para propósitos de ensayo;2. inserte el tipo de declaración Dim Page, Diagram as Object dentro de la subrutina

GenerateAndAnalyze;3. inserte las siguientes cuatro líneas de código antes de finalizar la subrutina:

Page=ActiveDocument.ActivePage

Diagram=Page.Diagrams.AddEmpty

Diagram.Depict(Mol)

Page 28: ACD Chembasic

ACD/ChemBasic Comenzando 24

Ahora, cuando corra oxycarb.bas, verá una molécula creada en la parte superior izquierda de lapágina de ChemSketch. Esto de hecho no es elegante, todos los átomos quedan entre si unoencima del otro, pero la molécula existe. ¡Es un consuelo grande, y ahora nosotros podemos seguirel resto de la tarea! Usted puede poner el n máximo (nmax) hasta 10..

3.5.2 Optimización y Medida

Estamos listos para hacer la próxima tarea—optimizando la estructura y calculando la distancia (H)O--- C(OOH). El código necesario es bien simple. Primero, haremos el método Do3Doptimize, elcual se aplica al objeto Molécula. Este método invoca al Optimizador (ACD/3Doptimizer),exactamente igual que en ChemSketch. Se crea el objeto Conformación complete con lascoordenadas atómicas optimizadas, asociandolas a la Molécula original y retorna la Estructuraresultante:

'Optimize a structure

Struc=Mol.Do3DOptimize(0.1)

Luego aplicamos un método para un objeto Estructura, llamado GetDist, para calcular ladistancia interatómica (esto es que donde sea, al comienzo de la Sub, podríamos declararuna variable necesaria r):

'Check out the distance r=Struc.GetDist(Cox,Oh)

Nota Vea la ayuda ChemBasic para una descripción más detallada del Do3Doptimize,GetDist y de los métodos relacionados.

Y, finalmente, marcamos los átomos con un rótulo ($) si la distancia es menor a 5 A:

If (r<=5.0) Then

Cox.SetName("$")Oh.SetName("$")

End If

El método SetName asigna el nombre del objeto. Para un átomo, el nombre es un rotulo de cadena,que esta típicamente vacío, pero puede contener un texto arbitrario. El texto se mostrará en eldiagrama molecular del ChemSketch, cuando traslademos nuestra Estructura al Diagrama.

Importante Asegurarse que el nombre del átomo no tiene nada en común con loselementos número de los átomos.

3.5.3 Refinando la Salida

Ahora podemos hacer la traslación de la estructura a un diagrama y podemos crear un dibujoapropiado. Esto se hace para remplazar las líneas del diagrama que se agregaron anteriormente..Los pasos necesarios son:

Page 29: ACD Chembasic

ACD/ChemBasic Comenzando 25

1. Crear un diagrama (por defectot) ChemSketch vacío

'Depict as a ChemSketch diagram

Diagram=ActiveDocument.ActivePage.Diagrams.AddEmpty

2. Pintar la estructura sobre este diagrama

Diagram.Depict(Struc)

3. y redimensionar el diagrama para que sea más legible:

'Set diagram size to fit all diagrams to a page

Page=ActiveDocument.ActivePage

'Read out page parameters

ph=Page.GetHeightpw=Page.GetWidth

l=Int(pw/3)t=200+(n-1)*Int(ph/(nmax+1))w=Int(pw/6)h=Int(0.9*ph/(nmax+1))

Diagram.SetBound(l,t,w,h)

Presentamos algunas palabras de explicación. La construcción

Diagram=ActiveDocument.ActivePage.Diagrams.AddEmptyDiagram.Depict(Struc)

está en idioma ChemBasic para mostrar un objeto Estructura en la ventana ChemSketch.

Un idioma relacionado para la tarea contraria,, convertir desde un Diagrama a una Estructura,requiere el método de Arreglos AddFromCS para extraer la primera Estructura unida al Arregloque justamente se ha recibido:

Structure=Assemblies.AddFromCS(DiagramObject).Structures.Item(1)

Nota Vea la ayuda ChemBasic para una descripción más detallada sobre pintar (Depict) yGetFromCS.

3.5.4 Redimensionar el Diagrama Molecular

Redimensionar un diagrama molecular requiere obtener la posición (el que se da por defecto) ydimensionar el rectángulo incluido en el diagrama o en un marco. Esto se acompaña del métodoGetBound que es aplicable a cualquier objeto dibujo de ChemSketch, porque como cualquier objeto

Page 30: ACD Chembasic

ACD/ChemBasic Comenzando 26

esta localizado dentro de un marco invisible. Los parámetros del método están arriba a la izquierdade las coordenadas del marco, así como el ancho y el alto. Después de obtenerlos, puede calcular eltamaño y posición más apropiado para el marco, y redimensionarlo con SetBound. La matemáticapresentada en el código anterior sirve simplemente para colocar nuestro máximo de moléculas(nmax) para la página ChemSketch (cuyas dimensiones están disponibles a través de los métodos yGetHeight).

Nota Vea la ayuda ChemBasic para ampliar una descripción detallada de los métodosSetBound, GetBound y GetFont, SetFont, SetFontSize.

Finalmente, por conveniencia, podemos adicionar texto, indicando la distancia interatómica deinterés cerca de la imagen de la molécula. Para esto, adicionamos a la página ChemSketch unobjeto vacío TextBox, y lo llenamos con la información necesaria y la redimensionamos para unpresentación adecuada:

'Add a textbox indicating the distance‘carbonyl carbon ---- hydroxy oxygen

TBox=Page.TextBoxes.AddEmptyTBox.SetContent("Cox---Ooh "+FStr(r,10,4))TBox.SetBound(l+Int(1.1*w),t+Int(h/2),w,h)

Nota Vea la ayuda ChemBasic para ampliar la información sobre los métodos TextBoxes,SetContent, y GetContent y la función FStr (que simplemente convierte el número acadena (carácter)).

Nuestro viaje ha finalizado. El texto complete del programa se presenta en el Apéndice (contieneotras líneas de código con declaraciones y chequeos para algunos casos de potenciales errores).Por favor, ejecute y vea que pasa.

Diviértase!

Nota Este Tutorial se da como una guía para su primer paseo por ChemBasic. Esperamosque haya adquirido una buena impresión sobre este potente y simple lenguaje demanipulación de moléculas. Para una referencia más detallada, use la ayuda en líneao contáctenos [email protected].

Page 31: ACD Chembasic

ACD/ChemBasic Comenzando 27

4. Apéndice. Texto completo de los programas demuestra

4.1 HELLO.BAS

' Este programa

' presenta todas las moléculas en la ventana actual de ChemSketch;

' genera sus nombres IUPAC

‘ y dice Hola a todas ellas

Function Main As String

Dim Answer As Integer

Answer=MessageBox("Hola, Moléculas!","Example #1", MBB_OK +MBI_EXCLAMATION)

Answer=MessageBox("Decir Hola a todas? ","Example #1", MBB_YESNO +MBI_QUESTION)

if Answer= MBR_YES Then

Call GreetThemAll

Main=" Bienvenido todo el Mundo."

Else

Main=" Lo siento, nosotros los dejamos."

End If

End Function

Sub GreetThemAll

Dim Diagram as Object, Answer as Integer, MolName,Tail as String

Tail=Chr(13)+Chr(13)+Chr(13)+"Greet the next?"

With ActiveDocument.ActivePage.Diagrams

For Each Diagram In .Self

MolName=Diagram.GetIUPACName

If Trim(MolName)="" Then MolName=" aunque yo no puedo pronunciar sunombre"

Answer=MessageBox("Hola, "+MolName+"!"+Tail,"Example #1",MBB_OKCANCEL+MBI_EXCLAMATION)

if Answer= MBR_CANCEL Then Exit For

Page 32: ACD Chembasic

ACD/ChemBasic Comenzando 28

Next Diagram

End With

End sub

4.2 OXCARBOX.BAS

' Este programa

' (i) coloca en la ventana actual de ChemSketch las moléculas

' de fórmula general HO-(CH2)n-COOH, n=1-10,

' (ii) permite la optimización 3D para todas ellas y

' (iii) marca aquellas que contienen un grupo hidroxilo con el oxígeno

' del carbonilo menor a 3 Angstroms

Const nmax=10

Function Main As String

Dim Entities (1) As Object

Call GenerateAndAnalyze

Main="Terminado."

End Function

Sub GenerateAndAnalyze

'Generate - optomize - depict - analyze

Dim n,i,ph,pw,l,t,w,h as Integer, r As Double

Dim Ent,Mol,Oh, Cox,O1ox,O2ox,AtomCurr,AtomPrev, Page,Diagram, Struc,Font,TBox As Object

'Hacer una página

Page=ActiveDocument.ActivePage

'Si la página no esta vacía, crea una nueva

If Page.Drawings.Count>0 Then Page=ActiveDocument.AddEmpty

'Leer los parámetros de la página

ph=Page.GetHeight

pw=Page.GetWidth

Page 33: ACD Chembasic

ACD/ChemBasic Comenzando 29

'In a loop ....

For n=1 to nmax

'Generar

'Crea un nuevo arreglo

Ent=Assemblies.AddEmpty

Mol=Ent.Molecules.AddEmpty

'Add OH (note que no adicionamos hidrógenos implícitos)

Oh=NewAtom(8) : Ent.Add(Oh)

'Add COOH

Cox=NewAtom(6) : Ent.Add(Cox)

O1ox=NewAtom(8) : Ent.Add(O1ox)

O2ox=NewAtom(8) : Ent.Add(O2ox)

'Hacer enlaces

Mol.AddBond(Cox,O1ox,2)

Mol.AddBond(Cox,O2ox,1)

AtomPrev=Oh

'Add (CH2)n

For i=1 To n

AtomCurr=NewAtom(6)

Mol.AddBond(AtomCurr,AtomPrev,1)

AtomPrev=AtomCurr

Next i

Mol.AddBond(AtomPrev,Cox,1)

'Optimizar una estructura

Struc=Mol.Do3DOptimize(0.1)

'Cheque la distancia

r=Struc.GetDist(Cox,Oh)

If (r<=5.0) Then

Cox.SetName("$")

Oh.SetName("$")

End If

'Dibujar como un diagrama ChemSketch

Page 34: ACD Chembasic

ACD/ChemBasic Comenzando 30

Diagram=Page.Diagrams.AddEmpty

Diagram.Depict(Struc)

'Escoja el tamaño del diagrama para llenarlos todos en la página

l=Int(pw/3)

t=200+(n-1)*Int(ph/(nmax+1))

w=Int(pw/6)

h=Int(0.9*ph/(nmax+1))

Diagram.SetBound(l,t,w,h)

'Escoja la fuente para los símbolos atómicos

Font=Diagram.GetFont

Font.SetFontSize(24)

Diagram.SetFont(Font)

'Adicionar cajas de texto indicando las distancias‘carbono carbonilo ---- oxígeno del hidroxi

TBox=Page.TextBoxes.AddEmpty

TBox.SetContent("Cox---Ooh "+FStr(r,10,4))

TBox.SetBound(l+Int(1.1*w),t+Int(h/2),w,h)

Next n

End Sub