Das SAM-Bitflag

Das zweite Feld jedes Datensatzes in einer SAM-Datei stellt ein Bitfeld mit Werten aus 12 Bitflags~(Tabelle 1) dar.

Das SAM-Format verwendet 12 Bitflags, von denen jedes den Wert 1 (Ja, Wahr) oder 0 (Nein, Falsch) haben kann. Die Bitflags können unabhängig voneinander kombiniert werden und werden in SAM-Dateien als entsprechender dezimaler Ganzzahlwert angezeigt.

Tabelle 1: SAM-Format und Bitflags
Bit (hex) Bit (dez) Beschreibung
0x1 1 Template hat mehrere Segmente (mehrere Reads, normalerweise ein Readpaar) Template has multiple segments (multiple reads, usually a read pair)
0x2 2 Jedes Segment der Vorlage ist gemäß dem Aligner richtig ausgerichtet (Each segment of the template is properly aligned according to the aligner)
0x4 4 Segment ist nicht zugeordnet (Segment is unmapped)
0x8 8 Nächstes Segment in der Vorlage ist nicht zugeordnet (Next segment in the template is unmapped)
0x10 16 SEQ ist reverse komplementär (SEQ is reverse complemented)
0x20 32 SEQ des nächsten Segments in der Vorlage ist revers komplementär (SEQ of the next segment in the template is reverse complemented
0x40 64 Erstes Segment in der Vorlage (First segment in the template)
0x80 128 Letztes Segment in der Vorlage (Last segment in the template)
0x100 256 Sekundärausrichtung (Secondary alignment)
0x200 512 Segment besteht die Qualitätskontrollen nicht (Segment does not pass quality controls)
0x400 1024 Segment ist eine PCR oder ein optisches Duplikat (Segment is a PCR or optical duplicate)
0x800 2048 Supplementäre Ausrichtung (Supplementary alignment)

Ein Bitfeld wird verwendet, um eine Reihe boolescher Werte (Ja/Nein) kompakt zu speichern. In unserem Fall möchten wir 12 Ja/Nein-Attribute zu jedem Lesevorgang speichern. Theoretisch könnten wir zwölf separate char-Werte (jeweils ein Byte) speichern, aber wenn wir beachten, dass die 12 Werte als einzelne Bits eines Bitfelds gespeichert werden können, können wir eine erhebliche Menge an Speicherplatz einsparen. Tabelle 1 zeigt die zwölf Bitflags und Abb. 1 zeigt ein Beispiel dafür, wie die Bitflags als dezimale Ganzzahlwerte dargestellt werden.

binary and decimal
Figure 1 Um zu verstehen, wie die Bitfelder dargestellt werden, ist es hilfreich, sich an die Position zu erinnern Die Notation von Zahlen funktioniert. In der bekannten Dezimalschreibweise steht die Zahl 453 für \\(4\times 10^2 + 5\times 10^1+3\times10^0= 400 + 50 + 3 = 453\\). In binärer Schreibweise steht eine Zahl wie 101101 für \\(1\times 2^5+0\times 2^4+1\times2^3+1\times 2^2+0\times 1^1+1\times 2^0 = 32 + 8+4+1= 45\\).

Oft ist es zweckmäßig, die hexadezimale Schreibweise („hex“) zu verwenden, bei der die Basis nicht 10 oder 2, sondern 16 ist; Die Ziffern werden durch 0–9 dargestellt, gefolgt von A, B, C, D, E und F. Um mit SAM-Dateien völlig vertraut zu sein und wenn Sie Programme wie SAMtools verwenden, um damit zu arbeiten, ist es hilfreich zu verstehen, wie man konvertiert zwischen diesen drei Zahlendarstellungen.

Ein Wert von 99 zeigt zum Beispiel folgende Ergebnisse an:

  • der Read mehrere Segmente in der Sequenzierung hat,1 d.h., 0x1= \(1\times 16^0=1\)
  • jedes Segment des Reads konnte richtig gemappt werden (korrektes Mapping beider Reads des Read-Paares), d.h., 0x2=\(2 \times 16^0=2\)
  • der Mate-Read auf den Rückwärtsstrang gemappt ist, d.h., 0x20=\(2\times16^1=32|))
  • der Read, auf den im aktuellen SAM-Datensatz Bezug genommen wird, ist das erste Segment im Tempalte (der erste Read im dem Paar, d.h., 0x40=\(4\times 16^1=64\))

Um zu verstehen, wie die Bitfelder dargestellt werden, ist es hilfreich, sich an die Position zu erinnern Die Notation von Zahlen funktioniert. In der bekannten Dezimalschreibweise steht die Zahl 453 für \(4\times 10^2 + 5\times 10^1+3\times10^0= 400 + 50 + 3 = 453\). In binärer Schreibweise steht eine Zahl wie 101101 für \(1\times 2^5+0\times 2^4+1\times2^3+1\times 2^2+0\times 1^1+1\times 2^0 = 32 + 8+4+1= 45\) - vgl. hierzu Abbildung 1 und Tabelle 1.

binary and decimal
Abbildung 1

Bit-Operationen können verwendet werden, um Lesevorgänge in einer SAM-Datei zu filtern. Das SAM-Format verlangt zum Beispiel, dass für jeden Lesevorgang eine und nur eine der zugehörigen Zeilen folgende Bedingungen erfüllt

FLAG & 0x900 == 0

Diese Zeile wird als primäre Zeile (primary line) des Reads bezeichnet. Der hexadezimale Wert 0x900 ist gleich 0x800 plus 0x100, was bedeutet, dass die Bit-Flags für das supplementäre Alignment (0x800) und das sekundäre Alignment (0x100) gesetzt sind. Erinnern Sie sich, dass & für die bitweise logische UND-Verknüpfung eines Bitpaares steht. Wenn beide Bits 1 sind, ist das Ergebnis der Operation 1, ansonsten 0. Zum Beispiel

      1010       
AND   1100       
     =1000      

Wenn also ein Read entweder als sekundäres Alignment2 oder ein \index{supplementary alignment} supplementary alignment,\footnote{Nach der SAM-Spezifikation ist ein chimäres Alignment ein Alignment eines Reads, das nicht als lineares Alignment dargestellt werden kann. In der Regel bedeutet dies, dass ein Read aus mehreren Segmenten besteht, die sich an verschiedenen Teilen des Genoms ausrichten. Die Segmente haben keine großen Überlappungen. Eines der Segmente wird als das repräsentative Alignment betrachtet, die anderen werden als ergänzend bezeichnet und haben das Flag für ergänzendes Alignment gesetzt. dann erhalten wir FLAG & 0x900 != 0.3 Das SAM-Format besagt, dass eine beliebige Anzahl von Zeilen sekundäre oder ergänzende Ausrichtungen darstellen kann, aber dass nur eine Zeile die primäre (repräsentative) Ausrichtung sein kann.

1

normalerweise bezieht sich dies auf einen Paired-End- oder Mate-Pair-Read

2

Wenn ein Read aufgrund von repetitiven Sequenzen oder aus anderen Gründen auf mehrere Stellen abgebildet wird, wird eine dieser Ausrichtungen als primär markiert, und bei allen anderen wird das Bitflag für sekundäres Alignment gesetzt.

3

Das Ergebnis könnte 0x100, 0x800 oder 0x900 sein.