Formato CRAM

Summary

El formato CRAM (siglas del inglés, Compressed Reference-oriented Alignment Map) es un formato de archivo comprimido, basado en columnas, para almacenamiento de secuencias biológicas alineadas con una secuencia de referencia. Fue concebido inicialmente por Markus Hsi-Yang Fritz y colaboradores.[1]

CRAM
Desarrollador
Markus Hsi-Yang Fritz et al
Vadim Zalunin
James Bonfield
www.ga4gh.org/cram/, www.ebi.ac.uk/ena/software/cram-toolkit
Información general
Extensión de archivo .cram
Tipo de formato Bioinformática
Formato abierto No 

CRAM se diseñó para ser una alternativa eficiente a los formatos SAM (del inglés, Sequence Alignment Map) y BAM (del inglés, Binary Alignment Map). Opcionalmente, utiliza un genoma de referencia para describir las diferencias entre los fragmentos de secuencia alineados y la secuencia de referencia, reduciendo los costes de almacenamiento. Adicionalmente, cada columna en el formato SAM está separada en sus propios bloques, mejorando la relación de compresión. Los archivos CRAM varían típicamente en tamaño de un 30 a un 60% más pequeños que los BAM, dependiendo de los datos que contengan.

Existen implementaciones de CRAM en htsjdk,[2]​ htslib,[3]JBrowse,[4]​ y Scramble.[5]

La Global Alliance for Genomics and Health (GA4GH)[6]​ mantiene las especificaciones del formato, siendo accesible desde la página web de EMBL-EBI.[7]

Formato de archivo

editar

La estructura básica de un archivo CRAM es una serie de contenedores; el primero contiene una copia comprimida de la línea de cabecera en formato SAM; los siguientes contenedores consisten en otra línea de cabecera de los datos comprimidos, seguida de registros de alineamientos, formateados como una serie de bloques.

Archivo CRAM:

Número mágico Contenedor

(Línea de cabecera de SAM )

Contenedor

(Datos)

... Contenedor

(Datos)

Contenedor

(EOF)

Contenedor:

Línea de cabecera

del contenedor

Cabecera

de compresión

Porción ... Porción

Porción:

Cabecera de la porción Bloque Bloque ... Bloque

Los archivos CRAM recogen registros de un conjunto de datos, describiendo los componentes de un alineamiento. La cabecera de compresión específica qué datos están codificados en cuales bloques, qué codificador se utiliza y metadatos específicos del codificador (por ejemplo, una tabla de longitudes de códigos Huffman). La mezcla de diferentes conjuntos de datos en un mismo bloque es posible, aunque su separación mejora normalmente la compresión y ofrece la oportunidad para decodificar selectiva e eficientemente los bloques con los datos necesarios.

El acceso selectivo a un archivo en formato CRAM está garantizado mediante el índice (con el sufijo ".crai"). Los índices indican, en datos ordenados por coordenadas genómicas, cuales regiones están cubiertas por cuales porciones. En datos no ordenados, los índices pueden utilizarse para simplemente buscar un contenedor concreto. La decodificación selectiva también puede obtenerse utilizando la cabecera de compresión para pasar sobre conjuntos de datos específicos, si se necesitas registros parciales.

Historia

editar
Año Versión Notas
2010-11 pre-CRAM Publicación original que describe la referencia en la que se basa el formato. Entonces, no se llamaba CRAM, sino mzip. Este software se implementó en python como prototipo y demostración de los conceptos básicos.[1]
2011-12 0.3–0.86 Vadim Zalunin, del Instituto Europeo de Bioinformática (EBI) creó la primera implementación llamada CRAM como un paquete de software llamado CRAMtools,[8]​ escrito en el lenguaje de programación java.
2012 1.0[9] Implementación en java CRAMtools.[10]
2013 Implementación en C añadida a la herramienta Scramble,[11][5]​creada por James Bonfield, del Instituto Sanger.
2013 2.0 Se incluyó soporte para más de una secuencia de referencia por porción (útil para ensamblajes muy fragmentados); mejor codificación de marcas auxiliares de formato SAM; metadatos para rastreo del número de registros y bases por porción; y correciones para marcas de formato BAM.
2013 Añadido a htslib (0.2.0).
2014 2.1[12] Añadido a bloques EOF para ayudar a identificar archivos truncados.
2014 Añadido a htsjdk (1.127).
2014 3.0[13] Inclusión del algoritmo lzma y el codificador rANS para la compresión de bloques, así como múltiples controles para asegurar la integridad de los datos.
2018 Implementación en JavaScript como parte de JBrowse[4]​ (1.15.0), creada por Rob Buels.
2021 Implementación enn Noodles
2023 3.1[14] Adoptado oficialmente (Borrador de 2019)

La versión 4.0 de CRAM existe como prototipo en Scramble,[5]​ demostrado inicialmente en 2015, aunque aún no se ha adoptado como estándar.[cita requerida]

Véase también

editar

Referencias

editar
  1. a b Hsi-Yang Fritz, Markus; Leinonen, Rasko; Cochrane, Guy; Birney, Ewan (May 2011). «Efficient storage of high throughput DNA sequencing data using reference-based compression». Genome Research 21 (5): 734-740. ISSN 1549-5469. PMC 3083090. PMID 21245279. doi:10.1101/gr.114819.110. 
  2. «Htsjdk by Broad Institute». samtools.github.io. Consultado el 14 de octubre de 2018. 
  3. «Samtools». www.htslib.org. Consultado el 14 de octubre de 2018. 
  4. a b «JBrowse · A fast, embeddable genome browser built with HTML5 and JavaScript». jbrowse.org. Consultado el 14 de octubre de 2018. 
  5. a b c Bonfield, James K. (14 de junio de 2014). «The Scramble conversion tool». Bioinformatics (en inglés) 30 (19): 2818-2819. ISSN 1460-2059. PMC 4173023. PMID 24930138. doi:10.1093/bioinformatics/btu390. 
  6. «GA4GH». www.ga4gh.org (en inglés estadounidense). Consultado el 14 de octubre de 2018. 
  7. EMBL-EBI. «CRAM toolkit < Software < European Nucleotide Archive < EMBL-EBI». www.ebi.ac.uk (en inglés). Consultado el 14 de octubre de 2018. 
  8. «vadimzalunin/crammer». GitHub (en inglés). 8 de agosto de 2017. Consultado el 14 de octubre de 2018. 
  9. «CRAM 1.0 Specification». 
  10. «enasequence/cramtools». GitHub (en inglés). 2 de octubre de 2018. Consultado el 14 de octubre de 2018. 
  11. «jkbonfield/io_lib». GitHub (en inglés). 16 de octubre de 2018. Consultado el 14 de octubre de 2018. 
  12. «CRAM 2.1 Specification». 
  13. «CRAM 3.0 Specification». 
  14. «CRAM 3.1 Specification».