9 de agosto de 2017

semillas con licencia Open Source

Hola,

los que programamos en entornos académicos llevamos muchos años usando software distribuido con licencias de tipo Open Source (OS). De hecho, ahora mismo el canal de distribución de software más popular es GitHub, donde para alojar un nuevo proyecto debes elegir qué tipo de licencia OS le otorgas como creador.

A pesar de las controversias y del debate sobre la propiedad intelectual, este modelo ha tenido la ventaja de permitir que otros creadores aprovechen de manera eficiente los avances hechos por otros y creen soluciones mejores de las que al final todos nos beneficiamos. Una condición general de estas licencias es que el producto resultante sea también OS. Así funcionan las distribuciones Linux, por ejemplo, o gran parte del sistema operativo Mac OS X.

Variedad de tomate Sunviva del catálogo Open Source Seeds. Foto tomada de http://www.nature.com/nbt/journal/v35/n8/full/nbt0817-700.html.
Leo en Nature Biotechnology que estas licencias se están empezando a usar ahora para distribuir variedades y semillas, bajo el amparo de http://osseeds.org, como manera de acelerar y facilitar el intercambio legal de materiales vegetales. Veremos en los próximos años si también en este contexto las licencias OS son un motor de innovación, y como conviven con las empresas y cooperativas de semillas convencionales,
hasta luego,
Bruno


28 de julio de 2017

Tabla de estabilidad de sustituciones de aminoácidos

Hola,
a menudo nos preguntamos qué efecto puede tener un cambio de aminoácido sobre la estabilidad de una proteína. Una pregunta relacionada es si tendrá fenotipo una sustitución no sinónima (missense). De hecho hay toda una colección de herramientas que se han desarrollado para esto (ver por ejemplo el curso de bioinformática estructural). El trabajo reciente de Rocklin et al (2017), donde estudian la estabilidad de miles de miniproteínas (hasta 50aa) sintéticas y unas 500 naturales del PDB, nos proporciona la mejor respuesta hasta la fecha. Aunque es un artículo complejo, en esencia lo que hacen es medir la estabilidad de miles de proteínas expresándolas y exponiéndolas a proteasas en levadura.
De esa manera pueden estimar el efecto que tienen mutaciones individuales dependiendo de su contexto de estructura secundaria, ya sea una alfa-hélice, una lámina beta o un lazo o loop:
Efecto sobre la estabilidad de mutaciones en diferentes contextos estructurales. Los valores negativos, como los de la prolina en general, son desestabilizadores. Adaptada de http://science.sciencemag.org/content/357/6347/168.full.

En la siguiente figura se muestran ejemplos de mutaciones desestabilizadoras en amarillo:

Adaptada de http://science.sciencemag.org/content/357/6347/168.full.

Hasta pronto,
Bruno

4 de julio de 2017

rooting and laddering Newick trees

Buenas,
esta entrada es para compartir un script Perl para enraizar árboles, muchos árboles, de manera automática, y ordenar los nodos por distancia. Pongo el título en inglés para los buscadores.
Rubén Sancho y yo estamos probando el software GRAMPA, que requiere una colección de árboles de genes precalculados en formato Newick, pero además los quiere enraizados y ordenados de manera ascendente. Como son más de mil árboles no lo queríamos hacer uno a uno con FigTree, por poner un ejemplo; queríamos automatizarlo y para ello aprovechamos los módulos Bio::TreeIO y Bio::Phylo. El primero es de Bioperl y ya lo tenía instalado, el segundo lo instalé con: $ sudo cpanm Bio::Phylo

El árbol de ejemplo, contenido en el fichero unrooted.ph, es:

(1_Sbic:0.047,2_Osat:0.068,(((((((((((3_B422:0.007,(((4_Barb:0.000,((5_Bret:0.003,(6_BsyE:0.000,7_BsyE:0.000):0.000):0.000,8_BsyC:0.000):0.000):0.000,9_Bpho:0.002):0.000,(10_BsyC:0.000,11_BsyC:0.000):0.001):0.000):0.008,((12_B422:0.005,13_Bpho:0.005):0.002,14_Barb:0.000):0.005):0.000,((((15_Bdis:0.000,16_Bdis:0.000):0.000,17_Bmex:0.033):0.013,18_Bhyb:0.001):0.014,(19_Bboi:0.021,((20_Bmex:0.017,21_Bsta:0.034):0.012,22_Bsta:0.000):0.003):0.020):0.012):0.002,23_Barb:0.000):0.000,24_Brup:0.012):0.000,25_BsyG:0.000):0.000,(26_Bpin:0.000,27_BsyG:0.000):0.000):0.011,28_Bsta:0.000):0.053,29_BsyG:0.000):0.036,(30_Barb:0.005,(31_Bpho:0.024,(32_BsyC:0.000,33_BsyE:0.000):0.027):0.029):0.000):0.005,34_Bboi:0.030):0.035);

Invocando el script lo enraizamos con el taxón elegido, el outgroup '_Sbic':

$ perl reroot_tree.pl unrooted.ph > rooted.ph

Obtenemos el fichero rooted.ph, que podemos visualizar con FigTree:

Árbol enraizado y con orden creciente de nodos.
Éste es el código de reroot_tree.pl :

 #!/usr/bin/perl -w  
   
 # Re-roots an input Newick tree with a user-defined outgroup and   
 # prints the resulting tree in ascending or descending node order.  
 # Based on https://github.com/phac-nml/snvphyl-tools/blob/master/rearrange_snv_matrix.pl  
   
 use strict;  
 use Bio::TreeIO;  
 use Bio::Phylo::IO;  
 use Bio::Phylo::Forest::Tree;  
    
 my $OUTGROUPSTRING = '_Sbic'; # change as needed  
 my $NODEORDER = 1; # 1:increasing, 0:decreasing  
 my ($outfound,$outnode,$sorted_newick) = (0);  
   
 die "# usage: $0 <tree.newick>\n" if(!$ARGV[0]);  
   
 # read input tree  
 my $input = new Bio::TreeIO(-file=>$ARGV[0],-format=>'newick');  
 my $intree = $input->next_tree();  
   
 # find outgroup taxon  
 for my $node ( $intree->get_nodes() ) {   
  if(defined($node->id()) && $node->id() =~ m/$OUTGROUPSTRING/) {  
   $outnode = $node;   
   $outfound = 1;  
   last;  
  }  
 }  
 if($outfound == 0) {  
  die "# cannot find outgroup $OUTGROUPSTRING in input tree $ARGV[0]\n";  
 }  
   
 # root in outgroup and sort in increasing order  
 $intree->reroot_at_midpoint($outnode);  
   
 # sort nodes in defined order and print  
 my $unsorted_tree = Bio::Phylo::IO->parse(  
  '-string' => $intree->as_text('newick'),  
  '-format' => 'newick'  
 )->first();  
   
 $unsorted_tree->ladderize($NODEORDER);  
   
 $sorted_newick = $unsorted_tree->to_newick();  
 $sorted_newick =~ s/'//g;  
   
 print $sorted_newick;  


Un saludo,
Bruno

21 de junio de 2017

Leyendo FASTQ con CPAN

Buenas,
hace un par de años describía en otra entrada cómo leer de manera eficiente ficheros FASTQ con ayuda de kseq.h. Para ello definí una clase C++ que llamábamos desde Perl5 con Inline::CPP. La entrada de hoy es para contar que se puede hacer lo mismo instalando el módulo Bio::DB::HTS::Kseq desde CPAN, previa instalación en tu sistema de la librería htslib:

$ git clone https://github.com/samtools/htslib.git
$ cd htslib
$ make 
$ sudo make install
$ cd ..
$ sudo cpanm Bio::DB::HTS::Kseq

Ahora podemos escribir código como éste para probarlo:

use strict;
use Bio::DB::HTS::Kseq;

my ($length,$header,$sequence,$quality);

my $kseq = Bio::DB::HTS::Kseq->new("sample18MB.fq.gz");
my $iter = $kseq->iterator();
while(my $r = $iter->next_seq()) {

  ($header,$sequence,$quality) = ($r->name,$r->seq,$r->qual);
  print ">$header\n$sequence\n$quality\n";
}

En mis pruebas con un fichero FASTQ comprimido de 18MB, este código es un 20% más lento que la versión Inline::CPP,
hasta luego,
Bruno

16 de junio de 2017

Actualización de Perl en bioinformática

Buenas,
solamente quería comentar que el ya vetusto curso de Perl en bioinformático ha cambiado un poco de cara y ha sido revisado para traerlo al 2017, con algunas referencias a Perl6 y nuevos one-liners, que es lo que usaremos de este material en el máster de biotecnología cuantitativa de la Universidad de Zaragoza a partir del curso que viene.

Lo podéis encontrar en: https://eead-csic-compbio.github.io/perl_bioinformatica

Portada de un libro de one-liners, tomada de http://www.catonmat.net/blog/perl-one-liners-explained-part-one

Buen finde,
Bruno