martes, junio 07, 2011

Visit to Poland: Roche 454 GS Junior Data

I was visiting my friend Miroslaw Kwasniewski an Assistant Professor at the University of Silesia in Katowice, Poland. He is got a GS Junior 454 machine which I wanted to check out. Besides that, he wanted some help with their bioinformatics servers and pipelines.


I was just looking at one dataset, transcriptomics from barley, obtained from the GS Junior, and read counts, read lengths and quality are all great, very impressive. I have some statistics obtained using FastQC, after exporting the SFF file from GS Junior to FastQ format using sff_extract.

This is the distribution of the read quality on a per base basis. As you can see, reads can be well over 400, around 500bp with Phred qualities above 20.


The sequence length distribution has a nice peak around 500 bp.


GS Junior could achieve 100.000 reads throughput, Mirek was getting 150.000 reads.

GS Junior seem to be quite good for sequencing low complexity samples. Quality and length of the sequencing reads is great, but depth for a e.g., full transcriptome in angiosperms, would be either challenging or too expensive. It is great for amplicon sequencing, bacterial genome sequencing, virus genome sequencing, i.e., would be great for the phages (!).

jueves, junio 02, 2011

Secuenciación del genoma de cepa de E. coli que está causando problemas en Alemania

En mayo de 2011 un brote de diarrea hemorragica se desató en los estados de la región norte de Alemania. Varios de los casos reportados causaban sindrome urémico hemolítico, caracterizado por insuficiencia renal y transtornos neurológicos. Investigadores alemanes identificaron que el agente responsable de brote es una nueva variante de la bacteria Escherichia coli entero-hemorrágica (EHEC, por sus siglas en inglés) serotipo O104.

El Instituto de Genómica de Beijing (BGI) acaba de liberar las secuencias crudas obtenidas usando Ion Torrent de la cepa de E. coli que está causando el brote de EHEC en Alemania.

El BGI liberó las lecturas crudas correspondientes a 5 corridas del Personal Genome Machine (PGM) de Ion Torrent, los datos están disponibles en el NCBI SRA con el número de acceso: SRA037315. Los datos se pueden descargar en formato .sra. El SRA tiene un kit de software que permite convertir el formato sra en fastq o sff. Yo los exporte en formato fastq, usando el comando:

for i in $(ls *.sra); do name=`basename $i .sra`; fastq-dump -TR -W -F -SL -A $name $i; done

La opción tal vez mas importante en este comando es -W que remueve los extremos de baja calidad de las lecturas.

Uno de los primeros paso antes de continuar al ensamble de las lecturas es revisarla un poco, e.g., longitud, calidades. Este tipo de análisis se puede adelantar con FastQC.

Corrida (SRA accession)Número de LecturasRango de tamaños
SRR227300923701-119
SRR2273371222081-129
SRR227338967651-125
SRR2273392222751-131
SRR227340957501-129

La calidad es buena hasta la posición ~40, a partir de allí cae drasticamente. No muy sorprendente para este tipo de tecnologías. Las gráficas con similares para las otras 4 corridas. La siguiente figura corresponde a la distribución de calidad en todas las corridas (archivos fastq concatenados).

Sobre la longitud de las secuencias, la Figura de abajo, muestra que el PGM genera lecturas en un rango bastante estrecho, con un pico en 100bp.


Como podemos observar los datos generados por el PGM de Ion Torrent son lecturas de ADN de longitud corta. En general este tipo de datos se prestan muy bien para hacer ensambles de mapeo, pero no muy bien para ensambles de novo. A pesar de estoy yo estoy interesado en ver las posibilidades y las limitaciones de este tipo de datos para los ensambles de novo. Mas adelante les contaré los resultados de estos experimentos.

jueves, mayo 05, 2011

El genoma de Selaginella nos permite encontrar cambios en el contenido genético asociados con la evolución de las plantas vasculares

Acaba de salir publicado el artículo que describe el genoma de Selaginella moellendorfii. Tuve la oportunidad de participar en ese estudio y creo que es buena idea re-activar este espacio con un resumen corto.

Selaginella es una planta terreste y que cuenta con un sistema vascular verdadero.

Foto: Selaginella moellendorffii (Jing-Ke Weng, Salk University)

Las plantas que colonizaron el ambiente terrestre empezaron a divergir hace mas de 450 millones de años. Los principales linajes que existen actualmente, resultado de esa divergencia, son los musgos, los licófitos y las plantas con hojas verdaderas (helechos y plantas con semillas). Selaginella es un licófito.

Desde el año 2000 conocemos los genomas completos de varias angiospermas (plantas con flores), e.g., Arabidopsis thaliana (prima de la mostaza), Oryza sativa (arroz). Desde el 2008 conocemos el genoma completo del musgo Physcomitrella patens, lo que nos permitió proponer algunos rasgos moleculares importantes en la colonización del ambiente terrestre. Pero para conocer las características moleculares que llevaron al desarrollo de vasos de transporte reales de nutrientes en las plantas era necesario conocer el genoma de un licófito, como la Selaginella moellendorfii. El estudio de este organismo nos permitió inferir, a partir de la comparación con otras plantas, que el desarrollo del sistema vascular requirió de la evolución de 516 genes nuevos, y que el desarrolló de las semillas se vio facilitado por la innovación representada en 1350 genes más.

En el desarrollo de esta investigación participaron mas de 100 investigadores de 11 países alrededor del mundo. Este estudio fue liderado por la Dra. Jo Ann Banks de la Universidad de Purdue en Estados Unidos de América. La participación de Joint Genome Institute adscrito al Departamento de Energía de Estados Unidos de América, aseguró el éxito del trabajo.

En Colombia las especies del genero Selaginella se conocen como doradilla y se emplean principalmente como plantas ornamentales. En Colombia, se encuentra principalmente en los departamentos de Amazonas, Caquetá, Cuaca, Guainía, Guaviare, Meta, Nariño, Vaupés y Vichada.

jueves, julio 15, 2010

Sobre las bolas de pelos: ridiculogramas

Quien no ha visto una imagen de una red? de internet, de reguladores de transcripción o de interacción entre proteínas?



Imagen tomada de http://www.bordalierinstitute.com/images/yeastProteinInteractionNetwork.jpg

Hoy en día son muy comunes y llaman mucho la atención. De hecho, uno de mis intereses particulares es estudiar la topología de esas redes y ver como responden a las perturbaciones.

Sin embargo la típica representación visual como bolitas y palitos no es muy útil, por eso ahora se les llama en forma generalizada 'bolas de pelos', incluso M. E. J. Newman, un experto en análisis de redes, las llama 'ridiculogramas'.

Un ridiculograma tiene las siguientes características:

* visualmente deslumbrantes.
* Sin valor científico.
* Publicados en Science o Nature.

lunes, julio 12, 2010

Ola de calor . . . y los servidores!

Este verano (2010) en el nor-este de Alemania hemos tenido temperaturas llegado a los 40°C, algo muy poco usual y que por supuesto ha estado estresando mas de la cuenta a los sistemas de refrigeración de nuestros cuartos de servidores.

Esta situación me llevo a instalar y configurar el paquete lm_sensors en mis servidores con CentOS. En principio todo era cuestión de instalar el paquete, detectar los sensores disponibles en el hardware (sensors-detect), cargar alguno módulos en memoria y revisar la temperatura con el comando
'sensors'. claro, la vida no es fácil, y el modulo coretemp que se necesitaba no esta instalado en CentOs, a pesar de que es incluido por defecto en versiones del kernel >= 2.6.22, pero la versión mas actual de CentOs 5.4 es 2.6.18. Ya me veía compilando el kernel y el modulo faltante.

Afortunadamente antes de enfrentar tan emocionante tarea hice una búsqueda que me ayudó a encontrar este sitio, en donde precisamente cuentan como instalar el modulo coretemp en centos 5.4.

En resumen:

1.- Descargar el rpm del modulo para el sistema deseado, en mi caso fue e15
2.- Instalar el modulo rpm -ivh kmod-coretemp-1.1-2.el5.x86_64.rpm
3.- ejecutrar (como root) sensors-detect
4.- ejecutar sensors, para ver las lecturas actuales de temperatura.

A este punto los sensores deben estar funcionando, claro con algo de suerte.

Para facilitar un poco el monitoreo escribí (partiendo de otro script que encontré en la web, pero cuya ubicación no recuerdo .-() un pequeño script de Perl que ejecuta 'sensors', guarda los datos en una base rrd, y crea las gráficas correspondientes al comportamiento de la temperatura. El script se puede ejecutar via cron, colectando datos cada 5 minutos.

Aquí esta el script:

#!/usr/bin/perl

use strict;
use warnings;
use RRDs;

# rrdtool databases
my $rrd = '/path/to/rrd/database/';
# output location of images
my $img = '/path/to/rrd/output/graphics/';

&CoreTemp();

sub CoreTemp{
my %cores;
my @CoreTemp=`sensors |grep Core`;
foreach my $line(@CoreTemp){
chomp $line;
if($line=~/^Core\s+(\d+):\s+([+-]\d+)°C/){
$cores{$1}=$2;
}
}
foreach my $core(keys %cores){
#if rrdtool database doesn't exist, create it
my $rrd_db="tempcore".$core.".rrd";
if(! -e "$rrd/$rrd_db"){
print "Creating RDD DB $rrd_db in $rrd . . . \n";
RRDs::create "$rrd/$rrd_db",
"-s 300",
"DS:temp:GAUGE:600:0:100",
"RRA:AVERAGE:0.5:1:576",
"RRA:AVERAGE:0.5:6:672",
"RRA:AVERAGE:0.5:24:732",
"RRA:AVERAGE:0.5:144:1460";
}
# insert value into rrd
RRDs::update "$rrd/$rrd_db",
"-t", "temp",
"N:$cores{$core}";
CreateGraph($core, "day");
CreateGraph($core, "week");
CreateGraph($core, "month");
CreateGraph($core, "year");
}
}

sub CreateGraph{
my ($core,$interval)=@_;
print "$core,$interval\n";
my $rrd_db="tempcore".$core.".rrd";
my $img_file="core".$core."-".$interval.".png";
RRDs::graph "$img/$img_file",
"--lazy",
"-s -1$interval",
"-t core temperature :: Core $core ",
"-h", "80", "-w", "600",
"-a", "PNG",
"-v degrees C",
"DEF:temp=$rrd/$rrd_db:temp:AVERAGE",
"LINE2:temp#0000FF:$core (Core $core)",
"GPRINT:temp:MIN: Min\\: %2.lf",
"GPRINT:temp:MAX: Max\\: %2.lf",
"GPRINT:temp:AVERAGE: Avg\\: %4.1lf",
"GPRINT:temp:LAST: Current\\: %2.lf degrees C\\n";
if (RRDs::error) { print "$0: unable to generate Core $core graph: $RRDs::error\n"; }
}


martes, junio 22, 2010

The foundation of scientific integrity - Richard P. Feynman

“The first principle is that you must not fool yourself—and you are the easiest person to fool.... After you’ve not fooled yourself, it’s easy not to fool other scientists. You just have to be honest in a conventional way after that.”

via: Scientific American

domingo, agosto 30, 2009

pensamientos . . .

La charla de Clifford Stoll in TED es espectacular, queda recomendada.

Entre las muchas cosas que dijo me gustó esta:


The first time you do something it’s science.
The second time it’s engineering.
The third time, you’re a technician.