Pregunta:
Convierta alineaciones locales en alineaciones empalmadas en un archivo SAM
aechchiki
2017-08-30 18:24:42 UTC
view on stackexchange narkive permalink

Mapeé lecturas de ARN para referenciar el genoma, usando LAST en modo dividido, y convertí la alineación MAF a SAM con maf-convert.

Mi problema es que las transcripciones no se informan de manera empalmada, lo que significa que un transcript_ID se informa varias veces en el archivo SAM de alineación con un indicador bit a bit idéntico en $ 2 . Por lo que entiendo, esto se debe al hecho de que solo se mapean los exones (un exón por fila) y se informan como alineaciones locales, ya que el software no puede lidiar con la combinación de patrones de empalme exón-intrón (todavía), cuyo comportamiento está claro a partir de la cadena CIGAR.

Para un ejemplo más concreto y visual, consideremos el mapeo de la transcripción FBtr0344900 al genoma de referencia dado por LAST:

  $ cat last_aln .sam | grep FBtr0344900FBtr0344900 0 4 42 774 100 384 = 144H * 0 0 TGCGACATTGTTCTACGATGACTACAAAAAATGACCAATAACTTCTATAAACCAATACGATATGTCAGGAGTTTCGGTCCCATACGAAGTCGCCGACTTAAGTATTTTATttttattttgatATGTGTTTGCTATTTTACCTTGTCGAATGCTTCCACACGCTATGAGAATACCATCGTGAGCGTAGCTTACTACTAGAATTTTGTTGAAGTTATTGACAAGCGATGTCTCAATATCTTCCGGACAGCCTCCAGCGTGACATTGCGGGGAATCATGTAACGGCCCAGTAACAGCCTCGGCCAGCACTCGAAGGTTTTCGTTAAGTTTAAGTATTTTATTTGTAGCACCCGCAAACAAAACATTGTGCATAAAGTCGAAGCTCAT * NM: i: 0 AS: i: 2304FBtr0344900 0 4 43 231 100 384H144 = * 0 0 CTGGAAGCTGTTGATTGAACTGGTATTGATGGCAAGTTAAACTGGGCGACTATGTCATTTAAGGGAGATAACGCCTGAGCCGGCAGTTCTTCAATGCAGTTAACGCAATAATGCTGAGAACCGAGTATGATAATAATACACAGT * NM: i: 0 AS: i: 864  

Y aquí está el mapeo de la misma transcripción FBtr0344900 dada por STAR - software que informa la alineación de la manera correcta:

  cat star_aln.sam | grep FBtr0344900
FBtr0344900 0 4 42774255 384M73N144M * 0 * NH: i: 1 HI: i: 1 NM: i: 0 MD: Z: 528  

De discusión con el autor, parece que no puedo obtener lo que necesito directamente de la ÚLTIMA versión actual, y no es un problema técnico. Entonces, tengo que modificar la salida yo mismo. El objetivo sería obtener al menos una línea CIGAR que represente una transcripción completa.

Mi pregunta es, ¿conoce algún software para hacer esto? Lo que necesitaría es un archivo que contenga una línea por cada transcripción mapeada de forma única, con tres campos: transcript_ID , posición de inicio y CIGAR string .

Por mi parte, procedí así:

1) extraer los campos que necesito para los interesados ​​del archivo SAM:

  $ cut -f1,4,6FBtr0344900 42774 384 = 144HFBtr0344900 43231 384H144 =  

2) dividir la línea CIGAR para eliminar elementos que no me interesan: simplifico el comando aquí, suponiendo que solo tengo coincidencias perfectas (que me interesan) y recortes duros (que no me interesan):

  $ cut -f3 | sed 's / H / _ / g' | sed 's / = / = / g' | sed 's / \ w * _ \ s * //' | sed 's / = // g'384144  

3) pegue el CIGAR modificado en el archivo original, con paste , resultando en:

  $ paste (1) (2) | cortar -f1,2,4FBtr0344900 42774 384FBtr0344900 43231 144  

4) fusionar filas que comienzan con el mismo transcript_id :

  $ awk -F '\ t' -v OFS = '\ t' '{x = $ 1; $ 1 = ""; a [x] = a [x] $ 0} FIN {para (x en a) imprimir x, a [x]} '| FBtr0344900 42774384 43231144 

5) Calcule el nuevo puro, calculando la longitud del intrón como la fórmula aritmética intron_length = (next_exon_start_coordinate - exon_length - previous_exon_start_coordinate) , en este caso simple arriba: intron_length = 43231-384-42774

  $ awk '{printf ("% s", $ 1)}; {para (i = 4; i< = NF; i + = 2) {printf ("% s% d% s% d", OFS, $ (i-1), OFS, $ i - $ (i-1) - $ (i-2))}}; {printf ("% s% d% s% s", OFS, $ NF, OFS, RS)} 'FBtr0344900 384 73144  

6) idealmente, con algún método que averiguar, modificaré la cadena CIGAR (agregando M, N alternativos al final de cada campo excepto el primero), así es como debería verse el archivo final:

  FBtr0344900 42774 384M73N144M  

El problema de mi enfoque básico es que:

  1. No estoy seguro de cómo contabilizar el SAM basado en 1: ¿debo agregar + 1 en cada exon_start_coordinate ? No lo parece, ya que la salida de STAR tiene exactamente la misma cuerda de cigarro que calculé en la salida de STAR.
  2. GRAN problema: esto solo funcionará para las lecturas mapeadas en la hebra delantera: ¿cómo hacerlo factible con lecturas mapeadas en la hebra inversa? Si mantengo mi enfoque actual, tendré tamaños de intrones negativos ...

¡Cualquier sugerencia es bienvenida!

Le recomiendo encarecidamente que no haga esto con las herramientas normales de Unix y, en su lugar, codifique algo en Python (o en el idioma que prefiera).
Usaría un alineador que genere un SAM adecuado, como star, gmap, spaln o minimap2.
sí, ya ejecuté la misma alineación con GMAP, STAR. sospechamos que LAST podría funcionar bastante bien, pero por ahora el resultado no es directamente útil. Probaré minimap2 (es bueno saber que también puedes usarlo para ARN)
@user172818 minimap2 funciona increíblemente bien ... muchas gracias por redirigirme a él
One responder:
winni2k
2018-11-18 14:35:09 UTC
view on stackexchange narkive permalink

Simplemente use minimap2 en el modo de alineación dividida para realinear las lecturas.

Si esa no es una opción, entonces podría intentar usar pysam para modificar las cadenas de CIGAR. No recomiendo esto, ya que hay muchas oportunidades para errores sutiles porque la especificación SAM es compleja. Debería:

  1. Ordenar el BAM en ID de lectura para que pueda recuperar de manera eficiente las lecturas que desea fusionar
  2. Iterar a través del BAM con pysam mientras carga todas las lecturas del mismo ID de lectura
  3. Para cada conjunto de lecturas con el mismo ID de lectura:
    1. Ordene las lecturas del mismo ID de lectura por el número de bases recortadas al comienzo de la cadena CIGAR.
    2. Cree una nueva cadena CIGAR a partir de las cadenas CIGAR ordenadas
    3. Combine las metaetiquetas de las lecturas ordenadas
    4. Escriba una lectura única, combinada
Hice eso al final. En ese momento, solo quería reformatear las alineaciones no empalmadas de LAST (por ejemplo) en alineaciones empalmadas. ¿Por qué? Evalúe la mayor cantidad de herramientas posibles. Pero está bien, me rendí al final y solo usé herramientas que ya daban esa alineación empalmada directamente.
Eso es genial. Sin embargo, el objetivo de SE es también ayudar a otros que puedan tener problemas similares en el futuro proporcionando respuestas a preguntas para que los usuarios puedan votar buenas respuestas. Si cree que mi respuesta es buena a la pregunta que planteó, considere la posibilidad de votarla y aceptarla.
Si cree que esta respuesta no responde a la pregunta que realmente tenía, considere volver a escribir su pregunta para mayor claridad.


Esta pregunta y respuesta fue traducida automáticamente del idioma inglés.El contenido original está disponible en stackexchange, a quien agradecemos la licencia cc by-sa 3.0 bajo la que se distribuye.
Loading...