20 de junio de 2011

Creando un cluster Rocks virtual

Hola,
mientras actualizaba el material didáctico de Programación en clusters Rocks a la versión actual de Linux Rocks (5.4) me pareció buena idea ir probando el código en un cluster virtual, creado como máquinas virtuales corriendo bajo VirtualBox.

(fuente: http://www.rocksclusters.org/rocks-documentation/4.1/getting-started.html)

La ventaja que tiene hacerlo virtual es que cualquiera con unos cuantos Gb de disco libres y más de 2 Gb de RAM puede probar a programar en un cluster y así aprender a manejarse en ese entorno antes de tener acceso a uno real.

Éstos son los pasos necesarios, probados en mi Ubuntu 10.04 LTS y con la versión 4.0.8 de VirtualBox:
  • Instala VirtualBox para tu sistema Linux (puedes descargarlo de
    http://www.virtualbox.org/wiki/Downloads)

  • Descarga e instala el 'VirtualBox Extension Pack', que puedes obtener en el mismo lugar

  • Descarga ISO del DVD Jumbo de Rocks, que ya incluye los rolls esenciales
    (puedes descargarlo de http://www.rocksclusters.org,
    comprobando tras la descarga la suma MD5). En este tutorial usaremos la versión 5.4, que se llama area51+base+bio+ganglia+hpc+kernel+os+sge+web-server+xen-16.12.2009-15.16.53.i386.disk1.iso,
    que guardamos en la carpeta /home/pepe/soft/

  • Elige un directorio donde ubicar los discos duros virtuales, como por ejemplo /home/pepe/

  • Crea el nodo principal tecleando (copia y pega) en el terminal estos comandos:
     VBoxManage createvm --name "vRocks54-Frontend" --ostype RedHat --register  
       
     VBoxManage modifyvm "vRocks54-Frontend" --memory 1000 --vram 32 --nic1 intnet --nic2 nat --audio none --nictype1 82540EM --nictype2 82540EM --boot1 dvd --boot2 disk --boot3 none --boot4 none  
       
     VBoxManage createhd --filename "/home/pepe/vRocks54-Frontend.vdi" --size 50000 --variant Standard   
       
     VBoxManage storagectl "vRocks54-Frontend" --name "SATA Controller" --add sata --controller IntelAhci  
       
     VBoxManage storageattach "vRocks54-Frontend" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "/home/pepe/vRocks54-Frontend.vdi"  
       
     VBoxManage storagectl "vRocks54-Frontend" --name "IDEcontrol" --add ide  
       
     VBoxManage storageattach "vRocks54-Frontend" --storagectl "IDEcontrol" --port 0 --device 0 --type dvddrive --medium /home/pepe/soft/area51+base+bio+ganglia+hpc+kernel+os+sge+web-server+xen-16.12.2009-15.16.53.i386.disk1.iso  
       
     VBoxManage startvm "vRocks54-Frontend"  
    

    Tras estos comandos da comienzo el proceso normal de instalación del nodo maestro o frontend , documentado en la web de Rocks. El proceso es casi automático, pero debes recordar dos cosas:


    • escribe frontend cuando aparezca el terminal de arranque boot:
    • cuando llegue el momento elige como mínimo estos rolls : kernel, base, web server, os

  • Una vez instalado el frontend puedes añadir el paquete
    VirtualBox guest additions para mayor comodidad

  • En el terminal del nodo maestro teclea como superusuario $ insert-ethers

  • Para cada nodo compute que quieras crear, empezando por el 0-0, hasta el 0-N teclea en el terminal de tu Linux:

     VBoxManage createvm --name "vRocks54-Compute-0-0" --ostype RedHat --register  
       
     VBoxManage modifyvm "vRocks54-Compute-0-0" --memory 1000 --vram 32 --nic1 intnet --audio none --nictype1 82540EM --boot1 net --boot2 disk --boot3 none --boot4 none  
       
     VBoxManage createhd --filename "/home/pepe/vRocks54-Compute-0-0.vdi" --size 50000 --variant Standard   
       
     VBoxManage storagectl "vRocks54-Compute-0-0" --name "SATA Controller" --add sata --controller IntelAhci  
       
     VBoxManage storageattach "vRocks54-Compute-0-0" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "/home/pepe/vRocks54-Compute-0-0.vdi"  
       
     VBoxManage storagectl "vRocks54-Compute-0-0" --name "IDE Controller" --add ide   
       
     VBoxManage startvm "vRocks54-Compute-0-0"  
    

  • En el terminal del nodo maestro teclea como superusuario la tecla F8 para terminar de añadir nodos
Y ésto es todo, con esto tienes ya un cluster en miniatura para probar tus programas, que puedes borrar con dos golpes de ratón desde el VirtualBox,
un saludo,
Bruno

14 de junio de 2011

Aprender a divulgar la ciencia y no morir en el intento


La Universidad de la Rioja ha editado online el "Manual de Comunicación para Investigadores" que consiste en un compendio de consejos y ejemplos de comunicación y divulgación científica.


A la hora de divulgar la ciencia que se hace día a día en los laboratorios, los investigadores nos hacemos muchas preguntas: ¿Por qué? ¿Dónde? ¿Cómo? ¿Para quién?... estas preguntas y muchas otras son respondidas en este manual con breves explicaciones y ejemplos sobre cada uno de los problemas y situaciones más habituales en la divulgación de la investigación.

Respecto al primer interrogante que surge: ¿Por qué divulgar la investigación? Me ha gustado mucho una de las contestaciones que se ofrecen en el manual:
"Son los contribuyentes quienes pagan las facturas de los investigadores y de la actividad científica. Por ello, los científicos, además de corresponder haciendo ciencia de la mejor calidad, deben promover la difusión de sus resultados a todos los colectivos sociales." Luis Martínez Saez (profesor del Máster en Comunicación Científica, Médica y Ambiental de la Universidad Pompeu Fabra).

Ejemplos cercanos de divulgación en prensa y televisión: 



6 de junio de 2011

Secuencia de Escherichia coli O104:H4

Hola,
en las noticias llevamos una semana escuchando hablar de la que parece una nueva cepa patógena de Escherichia coli, la cepa  enterohemorrágica O104:H4, que ha causado ya varias muertes en Alemania. En los medios ha habido cierta confusión a la hora de divulgar sobre este tema, pero en Internet ya es posible encontrar buenas referencias, como por ejemplo este blog al que me redirigió mi colega Pablo Vinuesa.

Árbol pangenómico de E.coli y especies relacionadas, basado en su contenido génico. Tomado de http://www.springerlink.com/content/kk08p747348hq301/fulltext.html.

Como ejemplo de lo rápido que han ido la cosas me gustaría recordar que las primeras noticias alertando sobre esta nueva cepa aparecieron en la última semana de Mayo y que el día 2 de Junio ya estaba disponible para descarga una primera versión de su secuencia genómica ensamblada, obtenida en el BGI (antiguo Beijing Genomics Institute). Ahora mismo hay disponibles un archivo con los contigs encontrados y las lecturas originales en formato FASTQ (aquí tienes un ejemplo), pero mr imagino que se irán actualizando los contenidos en los próximos días. Tal como se relata aquí y aquí, la secuencia ensamblada y experimentos de multilocus sequence typing sugieren que efectivamente se trata de una cepa nueva,
un saludo,
Bruno

PD Iré anadiendo aquí más enlaces sobre este tema:
1) http://scienceblogs.com/mikethemadbiologist/2011/06/i_dont_think_the_german_e_coli.php
2)  https://github.com/ehec-outbreak-crowdsourced/BGI-data-analysis/wiki
3) http://eterno-bucle.blogspot.com/2011/06/ensamble-de-cepa-de-e-coli-que-esta.html
4)  http://enews.patricbrc.org/1172/e-coli-outbreak-new-comprehensive-comparisons

26 de mayo de 2011

Bio::Phylo, una librería para análisis filoinformático

Hola,
hace unos días me enteré por mi colega Pablo Vinuesa de la publicación de Bio::Phylo, una colección de 59 módulos escritos en Perl para análisis filogenético (filoinformático, como dicen sus autores). El artículo original aparece en  la revista BMC Bioinformatics e incluye ejemplos de como utilizar esta librería para tareas típicas pero complejas, como por ejemplo el análisis automático (y el almacenamiento persistente como NeXML) de las anotaciones de árboles en formato Newick.
 

Lo más llamativo de Bio::Phylo es su facilidad de instalación, ya que por diseño no tiene dependencias externas al core de Perl, y su extensa documentación en CPAN, lo que lo convierte en una buena opción para este tipo de aplicaciones, superando con creces las prestaciones de módulos como Bio::TreeIO (ver por ejemplo http://www.eead.csic.es/compbio/material/bioperl/node45.html ). En Ubuntu se instala en el terminal en menos de un minuto con la instrucción:
$ sudo cpan -i Bio::Phylo

Un saludo,
Bruno

19 de mayo de 2011

Guardar en un archivo los contenidos de una variable de perl para reusarlos

Cuando obtenemos resultados de costosos cálculos computacionales los guardamos para poder volver a usarlos sin tener que calcularlos de nuevo.

Normalmente se guardan en archivos de texto con el formato deseado. Pero hay veces que nos interesa guardar los resultados tal y como los guardamos temporalmente en una variable de perl mientras son procesados.

Guardar una variable intermedia de un script de perl en un archivo puede tener las siguientes utilidades:
  • No perder ninguna información del procesado de los datos.
  • Poder importar la variable rápidamente al volver a correr el script.
  • Revisar los datos contenidos por la variable de una forma sencilla.
El código de perl escrito a continuación usa el módulo Data::Dumper de perl para guardar los contenidos de una variable compleja en el archivo 'backup.txt' mediante la subrutina 'store_data' y posteriormente recupera los contenidos de la variable con la subrutina 'recover_data'.

   
 use Data::Dumper;  
   
 my $data = {  
        'Research Centers' => {  
               'EEAD-CSIC' => [  
                       {  
                        'Group' => 'Laboratory of Computational Biology',  
                        'Address' => 'Av. Montañana 1.005, 50059 Zaragoza (Spain)',  
                        'Phone' => '+34 976716089'  
                       },  
                       {  
                        'Group' => 'Genética y Desarrollo de Materiales Vegetales',  
                        'Address' => 'Av. Montañana 1.005, 50059 Zaragoza (Spain)',  
                        'Phone' => '+34 976716079'  
                       }  
                      ]  
              }  
       };  
   
 my $file = 'backup.txt';  
   
 store_data($data, $file);  
   
 my $recovered_data = recover_data($file);  
   
 print $recovered_data->{'Research Centers'}{'EEAD-CSIC'}[0]{'Group'}."\n";  
 print $recovered_data->{'Research Centers'}{'EEAD-CSIC'}[0]{'Address'}."\n";  
 print $recovered_data->{'Research Centers'}{'EEAD-CSIC'}[0]{'Phone'}."\n";  
   
   
 # Stores data from a variable into a file  
 sub store_data {  
   
      my ($data, $file) = @_;  
   
      open(FILE, ">$file");  
      print FILE Dumper($data);  
      close FILE;  
   
 }  
   
 # Recovers data from a file into a variable  
 sub recover_data {  
   
      my ($file) = @_;  
   
      return do $file;  
   
 }