19강 / 20강
실습 종합 — 코드랩 0~3단계를 줄 단위로
<code>rosie_mct_mrna_vaccine_codelab.ipynb</code> · 3시간 워크숍의 앞 절반
워크숍에서 여는 노트북은 Google Colab 에서 런타임 → 모두 실행 으로 그대로 돕니다.
여기서는 앞 네 단계를 줄 단위로 읽습니다.
| 단계 | 하는 일 | 이 강의 |
|---|---|---|
| 0 | 도구 설치 — bwa · minimap2 · samtools · bcftools | 12강 |
| 1 | Ensembl 에서 개 KIT 유전자좌 20 kb 받기 | 6·7강 |
| 2 | 합성 FASTQ 만들기 + 드라이버 심기 | 8·9·10강 |
| 3 | 정렬 → 정렬(sort) → 중복표시 → 커버리지 | 11~17강 |
0단계 — 왜 도구를 '찾는' 코드가 필요한가
def _resolve_tools():
micromamba = os.path.expanduser("~/.ghbio-micromamba/envs/ghbio-gen/bin")
for n in ("bwa", "minimap2", "samtools", "bcftools"):
p = shutil.which(n)
micromamba = os.path.expanduser("~/.ghbio-micromamba/envs/ghbio-gen/bin")
for n in ("bwa", "minimap2", "samtools", "bcftools"):
p = shutil.which(n)
Colab 에서는 관리자 권한이 있으므로 apt install 이 됩니다.
학교 서버나 연구실 워크스테이션에서는 대개 안 됩니다.
그래서 이미 설치된 것을 찾는 길을 함께 둡니다.
이것이 재현성의 첫 단추입니다 — "내 컴퓨터에서는 되는데" 를 없애는 일입니다.
2단계 — '심어 두고 다시 찾기'
simulate_reads(ref, out_r1, out_r2, coverage, read_len,
driver_pos0, driver_alt, vaf, err=0.002, insert=350, seed=1)
driver_pos0, driver_alt, vaf, err=0.002, insert=350, seed=1)
정상(혈액)은 야생형만, 종양은 드라이버를 VAF 0.847 로 가진 리드를 만듭니다.
이 방식의 값어치는 정답을 알고 있다는 것입니다. 파이프라인이 그것을 되찾아 내면 파이프라인이 옳게 돈다는 뜻입니다. 실제 데이터에서는 절대 알 수 없는 확인입니다.
기대값을 먼저 적어 두고 돌리는 것. 워크숍에서 학생에게 가장 먼저 가르치는 습관입니다.
Python
브라우저에서 실행
3단계 — 한 줄씩
| 명령 | 무엇 | 확인할 것 |
|---|---|---|
samtools faidx kit_locus.fa | 참조 색인 (7강) | .fai 가 생겼는가 |
bwa index kit_locus.fa | 정렬용 FM-index (11강) | .bwt .sa .amb .ann .pac 다섯 개 |
bwa mem -R '@RG…' | 정렬 (12강) | 읽기 그룹이 붙었는가 — samtools view -H |
samtools sort -o … | 좌표 정렬 (13강) | 헤더에 SO:coordinate |
samtools index | BAM 색인 (13강) | .bai 가 생겼는가 |
samtools markdup | 중복 표시 (16강) | 중복률이 얼마인가 |
samtools depth | 커버리지 (17강) | 종양 : 정상 ≈ 2 : 1 인가 |
이 일곱 줄이 이 권의 요약입니다. BAM 하나를 믿을 수 있게 만드는 것이 I 권이 한 일입니다.
Python
브라우저에서 실행
🤔 확인 문제
2단계에서 변이를 '심어 두고' 4단계에서 '다시 찾는' 방식의 값어치는?
해설 실제 데이터에서는 정답을 모릅니다. 결과가 나와도 그것이 맞는지 알 방법이 없습니다. 심어 두고 되찾는 것은 파이프라인 자체를 검증하는 유일한 방법이고, 실무에서도 합성 스파이크인으로 같은 일을 합니다.
🤔 확인 문제
3단계가 끝난 뒤 반드시 확인해야 할 것으로 가장 중요한 것은?
해설
SM: 이 없으면 다음 권의 뺄셈이 종양과 정상을 구별하지 못합니다. 그리고 정렬을 다시 돌리는 것은 실제 WGS 에서 몇 시간짜리 일입니다. 다른 항목들(.fai·.bai·SO:coordinate)은 없으면 바로 오류가 나므로 오히려 안전합니다.