Übungen

Lassen Sie uns mit den oben genannten Kenntnissen einige Übungen durchführen vertiefen unsere Kenntnisse des BAM-Formats.

Übungen 1

Die erste Übung beschäftigt sich mit der Bitflag. Wir haben gesehen, dass die Bitflags 99 und 147 waren unseren Paired-End-Reads zugewiesen. Was bedeuten sie? Schreiben Sie diese Zahlen in binärer und hexadezimaler Darstellung auf und konsultieren Sie Tabelle 1 in Kapitel 4-05.

Nun schreiben Sie ein kleines Rust-Program, dass einen SAM-Bitstring (in Form einer Ganzzahl) als Kommandozeilenargument nimmt und anzeigt, welche Bits "an" sind.

Übung 2

Bestimmen Sie die CIGAR-Strings, 1-basierte Positionen (POS) und die NM- und MD-Tags für die folgenden Ausrichtungen:

ref:  CCATACT-GAACTGACTAAC
          ||| ||| || ||
read:     ACTAGAA-TGGCT

und

ref:  ATCCCCTCATCC-GCCTGCTCCTTCTCACATG
        |  | ||||| |||||||||||   |||||  
read:   CTACGCATCCGGCCTGCTCCTT---ACATG

Nun schreiben Sie ein kleines Rust-Programm, das ein solches Aligment aus einer Datei einliest und den entsprechenden CIGAR-String auf die Kommandozeile ausgibt.

Übung 3

Bestimmen Sie das Alignment zwischen dem folgenden Read:

read:  CATTCATACTGAA

und dem Referenzgenom:

ref:  AGCATTACTACTAAATTT 

wobei POS 3 beträgt und der CIGAR-String 4M1D1M1I7M lautet.

Nun schreiben und testen Sie eine entsprechende Rust-Funktion mit der folgenden Signatur

fn align_by_cigar, U: Into, V: Into>(
    read: T, 
    genome: U, 
    pos: i32, 
    cigar: V) -> String {
        todo!();
    }

Übung 4

Bestimmen Sie NM für den CIGAR-String 50M und den MD-Eintrag von MD:Z:4A45.

Bestimmen Sie NM für den CIGAR-String 6M1D23M und den MD-Eintrag von MD:Z:1T4^T1C21.

Schreiben und testen Sie eine entsprechende Rustfunktion.

{\it See hints and answers on page~\pageref{page:SAMBAMhints}.}