EJERCICIO 3

Desarrollar una función de parsing de ficheros PDB (que denominaremos GetPDB) que permita representar adecuadamente los datos estructurales relevantes de una proteína en nuestro entorno de programación. Dicha función deberá ser capaz de leer los datos desde un fichero pdb y almacenarlos en una estructura matricial (cuyo tipo denominaremos TPDB) integrada por registros (de tipo TAtomPDB) que contendrán campos relativos a la identificación de cada átomo, residuo y subunidad a la que pertenece, coordenadas cristalográficas (a la que asignaremos un tipo TPunto), etc. La función se empleará en las sucesivas aplicaciones para interaccionar con los ficheros de estructura.


Dentro de la librería Biotools hemos creado una función denominada ‘CargarPDB’:

                                       

Esta función es capaz de leer un fichero entrante con formato *.pdb donde este parámetro de estrada será de tipo TStrings, compuesto por el conjunto de líneas con la información de la proteína, y almacenarlo en una estructura matricial de tipo TPDB, de forma que la proteína podrá ser leída y utilizada por las posteriores aplicaciones que creemos. Hemos definido una variable 'p' en la cláusula ‘var’ que recoge la información de salida en tipo TPDB y otra denominada 'línea' en la que se almacenarán las distintas líneas de mi fichero *.pdb.

Esta función me va a permitir crear dos estructuras que recojan información esencial de la proteína:

El tipo TPDB contiene los campos más relevantes del archivo PDB:

-       Header, que incluirá el cabecero de la proteína.

-       Atm, donde crearé un vector dinámico que incluya todos los átomos de la proteína, con una entrada de tipo TAtomPDB (se explicará a continuación).

-      Res.

-      Sub.

-        Atomindex, que será una matriz abierta que se refiere al índice del átomo, donde el subíndice será el número del átomo y el contenido el número de la ficha en que se encuentre ese átomo.

-        NumFichas, que me permitirá contabilizar los átomos que realmente existan, ya que hay ocasiones en que algunos no se contabilizan por no tener la información suficiente.

-        NumResiduos.

-        NumSubunidades.

 

El tipo TAtomPDB me permitirá hacer un registro que describa al átomo en el fichero PDB. Las variables que tendrá serán:

-        NumAtom (será preferible definirlo como entero en lugar de como string por si deseo trabajar con él).

-        ID.

-        Residuo.

-        Subunidad, de tipo char ya que siempre será de 1 letra.

-        NumResiduo.

-        Ftemp, donde se recoge el factor temperatura asociado al átomo.

-        Coor, de tipo TPunto, en que se incluyen las coordenadas X, Y y Z de cada átomo.

-        AltLoc, de tipo char y se refiere a la información sobre la localización alternativa de la proteína.


Posteriormente, volviendo a la función ‘CargarPDB’, he de crear 3 arrays vacíos que van a recoger la información estructural de los átomos, residuos y subunidades de la proteína. Debido a que no conozco la longitud exacta de estos vectores estableceré arrays dinámicos fijando un máximo que no pueda ser superado, que será estableciendo como longitud el número total de líneas del fichero (más adelante fijaré el tamaño real). A continuación hay un bucle que comenzará cuando se encuentre la palabra ‘ATOM’, ya que como característica de los formatos *.pdb la información de cada átomo viene precedida de esta palabra. Entonces, mediante 3 bucles anidados rellenaré el array de los átomos y, dentro de cada átomo, el de los residuos y, dentro de cada residuo, el que contiene la información de las subunidades.

El resto de las líneas de la función sirven para otras aplicaciones que crearemos más adelante.



Comentarios