# SAM (format de fichier)

Le format de cartographie d'alignement de séquence, en anglais sequence alignment map (SAM) est un format texte permettant de stocker des séquences biologiques alignées sur une séquence de référence développé par Heng Li et Bob Handsaker et al. Il est largement utilisé pour stocker des données telles que séquences de nucléotides générées par les technologies de séquençage de nouvelle génération. Le format prend en charge les lectures (en anglais reads) courts et longs (jusqu'à 128 Mbit/s) produit(e)s par différentes plates-formes de séquençage et est utilisé pour conserver des données alignées dans le cadre du Genome Analysis Toolkit (GATK) et au sein du Broad Institute, Wellcome Sanger Institute et du projet 1000 Genomes. Ce format peut contenir des qualités d'appel de base ou base-calling, d'alignement et d'autres données$^,$.

## Format

Le format SAM comprend un en-tête et une section d'alignement. L'équivalent binaire d'un fichier SAM est un fichier BAM (Binary Alignment Map), qui stocke les mêmes données mais selon une représentation binaire compressée. Les fichiers SAM peuvent être analysés et édités avec le logiciel SAMtools. Si présente, la section d'en-tête doit précéder la section d'alignement. Les en-têtes commencent par le symbole "@", ce qui les distingue de la section d'alignement. La section d'en-tête peut indiquer si les reads sont triés et comment le cas échéant, et comprend en général les longueurs en paires de bases des chromosomes de référence de l'assemblage utilisé, ainsi que la ligne de commande utilisée par le programme d'alignement. Les sections d'alignement comportent 11 champs obligatoires, ainsi qu'un nombre variable de champs facultatifs.
| Col | Champ | Type | Brève description |
| 1 | QNAME | Chaîne | NOM de la séquence requête |
| 2 | FLAG | Int | FLAG au niveau des bits |
| 3 | RNAME | Chaîne | NOM de la séquence de référence |
| 4 | POS | Int | POSition 5' (basée sur 1) de l'alignement |
| 5 | MAPQ | Int | Qualité MAPping |
| 6 | CIGAR | Chaîne | Chaîne de caractères CIGAR |
| 7 | RNEXT | Chaîne | Réf. nom du read apparié / prochaine read |
| 8 | PNEXT | Int | Position du read apparié / prochaine read |
| 9 | TLEN | Int | Longueur de séquence observée ou d'insertion (paired-end) |
| 10 | SEQ | Chaîne | segment SEQuence |
| 11 | QUAL | Chaîne | Qualités de base ASCII selon l'échelle Phred QUALity + 33 |

## Description

Selon les spécifications SAM:
* QNAME: NOM de la requête du modèle. Les reads/segments ayant un QNAME identique sont considérés comme provenant du même modèle. Un QNAME '*' indique que les informations sont indisponibles. Dans un fichier SAM, un read peut occuper plusieurs lignes d'alignement, lorsque son alignement est chimérique ou lorsque plusieurs mappages sont donnés.
* FLAG: Combinaison de FLAGs au niveau des bits
* RNAME: NOM de la séquence de référence de l'alignement. Si les lignes d'en-tête @SQ sont présentes, RNAME (sinon «*») doit figurer dans l'une des balises SQ-SN. Un segment non mappé sans coordonnée aura un '*' comme valeur pour ce champ. Cependant, un segment non mappé peut également avoir une coordonnée ordinaire, de sorte qu'il peut être placé à une position souhaitée après tri. Si RNAME est '*', aucune hypothèse ne peut être émise concernant le POS et le CIGAR.
* POS: mappage à l'extrême gauche en coordinnées basées sur 1 de la POSition de la première base correspondante. La première base d'une séquence de référence a la coordonnée 1. POS est défini sur 0 pour une lecture non mappée sans coordonnée. Si POS est égal à 0, aucune hypothèse ne peut être faite sur RNAME et CIGAR.
* MAPQ: qualité de MAPping. Cette valeur est égale à -10 log10 de la probabilité que position de mappage soit incorrecte, arrondie à l'entier le plus proche. Une valeur de 255 indique que la qualité du mappage n'est pas disponible.
* CIGAR: Chaîne de rapport idiosyncrasique concise (Concise Idiosyncratic Gapped Alignment Report, CIGAR).
* RNEXT: Nom de la séquence de référence de l'alignement principal du prochain read (NEXT) lu du le modèle. Pour le dernier read, le read suivante est le premier du modèle. Si les lignes d'en-tête @SQ sont présentes, RNEXT (sinon '*' ou '=') doit être présent dans l'une des balises SQ-SN. Ce champ est défini sur '*' lorsque les informations sont indisponibles et sur '=' si RNEXT et RNAME sont identiques. S'il ne correspond pas à «=» et que le prochain read du modèle comporte un alignement principal (voir aussi le bit 0x100 dans FLAG), ce champ est identique à RNAME à la ligne principale du prochain read. Si RNEXT est '*', aucune hypothèse ne peut être faite sur PNEXT et le bit 0x20.
* PNEXT: Position de l'alignement principal du prochain read (NEXT) du modèle. Défini sur 0 lorsque les informations sont indisponibles. Ce champ est égal à POS de la ligne principale du prochain read. Si PNEXT est égal à 0, aucune hypothèse ne peut être faite sur RNEXT et le bit 0x20.
* TLEN: longueur observée signée du modèle Si tous les segments sont mappés sur la même référence, la longueur du modèle observé non signée est égale au nombre de bases de la base mappée la plus à gauche à la base mappée la plus à droite. Le segment le plus à gauche a un signe plus et le plus à droite a un signe moins. Le signe des segments au milieu n'est pas défini. Ce champ est défini sur 0 pour un modèle à segment unique ou lorsque les informations sont indisponibles.
* SEQ: segment SEQuence. Ce champ peut être un '*' lorsque la séquence n'est pas stockée. Si ce n'est pas un '*', la longueur de la séquence doit être égale à la somme des longueurs des opérations M / I / S / = / X en CIGAR. Un '=' indique que la base est identique à la base de référence. Aucune hypothèse ne peut être faite sur la capitalisation des lettres.
* QUAL: QUALité de base ASCII plus 33 (identique à la chaîne caractères de qualité au format Sanger FASTQ). Une qualité de base est la probabilité d'erreur de base exprimée selon l'échelle Phred qui est égale à -10 log10 Pr {la base soit fausse}. Ce champ peut être un '*' lorsque la qualité n'est pas stockée. Si ce n'est pas un '*', SEQ ne doit pas être un '*' et la longueur de la chaîne de qualité doit être égale à la longueur de SEQ.