Skip to content

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.gz oder .bed.gz braucht.
  • Referenz: ein indiziertes FASTA im Medienverzeichnis (.fa mit seiner .fai). Die eingebauten Genom-IDs von igv (hg38, mm39) laden ihre Dateien aus dem Internet und werden daher nur mit allow_remote: true akzeptiert.
  • 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

yaml
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
json
{"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.

AnzeigeoptionStandardBedeutung
referencekeiner{fasta: <path>, index: <path>, name: <label>}. index ist standardmäßig der FASTA-Pfad plus .fai
genomekeinerEine igv-Genom-ID. Braucht allow_remote: true. Geben Sie reference oder genome an, nicht beides
tracks[]Die Liste der Tracks
flank50Basen, die auf beiden Seiten eines Locus mit einer einzelnen Position angezeigt werden
select_featurestrueEin Klick auf einen Call oder ein Feature schaltet es in der Auswahl um, statt das Popup von igv zu öffnen
allow_remotefalseErlaubt 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

DateiIndexTypische Befehle
Referenz-FASTA.faisamtools faidx ref.fa
Reads (BAM, CRAM).bai, .craisamtools sort -o s.bam in.bam && samtools index s.bam
Calls (VCF).tbibgzip calls.vcf && tabix -p vcf calls.vcf.gz
Regionen (BED, GFF3).tbi oder keiner bei einer kleinen unkomprimierten Dateibgzip 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

json
{"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:

bash
python potato/flask_server.py start examples/advanced/variant-review/config.yaml -p 8000

Zwei 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

Implementierungsdetails finden Sie in der Quelldokumentation zu Genomloci und zur Variantenprüfung.