9 de septiembre de 2019

modelos de proteínas a partir de alineamientos múltiples

Hola,
desde hace unos meses he estado hablando aquí (1, 2, 3) de los nuevos métodos de predicción de estructura de proteínas basados en estimar distancias entre resíduos a partir de los alineamientos múltiples de sus secuencias (MSA). Hoy traigo aquí uno de esos métodos, que a diferencia de alphaFold, podéis probar en vuestro propio ordenador: DMPfold. Este algoritmo es producto del grupo de David T. Jones, bien conocido por herramientas muy populares como PSIPRED y usa la información evolutiva capturada en un MSA para calcular distancias entre C-betas, puentes de hidrógeno del esqueleto peptídico y ángulos diedros (leer aquí y aquí).


Diagrama de flujo de DMPfold, tomado de https://www.nature.com/articles/s41467-019-11994-0


La lista de dependencia es larga, como explican en su repositorio https://github.com/psipred/DMPfold, pero os permitirá modelar vuestras propias secuencias, incluso proteínas de membrana, y tener el control sobre el proceso,
hasta pronto,
Bruno

3 de septiembre de 2019

cómo hacer filogenias de miles de genomas

Hola,
la acumulación de genomas completos humanos, actualmente del orden de decenas de miles, plantea problemas a la hora de calcular filogenias con las estructuras de datos y los algoritmos tradicionales. Por esa razón hay grupos desarrollando nuevas estrategias que beneficiarán también a los que, como nosotros, trabajamos en plantas, cuando lleguemos a esos números.

Hoy comento muy brevemente dos métodos que acabo de ver publicados en Nature Genetics. El primero se llama tsinfer y usa un árbol comprimido para almacenar las variantes genómicas en mucho menos espacio que una matriz VCF:

Tamaño de las estructuras de datos probadas por los autores de tsinfer, tomado de https://www.nature.com/articles/s41588-019-0480-1.

El segundo método se llama relate y se basa en reconstruir los eventos de recombinación de cromosomas ancestrales que explican los haplotipos observados. Este método calcula longitudes de ramas:


Resumen del algoritmo relate, tomado de https://www.nature.com/articles/s41588-019-0484-x.

Un saludo,
Bruno

15 de agosto de 2019

progreso en la predicción estructural de proteínas

Hola,
hace unos meses contaba aquí el algoritmo AlphaFold para plegar proteínas por predicción de distancias entre residuos, que había escuchado de boca de uno de sus creadores. Hoy me he encontrado con la evaluación oficial de estructura terciaria del experimento CASP13, donde AlphaFold se destacó como mejor grupo predictor. La conclusión se resume en esta figura:

Fuente: https://onlinelibrary.wiley.com/doi/10.1002/prot.25787
Parece seguro decir que en CASP13 ha habido un salto en la calidad de las predicciones respecto a ediciones previas, a pesar de que la dificultad en esta edición es comparable a la anterior (Tabla 1 del artículo de Abriata et al de la figura). Los evaluadores achacanla mejoría precisamente a que más allá de predecir contactos, algunos de los mejores predictores, como A7D (AlphaFold), MULTICOM o RaptorX han empezado a predecir directamente distancias entre residuos, algo para la cual hacen falta alineamientos múltiples de secuencia muy profundos. Hasta luego,
Bruno


14 de agosto de 2019

modelado comparativo de proteínas multidominio

Hola,
en muchas ocasiones el modelado por homología o comparativo es  la única manera que tenemos trabajar con la estructura de una proteína que todavía no está en el Protein Data Bank. De hecho muchos artículos han sido publicados con figuras construidas sobre este tipo de modelos porque ayudan a comprender y poner en contexto tridimensional los resultados.

Interfaz entre dos monómeros modelada por homología, tomada de https://science.sciencemag.org/content/364/6445/1095.

Sin embargo, casi todas las herramientas que existen para modelar proteínas se han centrado históricamente en modelar dominios de proteína uno a uno, cuando la realidad es que muchas proteínas contienen varios dominios. Precisamente para modelar las conformaciones de este tipo de proteínas ha sido publicado recientemente https://zhanglab.ccmb.med.umich.edu/DEMO.

Diagrama de flujo de DEMO, tomado de https://www.pnas.org/content/116/32/15930.

Con la ayuda de DEMO podrás ensamblar dominios previamente modelados de dos en dos. El algoritmo consulta una colección no redundante de estructuras multidominio y optimiza las orientaciones entre dominios, además de que puede usar datos experimentales (cross-linking y crioEM) para guiar el proceso.

Un saludo, Bruno


5 de julio de 2019

Consultas eficientes sobre ficheros TSV con SQL

Hola,
estos dias está de visita mi colega Valerie y me preguntaba si había alguna manera de seleccionar de manera eficiente filas de un fichero con millones de líneas, en su caso con columnas separadas por tabuladores (TSV). Yo le sugerí una base de datos relacional y como ella escribe sobre todo en python lo hicimos así, con sqlite:

import sqlite3

# local file with data to populate SQL db
data_file = 'data4sql.tab'

# persistent database file to be created, returns a Connection
conn = sqlite3.connect('example.sqlite.db')

# Cursor object to perform SQL commands on that connection
c = conn.cursor()

# create a table as a list of columns and their types (NULL, INTEGER, REAL, TEXT, BLOB)
# NOTE: the columns should match those in data_file
tb_name = 'mytable'
c.execute('CREATE TABLE {tn}\
             (IMG text, scaffold_id text, GC real, length integer, locus_tag text,\
             IMG_gene_id text, gene_type text, gene_start integer, gene_stop integer,\
             gene_length integer, depth real)'.format(tn=tb_name))

with open(data_file) as fin:
    for line in fin:
        cols = line.rstrip().split("\t")

        # make sure empty values are changed to NULL
        cols=[None if x=='' else x for x in cols]
        
        # Insert a row of data
        c.execute("INSERT INTO {tn} VALUES (?,?,?,?,?,?,?,?,?,?,?)".format(tn=tb_name),cols[0:11])

# save (commit) the changes
conn.commit()

# example queries, any valid SELECT SQL can be used
c.execute('SELECT * FROM {tn} WHERE depth >10'.\
        format(tn=tb_name))
for line in c.fetchall():
   print(line)

# close and exit
conn.close()

En realidad esto se debería separar en dos programas, uno para crear la base de datos y otro para hacer consultas sobe ella. El código es sencillo, pero deberás conocer un mínimo de sintaxis SQL para entender cómo crear tablas, con sus tipos, y cómo hacer consultas. Fíjate que los valores perdidos los sustituimos por un objeto None,
saludos,
Bruno y Valerie