Lesson 2 of 20
세로로 쌓기 — bcftools mpileup
코드랩 4단계 첫 줄 · <code>-Q15 -q10 -a FORMAT/AD,FORMAT/DP</code>
BAM 안의 자료는 리드마다 한 줄입니다. 가로로 누워 있습니다.
그런데 변이를 찾으려면 물어야 할 것은 이겁니다 — "이 자리를 덮은 리드들이 무엇이라고 말하는가."
그러려면 자료를 세로로 세워야 합니다. 그 일을 하는 것이 mpileup 입니다.
참조 … A C G A T G C …
read1 … A C G A T G C
read2 C G T T G C A
read3 … A C G T T G C
read4 … A C G T T G
↑ 이 자리: A 1개, T 3개
read1 … A C G A T G C
read2 C G T T G C A
read3 … A C G T T G C
read4 … A C G T T G
↑ 이 자리: A 1개, T 3개
리드 다섯 개 가운데 세 개가 이 자리를 덮었습니다. DP = 3 입니다.
Python
Runs in your browser
노트북이 실제로 부르는 줄
bcftools mpileup -f kit_locus.fa -a FORMAT/AD,FORMAT/DP -Q15 -q10 tumor.sorted.bam
| 옵션 | 무엇 | 왜 |
|---|---|---|
-f kit_locus.fa | 참조 FASTA | 참조 염기를 알아야 '다르다'를 말할 수 있다. .fai 가 있어야 한다 (I 권 7강) |
-Q 15 | 염기 품질 문턱 | Q15 미만인 염기는 세지 않는다. 오류율 3% 이상인 글자 |
-q 10 | MAPQ 문턱 | 자리를 못 믿는 리드를 뺀다 (I 권 14강). MAPQ 0 이 여기서 걸린다 |
-a FORMAT/AD,FORMAT/DP | 주석 추가 | 대립유전자별 리드 수(AD)와 깊이(DP)를 출력에 남긴다. 없으면 VAF 를 계산할 수 없다 |
두 문턱이 서로 다른 것을 잰다는 것을 놓치기 쉽습니다. -Q 는 글자를 못 믿는 것, -q 는 자리를 못 믿는 것입니다.
문턱 두 개로 VAF 가 움직입니다. 어느 쪽이 옳은 값인지는 정해져 있지 않습니다 — 11강에서 다시 봅니다.
Python
Runs in your browser
인델(삽입·결실)은 왜 어려운가
점돌연변이는 세로 한 칸만 보면 됩니다. 인델은 그렇지 않습니다.
점돌연변이
칸이 어긋나지 않는다. 그냥 세면 된다
인델
리드마다 정렬이 다르게 될 수 있다.
같은 인델이 서로 다른 자리에 적힌다 — 특히 반복 구간에서
AAAAA 안에서 A 하나가 빠지면, 어느 A 가 빠졌는지 알 방법이 없습니다.
정렬기는 아무 A 나 고릅니다. 그러면 같은 인델이 리드마다 다른 좌표로 적히고,
세로로 세었을 때 흩어져 문턱을 못 넘습니다.
해결책이 둘입니다 — 좌측 정렬(left-align) 로 표기를 통일하고, 국소 재정렬(indel realignment) 로 리드들을 다시 맞춥니다. bcftools 는 mpileup 안에서 어느 정도 자동으로 합니다(BAQ).
🤔 Check yourself
-Q 15 와 -q 10 이 각각 거르는 것은?Answer 대문자 Q 는 염기 품질(Phred), 소문자 q 는 MAPQ 입니다. 서로 다른 것을 잽니다 — 하나는 '이 글자를 잘못 읽었을 확률', 다른 하나는 '이 리드가 여기서 온 게 아닐 확률'. I 권 9강과 14강이 각각의 이야기였습니다.
🤔 Check yourself
-a FORMAT/AD,FORMAT/DP 를 빼면 무슨 일이 생깁니까?Answer 변이는 여전히 나옵니다. 다만 각 대립유전자를 몇 개의 리드가 지지하는지가 기록되지 않습니다. VAF = AD[1] / DP 이므로 이 권의 8~10강이 통째로 불가능해집니다. 코드랩이 이 옵션을 명시적으로 붙인 이유입니다.
🤔 Check yourself
반복 구간(
AAAAA) 안의 인델이 어려운 이유는?Answer 같은 인델이 여러 표기를 가질 수 있습니다. 정렬기가 임의로 고르면 증거가 여러 좌표로 흩어져 어느 것도 문턱을 못 넘습니다. 좌측 정렬로 표기를 통일하고 국소 재정렬로 리드를 다시 맞추는 것이 답입니다.