get_MNV

Referencia

Formatos de salida

get_MNV puede escribir archivos de metadatos TSV, VCF, BCF y JSON.

Salida TSV por defecto

Nombre de archivo por defecto:

<input_name>.MNV.tsv

Con --sample all se escribe un archivo por muestra, con la muestra en el nombre:

<input_name>.sample_<MUESTRA>.MNV.tsv

Los caracteres que no pueden aparecer en un nombre de archivo se sustituyen, así que una muestra llamada sample/1:bad pasa a ser sample_1_bad. Si dos muestras quedan con el mismo nombre tras esa sustitución escribirían en un solo archivo, así que la ejecución se detiene y las nombra en vez de dejar que una sobrescriba a la otra.

Cada archivo contiene las variantes que lleva esa muestra, no todas las de la cohorte. Un registro enumera todos los ALT vistos en ese sitio en el conjunto de muestras, así que el GT de la muestra decide cuáles le corresponden: un genotipo 0/0 no lleva ninguno, 1/2 lleva los dos alelos de un registro multialélico, y un genotipo ausente o sin llamada (./.) conserva el alelo, porque desconocido no es lo mismo que ausente. Una muestra que no lleva nada recibe un archivo solo con la cabecera. Dos sustituciones contiguas se juntan en un MNV únicamente para las muestras que llevan las dos.

Usa este formato para hojas de cálculo, análisis posteriores e inspección rápida.

Columnas principales:

ColumnaSignificado
ChromosomeNombre del contig
GeneNombre del gen o de la característica. Las variantes intergénicas se marcan como intergenic.
PositionsUna posición para los SNP y varias posiciones separadas por comas para los MNV, en orden genómico ascendente en ambas hebras. Las columnas por SNV (Reference Bases, Base Changes, SNP AA Changes, SNP Codon, Event Components y las de soporte de lecturas) son arrays paralelos en ese mismo orden.
Reference BasesBases de referencia en esas posiciones.
Base ChangesBases alternativas.
AA ChangesCambio de aminoácido tras combinar todos los SNV del codón. El primer codón de la proteína se lee como iniciador: cualquier codón de iniciación de la tabla de traducción (GTG y TTG entre ellos en bacterias) empieza la proteína como Met. Un cambio que pierde el iniciador se escribe Met1?, como pide HGVS, porque no se puede predecir dónde empieza entonces la traducción; uno que lo cambia por otro codón de iniciación conserva la Met (Met1Met). Un indel que borra el codón de inicio, o mete bases dentro de él, lo pierde aunque el codón que deja primero sea también de iniciación. Una inserción en fase que repite los residuos que tiene justo delante se escribe como su duplicación, en la copia más 3' (Phe433dup, His68_Leu70dup), como pide HGVS; cualquier otra inserción nombra los residuos que tiene a cada lado (Lys2_Phe3insGly).
SNP AA ChangesCambio de aminoácido para cada SNV considerado por separado.
Local AA ChangesNumeración local al exón, que es lo que get_MNV reportaba antes de la 1.1.2. Idéntica a AA Changes cuando la característica no tiene contexto de transcrito (un TSV de genes, un CDS procariota o de un solo exón, y el primer exón de un modelo empalmado), y distinta en los exones posteriores de un transcrito empalmado, donde AA Changes cuenta desde el inicio de la proteína y esta desde el inicio del exón.
Local SNP AA ChangesCambios de aminoácido por SNP en numeración local.
Variant TypeSNP, MNV, SNP/MNV o INDEL.
Change TypeSinónimo, no sinónimo, codón de parada ganado/perdido, desconocido, etc.
Reference CodonCodón original, en la orientación del propio transcrito: en un gen de hebra menos son las bases de la hebra codificante, no las genómicas, de modo que el codón siempre traduce al aminoácido que aparece a su lado.
SNP CodonCodón con las sustituciones SNP individuales, misma orientación que Reference Codon.
MNV CodonCodón con todas las sustituciones agrupadas, misma orientación que Reference Codon.
Event ClassClase canónica del evento de alelo: snp, mnv, insertion, deletion, delins, complex_indel o symbolic.
Event ComponentsDescomposición REF/ALT como SNV:10:A>G, INS:10:+T o DEL:11-12:TG.
SO TermTérmino de consecuencia Sequence Ontology (missense_variant, synonymous_variant, stop_gained, start_lost, frameshift_variant, inframe_deletion, intergenic_variant, …). Las variantes cerca de una unión exón-exón interna de un transcrito con splicing llevan además un término de splice: splice_donor_variant / splice_acceptor_variant (las dos bases intrónicas esenciales de cada extremo del intrón, HIGH) o splice_region_variant (las 3 primeras o las 3 últimas bases del exón, o las bases 3ª-8ª del intrón, LOW). Un cambio exónico cerca de una unión se combina con su consecuencia codificante, p. ej. missense_variant&splice_region_variant para una sustitución y frameshift_variant&splice_region_variant para un indel, en una sola fila y no en dos. Un corrimiento de marco que destruye el codón de inicio es frameshift_variant&start_lost, en coherencia con el start_lost que recibe una sustitución en ese punto. Una unión exige un intrón real: los segmentos CDS contiguos o solapados (una unión por deslizamiento ribosómico, como ORF1ab de SARS-CoV-2) forman una pauta de lectura continua y no llevan términos de splice. Una variante dentro de un intrón pero lejos de sus sitios de splice es intron_variant (MODIFIER), reportada contra su gen y no como intergénica, y una variante en una feature declarada no codificante es non_coding_transcript_exon_variant (MODIFIER), sin cambio de aminoácido.
ImpactImpacto previsto según convenciones SnpEff/VEP: HIGH, MODERATE, LOW o MODIFIER. Una consecuencia combinada splice/codificante conserva el impacto más severo.
GranthamDistancia de Grantham y categoría de conservación de un cambio missense (p. ej. 177 (radical)); - si es sinónimo, sin sentido o no codificante.
MNV Consequence ShiftCómo compara el MNV combinado con sus SNV individuales: MNV-gained (más severo que cualquier SNV solo, que es lo que se pierden los anotadores por-SNV), MNV-masked (un SNV sin sentido rescatado por su vecino) o Concordant. - para SNV individuales.
DBS ClassClase COSMIC DBS78 del doblete al que pertenecen las sustituciones de la fila: exactamente dos bases sustituidas adyacentes, caigan donde caigan, también a caballo entre dos codones o fuera de genes, p. ej. CC>TT (colapsado por complemento reverso, así que GG>AA se reporta como CC>TT). Las dos filas de un doblete partido por un límite de codón la llevan. - para SNV sueltas, indels, sustituciones no adyacentes y rachas de tres o más bases adyacentes, que COSMIC cuenta como sustituciones multibase.
Declared PhaseLa fase que declaró el VCF de entrada para los alelos de esta fila, como cis:12345 (veredicto y conjunto de fase PS) o solo cis si el llamador faseó sin conjunto. Se lee de un GT separado por |; un genotipo con / es el llamador diciendo que no resolvió la fase, y sale como -. Se añade |contradicted-by-reads cuando el BAM no le deja sitio: un cis declarado que ni una sola lectura completa lleva, o un trans declarado que llevan todas las lecturas informativas. Es la afirmación del llamador, no una observación; las columnas de fasing de al lado son la evidencia. - para filas de una sola posición y para entrada sin fasear.
MNV Phasing SupportSoporte de fasing (ligamiento) derivado del BAM: entre las lecturas que observan todas las posiciones del codón y llevan el SNV constituyente menos soportado, la fracción que además lleva el haplotipo MNV completo. 1.0000 = co-ocurrencia perfecta (un haplotipo real); valores bajos indican que los SNV caen mayoritariamente en moléculas distintas (una coincidencia en el mismo codón, no un MNV real). 0.0000 es un hallazgo: hubo lecturas que cruzaron el codón y ninguna llevaba ambos. - significa que no se pudo responder: sin --bam, un SNV suelto, o ninguna lectura que alcance de un extremo a otro del codón (habitual cuando un codón cruza un intrón y los fragmentos son más cortos que él).
Haplotype LDDesequilibrio de ligamiento (D') a nivel de lectura entre las variantes que esta fila afirma que van juntas, sobre las moléculas que las observaron. Cubre los dos tipos de fila con varias variantes: un MNV de codón y un haplotipo local de indel. Un ratio de co-ocurrencia no puede separar un haplotipo de una casualidad de frecuencias: dos sustituciones que están cada una en el 90% de las moléculas se encuentran juntas en el 81% por pura aritmética, y el ratio eso lo llama 0.9. D' mide el exceso sobre lo que predicen esas dos frecuencias, normalizado por el máximo que podría haber sido. +1 = van juntas todo lo que sus frecuencias permiten, así que el MNV es un haplotipo real. ~0 = co-ocurren exactamente lo que predice el azar, así que solo comparten codón. -1 = se excluyen: ambas presentes, nunca en la misma molécula, lo que en una población haploide son dos linajes en competencia y no una variante. Con tres o más variantes decide el par más débil, porque la fila afirma que una molécula las lleva todas. Responde a una pregunta distinta que el recuento de al lado: el recuento es cuántas moléculas son esa combinación, mientras que D' es si sus variantes co-ocurren más de lo que predicen sus propias frecuencias, así que un haplotipo con pocas moléculas puede estar perfectamente ligado y uno con muchas puede ser una casualidad. - cuando ninguna molécula observó las variantes juntas, o cuando una de ellas está en todas esas moléculas o en ninguna, que no deja nada que correlacionar. Solo aparece con --bam.
Haplotype LD pValor p exacto de Fisher a dos colas para esa tabla, para que un D' de 1.0 con cuatro moléculas no se lea igual que uno con cuatrocientas. - en los mismos casos que la columna anterior. Solo aparece con --bam. Mira Ligamiento.
MNV Phasing ReadsSobre cuántas lecturas se calculó MNV Phasing Support, para que un 1.0000 con 3 lecturas no se lea igual que uno con 300. Sale - exactamente cuando esa columna sale -, que no es el mismo criterio que el de las dos columnas de ligamiento de al lado. Solo aparece con --bam.
Frameshift PhasingLo que dijeron las lecturas sobre si este codón comparte moléculas con cada indel aguas arriba, como trans:1234:0/18: el veredicto, la posición del indel, y las lecturas en cis sobre las que podían responder. Varios se unen con |. Un codón sin la marca de frameshift se ve igual tanto si las lecturas probaron que el indel está en otras moléculas como si nadie preguntó; - es el segundo caso. Solo aparece con --bam.
NMD PredictionPredicción de decaimiento mediado por sin sentido (NMD) para un stop prematuro según la regla de los 50 nt: NMD-triggering cuando el PTC está a más de 50 nt aguas arriba de la última unión exón-exón, NMD-escaping cuando está en el último exón o a menos de 50 nt de esa unión. - para variantes sin stop prematuro y para transcritos sin unión exón-exón. Requiere un modelo de CDS con splicing (transcrito GFF/GTF) cuyos segmentos estén separados por intrones reales; un único segmento CDS, o segmentos unidos por deslizamiento ribosómico, no tiene unión.
HGVS g.Descriptor HGVS genómico: g.100A>G para un SNV, el bracket de alelo g.[28G>T;30T>A] para un MNV, y g.101_102del / g.100_101insTG / g.101delinsC / g.295_297dup para indels. Un indel en una repetición se coloca en su posición equivalente más 3' de la referencia, y una inserción que repite las bases que tiene delante es un dup, como pide HGVS; la columna Positions conserva la colocación de la entrada. Sin prefijo de accesión de referencia.
HGVS c.Descriptor HGVS codificante, numerado desde el inicio del CDS con bases de la hebra codificante: c.30A>G (SNV), el bracket de alelo c.[28G>A;30T>C] (MNV), o c.31del, c.30_31insGCT, c.28_30delinsTCGCTA, c.295_297dup (indels, con las bases insertadas en la hebra codificante). Igual que en HGVS g., un indel se coloca lo más 3' posible, aquí a lo largo de la secuencia codificante (nunca más allá de su final), y una copia de las bases que tiene delante es un dup. Una base de un intrón de un transcrito empalmado se numera desde el exón más cercano, c.100+2 tras la última base de un exón y c.101-5 antes de la primera, así que las filas intrónicas y de sitio de splicing también llevan descriptor (c.100+5G>A, c.101-2_101-1del), y un indel que cae entero dentro de un intrón se coloca lo más 3' posible dentro de él. Una inserción justo después de la última base de un exón interno se coloca en la unión de exones, igual que la lee el cambio proteico. - para variantes intergénicas y no codificantes y para un cambio que llega a un UTR o al flanco (c.-15, c.*3), que la herramienta no numera. Las columnas de consecuencia siguen leyendo el cambio donde lo colocó la entrada, como hace VEP por defecto.
SBS96 ContextClase COSMIC SBS96 de cada sustitución de una base de la fila, en el orden de Event Components, escrita desde la hebra de la pirimidina: A[C>T]G para una C>T entre A y G, y una G>A en el mismo contexto se lee desde la otra hebra como C[C>T]T. DBS o MBS para una base de una racha de dos, o de tres o más, sustituciones adyacentes, que pertenece a esa racha y no al espectro de una base. - para una entrada cuyo contexto de trinucleótido no se puede leer (final del contig, base ambigua) y para filas sin sustitución. El informe las cuenta en un espectro mutacional.
Adjacent SubstitutionsDescriptor HGVS genómico de la racha de dos o más bases sustituidas adyacentes a la que pertenecen las sustituciones de la fila, p. ej. g.103_104delinsAT. Todas las filas que toca la racha llevan el mismo descriptor, y así quedan enlazadas las dos filas de codón de un doblete partido por un límite de codón, tanto si el llamador lo escribió como un registro como si fueron dos. Se lee por posiciones, como hacen las herramientas de COSMIC; no se cuenta el soporte de lecturas de la racha completa. - cuando ninguna sustitución de la fila tiene una vecina sustituida.
CatalogueLas entradas de --catalogue con las que coincide la fila, cada una escrita label (gene variant) y separadas por ; , con codon reading only o per-SNV reading only añadido cuando una fila de codón coincide solo por una de sus dos lecturas. - cuando no coincide nada o no se dio catálogo.
Catalogue WithheldLas entradas de --catalogue con las que la fila coincidiría por una lectura que ninguna molécula lleva, escritas como en Catalogue y con el motivo: codon reading only: no molecule carries the whole codon cuando ninguna de las moléculas que cubren el codón lleva todas las sustituciones y D' dice que se excluyen, per-SNV reading only: no molecule carries this substitution without the rest cuando toda molécula con una sustitución lleva el codón entero y D' dice que viajan juntas. Esa entrada nombra un aminoácido que nada en la muestra lleva, así que se aparta de Catalogue en vez de afirmarse como encontrada. Consulta Ligamiento a nivel de lectura. - cuando no se retiene nada. Solo con --bam.
ID83 ClassClase COSMIC ID83 de una inserción o deleción pura, como la etiqueta SigProfiler: 1:Del:C:2 para una C borrada de una racha de tres, 3:Ins:R:5 para una inserción de tres bases junto a cinco o más copias de sí misma, 4:Del:M:2 para una deleción de cuatro bases con dos de microhomología en su punto de rotura. Los indels de una base se escriben desde la pirimidina (C o T), y las copias se cuentan a los dos lados del evento, así que la clase no depende de dónde colocó el llamador el indel dentro de una repetición. - para sustituciones, deleciones-inserciones y alelos simbólicos.

Columnas adicionales cuando se usa --bam:

ColumnaSignificado
SNP ReadsLecturas que llevan cada SNV individual sin el haplotipo MNV completo. En una fila donde todas las lecturas llevan el haplotipo entero esto vale 0 para cada constituyente y el recuento vive en MNV Reads, así que las dos columnas reparten el soporte en vez de contarlo dos veces.
SNP Forward ReadsRecuento en hebra directa de las lecturas de arriba.
SNP Reverse ReadsRecuento en hebra reversa de las lecturas de arriba.
MNV ReadsLecturas que respaldan el haplotipo MNV completo.
MNV Forward ReadsSoporte de MNV en hebra directa.
MNV Reverse ReadsSoporte de MNV en hebra reversa.
Total ReadsProfundidad en las posiciones de la variante.
SNP FrequenciesFrecuencias de SNP por posición.
MNV FrequenciesFrecuencia del haplotipo MNV.
Event ReadsLecturas exactas que respaldan un evento indel/complejo.
Event Forward ReadsSoporte exacto del evento en hebra directa.
Event Reverse ReadsSoporte exacto del evento en hebra reversa.
Event DepthLecturas con un alelo observado a lo largo del tramo del evento indel/complejo.
Event FrequencyLecturas exactas del evento divididas por la profundidad del evento.

El soporte exacto del evento tiene en cuenta el CIGAR. Una lectura debe reconstruir la misma secuencia ALT local y, en el caso de los haplotipos complejos, contener los componentes de inserción y deleción esperados. Esto evita que las combinaciones de inserción/deleción de efecto neutro se contabilicen como soporte solo porque su secuencia se parezca a un MNV.

Las columnas de frecuencia se calculan a partir del soporte de lecturas del BAM. --min-snp-frequency y --min-mnv-frequency usan estos mismos valores derivados del BAM. Los filtros son independientes: --min-snp-frequency se aplica a las observaciones de SNP individuales y --min-mnv-frequency se aplica a los haplotipos MNV en fase. En las llamadas mixtas SNP/MNV, una fila o registro VCF se conserva cuando cualquiera de los dos componentes supera su propio umbral activo. Los filtros de recuento de lecturas y de soporte de hebra (--snp, --mnv, --min-snp-strand y --min-mnv-strand) siguen el mismo comportamiento independiente para SNP y MNV.

Cuando un MNV a nivel de codón se solapa con un indel, la fila del MNV se conserva como fila de contexto posicional, pero su efecto a nivel de aminoácido se marca como Unknown con Change Type = Indel overlap. Si las lecturas del BAM respaldan el evento combinado completo, get_MNV emite una fila complex_indel exacta aparte con el REF/ALT combinado, los componentes del evento y el soporte de lecturas del evento.

El solapamiento del indel sigue la semántica interbase de VCF. Las deleciones se solapan con una característica a lo largo del tramo de referencia eliminado. Las inserciones solo se solapan con una característica cuando la secuencia insertada cae entre dos bases de referencia situadas dentro de ella, de modo que una inserción anclada en la última base de la característica se reporta fuera de esta.

Ejemplo:

Chromosome	Gene	Positions	Base Changes	AA Changes	Variant Type	Change Type
MTB_anc	Rv0095c_Rv0095c	104838	T	Asp126Glu	SNP	Non-synonymous
MTB_anc	Rv0095c_Rv0095c	104941, 104942	T, G	Gly92Gln	SNP/MNV	Non-synonymous

Salida VCF

Escribe VCF con:

--convert

o escribe tanto TSV como VCF con:

--both

Nombre de archivo por defecto:

<input_name>.MNV.vcf

Usa --vcf-gz para obtener salida comprimida:

<input_name>.MNV.vcf.gz

Campos INFO comunes:

CampoSignificado
GENENombre del gen o de la característica
AACambio de aminoácido
CTTipo de cambio
TYPETipo de variante
ECClase canónica del evento de alelo
COMPComponentes del evento REF/ALT
ODPProfundidad original del archivo de variantes de entrada
OFREQFrecuencia alélica original del archivo de variantes de entrada
SR, SRF, SRRLecturas de SNP: total, forward, reverse
MR, MRF, MRRLecturas de MNV: total, forward, reverse
DPProfundidad recalculada a partir del BAM
FREQFrecuencia recalculada a partir del BAM
ER, ERF, ERRLecturas exactas del evento indel/complejo: total, forward, reverse
EDPProfundidad exacta del evento para alelos indel/complejos
EFREQFrecuencia exacta del evento para alelos indel/complejos
SBPValor p del sesgo de hebra de SNP, en notación científica (1.923e-7), que es el valor con el que comparó --min-strand-bias-p
MSBPValor p del sesgo de hebra de MNV, misma notación
SO, IMPACTTérmino de consecuencia Sequence Ontology e impacto predicho
GDDistancia de Grantham de un cambio missense
MNVSHIFTConsecuencia del MNV combinado frente a sus SNV individuales
DBSClase COSMIC DBS78 del doblete al que pertenece el registro, también entre codones (p. ej. CC>TT)
MNVPSSoporte de fasing del MNV (de las lecturas que cruzan el codón y llevan el SNV limitante, la fracción que lleva el haplotipo completo)
MNVPRLecturas sobre las que se calculó ese ratio
FSPHFase con cada indel aguas arriba, como veredicto:posición:cis/informativas
DPHASEFase que declaró el VCF de entrada para esta fila, veredicto:conjunto
LDDesequilibrio de ligamiento D-prime entre las sustituciones del codón
LDPValor p exacto de Fisher para esa tabla de ligamiento
NMDPredicción de NMD para un stop prematuro (regla de los 50 nt)
HGVSGDescriptor HGVS genómico (bracket de MNV con ; percent-encoded)
HGVSCDescriptor HGVS codificante para una sustitución o un indel (; percent-encoded)
SBS96Clase COSMIC SBS96 de cada sustitución de una base, separadas por comas en el orden de COMP (- donde no se puede leer el contexto, DBS o MBS para una base de una racha de sustituciones adyacentes)
ADJSUBDescriptor HGVS genómico de cada racha de dos o más bases sustituidas adyacentes a la que pertenece el registro, compartido por todos los registros de la racha
CATEntradas de --catalogue con las que coincide el registro, como en la columna Catalogue (percent-encoded)
CATWEntradas de --catalogue retenidas porque ninguna lectura lleva la lectura por la que coinciden, como en la columna Catalogue Withheld (percent-encoded, solo con --bam)
ID83Clase COSMIC ID83 de una inserción o deleción pura (p. ej. 1:Del:C:2)
ANNLa anotación del registro en el formato que escribe snpEff, descrita más abajo

La cabecera del VCF registra la versión de get_MNV, la línea de comandos y los umbrales usados. Cuando --emit-filtered está habilitado, los registros VCF que quedan por debajo de los umbrales de soporte de lecturas, frecuencia, soporte de hebra o sesgo de hebra se escriben con etiquetas FILTER como LowSupport, LowFrequency, StrandSupport o StrandBias; de lo contrario, se omiten.

El campo ANN

Cada registro lleva además su anotación en el formato que escribe snpEff, que bcftools +split-vep, SnpSift y la mayoría de herramientas de VCF leen sin conocer las claves propias de get_MNV:

bcftools +split-vep -a ANN -f '%POS\t%REF\t%ALT\t%Gene_Name\t%Annotation\t%HGVS.c\t%HGVS.p\n' sample.MNV.vcf

Cada entrada habla del ALT de su propio registro. En el registro de una base de un codón que cambia dos o más, eso es la base por sí sola, como ya dice el AA del registro; el cambio combinado del codón está en el registro del codón, marcado INFO_COMPOUND_ANNOTATION, la marca de snpEff para un efecto que sale de combinar variantes. SO, IMPACT y CT siguen siendo los del codón en todos los registros.

CampoContenido
AlleleEl ALT del registro
Annotation, Annotation_ImpactTérmino de Sequence Ontology e impacto, como en SO e IMPACT
Gene_Name, Gene_ID, Feature_IDEl gen como lo nombra get_MNV; vacíos en un registro intergénico
Feature_Typetranscript, o intergenic_region
Transcript_BioTypeprotein_coding, o Noncoding para un gen que no se traduce
HGVS.c, HGVS.pEl cambio codificante y proteico del registro (p.Ser450Leu, p.Met1?, p.Ter23Argext*?); vacíos donde AA lleva una etiqueta en vez de un cambio
ERRORS / WARNINGS / INFOINFO_COMPOUND_ANNOTATION en el registro de un codón

El rango, las posiciones en el cDNA, la CDS y la proteína y la distancia quedan vacíos. Un valor que rompería el campo va percent-encoded, como la lista de alelos de c.[274G>C%3B275G>A].

Un ANN que ya traía la entrada no se pierde con --keep-original-info: sus entradas para el ALT del registro van detrás de las de get_MNV, así que las categorías propias de snpEff de un laboratorio siguen con la base para la que se escribieron. No pasan al registro de un codón, cuyo alelo no tenía ningún registro de entrada.

La entrada del ejemplo incluido se anotó con snpEff 4.1, y en sus 802 bases que anotan los dos, la entrada de get_MNV da la misma consecuencia, impacto, HGVS.c y HGVS.p que la de snpEff salvo en dos casos: snpEff 4.1 llama también región de splicing a las últimas bases de un gen de un solo exón, y el primer codón anotado de un gen no es un codón de inicio. En las dos bases que caen en genes de ARN los dos dicen lo mismo con dos nombres para un término: non_coding_transcript_exon_variant es como Sequence Ontology renombró el non_coding_exon_variant de snpEff.

Salida BCF

Escribe BCF con:

--bcf

BCF requiere el modo de salida VCF, así que úsalo con --convert o --both.

La conversión la hace bcftools view, tomado del PATH. Sin bcftools instalado la ejecución avisa, no escribe ningún BCF y aun así sale con 0, con su TSV y su VCF intactos. --index-vcf-gz funciona igual, a través de tabix.

Nombre de archivo por defecto:

<input_name>.MNV.bcf

Archivos JSON

Tres flags escriben JSON, y todos los payloads llevan un schema_version para que quien los consuma sepa qué forma está leyendo.

JSON de resumen

Escribe con:

--summary-json run.summary.json

Claves de primer nivel:

ClaveSignificado
schema_versionVersión del payload, ahora mismo 1.0.0
sampleLa muestra nombrada con --sample, o null si no se pasó el flag. null no significa que no se usara ninguna muestra: un VCF multimuestra sigue recayendo en la primera columna de muestra, y su genotipo y sus campos FORMAT siguen decidiendo las métricas
dry_runSi estaba en vigor --dry-run
bam_providedSi se leyó un BAM, que es lo que decide los campos de soporte de lecturas
translation_tableNúmero de tabla de traducción del NCBI utilizada
inputsLas rutas de entrada: vcf, fasta, annotation, bam, y además checksums
output_tsv, output_vcf, output_bcfLos archivos que escribió esta ejecución, null en cada uno que no escribió
contigsUna entrada por contig, con sus propios recuentos
timingsparse_inputs_ms, process_ms, emit_ms, total_ms. En el aggregate de una ejecución con --sample all los tres primeros suman los de cada muestra, que se ejecutan a la vez, y total_ms es el tiempo real de toda la cohorte
globalLos recuentos de toda la ejecución, abajo

Dentro de global:

ClaveSignificado
contig_countContigs vistos
snp_records_in_vcfEntradas de variantes conservadas de la entrada en ese contig. No es el número de líneas del archivo: una entrada cuyo alelo no lleva el genotipo de la muestra elegida no se cuenta, así que el mismo archivo da otro número con otro --sample
mapped_genesGenes con al menos una variante encima
produced_variantsVariantes anotadas, antes de los filtros de salida
snp_variants, mnv_variants, snp_mnv_variants, indel_variants, intergenic_variantsEl mismo total desglosado por tipo
region_cache_hits, region_cache_missesCaché de regiones del BAM, solo tiene sentido con --bam

Estos recuentos son lo que produjo get_MNV, antes de los filtros de salida

produced_variants y los recuentos por tipo que lo acompañan se toman después de la anotación y antes de los filtros de soporte de lecturas, frecuencia y hebra que deciden qué llega al TSV. En una ejecución filtrada los dos discrepan a propósito: el mismo comando puede registrar produced variants=941 y escribir un TSV de una sola fila, y el informe HTML, que cuenta filas, dirá 1. Lee el resumen como lo que encontró la anotación y el TSV como lo que pasó los filtros.

--sample all escribe otro objeto, no uno más largo

Todas las claves de arriba se mueven. Un resumen de --sample all trae mode con el valor sample_all, sample_count, sample_names, un objeto aggregate con los totales de toda la ejecución, y un array samples con un objeto por muestra. Cada uno de esos, y aggregate también, tiene la forma de muestra única descrita arriba, así que data["global"]["produced_variants"] pasa a ser data["aggregate"]["global"]["produced_variants"].

aggregate suma los recuentos de todas las muestras y no nombra ningún archivo de salida propio: aggregate.output_tsv es null, y las rutas de cada muestra están en las entradas de samples. Su array contigs también está siempre vacío, porque el desglose por contig es de cada muestra; léelo de las entradas de samples. Bifurca por la clave que solo tiene una de las dos formas:

import json

data = json.load(open("run.summary.json"))
if data.get("mode") == "sample_all":
    totals = data["aggregate"]["global"]
    per_sample = {s["sample"]: s["global"] for s in data["samples"]}
else:
    totals = data["global"]
    per_sample = {data["sample"]: data["global"]}

Manifiesto de la ejecución

Escribe con:

--run-manifest run.manifest.json
ClaveSignificado
schema_versionVersión del payload
tool_versionLa versión de get_MNV que se ejecutó
command_lineEl comando con cada ruta reducida a su nombre de archivo y el programa escrito como get_mnv, para que el manifiesto se pueda compartir sin publicar la estructura de directorios en la que se ejecutó. Registra qué se ejecutó, no una línea que se pueda pegar en un shell
timestamp_unixSegundos desde la época Unix
summaryEl payload de resumen entero, sin cambios
output_checksumsoutput_tsv_sha256, output_vcf_sha256, output_bcf_sha256, cada uno null para el archivo que esta ejecución no escribió

Con --sample all el manifiesto sigue al resumen: mode, sample_names, aggregate y samples, sin clave summary de primer nivel, y cada entrada de samples lleva sus propias output_checksums.

JSON de errores

Escribe los errores como JSON con:

--error-json run.error.json

Se escribe solo cuando la ejecución falla, así que su presencia ya es la señal:

ClaveSignificado
schema_versionVersión del payload
codeEl código de error estable, por ejemplo E002
exit_codeEl estado de salida del proceso, que coincide con la tabla de Solución de problemas
messageEl mismo texto que imprimió la ejecución
{
  "schema_version": "1.0.0",
  "code": "E002",
  "exit_code": 3,
  "message": "Cannot open VCF file '/no/such.vcf': No such file or directory (os error 2)"
}

Informe HTML interactivo

--report <FICHERO.html> escribe un único fichero HTML autocontenido para explorar las variantes llamadas. Incrusta sus datos y no carga scripts ni fuentes externas, así que se abre sin conexión con un doble clic y se puede adjuntar en un correo o archivar junto a los resultados.

Abrir el informe de ejemplo: 941 variantes llamadas sobre el conjunto de una muestra incluido en example/, o sea la salida real del comando de abajo y no una maqueta. Se regenera con scripts/build_example_report.sh. Las vistas de cohorte (las filas de la matriz, la recurrencia de haplotipos) se llenan con --sample all o --report-from sobre varias muestras.

# Informe de un run
get_mnv --vcf muestra.vcf --fasta ref.fasta --gff ref.gff --report muestra.html

# Un informe que cubre todas las muestras de un VCF multi-muestra
get_mnv --vcf cohorte.vcf --fasta ref.fasta --gff ref.gff --sample all --report cohorte.html

# Cohorte procesada muestra a muestra: agrega los TSV al final
get_mnv --report-from resultados/*.MNV.tsv --report cohorte.html

Con --report-from no se ejecuta el pipeline: el informe se construye a partir de TSV de get_MNV ya existentes, que es la forma habitual en un flujo de Nextflow o Snakemake que llama a get_MNV una vez por muestra. Cada fichero es una muestra, etiquetada con su nombre de archivo sin el sufijo .MNV.tsv (TB-001.MNV.tsv pasa a ser TB-001).

El informe contiene:

El informe sigue el tema claro u oscuro del sistema operativo y tiene su propio selector. Como se construye desde el TSV, --report necesita salida TSV: funciona con el modo de salida por defecto y con --both, pero no con --convert a solas ni con --dry-run. Las columnas de soporte de lecturas (frecuencia, profundidad) solo se rellenan si el run usó --bam.

El tamaño escala con el número de variantes. Los campos repetidos se codifican con diccionario, así que una cohorte de decenas de miles de variantes se queda en pocos megabytes.

Notas

Matriz de variantes por muestra

--matrix <FICHERO.tsv> escribe las mismas variantes que muestra el informe como una tabla con una columna por muestra, para cargarla en R o en pandas:

get_mnv --report-from resultados/*.MNV.tsv --matrix matriz_cohorte.tsv
get_mnv --vcf cohorte.vcf --fasta ref.fasta --gff ref.gff --sample all --matrix matriz_cohorte.tsv

Se construye a partir de los mismos TSV que el informe, así que funciona en una ejecución normal, con --sample all y con --report-from, con o sin --report al lado.

ColumnaDescripción
Chromosome, Gene, Positions, Reference Bases, Base ChangesLa variante. Un MNV de codón y un SNV suelto en una de sus bases son variantes distintas aquí, igual que en el TSV.
AA Changes, Variant Type, SO Term, ImpactTomadas de la primera muestra que lleva la variante.
Samples CalledCuántas muestras tienen llamada.
una columna por muestraLa frecuencia alélica que dieron las lecturas (0.4500); called para una llamada sin frecuencia medida, que es toda llamada de una ejecución sin BAM y la que el BAM no cubre; NA donde la muestra no tiene una llamada de esta variante. Una muestra puede llevar una de sus bases dentro de otra variante, como un MNV de codón, y aun así leer NA aquí.

NA nunca se escribe como 0 a propósito: un TSV de get_MNV no distingue una base de referencia de una posición que no cubrió ninguna lectura, así que una llamada que falta significa "referencia o sin cobertura". Las filas van ordenadas por contig y después por posición.

Editar esta página en GitHub