13강 / 20강
SAM · BAM — 플래그와 CIGAR
정렬 결과를 실제로 열어 보는 일 · <code>samtools view</code>
정렬이 끝나면 SAM 이 나옵니다. 탭으로 나뉜 표이고, 리드 하나가 한 줄입니다. 그것을 압축하고 색인한 것이 BAM 입니다. 내용은 같습니다.
| # | 이름 | 무엇 |
|---|---|---|
| 1 | QNAME | 리드 이름. 짝인 두 리드가 같은 이름을 갖는다 |
| 2 | FLAG | 비트 열두 개를 더한 정수. 이 강의의 절반 |
| 3·4 | RNAME · POS | 어느 염색체, 몇 번 자리 (1부터) |
| 5 | MAPQ | 이 자리를 얼마나 확신하는가 — 14강 |
| 6 | CIGAR | 어떻게 붙었는가. 이 강의의 나머지 절반 |
| 7·8·9 | RNEXT · PNEXT · TLEN | 짝은 어디 있나, 조각 전체 길이 — 15강 |
| 10·11 | SEQ · QUAL | FASTQ 의 둘째·넷째 줄이 그대로 온 것 |
samtools view -f 4 는 '4 비트가 켜진 것만', -F 1024 는 '1024 비트가 꺼진 것만' 입니다.
Python
브라우저에서 실행
CIGAR — 리드가 참조에 어떻게 붙었나
150M 이면 150글자가 그대로 붙었다는 뜻입니다.
글자와 숫자를 번갈아 적습니다.
| 글자 | 뜻 | 참조 좌표가 | 리드 좌표가 |
|---|---|---|---|
| M | 정렬됨 (일치 또는 불일치) | 나아간다 | 나아간다 |
| I | 삽입 — 리드에만 있다 | 멈춘다 | 나아간다 |
| D | 결실 — 참조에만 있다 | 나아간다 | 멈춘다 |
| S | soft clip — 끝을 안 쓰고 남겨 둠 | 멈춘다 | 나아간다 |
| H | hard clip — 끝을 아예 잘라 버림 | 멈춘다 | 멈춘다 |
| N | 건너뜀 — RNA 에서 인트론 | 나아간다 | 멈춘다 |
M 이 일치를 뜻하지 않는다는 것이 첫 함정입니다.
150M 인 리드에 변이가 다섯 개 있을 수도 있습니다.
진짜 일치·불일치를 구별하는 = 와 X 가 있지만 거의 안 쓰입니다.
75M75S 처럼 절반만 붙은 리드가 한자리에 몰리면 구조변이의 신호입니다. ITD 도 이렇게 보일 수 있습니다.
Python
브라우저에서 실행
실제
.bai 는 구간을 계층적으로 묶은 R-tree 비슷한 구조지만, 원리는 이 이진 탐색과 같습니다.
Python
브라우저에서 실행
노트북 3단계를 다시 읽으면
amap = f"{TOOLS['bwa']} mem -t 4 -R '{rg}' kit_locus.fa {r1} {r2}"
sh(f"{amap} 2>/dev/null | {samtools} sort -o {sample}.sorted.bam -")
sh(f"{samtools} index {sample}.sorted.bam")
sh(f"{amap} 2>/dev/null | {samtools} sort -o {sample}.sorted.bam -")
sh(f"{samtools} index {sample}.sorted.bam")
파이프(|)로 이어져 있는 것이 요점입니다.
정렬기의 출력을 디스크에 쓰지 않고 바로 sort 에 넘깁니다.
실제 WGS 에서 중간 SAM 파일은 수백 GB 입니다. 그것을 쓰고 다시 읽는 것만으로 몇 시간이 갑니다. 파이프가 그 일을 없앱니다.
마지막의 - 가 "표준입력에서 읽어라" 입니다.
🤔 확인 문제
SAM 의 CIGAR 에서
M 의 뜻으로 정확한 것은?해설
M 은 alignment match 이지 sequence match 가 아닙니다. 150M 인 리드에 SNV 가 다섯 개 있을 수 있습니다. 진짜 일치·불일치를 구별하는 =·X 가 규격에 있지만 실무 도구는 거의 쓰지 않습니다.🤔 확인 문제
samtools index 를 걸기 전에 반드시 해야 하는 것은?해설 색인은 '좌표 X 근처의 줄은 파일의 어디에 있다'를 적어 두는 것이므로, 줄이 좌표 순서로 서 있어야 만들 수 있습니다. 정렬 안 된 BAM 에 index 를 걸면 오류가 납니다 — 다행히 조용한 사고가 아닙니다.
🤔 확인 문제
정렬기 출력을 파일로 쓰지 않고 파이프로 바로 sort 에 넘기는 이유는?
해설 실제 WGS 에서 비압축 SAM 은 원본 FASTQ 보다도 큽니다. 파이프로 이으면 디스크 왕복이 사라집니다. 노트북 3단계 끝의
- 가 '표준입력에서 읽어라' 입니다.