Genomloci: Variant Calls in igv.js prüfen
Einen Genomlocus in igv.js innerhalb von Potato mit lokaler Referenz und BAM-, CRAM-, VCF- oder BED-Tracks anzeigen und Prüfende jeden Variant Call als echt oder als Artefakt markieren lassen.
Neu in v2.12.0
Die Anzeige genome_locus öffnet eine Region eines Genoms in igv.js mit den Tracks, die eine prüfende Person braucht: die Referenzsequenz, Read-Alignments, Variant Calls, Annotationen und Signal. Ihre übliche Aufgabe ist die manuelle Variantenprüfung, bei der ein Annotator sich die Reads unter einem Call ansieht und eine gewöhnliche Radio-Frage beantwortet, etwa echt, Artefakt oder unsicher. Ein Schema vom Typ viewer_selection kann außerdem den Locus erfassen, den der Annotator betrachtet hat, sowie alle Calls oder Features, die er angeklickt hat.
- Engine: igv.js 3.8.9 wird mit Potato ausgeliefert. Es zeichnet mit Canvas 2D und braucht daher kein WebGL.
- Dateien werden aus dem Medienverzeichnis ausgeliefert. Die Route
/media/beantwortet HTTP-Range-Requests, sodass igv.js ein indiziertes BAM, CRAM, VCF oder FASTA stückweise liest. Mit gzip komprimierte Dateien werden als ihre komprimierten Bytes gesendet, was eine mit tabix indizierte.vcf.gzoder.bed.gzbraucht. - Referenz: ein indiziertes FASTA im Medienverzeichnis (
.famit seiner.fai). Die eingebauten Genom-IDs von igv (hg38,mm39) laden ihre Dateien aus dem Internet und werden daher nur mitallow_remote: trueakzeptiert. - Standardmäßig offline: Mit einer lokalen Referenz und lokalen Tracks lädt die Seite nichts von außerhalb des Potato-Servers, sodass die Aufgabe in einem vom Internet getrennten Netzwerk läuft.
Konfiguration
media_directory: media
data_files: [data/calls.json]
item_properties: {id_key: id, text_key: note}
instance_display:
fields:
- key: note
type: text
- key: locus # item field holding the locus
type: genome_locus
label: "Locus"
display_options:
reference:
fasta: genome/ref.fa # .fai next to it
name: ref
flank: 60
tracks:
- name: "Calls"
url: calls/cohort.vcf.gz # same file for every item; .tbi next to it
- name: "Reads"
field: bam # an item field names the file
height: 260
- name: "Regions"
url: annotation/regions.bed
annotation_schemes:
- annotation_type: radio
name: call_review
description: "Is this variant call real?"
labels: ["Real", "Artifact", "Uncertain"]
label_requirement:
required: true
- annotation_type: multiselect
name: evidence_seen
description: "What did you see in the reads?"
labels:
- "Alt allele on both strands"
- "Alt allele on one strand only"
- "Low base quality at the alt"
- "In a homopolymer or repeat"
- annotation_type: viewer_selection
name: evidence
description: "Evidence (optional): click the call or region you based this on"
viewer_field: locus
max_selections: 4{"id": "call_1", "locus": "chr1:1201", "note": "C>G at chr1:1,201", "bam": "reads/sample1.bam"}Das Locus-Feld nimmt die Formen an, die auch das Locus-Feld von igv annimmt, 1-basiert und inklusiv: chr1:1,450-1,550 öffnet diesen Bereich, chr1:1500 öffnet Position 1500 mit flank Basen auf jeder Seite, und chr1 öffnet die gesamte Sequenz. Bei einer lokalen Referenz wird der Sequenzname gegen die .fai geprüft, und ein Item, das eine Sequenz nennt, die in der Referenz fehlt, zeigt eine Meldung mit den vorhandenen Sequenzen.
| Anzeigeoption | Standard | Bedeutung |
|---|---|---|
reference | keiner | {fasta: <path>, index: <path>, name: <label>}. index ist standardmäßig der FASTA-Pfad plus .fai |
genome | keiner | Eine igv-Genom-ID. Braucht allow_remote: true. Geben Sie reference oder genome an, nicht beides |
tracks | [] | Die Liste der Tracks |
flank | 50 | Basen, die auf beiden Seiten eines Locus mit einer einzelnen Position angezeigt werden |
select_features | true | Ein Klick auf einen Call oder ein Feature schaltet es in der Auswahl um, statt das Popup von igv zu öffnen |
allow_remote | false | Erlaubt http(s)-URLs für Referenz und Tracks sowie Genom-IDs |
Jeder Track nimmt name und entweder url (eine Datei im Medienverzeichnis, für jedes Item dieselbe) oder field (ein Item-Feld mit der Datei, sodass jedes Item seine eigene mitbringt). format ist bam, cram, vcf, bed, gff3, gff, gtf, bigbed, bigwig, bedgraph oder wig und wird aus der Dateiendung übernommen, wenn es fehlt. index oder index_field nennt den Index, standardmäßig .bai, .crai oder .tbi neben der Datei. height, color und display_mode werden an igv durchgereicht.
Der Wert eines field-Tracks wird im Browser geprüft, bevor er geladen wird. Ein leerer Wert, ein Pfad außerhalb des Medienverzeichnisses, ein Wert, der kein Pfad ist, eine entfernte URL bei ausgeschaltetem allow_remote oder ein Name, dessen Format sich nicht bestimmen lässt, hält den Track aus der Ansicht heraus, und eine Zeile unter dem Viewer nennt den Track und den Grund.
Die Dateien vorbereiten
| Datei | Index | Typische Befehle |
|---|---|---|
| Referenz-FASTA | .fai | samtools faidx ref.fa |
| Reads (BAM, CRAM) | .bai, .crai | samtools sort -o s.bam in.bam && samtools index s.bam |
| Calls (VCF) | .tbi | bgzip calls.vcf && tabix -p vcf calls.vcf.gz |
| Regionen (BED, GFF3) | .tbi oder keiner bei einer kleinen unkomprimierten Datei | bgzip regions.bed && tabix -p bed regions.bed.gz |
Verwenden Sie die Referenz, auf die die Reads aligniert wurden, mit denselben Sequenznamen, da chr1 und 1 für igv verschiedene Sequenzen sind. Eine mit einfachem gzip erzeugte .vcf.gz lässt sich nicht indizieren; komprimieren Sie sie daher mit bgzip neu. Für einen Prüfdatensatz aus einer großen Kohorte schneiden Sie die BAMs auf die zu prüfenden Regionen zu, damit der Medienordner klein bleibt. Ein Reverse Proxy, der Content-Encoding hinzufügt oder Range entfernt, macht indizierte Lesezugriffe unmöglich; liefern Sie /media/ daher unverändert aus.
Einen Call prüfen
Der Annotator liest den Call in der Notiz und sieht sich dann die Reads in der Mitte der Ansicht an, wo igv abweichende Basen einfärbt und der Coverage-Balken die Allelanteile zeigt. Er kann die Ansicht durch Ziehen verschieben, mit den Schaltflächen oder dem Mausrad zoomen und einen Locus in das Suchfeld von igv eintippen. Ist select_features aktiv, wählt ein Klick auf einen Call oder ein Feature dieses aus, schattiert es in der Ansicht und listet es unter der Frage viewer_selection auf. Das Öffnen eines Items zählt nicht als Antwort, und die Radio-Tastenkürzel (1, 2, 3) funktionieren, während igv auf der Seite ist.
Gespeicherte Antwort
{"viewer": "genome_locus",
"locus": "chr1:1141-1261",
"items": [{"chr": "chr1", "start": 1201, "end": 1201, "kind": "variant",
"name": "call_1", "ref": "C", "alt": "G", "track": "Calls"}]}locus ist die Ansicht, in der der Annotator das Item zuletzt verlassen hat. start und end sind 1-basiert und inklusiv, sodass ein BED-Feature chr1 900 2400 als start: 901, end: 2400 gespeichert wird. kind ist variant für einen Call und feature für ein Feature eines Annotationstracks. Die Antworten auf Radio und Multiselect werden wie jedes andere Schema exportiert, und das JSON von viewer_selection ist der Wert des Schemas in den Exporten jsonl, csv und tsv. Um Calls zu finden, bei denen Prüfende uneinig sind, gruppieren Sie die Antworten von call_review nach Item-ID oder verwenden Sie den Übereinstimmungsbericht für das Radio-Schema.
Beispiel
examples/advanced/variant-review/ enthält ein synthetisches Genom, 144 simulierte Reads und vier Calls:
python potato/flask_server.py start examples/advanced/variant-review/config.yaml -p 8000Zwei seiner Calls werden von den Reads gestützt. Einer wird nur von Reads auf dem Gegenstrang mit niedriger Basenqualität getragen, und einer ist eine Deletion einer Base innerhalb eines Poly-A-Abschnitts, sodass das Beispiel jede Antwort zeigt.
Weiterführende Informationen
- Proteinstrukturen - Residuenauswahl in 3Dmol.js oder Mol*
- Instanzanzeige - Wie Anzeigefelder konfiguriert werden
- Annotation ohne Netzwerkverbindung - Potato ohne Internetzugang betreiben
Implementierungsdetails finden Sie in der Quelldokumentation zu Genomloci und zur Variantenprüfung.