9강 / 20강
FASTQ 네 줄 — 절반은 서열, 절반은 신뢰도
제6장 「넷째 줄이 이 형식의 요점이다」
FASTQ 파일 안은 네 줄이 한 묶음입니다.
@A00123:45:HW7Y:1:1101:9832:1063 1:N:0:ATCACG ← 이름
ACGTTTCAGGATCCAAGGTTACGGATCCAAGG… ← 서열 150글자
+ ← 자리를 채우는 줄
FFFFF:FF,FFFFFFF:FFFFFFFFFFFFFF… ← 품질 150글자
ACGTTTCAGGATCCAAGGTTACGGATCCAAGG… ← 서열 150글자
+ ← 자리를 채우는 줄
FFFFF:FF,FFFFFFF:FFFFFFFFFFFFFF… ← 품질 150글자
소설이 짚는 요점은 넷째 줄입니다.
"염기 하나마다 품질 점수가 붙는다. 30이면 이 글자가 틀렸을 확률이 천 분의 일. 20이면 백 분의 일. 그 점수를 숫자로 적으면 파일이 너무 커지므로 글자 하나로 바꿔 적는다. 그래서 서열 줄과 품질 줄의 길이가 같다."
Q30 은 '거의 완벽' 이 아닙니다. 150 글자를 이어 붙이면 일곱 리드에 하나는 어딘가 틀립니다.
Python
브라우저에서 실행
200 GB 가 어디서 나오나
소설의 계산을 그대로 따라가 봅니다.
24억 × 깊이 × (서열 1바이트 + 품질 1바이트)
혈액은 30겹쯤, 종양은 그보다 두세 배 깊게 읽었습니다. 종양을 더 깊이 읽는 이유는 정상 세포가 섞여 있어서입니다 — 10강에서 다룹니다.
그래서 실무 도구는 전부 gzip 을 그대로 읽습니다. 압축을 풀어 두는 습관이 디스크를 터뜨립니다.
Python
브라우저에서 실행
품질 줄이 실제로 알려 주는 것
이것을 한눈에 보는 도구가 FastQC 입니다. 워크숍 노트북은 합성 리드를 쓰므로 이 단계를 건너뛰지만, 실제 데이터라면 정렬 전에 반드시 봅니다.
🤔 확인 문제
Phred 품질 점수 Q30 의 뜻은?
해설 Q = −10·log₁₀(오류확률) 입니다. Q30 이면 1/1000, Q20 이면 1/100, Q40 이면 1/10000. 파일에는
chr(Q+33) 로 글자 하나로 적습니다(Phred+33). 그래서 서열 줄과 품질 줄의 길이가 같습니다.🤔 확인 문제
모든 자리가 Q30 인 150 bp 리드가 통째로 옳을 확률은 대략?
해설 (1−0.001)¹⁵⁰ ≈ 0.86 입니다. 자리마다 99.9% 여도 150 번 곱하면 86% 로 떨어집니다. 일곱 리드에 하나는 어딘가 한 글자가 틀렸다는 뜻입니다. 그래서 같은 자리를 여러 번 겹쳐 읽습니다 — 다음 강.
🤔 확인 문제
2색 화학 장비에서 리드 끝의
GGGGGGG 를 그대로 두고 정렬하면?해설 2색 화학은 빛이 없는 것을 G 로 읽습니다. 클러스터가 죽어도 장비는 자신 있게 G 라고 말하므로 품질 점수가 높습니다. 이 꼬리가 참조의 G 가 많은 자리에 붙어 가짜 정렬과 가짜 커버리지를 만듭니다.
--trim_poly_g 로 미리 자릅니다.