Mostrando entradas con la etiqueta open source. Mostrar todas las entradas
Mostrando entradas con la etiqueta open source. Mostrar todas las entradas

22 de agosto de 2022

Qué cultivos predominan en las diferentes comarcas españolas

Hola,

mientras muchos estábamos de vacaciones salió publicado en RTVE un artículo firmado por Ana Martín Plaza a partir de datos del censo agrario de 2020. El artículo incluye varios mapas y figuras de interés para los que nos dedicamos a la genómica de plantas en España. De todos ellos destacaría el siguiente, que muestra el tipo de cultivo predominante en las diferentes comarcas:

No dejes de visitar el artículo original (https://www.rtve.es/noticias/20220817/mapa-espana-agricola-cultivos/2396185.shtml) donde puedes ver todos los detalles al pasar el ratón sobre los mapas.

Hasta luego,

Bruno

30 de junio de 2022

probamos OpenFold , la versión open source alphafold

Hola,

la semana pasada me encontré con este hilo donde Mo AlQuraishi publicaba que su grupo liberaba por primera vez OpenFold, la primera implementación de AlphaFold2 que podemos ejecutar localmente e incluso re-entrenar con PyTorch, permitiéndonos un control total del proceso. Como dicen los autores en el repositorio, OpenFold es "una reproducción fiel pero entrenable de AlphaFold2". Esto parece resolver la preocupación que expresaba en una entrada anterior sobre cuándo serían estos predictores de código abierto (lee más aquí).

https://pbs.twimg.com/media/FVzppu-UEAACeer?format=png&name=small 

Figura tomada de https://github.com/aqlaboratory/openfold

 

Como explica Mo, también han puesto a disposición de cualquiera los datos que usaron para entrenar OpenFold, siguiendo exactamente la metodología del artículo original de AlphaFold2. El código está disponible en https://github.com/aqlaboratory/openfold y se puede probar de varias maneras:

  • un cuaderno Colab (similar a ColabFold)
  • un contenedor Docker
  • un script python local con instrucciones de cómo hay que instalar las dependencias y los datos, un proceso largo y farragoso, pero el más adecuado para sacar partido a tu GPU


Hasta pronto,

Bruno


20 de junio de 2022

Hacia dónde va el lenguaje Perl (desde v5.36)?

Hola,

la semana pasada la perlfoundation.org lanzó una campaña para captar voluntarios (y donaciones) para el desarrollo de Perl (y Raku, lee más). Puedes leer los mensajes originales aquí y aquí. Es una excelente oportunidad si conoces Perl, tienes buen inglés y eres una persona activa en comunidades Open Source.

Como parte de esta iniciative han publicado un documento (o prospectus) donde entre otras cosas se resumen los planes futuros de desarrollo del lenguaje Perl, que me pareció interesante compartir con vosotros:

  • la recientemente liberada versión v5.36.0 , que se resume en:
    • diagnostics turned on
    • shed a bunch of weird anti-features that we’ve been discouraging for years
    • enable subroutine signatures
    • new features (like n-at-a-time iteration) and improved facilities for adding new features, like the new ‘builtin’ namespace
  • facilitar el trabajo con texto no-ASCII, como unicode, una de las áreas donde Perl ya es muy potente
  • A lo largo de los dos próximos años se van a eliminar/corregir aspectos del lenguaje que lo hacen "weird in a bad way".
  • Aunque ya es uno de los lenguajes scripting más rápidos, hay margen de mejora importante a partir de los recientemente adoptados prototipos de subrutinas, que especifican los tipos de los parámetros.

Hasta pronto,

Bruno

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


13 de junio de 2012

Alineamiento con transformadas de Fourier

En 1992 el grupo de Ilya Vakser publicó en PNAS el método fundamental para poder hacer simulaciones de docking de biomoléculas de manera eficiente, disminuyendo considerablemente el tiempo de cálculo aplicando transformadas rápidas de Fourier. Diez años más tarde se publicó la primera versión del exitoso programa de alineamiento múltiple de secuencias MAFFT, del que ya hemos hablado en otras entradas, que aplica ideas similares para el problema de encajar secuencias similares, como se hace al alinear secuencias.

Figura tomada de http://www.ncbi.nlm.nih.gov/pubmed/12136088. donde se muestran dos picos del análisis de Fourier que se corresponden con dos subalineamientos locales.

En esta entrada mi intención es explicar el fundamento de esta técnica recurriendo al lenguaje Octave, la versión open source de MatLab. El código es el siguiente:

 % alineamiento (sin gaps) de secuencias proteicas usando la FFT  
 % escrito en Octave, que es compatible con Matlab   
 % requiere la libreria 'bioinfo'   
   
 clear all  
   
 %% Conversor binario de secuencias   
 %% Parametros:   
 %% 1) longitud de la secuencia S  
 %% 2) longitud del fragmento F (de S)  
 function [S , F] = aa2bits( sequence , fragment )  
   
 % cada residuo se representa por un numero del 1 al 20  
 % http://www.mathworks.com/help/toolbox/bioinfo/ref/aa2int.html  
 [ seq ]= aa2int( sequence )  
 [ frag ] = aa2int( fragment )   
   
 % codificamos residuos como cadenas binarias de ancho fijo (20 columnas)  
 S=[];  
 for i=1:length(seq)  
   % cada residuo ocp  
   S=[S ones(1,seq(i)) zeros(1,20-seq(i)) ];  
 end  
   
 F=[];  
 for i=1:length(frag)  
   F=[F ones(1,frag(i)) zeros(1,20-frag(i)) ];  
 end  
   
 % completa F hasta igualar la longitud de S  
 F=[F zeros(1,length(S)-length(F))];  
   
 endfunction % no se usa en Matlab  
   
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%  
   
 % define la secuencia S y el fragmento F que queremos alinear  
 sequence = 'SDEVRKNLMDMFRDRQAFSEHTWKMLLSVCRSWAAWCKLNNRKWFPAEPEDVRDYLLY';  
 fragment = 'KMLNSVCRSWWWWC';  
   
 % convertimos ambas secuencias en dos segnales binarias,  
 % de manera que cada residuo se representa por un natural del 1 al 20  
 [S , F] = aa2bits(sequence,fragment);  
   
 % calculamos el alineamiento de F con S optimizando la funcion objetivo Fobj,  
 % que en este ejemplo es simplemente el producto (como un AND binario)  
 % obtenido al desplazar F de izq a der sobre S:   
 % producto(n) = sum { F(i) * S(i-n) }  
 %        i   
 % aprovechamos que Fobj se puede expresar por medio de transformadas  
 % de Fourier para reducir las operaciones necesarias (de N^2 a 4NlogN)  
 % https://sites.google.com/site/cartografiaygeodesia/prac7.pdf  
 % http://www.pnas.org/content/89/6/2195.abstract  
   
 FTsec = fft(S);  
 FTfrag = fft(F);  
   
 FTproducto = conj(FTfrag) .* FTsec; % producto termino a termino  
   
 % Deshacemos transformacion y localizamos valor maximo,   
 % la posicion que optimiza el alineamiento   
 producto = ifft(FTproducto);   
 [valor maxpos] = max(producto);  
   
 % imprime alineamiento sobre secuencicas binarias   
 tit = sprintf("Optimal alignment, optimal position = %d",maxpos);  
 plot(S*0.75)  
 title(tit)  
 xlabel('sequence position')  
 hold on  
 plot([zeros(1,maxpos) F*0.9] , 'r');  
 axis([0 length(S) 0 1]);  
 legend('sequence','fragment');  
 print -dpng figure_align.png;  
   
 % alineamiento sobre secuencias originales, cambiando maxpos de escala  
 align = printf("Alignment:\nS %s\nF %s%s\n",sequence,blanks((maxpos-1)/20),fragment);  

Como resultado obtendremos un alineamiento como éste, que :
S SDEVRKNLMDMFRDRQAFSEHTWKMLLSVCRSWAAWCKLNNRKWFPAEPEDVRDYLLY
F                        KMLNSVCRSWWWWC
 

Que se corresponde con éste producto de Fourier:



En Perl podríamos usar el módulo Math::FFT para este fin, o la GNU Scientific Library que ya revisamos en otra entrada. Un saludo,
Bruno

15 de octubre de 2010

Publica tu código


Hola,
hoy en vez de evaluar un programa o unas líneas de código os sugiero una columna
publicada esta misma semana en la influyente revista Nature, donde el autor, Nick Barnes, director de la Climate Code Foundation, defiende que los científicos salimos ganando y de hecho contribuimos a difundir nuestro propio trabajo, cuando publicamos el código fuente de los programas que escribimos para nuestros proyectos, aunque nunca lo hubiésemos escrito con la idea de distribuirlo. En caso contrario, defiende el autor, generalmente ese código se pierde y se convierte en abandonware (fuente de la imagen: http://top-buzz.com/2009/10).

Cualquiera que lleve cierto tiempo trabajando en Bioinformática seguro que tiene programitas y scripts que llevan tiempo languideciendo en directorios o incluso en copias de seguridad condenadas al olvido. Lo que propone el autor es que muchos de esos programas se podrían publicar por ejemplo como material suplementario junto con los artículos para los que se escribieron. Yo añadiría que son todavía más visibles, y por tanto potencialmente más útiles para otros usuarios, si los colgamos de la web en blogs como éste.


El enlace al artículo original en inglés es:
http://www.nature.com/news/2010/101013/full/467753a.html