Librería BioTools (ej 2)

La librería denominada BioTools, incluida en la carpeta de archivos otorgada al profesor, es esencial para llevar a cabo todos los ejercicios exigidos en el cuaderno ya que presenta todas las funciones necesarias. 

A continuación, se va a comentar de forma muy breve las funciones que se encuentran en esta librería. Al final del documento se describen los tipos de variable creados.

Funciones


CargarPDB

Esta función permite guardar, a partir de un archivo PDB cargado en un memo, las principales características de la proteína y todos los campos que caracterizan a cualquiera de los átomos de la proteína. 

Para poder llevar a cabo esto, se han creado dos tipos de variable, TPDB, que incluye los principales campos de la proteína, y TAtomPDB, que incluye todos los campos que describen a un átomo en un PDB.

Entrada: Un memo en el cual se ha cargado previamente un archivo en formato PDB.
Salida: Devuelve el TPDB de la proteína cargada. 

function CargarPDB (txt: TStrings): TPDB;

Dist3D

Esta función permite calcular la distancia en el espacio tridimensional que existe entre dos átomos.

Entrada: Dos átomos en TPunto.
Salida: Devuelve la distancia entre ambos. 

function dist3D (p1, p2: Tpunto): real;

ModuloVector

Permite calcular el módulo de un vector.

Entrada: El vector en TPunto.
Salida: El valor del módulo del vector.

function ModuloVector (p:TPunto): real;

VectorDiferencia

Permite el cálculo del vector que une dos átomos.

Entrada: Los dos átomos en formato TPunto.
Salida: El vector que une a ambos en TPunto.

A la hora de llamar la función es importante recordar que el vector resultante se forma como las coordenadas del segundo átomo de entrada menos las coordenadas del primero.

function VectorDiferencia (p1,p2:TPunto): TPunto; 

ProdCoord

Permite el producto escalar de dos vectores.

Entrada: Ambos vectores en TPunto.
Salida: El valor de su producto escalar. 

function ProdCoord (v1,v2:TPunto): real;

Torsion

Realiza el cálculo del ángulo de torsión formado por cuatro átomos.

Entrada: Cuatro átomos en TPunto.
Salida: Valor de su ángulo de torsión en grados sexagesimales.

function Torsion (p1,p2,p3,p4:TPunto): real;

FunAnguloVect

Calcula el ángulo formado entre dos vectores.

Entrada: Dos vectores en TPunto.
Salida: El valor del ángulo en grados sexagesimales. 

function funangulovect(v1,v2:TPunto): real; 

FunAngulo

Permite calcular el ángulo formado por los dos vectores obtenidos a partir de, por un lado, el primer y el segundo átomo de entrada y, por otro lado, el segundo y el tercer átomo de entrada.

Entrada: Tres átomos en TPunto.
Salida: El valor del ángulo en grados sexagesimales.

function funangulo (p1,p2,p3:TPunto): real;

ProdVect

Calcula el producto vectorial de dos vectores.

Entrada: Dos vectores en TPunto.
Salida: Vector resultante del producto vectorial en TPunto.

function ProdVect (v1,v2:TPunto): TPunto; 

BuscarATMNum

Permite introducir el número del átomo de la proteína que se desea encontrar en el TPDB.

Entrada: El número de los átomos que se desean encontrar y la proteína en formato TPDB.
Salida: El número del átomo en el TPDB. 

Se ha utilizado un sistema de control para que la función no pare hasta que no haya encontrado los átomos. Además, se ha sobrecargado la función para que se pueda utilizar si se desean encontrar dos, tres o cuatro átomos. 

function buscarATMnum (var n1: integer; var n2: integer; var n3: integer; var n4: integer; p1:TPDB): boolean;

EscalarV

Permite la multiplicación de un escalar a un vector.

Entrada: El escalar (primer parámetro de entrada) y el vector en formato TPunto.
Salida: El vector resultante en formato TPunto. 

function EscalarV (k: real; V: TPunto): TPunto; 

Unitario

Calcula el vector unitario de un vector 

Entrada: Un vector en TPunto.
Salida: El vector unitario. 

function unitario (V:TPunto): TPunto; 

GetRamachandran

Lleva a cabo el cálculo de todos los ángulos de torsión Φ (Phi) y Ψ (Psi) de la proteína y los introduce en el interior de una tabla con el objetivo de representarlos posteriormente.

Se ha llevado a cabo un sistema de control para asegurar que los átomos utilizados para el cálculo de los ángulos de torsión son los correctos. En el caso de que haya algún tipo de error, la función no muestra ningún resultado.

Entrada: La proteína en formato TPDB y una tabla en formato TTablaDatos que va a ser modificada por la propia función.  

function GetRamachandran (p:TPDB; var datos: TTablaDatos): boolean;

PlotXY

La función permite la representación de una tabla de datos. Se ha desarrollado para representar el diagrama de Ramachandran con los datos obtenidos con la función anterior.

Entrada:
  • Los datos a representar en TTablaDatos.
  • El panel sobre el que se va a mostrar la gráfica.
  • La columna de la tabla de datos que se corresponde a los valores de la coordenada X.
  • La columna de la tabla de datos que se corresponde a los valores de la coordenada Y.
  • Permite seleccionar si se desea borrar la gráfica en el caso de que se vayan a representar nuevos datos.
  • El color de la pluma utilizada para dibujar los puntos.
  • El relleno de los puntos.
  • El color del fondo de la gráfica.
  • El estilo de los puntos.
En principio, muchos de estos parámetros se han predefinido en la función, pero el usuario puede modificarlos al invocarla.

Salida: La gráfica dibujada sobre el panel seleccionado. 

En el interior de la función hay otras dos funciones, fitx y fity, que llevan a cabo la normalización de los valores de X y de Y, respectivamente

function plotXY(datos: TTablaDatos; graf:TImage; cx:integer=0; cy:integer=1; clean:integer=0; clpluma:TColor=clyellow; clrelleno:TColor=clyellow; clfondo:TColor=clblack; estilo: integer=0): boolean; 

Traslacion

[Todas las manipulaciones en las tres dimensiones llevadas a cabo por las funciones (traslacion, rotacion, escalamiento, rotacionXangulo, rotacionYangulo, rotacionZangulo) se han realizado gracias al uso de una librería tomada de internet que permite la realización de operaciones con matrices. Las matrices utilizadas para todos estos cálculos han sido las expuestas en clase]. 

Esta función permite desplazar un átomo un valor determinado por el usuario en la coordenada X, Y y Z (se pueden seleccionar valores distintos para cada coordenada). 

Entrada:
  • El átomo en TPunto.
  • Las variaciones en el eje X, Y y Z que se desean.

Salida: El átomo desplazado en TPunto.

function traslacion (punto:TPunto; variacionX:Real; variacionY:Real; variacionZ:Real): TPunto;

Rotacion

La función permite llevar a cabo una rotación de un átomo en torno a un eje determinado por el usuario un ángulo determinado.

Entrada:
  • El átomo en TPunto.
  • Los dos átomos que forman el eje de interés en TPunto.
  • El ángulo en grados sexagesimal.

Salida: El átomo rotado en TPunto.

function rotacion (punto:TPunto; eje1:TPunto; eje2:TPunto; angulo:Real): TPunto;

Escalamiento

Permite multiplicar a cada una de las coordenadas de un átomo el número que se desee.

Entrada:
  • El átomo en TPunto.
  • Los valores por los cuales se quieren multiplicar cada una de las coordenadas.

Salida: El átomo escalado en TPunto.

function escalamiento (punto:TPunto; escalamientoX:Real; escalamientoY:Real; escalamientoZ:Real): TPunto;

RotacionXangulo

Permite girar los átomos de la proteína en torno al eje X el ángulo que se desee.

Entrada:
  • El átomo en TPunto.
  • El ángulo deseado en grados sexagesimales.

Salida: El átomo rotado en TPunto.



function rotacionXangulo (punto:TPunto; angulo:Real): TPunto;

RotacionYangulo

Permite girar los átomos de la proteína en torno al eje Y el ángulo que se desee.

Entrada:
  • El átomo en TPunto.
  • El ángulo deseado en grados sexagesimales.

Salida: El átomo rotado en TPunto.


function rotacionYangulo (punto:TPunto; angulo:Real): TPunto;

RotacionZangulo

Permite girar los átomos de la proteína en torno al eje Z el ángulo que se desee.

Entrada:
  • El átomo en TPunto
  • El ángulo deseado en grados sexagesimales.

Salida: El átomo rotado en TPunto.


function RotacionZangulo (punto:TPunto; angulo:Real): TPunto;

Alinear

Tiene como objetivo crear una cadena string de un tamaño determinado y con los caracteres alineados hacia la derecha o hacia la izquierda dependiendo de lo que desee el usuario. 

La función permite crear las cadenas string con las características necesarias para poder llevar a cabo la escritura apropiada de un archivo PDB a partir de un TPDB con la función writePDB.

Entrada:
  • La cadena que se desea alinear.
  • El tamaño máximo de la cadena.
  • Si se desea alinear hacia la izquierda ('izq') o hacia la derecha ('der').


function Alinear (cadena: string; sizemax:integer; alignment:string): string;

WritePDB

La función permite realizar la creación de un archivo en formato PDB a partir de un TPDB. Construye todos los campos asociados a un átomo de la proteína y se apoya enla función alinear para aportarles el formato adecuado. 

Entrada: La proteína en TPDB.

Salida: Un TStringList con todos los campos distribuidos en las mismas columnas que un PDB.


function WritePDB (p1:TPDB): TStringList;

aa3to1

Permite el paso del código de aminoácidos de tres letras al código de una letra.

Entrada: El aminoácido en código de tres letras.

Salida: El aminoácido en código de una letra. 


function aa3to1 (aainicial: string): string;

aa1to3

Permite el paso del código de aminoácidos de una letra al código de tres letras.

Entrada: El aminoácido en código de una letra.

Salida: El aminoácido en código de tres letras.


function aa1to3 (aainicial: string): string;

DeterminarFormato

Permite identificar qué tipo de archivo de proteínas se ha cargado en el programa. En concreto, permite diferenciar entre formato FASTA, UNIPROT, EMBL, PDB y GENPEPT.

Su funcionamiento se comentará en el ejercicio correspondiente.

Entrada: El archivo de la proteína como TStrings en un memo. 

Salida: Una cadena donde se indica qué formato es.


function DeterminarFormato (txt: TStrings): string;


CargarFASTA

Extrae la secuencia de aminoácidos de un archivo de proteínas en formato FASTA. 

Su funcionamiento se comentará en el ejercicio correspondiente.

Entrada: 
  • El archivo de la proteína como TStrings en un memo.
  • Hay que introducir el segundo parámetro de entrada como 0.

Salida: 
  • Devuelve el número de líneas que se han producido..
  • La secuencia de aminoácidos como TStringList.

function CargarFASTA (txt: TStrings; var m:integer=0): TStringList;

CargarAAPDB

Extrae la secuencia de aminoácidos de un archivo de proteínas en formato PDB. Necesita de la función CargarPDB para obtener el TPDB a partir del cuál extrae la secuencia de aminoácidos. Además, se ha modificado para que muestre los aminoácidos en formato de 1 letra y en líneas de 10 aminoácidos cada una.

Su funcionamiento se comentará en el ejercicio correspondiente.

Entrada:
  • La proteína en formato TPDB.
  • Hay que introducir el segundo parámetro de entrada como 0.

Salida:
  • Devuelve el número de líneas que se han producido.
  • La secuencia de aminoácidos como TStringList.

function CargarAAPDB (p: TPDB; var m:integer): TStringList;

CargarUNIPROT

Extrae la secuencia de aminoácidos de un archivo de proteínas en formato UniProt. 

Su funcionamiento se comentará en el ejercicio correspondiente.

Entrada:
  • El archivo de la proteína como TStrings en un memo.
  • Hay que introducir el segundo parámetro de entrada como 0.

Salida:
  • Devuelve el número de líneas que se han producido.
  • La secuencia de aminoácidos como TStringList.

function CargarUNIPROT (txt:TStrings; var m:integer): TStringList;

CargarGENPEPT

Extrae la secuencia de aminoácidos de un archivo de proteínas en formato GenPept. 

Su funcionamiento se comentará en el ejercicio correspondiente.

Entrada:
  • El archivo de la proteína como TStrings en un memo.
  • Hay que introducir el segundo parámetro de entrada como 0.

Salida:
  • Devuelve el número de líneas que se han producido.
  • La secuencia de aminoácidos como TStringList.

function CargarGENPEPT (txt:TStrings; var m:integer): TStringList;


Formalismo_basico

Permite el cálculo de la hidrofibicidad de un residuo de una secuencia de aminoácidos considerando tanto su propia hidrofobicidad como la hidrofobicidad de los residuos colindantes. Para ello, se tiene en cuenta la hidrofobicidad de todos los aminoácidos de un determinado número de aminoácidos (ventana) y halla la media. 

Entrada:
  • La secuencia de aminoácidos en string. 
  • La escala de hidrofobicidad deseada en TTabla.
  • La semiventana de la ventana que se quiere considerar en el cálculo de hidrofobicidad.

Salida:
  • Los valores de hidrofobicidad de cada residuo en TPerfil.

function formalismo_basico (seq: string; tab: TTabla; semiventana: integer): TPerfil;

Eisenberg

Realiza el cálculo del momento hidrofóbico de un residuo de una secuencia de aminoácidos considerando también el momento de los residuos colindantes. Este cálculo se realiza según la ecuación siguiente:


Entrada: 
  • La secuencia de aminoácidos en string.
  • La escala de hidrofobicidad deseada en TTabla.
  • La semiventana de la ventana que se quiere considerar en el cálculo.
  • La distancia angular (delta) que se quiere considerar en grados sexagesimales. Por defecto 100. 

Salida:
  • El momento hidrofóbico de cada residuo en TTabla.

Stroud

Realiza el cálculo del espectro de potencias de cada residuo de una secuencia de aminoácidos considerando también la de los residuos colindantes con una función muy similar a la de Eisenberg.


Entrada:

  • La secuencia de aminoácidos en string.
  • La escala de hidrofobicidad deseada en TTabla.
  • La semiventana de la ventana que se quiere considerar en el cálculo.
  • La distancia angular (delta) que se quiere considerar en grados sexagesimales. Por defecto 100.

Tipos de variables


TPDB


Incluye los campos más relevantes de la proteína:



  • Header. Es el cabecero de la proteína. En él se ha incluido el campo Title del PDB que, como su nombre indica, es el título del archivo PDB.
  • Atm. Se corresponde a todos los átomos de la proteína, con todos los campos correspondientes característicos del archivo PDB. En concreto, el tipo de variable de este campo es TAtomPDB, que se comentará a continuación. 
  • TotalAtm. Recoge el número total de átomos del PDB. 
  • ResIndex. Recoge los números de ficha correspondientes a los carbonos alfa.
  • TotalResiduos. Indica el número total de residuos de la proteína. 


TAtomPDB

Incluye todos los campos que describen a un átomo en un fichero PDB:
  • NumAtomo. Es el número del átomo.
  • ID. Indica qué tipo de átomo es dentro de la nomenclatura característica de los átomos que constituyen una proteína.
  • AA. Recoge el nombre del aminoácido del que forma parte.
  • Sub. Indica a qué subunidad de la proteína pertenece el átomo/aminoácido.
  • Residuo. Recoge el número del residuo/aminoácido al que pertenece.
  • Coor. Son las coordenadas tridimensionales del átomo. Este campo es una variable del tipo TPunto, formado por los campos 'X', 'Y', 'Z', correspondientes al valor de la coordenada X, Y, Z, respectivamente. 
  • Temperature. Recoge el factor de temperatura asociado a ese átomo.

TPunto

Está formado por los campos 'X', 'Y' y 'Z', correspondientes al valor de la coordenadas X, Y y Z de un punto o de un vector.

TTablaDatos

Es un array of array of real, es decir, es una tabla en dos dimensiones de valores reales. 

TTablaDatosEnteros

Es un array of array of integer, es decir, es una tabla en dos dimensiones de valores enteros.

TTablaDatosChar

Es un array of array of char, es decir, es una tabla en dos dimensiones de char (un único caracter).

TTabla

Es un array ['A..Z'] of real, es decir, es una tabla en dos dimensiones donde se relaciona a una determinada letra un número real.