CRAM es un formato de archivo comprimido en columnas para almacenar secuencias biológicas alineadas con una secuencia de referencia , inicialmente ideado por Markus Hsi-Yang Fritz et al . [1]
Extensión de nombre de archivo | .atestar |
---|---|
Desarrollado por | Markus Hsi-Yang Fritz y col . ; Vadim Zalunin |
Tipo de formato | Bioinformática |
¿ Formato abierto ? | sí |
Sitio web | www |
CRAM fue diseñado para ser una alternativa eficiente basada en referencias a los formatos de archivo Sequence Alignment Map (SAM) y Binary Alignment Map (BAM). Opcionalmente usa una referencia genómica para describir las diferencias entre los fragmentos de secuencia alineados y la secuencia de referencia, reduciendo los costos de almacenamiento. Además, cada columna en el formato SAM está separada en sus propios bloques, mejorando la relación de compresión. Los archivos CRAM suelen variar entre un 30 y un 60% más pequeños que BAM, según los datos que contienen.
Existen implementaciones de CRAM en htsjdk, [2] htslib , [3] JBrowse , [4] y Scramble. [5]
La Alianza Global para la Genómica y la Salud (GA4GH) [6] mantiene la especificación del formato de archivo con el documento de especificación disponible en la página del kit de herramientas intensivas de EBI. [7]
Formato de archivo
La estructura básica de un archivo CRAM es una serie de contenedores, el primero de los cuales contiene una copia comprimida del encabezado SAM. Los contenedores posteriores constan de un encabezado de compresión de contenedor seguido de una serie de sectores que, a su vez, contienen los registros de alineación, formateados como una serie de bloques.
Archivo CRAM:
número mágico Contenedor
(encabezado SAM)Contenedor
(datos)... Contenedor
(datos)Contenedor
(EOF)
Envase:
Encabezado de contenedor
Encabezado de compresiónRodaja ... Rodaja
Rodaja:
rebanada
de cabeceraCuadra Cuadra ... Cuadra
CRAM construye registros a partir de un conjunto de series de datos que describen los componentes de una alineación. El encabezado de compresión del contenedor especifica qué serie de datos se codifica en qué bloque, qué códec se utilizará y cualquier metadato específico de códec (por ejemplo, una tabla de longitudes de código de símbolo de Huffman ). Si bien las series de datos se pueden mezclar dentro del mismo bloque, mantenerlas separadas generalmente mejora la compresión y brinda la oportunidad de una decodificación selectiva eficiente donde solo se requieren algunos tipos de datos.
El acceso selectivo a un archivo CRAM se otorga a través del índice (con el sufijo de nombre de archivo ".crai"). En los datos clasificados por cromosomas y posiciones, esto indica qué región está cubierta por cada corte. En los datos no clasificados, el índice se puede usar para simplemente buscar el contenedor N- ésimo . La decodificación selectiva también se puede lograr utilizando el encabezado de compresión para omitir series de datos específicas si se requieren registros parciales.
Historia
Año | Versión (s) | Notas |
---|---|---|
2010-11 | pre-CRAM | Artículo inicial que describe el formato basado en referencias. Esto no usó el nombre CRAM, sino que lo llamó 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) produjo la primera implementación llamada CRAM como un paquete llamado CRAMtools, [8] escrito en el lenguaje de programación Java . |
2012 | 1.0 [9] | Implementado en Java CRAMtools. [10] |
2013 | Implementación de C agregada a la herramienta Scramble [11] [5] , por James Bonfield del Wellcome Sanger Institute . | |
2013 | 2.0 | Los cambios incluyeron soporte para más de una referencia por segmento (útil con ensamblajes altamente fragmentados), mejor codificación de etiquetas auxiliares SAM, división de clips suaves y bases insertadas en sus propias series de datos, metadatos para rastrear el número de registros y bases. por rebanada, y correcciones a la serie de datos BF (bandera BAM). |
2013 | Agregado a htslib (0.2.0). | |
2014 | 2.1 [12] | Se agregaron bloques EOF para ayudar a identificar archivos truncados. |
2014 | Agregado a htsjdk (1.127). | |
2014 | 3,0 [13] | Inclusión de códecs lzma y rANS para la compresión de bloques, junto con múltiples sumas de verificación para garantizar la integridad de los datos. |
2018 | Implementación de Javascript como parte de JBrowse [4] (1.15.0), por Rob Buels. |
La versión 4.0 de CRAM existe como prototipo en Scramble, [5] inicialmente demostrado en 2015, pero aún no se ha adoptado como estándar.
Ver también
Referencias
- ↑ a b Hsi-Yang Fritz, Markus; Leinonen, Rasko; Cochrane, Guy; Birney, Ewan (mayo de 2011). "Almacenamiento eficiente de datos de secuenciación de ADN de alto rendimiento mediante compresión basada en referencias" . Investigación del genoma . 21 (5): 734–740. doi : 10.1101 / gr.114819.110 . ISSN 1549-5469 . PMC 3083090 . PMID 21245279 .
- ^ "Htsjdk por Broad Institute" . samtools.github.io . Consultado el 14 de octubre de 2018 .
- ^ "Samtools" . www.htslib.org . Consultado el 14 de octubre de 2018 .
- ^ a b "JBrowse · Un navegador de genoma rápido e integrable construido con HTML5 y JavaScript" . jbrowse.org . Consultado el 14 de octubre de 2018 .
- ^ a b c Bonfield, James K. (14 de junio de 2014). "La herramienta de conversión Scramble" . Bioinformática . 30 (19): 2818–2819. doi : 10.1093 / bioinformatics / btu390 . ISSN 1460-2059 . PMC 4173023 . PMID 24930138 .
- ^ "GA4GH" . www.ga4gh.org . Consultado el 14 de octubre de 2018 .
- ^ EMBL-EBI. "Kit de herramientas CRAM . www.ebi.ac.uk . Consultado el 14 de octubre de 2018 .
- ^ "vadimzalunin / crammer" . GitHub . 2017-08-08 . Consultado el 14 de octubre de 2018 .
- ^ "Especificación CRAM 1.0" (PDF) .
- ^ "enasequence / cramtools" . GitHub . 2018-10-02 . Consultado el 14 de octubre de 2018 .
- ^ "jkbonfield / io_lib" . GitHub . 2018-10-16 . Consultado el 14 de octubre de 2018 .
- ^ "Especificación CRAM 2.1" (PDF) .
- ^ "Especificación CRAM 3.0" (PDF) .