13강 / 20강

SAM · BAM — 플래그와 CIGAR

정렬 결과를 실제로 열어 보는 일 · <code>samtools view</code>

SAM · BAM — 플래그와 CIGAR
열한 개의 열. 그 가운데 둘째와 여섯째가 이 강의의 전부입니다.

정렬이 끝나면 SAM 이 나옵니다. 탭으로 나뉜 표이고, 리드 하나가 한 줄입니다. 그것을 압축하고 색인한 것이 BAM 입니다. 내용은 같습니다.

#이름무엇
1QNAME리드 이름. 짝인 두 리드가 같은 이름을 갖는다
2FLAG비트 열두 개를 더한 정수. 이 강의의 절반
3·4RNAME · POS어느 염색체, 몇 번 자리 (1부터)
5MAPQ이 자리를 얼마나 확신하는가 — 14강
6CIGAR어떻게 붙었는가. 이 강의의 나머지 절반
7·8·9RNEXT · PNEXT · TLEN짝은 어디 있나, 조각 전체 길이 — 15강
10·11SEQ · QUALFASTQ 의 둘째·넷째 줄이 그대로 온 것
samtools view -f 4 는 '4 비트가 켜진 것만', -F 1024 는 '1024 비트가 꺼진 것만' 입니다.
Python 브라우저에서 실행
CIGAR 문자열을 만들어 보세요. 리드가 참조 위에 어떻게 놓이는지 그려 줍니다.
불러오는 중…

CIGAR — 리드가 참조에 어떻게 붙었나

150M 이면 150글자가 그대로 붙었다는 뜻입니다. 글자와 숫자를 번갈아 적습니다.

글자뜻참조 좌표가리드 좌표가
M정렬됨 (일치 또는 불일치)나아간다나아간다
I삽입 — 리드에만 있다멈춘다나아간다
D결실 — 참조에만 있다나아간다멈춘다
Ssoft clip — 끝을 안 쓰고 남겨 둠멈춘다나아간다
Hhard 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")

파이프(|)로 이어져 있는 것이 요점입니다. 정렬기의 출력을 디스크에 쓰지 않고 바로 sort 에 넘깁니다.

실제 WGS 에서 중간 SAM 파일은 수백 GB 입니다. 그것을 쓰고 다시 읽는 것만으로 몇 시간이 갑니다. 파이프가 그 일을 없앱니다.

마지막의 - 가 "표준입력에서 읽어라" 입니다.

🤔 확인 문제
SAM 의 CIGAR 에서 M 의 뜻으로 정확한 것은?
🤔 확인 문제
samtools index 를 걸기 전에 반드시 해야 하는 것은?
🤔 확인 문제
정렬기 출력을 파일로 쓰지 않고 파이프로 바로 sort 에 넘기는 이유는?