1. 원하는 서열 다운로드하기
1-1. 홈페이지에서 다운로드하기
(1) 홈페이지 접속
https://www.ncbi.nlm.nih.gov/datasets/genome/
(2) 원하는 종을 검색 후 다운로드
- 보통 fasta파일을 다운로드합니다.
1-2. NCBI datasets command line사용하기
- ref: https://www.ncbi.nlm.nih.gov/datasets/docs/v2/download-and-install/
(1) -1 직접 다운로드하기
# Linux
wget https://ftp.ncbi.nlm.nih.gov/pub/datasets/command-line/v2/linux-amd64/datasets
wget https://ftp.ncbi.nlm.nih.gov/pub/datasets/command-line/v2/linux-amd64/dataformat
(1) -2 conda환경에서 사용하기
conda create -n ncbi_datasets
conda activate ncbi_datasets
conda install -c conda-forge ncbi-datasets-cli
(2) 사용하기
datasets download genome taxon "Aspergillus fumigatus" --filename /data/Reference/Kraken2/ATCC_MSA_1010_fungi/aspergillus_fumigatus.zip
Aspergillus fumigatus에 해당하는 모든 서열 다운로드 됨으로 type material을 추출하려면 추가 과정이 필요합니다.
2. Kracken2 설치하기
conda create -n kraken2 -c bioconda kraken2
kraken에서 제공하는 여러 데이터베이스가 존재합니다. 이는 archaea, bacteria, viral, human, UniVec_Core의 서열을 가지고 있습니다.
- 다른 DB목록: https://benlangmead.github.io/aws-indexes/k2
$ kraken2-build --standard -db kraken2DB
위 코드 실행 시, 전체 DB를 다운로드하기까지 11시간이 걸렸습니다.
3. Kracken2 DB 구축하기
(1) 원하는 서열을 모두 하나의 fasta파일로 만들기
다운로드한 typs strain 서열을 "cat strain1.fna strain2.fna strain3.fna > total_seq.fna" 코드를 사용해 하나로 합쳤습니다.
(2) Kraken2 custom DB 구축
# 1) 원하는 이름의 DB만들기
kraken2-build --download-taxonomy --db custom_db
# custom_db안에 taxonomy 폴더가 만들어지며, 데이터가 다운 (약 30분)
# 2) 원하는 서열을 custom_db에 추가한다
kraken2-build --add-to-library merged_seq.fna --db custom_db
# 3) 추가가 완료된 데이터베이스를 kraken2 전용으로 구축한다
kraken2-build --build --db custom_db
저는 10개의 type strain으로 DB 구축 결과 1 단계에서 10분, 2단계에서 2초, 3단계에서 2분이 소요되었습니다.
4. 사용하기
Kraken의 input은 크게 Paired-end와 Single end가 있습니다.
Paired-end는 보통 Raw 데이터에서 바로 분류하는 것(read-based analysis)이고,
Single end는 assembly를 통한 Contig, Scaffold 혹은 MAG단위에서 분류할 때 사용합니다.
저는 계통 조성만 보고 싶음으로 read-based analysis를 수행하였습니다.
kraken2 --db /data/Reference/Kraken2/custom_db \
--threads 16 \
--paired --report kraken2.out/Readbased.kraken.custom_report.txt \
--output kraken2.out/Readbased.kraken.custom_output.txt \
host_removal2/MockATCC_host_removed.1.fastq.gz \
host_removal2/MockATCC_host_removed.2.fastq.gz
결과는 성공적으로 원하는 서열을 모두 검출할 수 있었습니다.
왜 기존 Kraken standard DB에서는 이를 잡아내지 못했는지는 의문입니다만, DB의 자체적인 한계로 생각됩니다.
만약 원하는 서열이 보이지 않는다면, 이와 같은 방법을 수행하시길 바랍니다~.
감사합니다.
참고
- https://avilpage.com/2024/07/mastering-kraken2-build-custom-db.html
- https://github.com/DerrickWood/kraken2/blob/master/docs/MANUAL.markdown#custom-databases