El archivo biotools.pas ha sido proporcionado al profesor junto con el resto del material. Esta librería es crucial para desarrollar el resto de actividades solicitadas.
Ahora paso a comentar de forma breve todas las funciones incluidas así como los tipos de variables creados para facilitar el acceso de los datos.
Tipos de Variables
Creamos varios tipos donde guardaremos datos del fichero PDB
TPunto: Este tipo es un record de 3 variables (x,y,z) de tipo real. Este campo va a albergar las tres coordenadas de un punto en el espacio. Así nos será útil para almacenar las coordenadas de cada átomo de nuestra proteína.
TAtomPDB: Este tipo también es un record que incluye todos los campos necesarios para trabajar con cada átomo del pdb que son:
- NumAtom: Es de tipo integer. Indica el número del átomo dentro de la proteína
- ID: Es un tipo string. Nos identifica la función del átomo en la proteína. Por ejemplo si se trata de un carbono alfa...
- Residuo: Es otro tipo string. Corresponde al código de tres letras del residuo al que pertenece el átomo.
- NResiduo: Es de tipo integer. Indica el número del residuo al que pertenece el átomo.
- AltResid: Tiene tipo char. Nos indica (si existe) el residuo alternativo en el fichero pdb.
- Subunidad: Es de tipo char. Nos da el nombre (A,B...) de la subunidad a la que pertenece ese átomo.
- Coord: Es de tipo TPunto. Incluye las tres coordenadas del átomo.
- ID3: Es de tipo string. Contiene el código de 3 letras del aminoácido.
- ID1: Es de tipo char. Contiene el código de 1 letra del aminoácido.
- NResiduo: Es de tipo integer. Indica el número del residuo. Es igual que la variable del tipo TAtomPDB pero no interfieren entre sí porque pertenecen a tipos diferentes.
- Atomo1: Es de tipo integer. Muestra el numero del átomo 1 del residuo.
- N,CA,C,O: Son de tipo integer. Hace referencia a los números de átomos más importantes en la cadena como en N amino, C alfa, C carbonilico...
- Subunidad: Es de tipo char. Indica la subunidad a la que pertenece el residuo.
- HidrofobicidadDul: Es de tipo real. Asigna el valor de hidrofobicidad del residuo en la escala de Kyte-Doolittle.
- HidrofobicidadBull: Es de tipo real. Asigna el valor de hidrofobicidad del residuo en la escala de Bull-Breesse.
- HidrofobicidadCho: Es de tipo real. Asigna el valor de hidrofobicidad del residuo en la escala de Chothia.
TPDB: Este tipo es un record donde incluimos las principales caracteristicas del fichero pdb en general. Los campos que incluye son:
- Header: Es de tipo string. Contiene la primera linea del fichero pdb que puede ser interesante por la información que contiene respecto a la proteína que contiene el fichero.
- Atom: Es un array de TAtomPDB. Corresponde al conjunto de fichas en las que incluimos toda la información de los átomos.
- Res: Es un array de TResiduo. Corresponde al conjunto de fichas en las que incluimos toda la información de los residuos.
- NFichas: Es un integer. Corresponde al número de fichas rellenadas. Es interesante este campo porque no necesariamente es igual al número de átomos.
- Resindex: Es un array de integer. Incluye todos los números de ficha del inicio de cada residuo, puede ser interesante para identificar residuos de forma rápida.
- IDSubs: Es un string. Es una cadena de caracteres con todas las subunidades de la proteína.
- Subindex: Es un array de integer. Corresponde a una matriz donde se incluye el primer átomo de cada subunidad.
- ResIniSub: Es un array de integer. Corresponde a una matriz con los primeros residuos de cada subunidad.
- NSub: Es un integer. Muestra el número de subunidades de la proteína.
- NatReal: Es un array de integer. Es un vector donde relacionamos el numero de átomo real con el de ficha para así podernos referir a él correctamente.
TTablaDatos: Es un array de array de real. Es el formato donde vamos a incluir los datos para que se representen gráficamente con la función plotXY que se comentará posteriormente.
También se han creado constantes como AA que es una cadena de texto donde están los códigos de 3 letras y de 1 letra para asignarlos con la función de parsing. Hay otras 3 constantes que corresponden a 3 tablas de hidrofobicidades para realizar comparaciones en el apartado correspondiente a ese análisis.
Ahora vamos a comentar brevemente cada una de las funciones que componen la librería.
LeerFicheroPDB
La función LeerFicheroPDB permite cargar cualquier fichero de texto plano en un memo. Para ello usa un OpenDialog que abre un navegador de archivos donde podemos seleccionar el archivo. La salida booleana permite confirmar el correcto funcionamiento de la función.
Entrada: un memo y un OpenDialog.
Salida: la variable ok de comprobación
CargarPDB
La función CargarPDB permite incluir en la construcción de TPDB los datos correspondientes al fichero leído en un memo. Para ello hace uso de los tipos creados en la librería.
Entrada: El lines del memo donde se haya cargado el pdb y la variable de tipo TPDB que va ha contener toda la información que debe ser pasada por referencias para que se modifica y poder utilizarla en todos los procedimientos posteriores.
Salida: Tiene una salida booleana que permite en algunos casos realizar comprobaciones de depuración.
AA3to1
La función AA3to1 la utilizamos para obtener e incluir en el record TResiduo el código de una letra del aminoácido a partir del de 3.
Entrada: Una variable de tipo string correspondiente al código de 3 letras del aminoácido.
Salida: Es un char que corresponde al código de una letra.
Distancia
La función distancia calcula la distancia interatómica en Amstrong entre dos átomos dados.
Entrada: Dos variables de tipo TPunto.
Salida: Una variable de tipo Real.
ModuloV
La función ModuloV calcúla el módulo de cualquier vector sabidas sus coordenadas.
Entrada: Una variable de tipo TPunto.
Salida: Una variable de tipo Real.
prodEscalar
La función prodEscalar calcula el producto escalar de dos vectores.
Entrada: Dos variables de tipo TPunto.
Salida: Una variable de tipo Real.
VSuma
La función VSuma calcula la suma de las coordenadas de dos vectores.
Entrada: Dos variables de tipo TPunto.
Salida: Una variable de tipo TPunto.
VDif
La función VDif calcula la diferencia de las coordenadas de dos vectores.
Entrada: Dos variables de tipo TPunto.
Salida: Una variable de tipo TPunto.
EscVect
La función EscVect realiza la operación de escalar x vector.
Entrada: Dos variables de tipo TPunto.
Salida: Una variable de tipo TPunto.
Angulo3D
Es una función que esta sobrecargada para que admita 3 puntos o dos vectores y devuelve el ángulo entre 2 vectores (o 3 puntos con uno como central).
Entrada: Dos o Tres variables de tipo TPunto.
Salida: Una variable de tipo Real.
.
prodVect
Esta función también está sobrecargada por la misma razón que la anterior. Así no de lo que nos de el usuario la función es útil y calcula el producto vectorial de dos vectores (o 3 puntos con uno como central).
Entrada: Dos o Tres variables de tipo TPunto.
Salida: Una variable de tipo Real.
Torsion
Esta función calcula la el ángulo diedro entre dos planos delimitados por cuatro puntos.
Entrada: Cuatro variables de tipo TPunto.
Salida: Una variable de tipo Real.
PlotXY
La función PlotXY permite dibujar en un canvas puntos y líneas que provienen de una tabla de valores. La usamos para dibujar el diagrama de Ramachandran.
Entrada:
- Los datos a representar en una variable de típo TTablaDatos.
- El panel sobre el que se va a mostrar la gráfica de tipo TImage.
- La columna de la tabla de datos que se corresponde a los valores de la coordenada X que por defecto es la 0.
- La columna de la tabla de datos que se corresponde a los valores de la coordenada Y que por defecto es la Y.
- Permite seleccionar si se desea borrar la gráfica o superponer los datos en el caso de hacer varias representaciones.
- El color de la pluma utilizada para dibujar los puntos.
- El color de relleno de los puntos.
- El color del fondo de la gráfica.
- El estilo de los puntos (solo puntos o puntos y lineas).
En principio, muchos de estos parámetros se han predefinido en la función, pero el usuario puede modificarlos al utilizarla.
Salida: Es booleana aunque también proporciona la gráfica en el lienzo seleccionado.
En el interior de la función hay otras dos funciones, fitx y fity las usamos para generar valores normales (entre 0 y 1) y que la función se ajuste. También dejan unos bordes en el canvas para que la figura no toque los límites del lienzo.
La función permite calcular los ángulos phi y psi de las proteínas e incluirlos en una variable de tipo TTablaDatos.
Entradas: Una proteína en un TPDB y una variable que pasaremos por referencias de tipo TTablaDatos.
Salida: Es booleana para hacer alguna comprobación
GiroOX
Esta función permite realizar el giro en 3D sobre el eje OX
Entradas: Un punto de tipo Tpunto y un ángulo de tipo real.
Salida: El punto con las nuevas coordenadas tras el giro.
GiroOY
Esta función permite realizar el giro en 3D sobre el eje OX
Entradas: Un punto de tipo Tpunto y un ángulo de tipo real.
Salida: El punto con las nuevas coordenadas tras el giro.
GiroOZ
Esta función permite realizar el giro en 3D sobre el eje OX
Entradas: Un punto de tipo Tpunto y un ángulo de tipo real.
Salida: El punto con las nuevas coordenadas tras el giro.
DiferenciaFormato
La función DiferenciaFormato permite distinguir entre 7 formatos de ficheros de proteínas que se le incluyan a nuestro programa
Entrada: Entra un Tstrings correspondiente al lines de un memo.
Salida: Sale un string que es el nombre del formato que ha sido leído.