Descripcion:
------------

Hacer un pequeño programa en Perl, Java o cualquier otro lenguaje que
lea informacion sobre redes metabolicas de KEGG y exporte sub-redes como
grafos en el formato .dot que es capaz de leer el programa "dotty". Esto
permitira generar representaciones graficas de estas subredes.

El programa deberia generar grafos metabolicos con las sigiuientes 3 opciones,
como minimo:

- Toda la subred metabolica que parta de un compuesto X hasta distancia N
(reacciones).

- La ruta mas corta entre dos compuestos X e Y

- Un pathway de KEGG completo.

Todo ello siempre restringiendose a un organismo determinado. En el fichero
"enzyme" (ver abajo) viene informacion sobre los organismos en que esta 
presente el gen de una determinada enzima. Se asume que una reaccion se
dara en los organismos en que ese gen este presente.

Adicionalmente, se valorara:

- Inclusion de informacion adicional en la representacion:
  - Codigo EC de la enzima.
  - Peso molecular del compuesto (i.e. como anchura de la linea de su nodo,
    color, o cualquier otro atributo).
  - Otras caracteristicas topologicas de compuestos (nodos) y/o enzimas 
    (conexiones). P.ej. numero de conexiones, numero de caminos que pasan
    por ahi, etc.
  - Cualquier otra informacion que el alumno quiera incluir.
  
- Representacion de todas las rutas posibles entre dos compuestos X e Y.

- Cualquier otra posibilidad que el alumno quiera incluir.


Material:
---------

La informacion metabolica necesaria esta en los ficheros "reaction", 
"compound" y "enzyme" que se pueden descargar de:
http://www.biowebdb.org/pub/kegg/ligand/

Los programas "dot" y "dotty", del paquete "Graphviz" deberian estar
instalados en los ordenadores del curso. Se pueden descargar para varias
plataformas en:
http://www.graphviz.org/

El manual de "dot", donde se describe el formato del fichero de descripcion
del grafo (.dot), viene con el paquete y tambien se puede descargar de:
http://www.graphviz.org/Documentation/dotguide.pdf

Aunque este formato es muy sencillo y casi se aprende mas rapido
viendo y cambiando algunos ejemplos:

ejemplo.dot --> ejemplo.png


Notas importantes:
------------------

- Una determinada reaccion (RXXXXX) en el fichero "reaction" de KEGG puede tener
  mas de un sustrato o producto. En las ultimas versiones de KEGG se han anotado
  manualmente las transformaciones principales (de un compuesto a otro) que 
  ocurren en esa reaccion, distinguiendolas de otras secundarias (que implican 
  cofactores, agua, etc). Esto esta en las entradas "RPAIR" del fichero "reaction".
  Deben de tomarse como conexiones para el grafo los pares de compuestos anotados 
  como "main" en "RPAIR". Por ejemplo, en la reaccion "C01083 + C00001 <=> 2 C00031",
  el par que aparece como "main" es "C01083-C00031" (ya que C00001 es agua), y 
  por tanto esta reaccion debe de representarse en el grafo como "C01083 --> C00031"
  (la direccionalidad se saca de otro fichero -ver mas abajo-). Si para una reaccion
  hay varios "RPAIR main" se representan todos en el grafo. 

- Si una determinada enzima (codigo EC) no esta asociada a ningun organismo (gen)
  vamos a asumir, para simplificar, que se esta presente en todos los organismos.

- La direccionalidad "estandard" de las reacciones esta en un fichero llamado 
  "reaction_mapformula.lst". En el fichero "reaction" todas aparecen como
  bidireccionales.

- Los compuestos usados en muchas reacciones quimicas (i.e. H2O, ATP, ...) 
  crean conexiones "irreales" en estas representaciones de grafos y es facil
  ver que aparecen como nodos conectados con muchisimos otros (hubs). Esto puede
  crear problemas en las partes de calculos de rutas entre compuestos. Normalmente
  estos compuestos se excluyen en las representaciones metabolicas en forma de
  grafos. Al quedarse con los "RPAIR main" (primer punto arriba) estos compuestos
  no deberian aparecer. Si aparecen, las posibilidades para excluirlos son:
  1.- Calcular el numero total de conexiones para todos los compuestos y exluir
      los que tengan mas de N conexiones.
  2.- Exluir una lista fija de compuestos.
  
- Si no se desea descargar los ficheros de KEGG para usarlos localmente, se
  pueden abrir directamente a traves de Internet usando las librerias que
  tiene Perl para abrir URLs, o simplemente con el "open" normal usando "wget"
  o similar:
     open(KEGGREACT,"wget -O - http://www.biowebdb.org/pub/kegg/ligand/reaction/reaction |");
  Una ventaja adicional de este sistema es que, de esta manera, el programa
  siempre estara usando la version mas actual de KEGG disponible en ese sitio web.
  Como contrapartida, este sistema es mucho mas lento que leer ficheros locales.

- Si se prefiere, se podran generar las representaciones en formato CytoScape,
  en lugar de dot.

- Se puede hacer usando la API de KEGG en vez de parsear los ficheros planos:
  http://www.kegg.jp/kegg/soap/

Posibles ejemplos de uso:
-------------------------

$ ./kegg2dot.pl /mydatabases/KEGG/ -shortest "D-Glucose" "2 Betaine aldehyde" ECO > path.dot
(Representa la ruta mas corta entre estos dos compuestos en E coli)

$ ./kegg2dot.pl /mydatabases/KEGG/ -path "C5-Branched dibasic acid metabolism" ATH > path.dot
(Representa ese pathway en A. Thaliana)

Y estos grafos se pueden ya visualizar:
$ dotty path.dot &

...O generar directamente un fichero grafico:

$ dot -Tpng path.dot >path.png

En vez de los nombres completos de compuestos, pathways, etc. se pueden usar 
identificadores de KEGG. P.ej:

$ ./kegg2dot.pl /mydatabases/KEGG/ -path rn00660 ATH > path.dot
$ ./kegg2dot.pl /mydatabases/KEGG/ -shortest C00029  C00576  ECO > path.dot

Ejemplo de representacion:
--------------------------

[ex.png]

Bibliografia:
-------------

En este libro se describe la implementacion de muchos tipos de algoritmos en
lenguaje Perl, con codigo de ejemplo, incluyendo algoritmos relacionados con 
grafos y redes:

   Orwant, J., et al. (1999). "Mastering Algorithms with Perl". 
   O'Reilly eds. ISBN: 1565923987. 

Un libro mas exhaustivo y profundo sobre implementacion de algoritmos. En este 
caso las implementaciones se dan en pseudocodigo:

   Sedgewick, R. (1988). "Algorithms". 2nd ed. Addison-Wesley. ISBN:02001066734. 



Para cualquier aclaracion adicional, pregunta, etc., por favor contactad con Florencio Pazos 91.5854669