Prvotním úkolem textového formátu SAM (a jeho binární podoby BAM) – alespoň v současné době – je ukládat výsledky zarovnání mnoha sekvencí vůči referenčním sekvencím.
SAM
= Sequence Alignment/Map
Stejně tak dobře ale mohou v SAM/BAM-souboru býti uloženy sekvence s úplně jiným významem (plánuje se třeba jako budoucí náhrada za FASTQ u výstupu z přístrojů na high-throughput sekvenování, tedy ukládání nezarovnaných sekvencí), proto je důležité věnovat pozornost údajům v hlavičkové (a případných komentářových) části souboru (pokud je tedy přítomna, protože není povinná), kde se dá zjistit, co vlastně v tom kterém konkrétním SAM/BAM-souboru vlastně je.
Aktuální verze specifikace formátů SAM/BAM je k dispozici na adrese: Sequence Alignment/Map Format Specification
SAM-soubor jakožto výstup ze sekvenátoru obsahuje informace o vstupní sekvenci, tak zvaném template aneb „předloze“. Přitom jednotlivé namapované kousky sekvence mohou náležet do několika různých částí:
SAM-soubor obsahuje na každé (datové) řádce informace o příslušnosti tam uvedeného kousku sekvence do jednotlivých těchto skupin.
Struktura SAM-souboru je formálně sice docela jednoduchá, ale z předchozího slajdu je asi celkem zřejmé, že až na ty nejjednodušší (a nejkratší) vstupní sekvence nebudou závislosti mezi jednotlivými daty úplně jednoduché.
Principielně obsahuje SAM-soubor pouze řádky dvou různých typů:
@
a může v nich být spousta věcí, přičemž infromace z nich jsou zcela nezbytné k pochopení vlastních dat a je předepsáno, jak mají vypadat;
Nejdříve se podíváme na strukturu datových řádek, na jejich případné provázání s údaji v hlavičkách až potom.
Každá datová řádka obsahuje přinejmenším jedenáct následujících povinných polí:
sloupec | pole | typ | popis |
---|---|---|---|
1 | QNAME | str |
označení sekvence |
2 | FLAG | int |
binárně zakódované informace o sekvenci |
3 | RNAME | str |
jméno referenční sekvence |
4 | POS | int |
pozice prvního místa zarovnání vůči referenční sekvenci (počítáno od 1) |
5 | MAPQ | int |
kvalita určení pozice zarovnání (nebo 255, když je neznámá) |
6 | CIGAR | str |
zakódované údaje o zarovnání vůči referenční sekvenci |
7 | RNEXT | str |
RNAME následující sekvence ve skupině |
8 | PNEXT | int |
POS následující sekvence ve skupině |
9 | TLEN | int |
celková délka skupiny |
10 | SEQ | str |
vlastní sekvence |
11 | QUAL | str |
kvalita sekvence ve formátu PHRED+33 |
Po těchto jedenácti povinných sloupcích může následovat libovolný počet dalších nepovinných sloupečků s doplňujícími údaji. Nicméně struktura těchto nepovinných sloupců je také předepsána.
Podrobný význam některých polí si probereme na následujících slajdech.
Pole FLAG je představováno jedním celým číslem, které převedeno do binární podoby výskytem jedniček na konkrétních bitech vyznačuje jisté informace o zkoumané sekvenci (tedy o příslušném segmentu aneb sekvenci ve sloupečku SEQ). Tyto informace jsou:
bit | číselná hodnota při základu |
význam (při nastavení na hodnotu 1 ) |
||
---|---|---|---|---|
10 | 16 | podle specifikace | lidštinou (zdroj 1, zdroj 2) | |
1 | 1 | 0x1 | vstupní sekvence (templát) se skládá z více segmentů, jichž je tento součástí | read paired |
2 | 2 | 0x2 | každý segment příslušné skupiny je zarovnán | read mapped in proper pair |
3 | 4 | 0x4 | tento segment není zarovnán | read unmapped |
4 | 8 | 0x8 | následující segment není zarovnán | mate unmapped |
5 | 16 | 0x10 | tento segment je reverzně komplementární | read reverse strand |
6 | 32 | 0x20 | následující segment je reverzně komplementární | mate reverse strand |
7 | 64 | 0x40 | tento segment je prvním ze všech vstupní sekvence | first in pair |
8 | 128 | 0x80 | tento segment je posledním ze všech vstupní sekvence | second in pair |
9 | 256 | 0x100 | tento segment představuje sekundární zarovnání | not primary alignment |
10 | 512 | 0x200 | tento segment neprošel filtry (např. kontrolou kvality) | read fails platform/vendor quality checks |
11 | 1024 | 0x400 | tento segment je PCR- nebo optickým duplikátem | read is PCR or optical duplicate |
12 | 2048 | 0x800 | tento segment je doplňkovým zarovnáním (typicky chimerickým) | supplementary alignment |
Bitů může být pochopitelně nastaveno najednou více – to je právě vlastnost binárního příznaku! – a zaznamenané číslo v souboru je pak součtem odpovídajících dekadických základů a o sekvenci vypovídá více informací najednou.
PS: Specifikace jest zřejmě napsána s ohledem na vzdálenou budoucnost, kdy bude formát SAM sloužit k zaznamenání bůhví čeho. Výsledkem jsou kryptická prohlášení o různém počtu segmentů a podobně, zatímco snad všechny dnešní sekvenační metody poskytují nanejvýš páry. Proto ten sloupeček s „lidštinou“…
Pole POS a CIGAR se obě týkají výsledku zarovnání popisované sekvence vůči sekvenci referenční. Jelikož formát SAM byl navržen k zaznamenání všeličehož o zarovnávaných sekvencích, je toto pole dosti mocné a ruku v ruce s tím kapku neprůhledné.
Abychom se hned zkraje úplně neztratili, podíváme se nejdříve na jednoduchý příklad (vypůjčený od popisu formátu SAM na UMICH.edu). Zkratka RS označuje referenční sekvenci:
pozice v RS: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 RS: C C A T A C T G A A C T G A C T A A C read: A C T A G A A T G G C T
Že sloupec POS obsahuje číslo 5
, asi nikoho nepřekvapí – zarovnání testované sekvence začíná na páté bázi sekvence referenční.
Rozklíčovat pole CIGAR, které obsahuje řetězec 3M1I3M1D5M
, při tomto zobrazení ale také není složité:
Pole CIGAR toho ale umí (a musí umět) zaznamenat mnohem více. Význam jednotlivých písmenek (a odpovídajících zarovnávacích operací) je přitom následující (připraveno s pomocí wiki Dave'a Tanga):
9M32N8M
:
3S8M1D6M4S
, přičemž do zarovnání nezahrnuté guaninové konce jsou pro názornost zapsány malými písmeny:
3H8M1D6M4H
a až na příslušné koncové vynechané guaniny je stejné jako předchozí:
Zjevně součet délek úseků M, I, S, = a X je roven délce sekvence SEQ (tedy příslušného readu).
Prvních jedenáct polí/sloupců každé datové řádky je povinných, ale za nimi může následovat libovolný počet dalších sloupců (tedy záznamů oddělených tabulátorem) ve tvaru..
TAG:TYPE:VALUE
..přičemž jednotlivé položky jsou následující:
A, i, f, Z, H, B
určující formát hodnoty VALUE;
Doplněk specifikace formátu SAM obsahuje mimo jiné seznam standardizovaných TAGů, které můžete využít ve svých projektech. Možná nejzajímavější je ale možnost použít TAGy obsahující malá písmena a tagy začínající na pízmena X, Y a Z – takové jsou totiž zcela ve vaší režii (takže je samozřejmě ale nikdo jiný nebude nikdy podporovat).
Jelikož některé ze zbývajících povinných polí závisí na přítomnosti konkrétních hlavičkových řádek, podíváme se nyní na ně.
RNAME
a RNEXT
mají trošku jiný význam, pokud soubor obsahuje hlavičkové řádky @SQ
.
Hlavičkové záznamy jsou velmi podobné nepovinným datovým záznamům z předchozího slajdu – jejich jednotlivé položky jsou také odděleny tabulátorem a následují velmi podobnou strukturu TAG:VALUE
. Navíc každá hlavičková řádka začíná trojicí znaků @[A-Z][A-Z]
(zapsáno jako regexp), přičemž seznam povolených „jmen“ řádky je opět uveden ve specifikaci formátu SAM.
Hlavičkové řádky jsou přitom dvojího druhu (popis opět pomocí pseudoregexpu):
@CO\tTEXT
– zde může být po prvním tabulátoru cokoliv, je to prostě komentář;
@TAG[\tTAG:VALUE]*
– za dvoupísmenným názvem řádky následuje libovolný počet hlavičkových záznamů (navzájem oddělených tabulátorem).
Přitom je třeba věnovat pozornost tomu, že některé hlavičky @NN
vyžadují přítomnost jistých dvojic TAG:VALUE
na své řádce.
PS: Opět podobně jako u nepovinných záznamů máte možnost přidávat vlastní TAGy – jsou to prozměnu všechny takové, které obsahují alespoň jedno malé písmeno.
Pole RNAME
obsahuje jméno referenční sekvence zarovnání, nebo případně referenci na něj do hlavičkové řádky (je-li přítomna) @SQ SN
.
Obsahuje-li znak *
, nedá se o obsahu polí POS
a CIGAR
pochopitelně předpokládat vůbec nic (protože nemáme zjevně proti čemu zarovnáno).
Pole RNEXT
, PNEXT
a TLEN
se týkají záznamů společných jednomu primárnímu zarovnání, které jsou ale roztaženy po více datových řádcích.
Podobně jako pole RNAME
mohou referencovat hlavičkové řádky, obsahovat znak *
a spolu s příznaky 0x100 a 0x20 tak ovlivňovat všechno možné mezi sebou.
Formát SAM je textový. S jistou licencí se tak celkem dobře dá číst člověkem, ale zabírá více místa, než by bylo nutné, pokud bychom se omezili na čistě strojové zpracování.
Proto k formátu SAM existuje i jeho binární varianta BAM (popsaná ve stejném standardu), určená právě pro strojové zpracování a uchovávání sekvenačních dat.
Byť samozřejmě v jiné podobě, obsahuje BAM stejné údaje jako SAM. Jedinou důležitou změnou jest, že pozice v rámci referenční sekvence, a tudíž i údaje v poli POS, jsou – na binární formát asi celkem pochopitelně – počítány od 0 (a nikoli od jedničky, jako je tomu v textové variantě).