You are on page 1of 34

ACD/ChemBasic

Versin 5.0 para Microsoft Windows

Tutorial

Comenzando con 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 respectivos dueos. La informacin en este documento est sujeta a cambio sin previo aviso y se provee "como se ofrece" sin garanta. Advanced Chemistry Development Inc. no se responsabiliza de nada en cuanto al contenido de este material, incluido su limite a las no garantas de mercadeo y adecuacin para un propsito en particular. Advanced Chemistry Development Inc. no ser responsable de errores internos o por cualquier dao directo, indirecto, especial, incidental o consecuente al uso de este material. Parte Numero: G14_2805

Notas del Traductor

La traduccin de este documento fue realizada por CARLOS A. FRANCO R., Licenciado en Qumica y Magster en Docencia de la Qumica en la Universidad Pedaggica Nacional, Facultad de Ciencia y Tecnologa, Departamento de Qumica, Bogot (Colombia), con la debida autorizacin de: > Technical Support Manager > Advanced Chemistry Development,Inc.. En esta traduccin se mantuvo el esquema del documento original sin alterar su esencia. En algunas oportunidades se da la traduccin y entre parntesis se deja el trmino original con el fin de que el lector pueda referenciar fcilmente los nombres de los comandos, mens, botones, etc. Cualquier sugerencia al respecto, gustoso la atender en mi correo personal, cafranco@uni.pedagogica.edu.co o por intermedio del soporte tcnico de ACD/labs.

ACD/ChemBasic

Getting Started

TABLA DE CONTENIDOS
1. Introduccin a ChemBasic.................................................................................. 1
1.1 Objetivos ........................................................................................................................ 1 1.2 Qu es ChemBasic? ...................................................................................................... 1 1.3 Qu hay Nuevo en 5.0 ................................................................................................... 2 1.4 Por Qu Usar ChemBasic?............................................................................................ 2 1.5 Qu es lo que hace?...................................................................................................... 2 1.6 Mostrarme Ejemplos! ..................................................................................................... 3 1.7 Por qu Basic? ............................................................................................................ 3 1.8 Cmo Trabaja? .............................................................................................................. 3 1.9 Acerca de este Tutorial .................................................................................................. 5

2. Comenzando: Diga Hola!..................................................................................... 6


2.1 Objetivos ........................................................................................................................ 6 2.2 Crear el Sistema del Programa...................................................................................... 6 2.3 Hola, Todos! .................................................................................................................. 7 2.4 Objetos en ChemBasic .................................................................................................. 9 2.5 Pginas y Coleccines en ChemSketch ........................................................................ 10 2.6 Hola, Sr. Propano! ....................................................................................................... 11 2.7 Hola a diferentes Individuos ........................................................................................ 14

3. Los Frutos del Arbol Molecular ........................................................................ 17


3.1 Objetivos ...................................................................................................................... 17 3.2 Informe de Proyectos................................................................................................... 17 3.3 Referencia de Objetos Moleculares............................................................................. 17 3.4 Cmo Crear y Destruir Objetos?.................................................................................. 20 3.5 Elaborar un Arbol Molecular ........................................................................................ 21
3.5.1 Tomar Existencias................................................................................................................ 23 3.5.2 Optimizacin y Medidas ....................................................................................................... 23 3.5.3 Puliendo la Salida................................................................................................................. 24 3.5.4 Redimensionar el Diagrama Molecular ............................................................................... 25

4. Apndice. Texto Completo de Muestras .......................................................... 27


4.1 HELLO.BAS ................................................................................................................. 27 4.2 OXCARBOX.BAS ........................................................................................................ 28

ACD/ChemBasic

Comenzando

1. Introduccin a ChemBasic

1.1 Objetivos
En este Captulo aprender a: Por qu aparece ACD/ChemBasic; Qu hay nuevo en la versin 5.0; Cules son las ayudas para resolver las tareas de ChemBasic; Cules son los problemas de ejemplo que se resuelven con ChemBasic; Cul es el proyecto detrs del lenguaje de programacin; Cmo correr tcnicamente los programas ChemBasic; y una unin de palabras acerca de este tutorial.

1.2 Qu es ChemBasic?
ChemBasic es un simple, conveniente y funcionalmente rico lenguaje de programacin para la presentacin y manipulacin de estructuras moleculares, que relaciona objetos y todos los contenidos actuales y de futuros programas de ACD/Labs. Se encuentra que ChemBasic es completamente funcional con ACD/Labs. De la misma manera, ChemBasic tiene todas las caractersticas que un lenguaje de programacin debe tener: variables numricas y de cadena, arreglos, control de flujo y operadores condicionales, procedimientos de entrada y salida, etc. ChemBasic ha heradado cosas del BASIC genrico y algunas de sus extensiones. Ms evidente es la opcin de Microsoft'Visual Basic para Aplicaciones (VBA) y para algunas extensiones, extensiones ANSI del BASIC completo. Sin embargo, hay simplificaciones importantes en el procedimiento principal de la estructura del lenguaje, tal como las extensiones sometidas a partes especficas. Por ser una aplicacin universal que extiende la capacidad de los programas existentes, ChemBasic esta designado como un lenguaje orientado a objetos. Esto significa que toda la situaciones qumicas relacionadas se describen como objetos-esto es, que la estructura de datos especficos corresponden a molculas, conformaciones, etc. Existe un nmero mtodos predefinidos para manipular estos objetos. La herencia de los objetos y de los mtodos es la esencia de ChemBasic.

ACD/ChemBasic

Comenzando

1.3 Qu hay Nuevo en 5.0


En la versin 5.0, los programas ChemBasic pueden accederse desde la ventana de ChemSketch si esta en el modo Estructura o en el modo Dibujo. El Organizador ChemBasic es una nueva herramienta en ChemSketch que le ayuda a guardar pistas de sus programas ChemBasic. Dependiendo de como agrupe su barra de herramientas puede colocar un botn ChemBasic para que este disponible en el modo Estructura, en el modo Dibujo o en ambas o solamente en la barra ChemBasic. Las caractersticas del Manejador de Formas ahora forma parte del ChemSketch dedicado al ChemBasic. Con el Manejador de Formas puede designar formas de entrada para los programas ChemBasic. Anteriormente, el ChemBasic us una serie de cajas de dialogo de entradas secuenciales simples. Ahora, con el Manejador de Formas, puede disear formas de entrada para programas 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 cada uno de los campos automticamente posicionados: todos se disponen fcilmente a travs del Manejador de Formas.

1.4 Por Qu Usar ChemBasic?


Igual que cada qumico que maneje un computador con una base normal este tiene un conjunto de operaciones rutinarias para mostrar una molcula, una muestra, un espectro, etc. Con el software ACD/Labs, el qumico puede reducir significativamente el nmero de operaciones de rutina, gracias al contenido qumico claro y a la interfase intuitiva de los programas ACD. El software ACD/Labs ha probado sucesos en muchas reas tal como en la manipulacin de estructuras moleculares, bsqueda de estructuras, optimizacin de representaciones grficas (depuracin en 2D), optimizacin en 3D, clculo de propiedades moleculares, prediccin de espectros RMN, etc. Sin embargo, con el ms actual conjunto de aplicaciones, pensar en un nmero de situaciones donde pueda repetir algunos pasos continuamente.....Ha pensado cmo hacer esto con un simple men de opciones y hacer que esta serie de pasos ocurra automticamente? Una situacin comn es cuando quiere examinar sistemticamente el efecto de un cierto sustituyente sobre un compuesto 2D; cuando entra sucesivamente estructuras para hacer constantemente clculos, adicionar sustituyentes, recalcular e imprimir cada compuesto. Para resolver el problema esta aqu ACD/ChemBasic! Este tiene la genialidad de nuestro software justo para su computador.

1.5 Qu hace ChemBasic?


ChemBasic est designado (a) para automatizar rutinas sin ACD/Labs y (b) extender la funcionalidad de ACD/Labs. Le permite al usuario acondicionar el software ACD para sus propsitos o para adecuarlos a las interfases externas de la suite de ACD. Un programa ChemBasic sencillo puede, por ejemplo, obtener una molcula desde la ventana de ACD/ChemSketch, calcular algunas propiedades moleculares, remplazar fragmentos y recalcularlos apropiadamente. O, un programa ChemBasic puede permitir automticamente el anlisis conformacional y representar la estructura 3D ms probable para una molcula que haya escogido. O de cualquier forma esta limitado solo a su imaginacin!

ACD/ChemBasic

Comenzando

En este tutorial, consideraremos los siguiente ejemplos como ilustrativos: Obtener todos los diagramas desde una pgina ChemSketch y generar sus nombres segn la IUPAC (en el modo series) [Captulo 2]. Crear una serie de cidos carboxlicos homlogos, ejecutar una optimizacin 3D, representar las estructuras resultantes en la ventana de ChemSketch y marcar todas las estructuras en donde el grupo hidroxilo este separado del carboxilo por una distancia menor a 5 Angstroms [Captulo 3].

1.6 Mostrarme Ejemplos!


Un experto programador sabe que a menudo el mejor camino para empezar es encontrar una plantilla, por ejemplo, un programa elaborado y luego modificarlo. Algunos ejemplos de la vida real (cdigos fuente) estn asociados con ACD/ChemBasic. Las muestras de programas ChemBasic son las siguientes: Etiquetas Impresas (Label Printer) crea e imprime rtulos para material de vidrio de las estructuras dibujadas en una sesin de ChemSketch. Nombres de Azucares (SugarNames) transforma cadenas cortas de clases especficas de estructuras (azcares) en una conformacin correcta; esto es, que muestra formulas como GalNAc(alpha1-3)Gal(beta1-4)[Fuc(alpha1-3)]Glc(betaOMe) y le suministra la estructura 3D ms probable. Predecir el Log de K (LogK Predicto)r predice constantes de estabilidad para los complejos de aminas y/o carboxilatos que contienen molculas orgnicas hasta con 31 iones metlicos. Editor Molecular 3D (Molecular 3D-editor) un verstil conjunto de potentes utilidades el cual construye y modifica modelos moleculares en tres dimensiones fcilmente (cambia el ngulo de torsin, invierte los centros enantiomricos, analiza anillos plegados y formas polidricas, importa y exporta en diferentes formatos moleculares y mucho ms).

1.7 Por qu Basico?


ACD/ChemBasic esta basado en el antiguo y excelente programa BASIC "Beginners All-purpose Symbolic Instruction Code" (el acrnimo original para BASIC). El Basic es ampliamente aceptado como el lenguaje ms conveniente para no programadores. Las versiones modernas de BASIC han provisto sus xitos en varios campos- es suficiente mencionar para aplicaciones el Microsoft Visual Basic y el Visual Basic. ACD/ChemBasic es el programa para qumica cdigo para principiantes en todos los campos con instruccin simblica "Beginners All-purpose Symbolic Instruction Code". Es heredado del BASIC nativo simple y fcil de usar para el qumico, no para el programador guru; adiciona al BASIC ciertos objetos qumicos relacionados de una manera tal que es conocida para los qumicos.

1.8 Cmo trabaja?


Tcnicamente, ChemBasic no es nicamente un lenguaje de programacin, adems consiste en un interpretador y ejecutor de libreras (RTL) que estn integradas con ACD/ChemSketch. Para ejecutar una aplicacin ChemBasic, debe tener corriendo ChemSketch. Puede crear un programa

ACD/ChemBasic

Comenzando

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

ACD/ChemBasic

Comenzando

1.9 Acerca de este Tutorial


Los ejercicios en este tutorial estn designados para hacerse en un promedio de 10 a 40 minutos, dependiendo de su familiaridad con los lenguajes de programacin y con la interfase ACD. Despus de revisar estos ejercicios y con ayuda en lnea, ser capaz de usar solo el ChemBasic con poca o sin asistencia y con mximo de velocidad y eficiencia. Este tutorial se provee en forma electrnica legible en los ms comunes procesadores de palabra. Si no puede localizar algo que necesite en el ndice, escriba una frase para hacer la bsqueda total o de algo que incluya o se relacione con la palabra. Las fotografas han sido tomadas con la ltima versin del software. Este tutorial asume que usted esta familiarizado con el ratn y el manejo de Microsoft Windows. Una vez que ha usado esta gua nos gustara su retroalimentacin. Cmo podemos probar la documentacin para este producto? Tenemos un pequeo cuestionario que nos gustara que contestara. Todos los remitentes enviarn un dibujo para ganar un premio de ACD/ChemFolder (o equivalente descuento en la compra de cualquiera de l software ACD). Por favor use MS Word 6.0 o posterior Gane!!! para abrir el archivo survey.doc o use Adobe Acrobat Reader para Su opinin es abrir survey.pdf en la documentacin del CD que ha recibido con importante este software, o visite la pgina Feedback en nuestro sitio web, http://www.acdlabs.com/feedback/guides.html. El ganador del para dibujo ser anunciado al final de cada ao calendario. nosotros.

ACD/ChemBasic

Comenzando

2. Comenzando: Diga Hola!

2.1 Objetivos
En este captulo, aprender a Crear un programa ChemBasic; Cules son las variables y tipos de datos en ChemBasic; Cmo disear un dialogo para los usuarios de su programa; Cmo acceder a las pginas ChemSketch y a su contenido; Cmo implementar control lgico y ciclos en un programa ChemBasic; Cmo generar nombres segn la IUPAC para las molculas. Tradicionalmente, el primer programa debe decir hola. Dado que el ChemBasic no conjuga con molculas. Permtanos mostrar la primera aplicacin, decir hola a las molculas!

2.2 Crear el esqueleto del Programa


Primero que todo, crearemos un esqueleto de la aplicacin. Un programa ChemBasic esta hecho de funciones y sub rutinas (procedimientos). Ellos comienzan con la palabra clave de la Funcin o Sub Rutina y finaliza con la Funcin Fin (End) o con End Sub. El programa puede tener muchos procedimientos pero una y solo una funcin 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 explicacin de la diferencia entre una Funcin y una Sub Funcin.

En nuestro programa simple, su esqueleto podra ser:


Function Main As String Here will be the code End Function
Importante ChemBasic no toma en cuenta si usa maysculas o minsculas en palabras

claves o en nombre de variables. Funcin, funcin, FUNCION, y aun fUnCiN significan exactamente lo mismo. As que es bueno saberlo para saber como escribirlas. En este Tutorial, todas las palabras clave comienzan con mayscula, que es lo comn en varios apartes de BASIC. Hay dos cosas ms para explicar. Primero, las palabras clave para nuestras funciones COMO CADENAS (As String) aparecen despus de la declaracin de la Funcin Principal (Function

ACD/ChemBasic

Comenzando

Main). Esto significa que la funcin retornar un valor de cadena. Las funciones siempre retornan algunos valores despus de la ejecucin, en contraste con las subrutinas. As. La variable especial Main tendr un valor de cadena despus que la funcin sea ejecutada. El valor que retorna la funcin puede invocarse en el programa para propsitos particulares. El llamar el programa para la Funcion Main es hecha por el mismo ChemBasic; este usar el valor para mostrarlo al usuario en una caja de informacin, que aparece en la pantalla justo despus de completar la aplicacin ChemBasic. Un buen hbito de programacin en ChemBasic es declarar siempre la funcin principal como Cadena (puede declararla como entero, doble, etc.) porque esta le da la oportunidad de incluir cualquier mensaje de error o hacer un comentario al final de la cadena. La segunda cosa, en las tres lneas de cdigo anteriores, es la lnea de comentarios. Todo lo que este entre apstrofos y al final de la lnea ser ignorado por Basic. Es una caracterstica muy usada, que le permite clarificar sus programas y hacerlos mucho ms legibles, sobre todo cuando haga una revisin con mucho tiempo de posterioridad.
Nota

Existen otras dos formas de comentarios: la declaracin REM y la multilnea de comentarios estilo C /* . */ ; vea la ayuda de ChemBasic para una descripcin completa.

2.3 Hola, Todos!


Ahora, podemos llenar la plantilla con cdigo real. El camino ms 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 estas tres lneas. Gurdelo e inicie el ACD/ChemSketch. Seleccione Archivo/correr (File/Run) ChemBasic y cuando se le sugiera ejecutar el archivo (en la caja de dialogo estndar File Open ), seleccione el archivo hello.bas. Su Hola aparecer en la pantalla como:

el truco es que como lo mencionamos arriba, ChemBasic mostrar el valor que retorna la funcin principal en su caja de informacin (info box) despus de ejecutar la aplicacin. Naturalmente, este no es un camino honesto. Como un truco puede usarse una vez por programa (porque solo una funcin principal puede estar presente). Permtanos disear nuestro saludo de una manera aplicada ms universalmente. ChemBasic tiene una construccin especial de funciones que soporta dilogos con el usuario: MessageBox, UserIOBox y UserIO. Usaremos MessageBox para nuestros propsitos.
Nota

Vea la ayuda de ChemBasic para la descripcin de otras funciones de entrada/salida

ACD/ChemBasic

Comenzando

Escribamos el cdigo:
Function Main As String Dim Answer As Integer Answer=MessageBox("Hello, Molecules!","Example #1", MBB_OK +MBI_INFORMATION) End Function

Note

Corrientemente, ChemBasic no soporta declaraciones multi-lnea. Usted debe escribir textos largos en una sola lnea. Sin embargo, en este tutorial, para propsitos de legibilidad, los textos largos pueden aparecer en varias lneas. En tal caso, la primera lnea comenzar en la margen izquierda de la pgina. Tenga cuidado cuando transfiera lneas a archivos ejecutables ChemBasic (.BAS) usted debe enviar las lneas en una sola.

Una vez que ha transferido el programa a hello.bas y haberlo guardado como archivo de texto (tenga cuidado al declarar lneas mltiples), puede tratar de ejecutar este programa y ver qu pasa:

Exactamente si es lo que deseamos? En el segundo programa, la declaracin Dim que aparece justo despus de la funcin de encabezado, declara la variable Answer que es de tipo Entero. Qu significa esto? La Variable es un nombre que usted asigna a algn lugar de almacenamiento en la memoria. Una vez introducida, puede ser llenada (o re-llenada) y usada para cualquier propsito. Cada variable puede corresponder a un dato pre definido, que difiere por los formatos internos y permite mtodos de manipulacin. Inclusin de datos Convencionales: Boolean Integer Long Double String
Nota

Variable Booleana, valores que son solo Cierto o Falso. nmero entero largo 16-bit nmero entero largo 32-bit nmero de punto flotante largo 64-bit variable de cadena

Vea la ayuda de ChemBasic para la descripcin de tipos de datos y declaraciones

En ChemBasic, todas las variables que use deben ser explcitamente declaradas. Si no declara una variable, esta ser considerada como un error. Para declarar una variable, puede usar la declaracin DIM, exactamente como se muestra arriba para la variable entera Answer. Regresemos a nuestro programa ejemplo. En la clase de variable Integer, necesitamos tomar el valor retornado por la funcin MessageBox. Este valor es un cdigo de retorno- indica cul botn de usuario ha sido presionado en un mensaje de una caja de dialogo. En el momento este valor no nos preocupa. Sin embargo, no hay posibilidad de llamar una funcin sin la asignacin del valor para alguna variable. En el ejemplo siguiente usaremos este cdigo de retorno.

ACD/ChemBasic

Comenzando

Unos comentarios sobre la funcin. La caja de mensaje ( MessageBox) muestra una caja de dialogo estndar, que contiene el mensaje (primer parmetro en una llamada de funcin; aqu "Hola, Molculas!") y el encabezado (segundo parmetro; "Example #1"). Los botones que aparecen en la caja de dialogo son regulados por el tercer parmetro (en este caso se mostrar solamente el botn OK y el signo de exclamacin, !, indicado en la caja de informacin).
Nota

Vea la ayuda ChemBasic para la lista de parmetros y control de botones de la funcin caja de mensaje.

2.4 Objetos ChemBasic


Sin embargo, su primer hola para las molculas no era muy adecuado esto lo decimos para todo de una vez. Cada uno tiene un nombre, aunque...cmo preguntamos por el nombre de las molculas y les enviamos un mensaje personalizado?. Digamos hola propano tal como decimos hola, John!. Antes de hacer esto pensemos que se necesita entender que las molculas y otras cosas son diferentes a simples nmeros o letras tal como se representa en ChemBasic. Esto es porque en conjunto el lenguaje de programacin BASIC de ACD/ChemBasic incluye no solamente los tipos de datos disponibles en BASIC estandard, sino que tambin incluye ciertas extensiones que son de propsito general y relacionados con la qumica. Todas las extensiones son representadas por objetos, esto es, que son estructuras de datos predefinidas usadas para permitir que se hagan en las pginas sketch, molculas, conformaciones, etc. En pocas palabra, un objeto es cualquier entidad que puede manipular, que no puede ser descrito como una primitiva simple de datos convencionales tales como enteros, simple, booleana, etc. Hay un tipo de objeto genrico, 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 oculta en tipo de nombre. Los tipos (y nombres) estn definidos dentro del mismo ChemBasic; usted no puede crear su propio tipo. A menudo (de hecho, siempre), no debe indicar un tipo de objeto en particular ChemBasic los determina cuando se llaman funciones o se obtienen objetos. Todo esto repartido en los nombres de variables de objetos, que sirven para manejar entidades. Por ejemplo, la lnea
Dim Doc As Object

Reservar una variable al objeto llamado Doc. Cada objeto tiene su propio conjunto de mtodos, que son procedimientos que se les pueden aplicar a ellos. Estos procedimientos son cuidadosamente designados para la manipulacin fcil de este objeto en particular (tipo), sin detalles engorrosos. Ellos y solamente ellos se aplican a los objetos. Si los trata de otra forma, se generar un error. Considere una analoga con nmeros convencionales. Imagine que tiene dos variables de cadena tradicionales, a y b. Asigne a la variable a "bueno " y a la b "trabajo". Aplicndole la operacin de adicin, a+b, resulta "buen trabajo". Sin embargo, si trata de dividir, a/b, resulta una accin absurda y se generar un error. De hecho, la adicin es un mtodo que el BASIC convencional permite para aplicarse a cadenas, mientras que la divisin no se permite en este tipo de variables. El BASIC estrictamente define todas las operaciones y funciones (mtodos) que son aplicables a los objetos de 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 podran tener los valores "10" y "2". Tanto la suma como la divisin son permitidas para este tipo de variable. De esta forma ChemBasic permite que se hagan ciertas cosas para unas y se restrinjan para otras. Los mtodos son simplemente una clase especial de funciones y subprogramas BASIC que se toman como argumentos de los Objetos. Ellos se llaman tecleando un punto seguido del nombre del mtodo exactamente despus del nombre del objeto:
SomeObject.ThisObjectMethod(parameters)

ACD/ChemBasic

Comenzando

Esto puede verse como una digresin, pero estamos interesados en objetos ChemBasic que representen molculas en la ventana de ChemSketch. Para acceder a ellos necesitamos objetos que sean representados con sus contenidos en ChemSketch.

2.5 Pginas y Colecciones en ChemSketch


En trminos de ChemBasic su documento ChemSketch actual esta representado por el objeto Document, que es una coleccin de objetos de tipo pgina (collection of objects of type Page). Esto significa que Document es un conjunto de miembros objeto, cada uno de los cuales es una pgina (Page); puede fcilmente contarlos, encontrar cualquier miembro, borrarlo o adicionar uno nuevo, llamando el mtodo de coleccin (aqu, se refiere a Document)
Nota

Vea la ayuda ChemBasic para una discusin ms detallada sobre colecciones.

Por ejemplo, el texto


DocumentObject.Count

Exige a ChemBasic contar los miembros de la coleccin. Usted puede escribir algo como:
Dim Npages As Integer reserve an integer variable Dim Doc As Object reserve an object variable Get Doc somewhere Npages=Doc.Count count pages Doc.AddEmpty add blank page st Doc.AtRemove(1) remove 1 page of document
Nota

Ver la ayuda ChemBasic para la descripcin de los mtodos de coleccin adicionar pgina vaca (AddEmpty), remover (AtRemove), y alejar (so far).

Una recomendacin: la declaracin especial con (UIT) drsticamente reduce el volumen del cdigo. Despus que haya escrito With SomeObject , no necesita mencionar SomeObject cuando invoque su mtodo. Solamente necesita simplificar el nombre del mtodo precedido por un punto. Reescriba nuestro ejemplo:
Dim Npages as Integer reserve an integer variable Dim Doc as Object reserve an object variable Get Doc somewhere With Doc Npages=.Count .AddEmpty .AtRemove(1) End With
Nota

count pages add blank page remove first page of document

Corrientemente no puede usar anidaciones con las asignaciones en ChemBasic.

La funcin especial ActiveDocument rle retorna una direccin del documento activo. As, el cdigo de abajo hace las siguientes acciones en su documento actual:
Dim Npages As Integer reserve an integer variable

ACD/ChemBasic

Comenzando

10

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

(Note que hemos omitido la variable objeto y simplemente la mencionamos en la asignacin ActiveDocument. 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 pginas. El objeto Pgina (Page) es un miembro de una coleccin, como lo ha podido ver. Pero es en s una coleccin misma, sin embargo, contiene un nmero de colecciones correspondiente a diferentes clases de dibujos ChemSketch (cajas de texto, rectngulos, etc.). Hay mtodos para los objetos Pgina, que retornan las colecciones hijos. El inters para nosotros ahora es el mtodo Diagramas de Pgina que retorna al objeto Diagramas una coleccin de todos los diagramas moleculares dibujados en la pgina. Una vez que haya la coleccin, puede adicionar, remover o encontrar cualquier miembro de un objeto en particular.

2.6 Hola, Sr. Propano!


Regresemos a nuestro objetivo. Como un primer intento, acogeremos la primera molcula en la ventana activa de ChemSketch. Para ejecutar esta tarea, accederemos a la pgina activa del documento y obtenemos su primer diagrama molecular. Por conveniencia, encapsularemos todos los trabajos con diagramas en una subrutina separada; nuestra funcin principal ser responsable de preguntar al usuario si direcciona la molcula ChemSketch personalmente para luego llamar el procedimiento tratamiento de diagramas (diagram-treating). Mire como:
Function Main as String Dim 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 Main= Everybody welcomed. Else No, leave this Main=Sorry, we leave them. End If End Function

ACD/ChemBasic

Comenzando

11

Note, que usamos el valor sin usar que se retorna de la caja de mensaje. Tambin implementamos una asignacin de condicional si...entonces (conditional statement If Then Else) para trabajar respuetas alternativas del usuario.
Nota

Vea la ayuda ChemBasic para ms 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 selecciona archivo/correr (File/Run) en ChemBasic cuando entre en la ventana ChemSketch recibir un mensaje de error acerca de un identificador no declarado:

significa esto que estamos errados en la subrutina GreetByName. He aqu un primer diseo de como planeamos tratar el diagrama:
Sub GreetByName Dim 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 funcin principal en hello.bas, dibuje una molcula tal como el propano en ChemSketch y ejecute el programa ChemBasic. Ver al inicio una pregunta:

haga clic en Yes y despus de una pausa ver:

Observemos la subrutina GreetByname un poco ms de fondo. Primero obtendremos los diagramas invocando ActiveDocument.ActivePage.Diagrams con la asignacin With. Despus obtendremos un diagrama estructural desde una coleccin usando el tem mtodo (method). Qu es

ACD/ChemBasic

Comenzando

12

un diagrama estructural? Lo primero como ve, el nmero entre parntesis: Item(1). Y finalmente aplicamos el mtodo llamado GetIUPACName para el Objeto Diagrama (Diagram object). Este mtodo retorna la cadena que contiene el nombre IUPAC generado al correr la rutina de Librera de ACD/ChemBasic (en verdad la mayora si no todos los mtodos de objetos son internamente trasladados a las llamadas RTL). Note que nuestro cdigo es totalmente equivalente a una forma completa (sin la abreviatura With):
MolName=ActiveDocument.ActivePage.Diagrams.Item(1).GetIUPACName
Nota

El mtodo GetIUPACName retorna el nombre correcto solamente si tiene instalado el paquete ACD/Name, de otra forma se retorna una cadena vaca.

Repetimos por claridad, que es lo que hace aqu ChemBasic: 1. obtiene el documento activo ACD/ChemSketch; 2. obtiene su pgina activa (la ventana visible de ChemSketch); 3. obtiene todos los diagramas moleculares de la pgina: 4. extrae el primer diagrama de la coleccin: 5. aplica el mtodo GetIUPACName al diagrama; 6. saca el nombre y saluda.
Nota

Vea la ayuda ChemBasic para los mtodos del objeto Diagrama

ACD/ChemBasic

Comenzando

13

2.7 Hola a varios Individuos


El paso final que debemos hacer es direccionar todas las molculas en la pgina, no solamente la primera. Para hacer esto, se debe implementar la construccin de un ciclo en ChemBasic. La forma ms comn en otros lenguajes de programacin es la asignacin 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 repetirn diez veces y la variable i (contador cclico) se ir incrementando de uno en uno, comenzando desde uno hasta llegar al valor de diez, en donde el ciclo termina. En nuestro ejemplo, podramos repetir un ciclo para cada diagrama. De esta forma, primero contamos el nmero de diagramas:
Sub GreetByName Dim Answer as Integer, MolName as String Dim i,Ndiagrams as Integer With ActiveDocument.ActivePage.Diagrams Count the diagrams Ndiagrams=.Count For i=1 To Ndiagrams MolName=.Item(i).GetIUPACName Answer=MessageBox("Hello, "+MolName+"!","Example #1",MBB_OKCANCEL+MBI_EXCLAMATION) If Answer= MBR_CANCEL Next i End With End Sub Then Exit For

Remplace la subrutina en hello.bas por la subrutina anterior, y guarde el archivo de texto. Dibuje otra molcula en la misma pgina ChemSketch page como la que contiene el propano. Cuando ejecute el programa, ver el saludo individual de cada molcula. Note, sin embargo, que no tenemos necesidad de aplicar el ciclo i en la subrutina. Todo lo que se necesita es tener los miembros de una coleccin. Para cada caso, ChemBasic tiene el llamado object-loop para cada uno:
For Each MemberObject In CollectionObject MemberObject.CallSomeMethod Next MemberObject

ACD/ChemBasic

Comenzando

14

Esto significa que todas las asignaciones entre cada For y Next se repetirn con cada miembro de una coleccin, de tal forma que al rescribir el cdigo quedara:
Sub GreetByName Dim Diagram as Object, Answer as Integer Dim 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 Next Diagram End With End Sub Then Exit For

Guarde el archivo y crralo despus de dibujar para que diga, propano, etano y metano en una sola pagina ChemSketch. El primer saludo ser el siguiente:

ACD/ChemBasic

Comenzando

15

observe el mtodo .Self en la subrutina anterior. Si intenta retornar el objeto mismo cuando se aplica sobre cualquier objeto es aceptable cuando se combina con la construccin With exactamente como se mostr.
Nota

Vea la ayuda ChemBasic para una descripcin de la asignacin bucle (ciclo)

Ahora el paso final. La situacin puede ocurrir donde el RTL no retorne el nombre IUPAC, por alguna razn. En tal caso, GetIUPACName retornar una cadena vaca o una cadena que contiene espacios. Se debe chequear esto y aun trasladar la molcula o llamarla con otro nombre. Esto se implementa como sigue:
if Trim(MoltName)="" then MolName=" though I can not pronounce your name"

(La funcin 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 Apndice.

ACD/ChemBasic

Comenzando

16

3. Los frutos del Arbol Molecular

3.1 Objetivos
En este captulo aprender Cul es el objeto del rbol molecular ChemBasic; Cmo acceder a sus ramas; Cmo crear nuevos objetos moleculares; Cmo vincular objetos moleculares con pginas ChemSketch; Cmo analizar conformaciones y molculas.

3.2 Designar Asignaciones (Relaciones)


Consideremos un ejemplo de la vida real. Suponga que estamos interesados en qu cidos carboxlicos de la familia HO-(CH2)n-COOH, tienen una corta distancia entre el carbono carboxlico y el oxgeno del grupo hidrxido. Esta situacin es concebible si designamos receptores para esos cidos y estamos interesados en enlazar simultneamente molculas por los grupos finales carboxi e hidroxi. con ChemBasic, se permite hacer las siguientes asignaciones: Generar las molculas 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 pgina ChemSketch. Para acompaar la misin, 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 estn relacionados, pero no son idnticos, con los diagramas moleculares ChemSketch (Objetos Diagrama ). Nosotros permitimos "sombras" en 2D y en 3D en ChemSketch, para algunas pinturas de molculas. Los tomos en los diagramas de ChemSketch tienen etiquetas, coordenadas de la pantalla (en centmetros o pulgadas), y mucho ms. Los tomos en molculas ChemBasic tienen carga nuclear y masas atmicas, las coordenadas 3D (en Angstrom), etc. Naturalmente, estos objetos estn relacionados y esto asegura la oportunidad de crear un modelo molecular en ChemSketch. Pero para tratar con este modelo como con una molcula real nosotros debemos convertirlo en una entidad de ChemBasic.

ACD/ChemBasic

Comenzando

17

Nota

Las diferencias entre los objetos moleculares de ChemSketch y de ChemBasic fueron creadas intencionalmente. ChemSketch contiene muchas caractersticas, tal como control automtico de valencia, que es muy conveniente para la aplicacin de dibujo. Sin embargo, estas caractersticas controladas restringen la libertad de operacin con molculas, las cuales son necesarias en el manejo del lenguaje de molculas. As, los diagramas ChemSketch y los rboles moleculares ChemBasic estn claramente separados 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 pueden coleccionar en grupos llamados objetos ensamblados (Assembly). El esquema de conexin de los tomos de un ensamble dado se llama una Molcula. Una coleccin de coordenadas atmicas (x,y,z, Angstroms) se llama Conformacin. cualquier Molcula o Conformacin se basa en Arreglos (Assembly). ChemBasic automticamente rastrea y actualiza la coleccin de Molculas y Conformaciones (auto colecciones), que contienen todas las molculas y conformaciones ligadas al arreglo particular. puede asociar algunos objetos de Molculas y Conformaciones ligados al mismo Arreglo. Los objetos compuestos que resultan se llaman Estructuras. Objetos Estructura estn tambin reunidos en objetos Estructuras, ligados al Arreglo. Finalmente, todos los objetos de Arreglos en esta sesin estn auto reunidos dentro del objeto Arreglos. De esta forma, puede acceder a cualquier Arreglo (y a su rbol derivado) como
Arreglos. 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 pool justamente como lo hace ChemSketch con sus pginas y dibujos. Esto le permite guardar lo tratado anteriormente sobre colecciones. Los niveles moleculares predefinidos crean una capa abstractiva que custodia sus objetos, la capa maneja memoria, rastrea objetos desaparecidos, su mutua influencia, etc. Sin embargo, no se debe preocupar con el mecanismo interno, usted trata solamente con sus rboles moleculares.

Este paradigma, aunque alguna veces inusual en primera instancia, sigue las rutas que hemos descrito verbalmente para el mundo molecular. Las bases generales se refieren a tomos y sus grupos. El mismo grupo de tomos puede tener diferente conectividad. Esto significa que tiene un adecuado camino para describir tomos de enlaces isomricos diferentes en objetos Molcula unidos al mismo Arreglo. Adems, los tomos en el grupo pueden tener diferentes coordenadas de tal forma que tiene una ruta adecuada para describir confrmeros diferentes en los objetos Conformacin unidos al mismo Arreglo. Note que ninguna conformacin se refiere al esquema enlazante ni al esquema de valencia referido a las coordenadas atmicas. Para integrar esta clase de datos se debe introducir ms de un objeto Estructura. Como puede ver, todos los objetos forman una especie de rbol. (O mejor enarbolar sera ms apropiado?)

ACD/ChemBasic

Comenzando

18

Arbol Molecular ChemBasic


Enlace Atomo Punto

Arreglo Moleculas Molecula Conformacion


Conformaciones

Estructura Estructuras
Examinemos las ramas del rbol con ms detalle. Atomo Es el objeto fundamental en la jerarqua, este representa tomos aislados no conectados. Los tomos pueden coleccionarse dentro del objeto Arreglo. Enlace Indica la conexin de dos tomos. Los enlaces pueden colectarse dentro del objeto Molcula. El mismo enlace puede incluirse en muchas molculas. Para crear un enlace, use la funcin ChemBasic Nuevo enlace (NewBond). Para destruir un enlace, use la funcin Destruir (Kill). Para hacer o romper el enlace en una molcula particular, use el mtodo de objeto Molcula. Punto Representa un punto en el espacio ocupado por un tomo. Los puntos se coleccionan dentro de un objeto Conformacin. Los puntos no pueden ser removidos o adicionados a la coleccin Conformacin. El usuario puede incluir puntos directamente o a travs de una Conformacin. 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 simultneamente el naftaleno con su benceno constitutivo como tres molculas diferentes basadas en tres ensambles hechos de los mismos tomos (por ejemplo. Teniendo los mismos repartos). Cualquier Arreglo puede tener mltiples uniones en objetos Conformacin, Molcula y Estructura, todos los cuales son (auto) colleccionados dentro de las colecciones Conformaciones, Molculas, y Estructuras. Si el Arreglo base es modificado, este involucra todos los objetos chicos. Por ejemplo, removiendo un tomo del Arreglo automticamente destruye todos los Puntos y Enlaces relacionados y actualiza todos los objetos.

ACD/ChemBasic

Comenzando

19

Molcula Es un esquema de valencia construido al inicio del Arreglo atmico. Tpicamente, esta conectado pero puede desconectarse si se quiere. Aunque Molcula encapsula significados qumicos de informacin sobre enlaces de tomos, no se incluye informacin acerca de la estructura 3D. Para acceder posteriormente, debe referirse a un objeto separado Conformacin. Tcnicamente hablando, Molcula es, primariamente, una (auto) coleccin de objetos Enlaces. Esta coleccin esta estrictamente asociada con su base Arreglo. Este cambia si el arreglo asociado se modifica. Por ejemplo, removiendo un tomo de un Arreglo automticamente borra todos los objetos enlace relacionados y actualiza la Molcula (coleccin enlaces). Conformacin Representa la posicin del Arreglo tomos en el espacio. La razn para separar la conformacin de su arreglo es que este puede tener muchas conformaciones. De hecho, lo que queremos decir aqu por conformacin es que es slo un instantnea de posiciones atmicas (qu no puede ser estable o qumicamente razonable). El arreglo puede tener tantas conformaciones como usted desee. La Conformacin esta estrictamente asociada con un Arreglo simple (objeto base). Cualquier Arreglo puede tener mltiples asignaciones a objetos Conformacin, todos ellos estn colectados automticamente dentro de unos objetos Conformaciones que estn siempre ligados al arreglo. Las Conformaciones de objetos derivados (hijos) son objetos Estructura. Cualquier Conformacin puede tener mltiples objetos Estructura asignados todos los cuales estn auto colectados dentro de los objetos Estructuras los cuales siempre estn disponibles para unirlos a un Arreglo. La Conformacin cambia si el Arreglo patrn se modifica. Si se borra el ltimo, todas las conformaciones se destruyen inmediatamente. Los cambios en las Conformaciones modifican todas sus Estructuras derivadas. Por ejemplo, removiendo un tomo desde un Arreglo automticamente borra todos los objetos Punto relacionados y actualiza todos los objetos Conformacin derivados (colecciones Punto). Cambiando las coordenadas atmicas en la Conformacin tendr influencia en todas las Estructuras derivadas. Tcnicamente hablando, la Conformacin es, primariamente, una (auto) coleccin de objetos Punto. Estructura Es el hijo de una Conformacin y una Molcula basada en un Arreglo comn de tomos. Para acceder a los objetos padre, use los mtodos de referencia de Estructura (vea abajo).

3.4 Cmo Crear y Destruir Objetos?


Para crear un tomo, use la funcin ChemBasic Nuevo tomo (NewAtom). Dado que el tomo est debajo de todos los otros objetos moleculares, destruirlo es permitido pero es peligroso. Atom.Kill modificar todos los arreglos relacionados con molculas, estructuras, y conformaciones. Los objetos Enlace y Punto que usen este tomo se destruirn. As, para destruir un tomo, use la funcin destruir (Kill). Para quitar un tomo de un arreglo particular, use la funcin .AtRemove. Crear un enlace o un punto, use Nuevo enlace o Nuevo punto (NewBond o NewPoint). Para crear un nuevo Arreglo, use el mtodo Adicionar vaco (AddEmpty) en la auto coleccin Arreglos de ChemBasic. Los Arreglos tambin pueden crearse al importarlos. Note que una vez creados, los Arreglos ChemBasic relacionan todas las referencias a las Molculas y a las Conformaciones. Para crear un nuevo objeto Molcula para un Arreglo dado, use el mtodo AddEmpty para la coleccin Molculas vinculada a este arreglo. Para crear un nuevo objeto Conformacin para un Arreglo dado, use el mtodo AddEmpty para la coleccin Conformaciones unidas a este arreglo. Note que el objeto Punto de una Conformacin vaca tiene llenos los campos de tomos y del cero de coordenadas. Puede crear tambin un objeto Conformacin invocando el optimizador 3D o importando un archivo con coordenadas.

ACD/ChemBasic

Comenzando

20

Para crear una nueva Estructura, use el mtodo derivado (Derive) de la coleccin Estructuras asociadas con un Arreglo dado.

3.5 Elaborar un rbol Molecular


Ahora, regresaremos a nuestra misin. Nuestra primera tarea es generar las molculas HO-(CH2)nCOOH con n, desde 1 hasta 10. Como en el ejemplo anterior ubiquemos todo el trabajo molecular en una Sub especial llamada GenerateAndAnalyze:
Function Main As String Call GenerateAndAnalyze Main="Completed OK." End Function Sub GenerateAndAnalyze 'Generate - optimize - depict analyze End Sub

Ahora escriba lo siguiente: el cdigo que sigue crea los 10 cidos carboxlicos que se necesitan:
Sub GenerateAndAnalyze 'Generate - optimize - depict analyze Dim n,i as Integer Dim Ent,Mol,Oh, Cox,O1ox,O2ox,AtomCurr,AtomPrev As Object Const 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) 'Add COOH Cox=NewAtom(6) O1ox=NewAtom(8) O2ox=NewAtom(8) 'Make bonds Mol.AddBond(Cox,O1ox,2) Mol.AddBond(Cox,O2ox,1) AtomPrev=Oh : : : Ent.Add(Cox) Ent.Add(O1ox) Ent.Add(O2ox) : Ent.Add(Oh)

ACD/ChemBasic

Comenzando

21

'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 funcin simple principal y la subrutina GenerateAndAnalyze como se mostr. Cuando se este ejecutando, encontrar un cdigo de retorno claro, pero no se sorprenda si no aparecen molculashasta ahora no hemos indicado como pueden mostrarse las molculas. Qu toma lugar aqu? Incrementamos el bucle en un ciclo con un contador n, que expresa el nmero de metilenos entre los extremos de una molcula. En cada paso del ciclo, primero se crea un nuevo arreglo:
Ent=Assemblies.AddEmpty

Y una molcula nueva


Mol=Ent.Molecules.AddEmpty

En el momento, ambos estn vacos. Ahora se pueden adicionar tomos al arreglo. Para hacer esto, creamos un tomo y se adicionan otros. (Note que NewAtom recibe como un parmetro el nmero del elemento del tomo que se ha creado):
'Add OH (note that we will not add implicit hydrogen) Oh=NewAtom(8) 'Add COOH Cox=NewAtom(6) O1ox=NewAtom(8) O2ox=NewAtom(8) : : : Ent.Add(Cox) Ent.Add(O1ox) Ent.Add(O2ox) : Ent.Add(Oh)

entonces, adicionamos enlaces a la construccin de la molcula al inicio del arreglo. Podramos hacer esto como con los tomos a travs de subsecuentes iteraciones de NewBond y de MoleculeObject.Add. Sin embargo, mostramos un camino ms rpido (note que AddBond permite las dos funciones y recibe como parmetro el orden de enlace del enlace que se ha creado):
'Make bonds Mol.AddBond(Cox,O1ox,2) Mol.AddBond(Cox,O2ox,1)

ACD/ChemBasic

Comenzando

22

Nota

Vea la ayuda ChemBasic para la explicacin de NewAtom, NewBond, AddBond y funciones relacionadas.

Agregamos tanto las mitades del oxgeno y del grupo carboxi como los enlaces a lo ltimo. Adicionar y conectar los grupos metileno es algo ms engaoso:
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) y conectamos cada uno de ellos al tomo previo (AtomPrev) de la cadena. Observe el cdigo. Antes de comenzar el ciclo, el primer tomo era el oxgeno del hidroxilo. As que el primer metileno ser conectado a este oxgeno. Antes de que el metileno se coloque AtomPrev. De esta forma el siguiente metileno se adicionar en el Segundo paso del ciclo y aparecer conectado al primero y as sucesivamente hasta que el lmite de carbonos (n) se alcance. Finalmente, formaremos un enlace entre el ultimo metileno en la cadena para conectar al carbono carboxilo (Cox).

3.5.1 La Accin tomar Existencias


A estas alturas, usted podra querer ver su molcula en la Ventana de ChemSketch. Para hacer esto, pueden hacerse dos modificaciones a su archivo oxycarb.bas que cre anteriormente. 1. escoja un mximo entre uno y 10; note que esto es temporal y para propsitos de ensayo; 2. inserte el tipo de declaracin Dim Page, Diagram as Object dentro de la subrutina GenerateAndAnalyze; 3. inserte las siguientes cuatro lneas de cdigo antes de finalizar la subrutina:
Page=ActiveDocument.ActivePage Diagram=Page.Diagrams.AddEmpty Diagram.Depict(Mol)

Ahora, cuando corra oxycarb.bas, ver una molcula creada en la parte superior izquierda de la pgina de ChemSketch. Esto de hecho no es elegante, todos los tomos quedan entre si uno encima del otro, pero la molcula existe. Es un consuelo grande, y ahora nosotros podemos seguir el resto de la tarea! Usted puede poner el n mximo (nmax) hasta 10..

3.5.2 Optimizacin y Medida


Estamos listos para hacer la prxima tareaoptimizando la estructura y calculando la distancia (H)O --- C(OOH). El cdigo necesario es bien simple. Primero, haremos el mtodo Do3Doptimize, el cual se aplica al objeto Molcula. Este mtodo invoca al Optimizador (ACD/3Doptimizer), exactamente

ACD/ChemBasic

Comenzando

23

igual que en ChemSketch. Se crea el objeto Conformacin complete con las coordenadas atmicas optimizadas, asociandolas a la Molcula original y retorna la Estructura resultante:
'Optimize a structure Struc=Mol.Do3DOptimize(0.1)

Luego aplicamos un mtodo para un objeto Estructura, llamado GetDist, para calcular la distancia interatmica (esto es que donde sea, al comienzo de la Sub, podramos declarar una variable necesaria r):
'Check out the distance r=Struc.GetDist(Cox,Oh)

Nota

Vea la ayuda ChemBasic para una descripcin ms detallada del Do3Doptimize, GetDist y de los mtodos relacionados.

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


If (r<=5.0) Then Cox.SetName("$") Oh.SetName("$") End If

El mtodo SetName asigna el nombre del objeto. Para un tomo, el nombre es un rotulo de cadena, que esta tpicamente vaco, pero puede contener un texto arbitrario. El texto se mostrar en el diagrama molecular del ChemSketch, cuando traslademos nuestra Estructura al Diagrama.
Importante Asegurarse que el nombre del tomo no tiene nada en comn con los

elementos nmero de los tomos.

3.5.3 Refinando la Salida


Ahora podemos hacer la traslacin de la estructura a un diagrama y podemos crear un dibujo apropiado. Esto se hace para remplazar las lneas del diagrama que se agregaron anteriormente.. Los pasos necesarios son: 1. Crear un diagrama (por defectot) ChemSketch vaco
'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 ms legible:

ACD/ChemBasic

Comenzando

24

'Set diagram size to fit all diagrams to a page Page=ActiveDocument.ActivePage 'Read out page parameters ph=Page.GetHeight pw=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 explicacin. La construccin


Diagram=ActiveDocument.ActivePage.Diagrams.AddEmpty Diagram.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 mtodo de Arreglos AddFromCS para extraer la primera Estructura unida al Arreglo que justamente se ha recibido:
Structure=Assemblies.AddFromCS(DiagramObject).Structures.Item(1)

Nota

Vea la ayuda ChemBasic para una descripcin ms detallada sobre pintar (Depict) y GetFromCS.

3.5.4 Redimensionar el Diagrama Molecular


Redimensionar un diagrama molecular requiere obtener la posicin (el que se da por defecto) y dimensionar el rectngulo incluido en el diagrama o en un marco. Esto se acompaa del mtodo GetBound que es aplicable a cualquier objeto dibujo de ChemSketch, porque como cualquier objeto esta localizado dentro de un marco invisible. Los parmetros del mtodo estn arriba a la izquierda de las coordenadas del marco, as como el ancho y el alto. Despus de obtenerlos, puede calcular el tamao y posicin ms apropiado para el marco, y redimensionarlo con SetBound. La matemtica presentada en el cdigo anterior sirve simplemente para colocar nuestro mximo de molculas (nmax) para la pgina ChemSketch (cuyas dimensiones estn disponibles a travs de los mtodos y GetHeight).
Nota

Vea la ayuda ChemBasic para ampliar una descripcin detallada de los mtodos SetBound, GetBound y GetFont, SetFont, SetFontSize.

Finalmente, por conveniencia, podemos adicionar texto, indicando la distancia interatmica de inters cerca de la imagen de la molcula. Para esto, adicionamos a la pgina ChemSketch un objeto vaco TextBox, y lo llenamos con la informacin necesaria y la redimensionamos para un presentacin adecuada:
'Add a textbox indicating the distance carbonyl carbon ---- hydroxy oxygen

ACD/ChemBasic

Comenzando

25

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)


Nota

Vea la ayuda ChemBasic para ampliar la informacin sobre los mtodos TextBoxes, SetContent, y GetContent y la funcin FStr (que simplemente convierte el nmero a cadena (carcter)).

Nuestro viaje ha finalizado. El texto complete del programa se presenta en el Apndice (contiene otras lneas de cdigo con declaraciones y chequeos para algunos casos de potenciales errores). Por favor, ejecute y vea que pasa. Divirtase!
Nota

Este Tutorial se da como una gua para su primer paseo por ChemBasic. Esperamos que haya adquirido una buena impresin sobre este potente y simple lenguaje de manipulacin de molculas. Para una referencia ms detallada, use la ayuda en lnea o contctenos en support@acdlabs.com.

ACD/ChemBasic

Comenzando

26

4. Apndice. Texto completo de los programas de muestra

4.1 HELLO.BAS
' Este programa ' presenta todas las molculas 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, Molculas!","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 su nombre" Answer=MessageBox("Hola, "+MolName+"!"+Tail,"Example #1", MBB_OKCANCEL+MBI_EXCLAMATION) if Answer= MBR_CANCEL Next Diagram Then Exit For

ACD/ChemBasic

Comenzando

27

End With End sub

4.2 OXCARBOX.BAS
' Este programa ' (i) coloca en la ventana actual de ChemSketch ' de frmula general HO-(CH2)n-COOH, n=1-10, las molculas

' (ii) permite la optimizacin 3D para todas ellas y ' (iii) marca aquellas que contienen un grupo hidroxilo con el oxgeno ' 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 pgina Page=ActiveDocument.ActivePage 'Si la pgina no esta vaca, crea una nueva If Page.Drawings.Count>0 Then Page=ActiveDocument.AddEmpty 'Leer los parmetros de la pgina ph=Page.GetHeight pw=Page.GetWidth

'In a loop ....

ACD/ChemBasic

Comenzando

28

For n=1 to nmax 'Generar 'Crea un nuevo arreglo Ent=Assemblies.AddEmpty Mol=Ent.Molecules.AddEmpty 'Add OH (note que no adicionamos hidrgenos implcitos) Oh=NewAtom(8) 'Add COOH Cox=NewAtom(6) O1ox=NewAtom(8) O2ox=NewAtom(8) '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 Diagram=Page.Diagrams.AddEmpty Diagram.Depict(Struc) 'Escoja el tamao del diagrama para llenarlos todos en la pgina : : : Ent.Add(Cox) Ent.Add(O1ox) Ent.Add(O2ox) : Ent.Add(Oh)

ACD/ChemBasic

Comenzando

29

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 smbolos atmicos Font=Diagram.GetFont Font.SetFontSize(24) Diagram.SetFont(Font) 'Adicionar cajas de texto indicando las distancias carbono carbonilo ---- oxgeno 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

ACD/ChemBasic

Comenzando

30

You might also like