종양(±정상)에서 발생한 체세포 변이를 Mutect2로 호출합니다. 입력은 *.final.bam(MarkDuplicates + BQSR)이며 기본 쓰레드는 20입니다.
(참고: Germline 변이는 HaplotypeCaller 페이지에서 별도 설명)
--germline-resource), Panel-of-Normals(PoN) 의존도↑. 위양성 관리가 중요.GetPileupSummaries → CalculateContamination)과 FFPE 방향성 바이어스 모델(LearnReadOrientationModel)을 사용해 필터를 강화합니다.--germline-resource AF, PoN, 오염률, 방향성 바이어스 등을 반영해 사후확률 계산.
# 쓰레드 & 경로
THREADS=20
REF_DIR="/home/kang/raw_data/gatk_bundle/v0"
REF="${REF_DIR}/Homo_sapiens_assembly38.fasta"
IN="/home/kang/God_Nas/WGS_2nd/postproc" # *.final.bam 위치
OUT="/home/kang/God_Nas/WGS_2nd/variant"
mkdir -p "${OUT}"
# 리소스
GERM_AF="${REF_DIR}/af-only-gnomad.hg38.vcf.gz" # --germline-resource
PON_VCF="/path/to/pon.vcf.gz" # --panel-of-normals (있으면 강력 권장)
# 오염 추정에 사용할 "공통 변이 사이트" VCF(작은 사이즈 권장; .tbi 필요)
COMMON_SITES_VCF="${REF_DIR}/small_common_biallelic.vcf.gz"
정상 샘플이 있으면 germline/배경을 직접 관찰하므로 정확도가 가장 좋습니다.
TUMOR="Case01_T"; TBAM="${IN}/${TUMOR}.final.bam"
NORMAL="Case01_N"; NBAM="${IN}/${NORMAL}.final.bam"
gatk Mutect2 \
-R "${REF}" \
-I "${TBAM}" -tumor "${TUMOR}" \
-I "${NBAM}" -normal "${NORMAL}" \
--germline-resource "${GERM_AF}" \
$( [[ -f "${PON_VCF}" ]] && echo "--panel-of-normals ${PON_VCF}" ) \
--f1r2-tar-gz "${OUT}/${TUMOR}.f1r2.tar.gz" \
-O "${OUT}/${TUMOR}.unfiltered.vcf.gz" \
--native-pair-hmm-threads ${THREADS}
# (옵션) 로컬 재정렬된 BAM을 보고 싶으면 -bamout 사용:
# -bamout "${OUT}/${TUMOR}.bamout.bam"
# 1) Pileup 요약 (종양/정상 모두 수행)
gatk GetPileupSummaries -R "${REF}" -I "${TBAM}" -V "${COMMON_SITES_VCF}" -O "${OUT}/${TUMOR}.pileups.table"
gatk GetPileupSummaries -R "${REF}" -I "${NBAM}" -V "${COMMON_SITES_VCF}" -O "${OUT}/${NORMAL}.pileups.table"
# 2) 오염도 추정
gatk CalculateContamination \
-I "${OUT}/${TUMOR}.pileups.table" \
-matched "${OUT}/${NORMAL}.pileups.table" \
-O "${OUT}/${TUMOR}.contamination.table" \
--segment-output "${OUT}/${TUMOR}.segments.table"
# 3) 방향성 바이어스(FFPE 등) 학습
gatk LearnReadOrientationModel \
-I "${OUT}/${TUMOR}.f1r2.tar.gz" \
-O "${OUT}/${TUMOR}.artifact-priors.tar.gz"
# 4) 최종 필터
gatk FilterMutectCalls \
-R "${REF}" \
-V "${OUT}/${TUMOR}.unfiltered.vcf.gz" \
--contamination-table "${OUT}/${TUMOR}.contamination.table" \
--tumor-segmentation "${OUT}/${TUMOR}.segments.table" \
--ob-priors "${OUT}/${TUMOR}.artifact-priors.tar.gz" \
-O "${OUT}/${TUMOR}.filtered.vcf.gz"
--germline-resource)와 PoN 의존도가 큽니다(위양성 억제).
TUMOR="NP-21"; TBAM="${IN}/${TUMOR}.final.bam"
gatk Mutect2 \
-R "${REF}" \
-I "${TBAM}" -tumor "${TUMOR}" \
--germline-resource "${GERM_AF}" \
$( [[ -f "${PON_VCF}" ]] && echo "--panel-of-normals ${PON_VCF}" ) \
--f1r2-tar-gz "${OUT}/${TUMOR}.f1r2.tar.gz" \
-O "${OUT}/${TUMOR}.unfiltered.vcf.gz" \
--native-pair-hmm-threads ${THREADS}
gatk GetPileupSummaries -R "${REF}" -I "${TBAM}" -V "${COMMON_SITES_VCF}" -O "${OUT}/${TUMOR}.pileups.table"
gatk CalculateContamination \
-I "${OUT}/${TUMOR}.pileups.table" \
-O "${OUT}/${TUMOR}.contamination.table" \
--segment-output "${OUT}/${TUMOR}.segments.table"
gatk LearnReadOrientationModel \
-I "${OUT}/${TUMOR}.f1r2.tar.gz" \
-O "${OUT}/${TUMOR}.artifact-priors.tar.gz"
gatk FilterMutectCalls \
-R "${REF}" \
-V "${OUT}/${TUMOR}.unfiltered.vcf.gz" \
--contamination-table "${OUT}/${TUMOR}.contamination.table" \
--tumor-segmentation "${OUT}/${TUMOR}.segments.table" \
--ob-priors "${OUT}/${TUMOR}.artifact-priors.tar.gz" \
-O "${OUT}/${TUMOR}.filtered.vcf.gz"
| 항목 | Matched-normal | Tumor-only |
|---|---|---|
| 특이도/위양성 | 우수 (정상으로 germline/배경 직접 제거) | 상대적으로 낮음(gnomAD/PoN 의존, 필터 보수적) |
| 저 VAF 변이 | 검출력↑ | 검출력↓(필터 강도↑) |
| 리소스 의존 | 보조적(germline-resource/PoN 필요성↓) | 높음(gnomAD AF, PoN 필수적 권장) |
| 권장 사용 | 가능하면 항상 채택 | 정상 확보 불가·예산/윤리 제한 등 |
RESOURCE="/home/kang/raw_data/gatk_bundle/dataSourcesFolder/funcotator_dataSources.v1.7.20200521s/"
SAMPLE="NP-21"
gatk Funcotator \
-R "${REF}" \
-V "${OUT}/${SAMPLE}.filtered.vcf.gz" \
-O "${OUT}/${SAMPLE}.funcotated.maf.gz" \
--output-file-format MAF \
--data-sources-path "${RESOURCE}" \
--ref-version hg38 \
--annotation-default tumor_barcode:${SAMPLE}
GetPileupSummaries → CalculateContamination → LearnReadOrientationModel → FilterMutectCalls.