A Fine-Tuned Universe

PULpy를 이용한 세균 유전체의 polysaccharide utilization loci (PUL) 예측 본문

Bioinformatics/그 외

PULpy를 이용한 세균 유전체의 polysaccharide utilization loci (PUL) 예측

정재준 2023. 5. 30. 14:12
728x90

Polysaccharide utilization loci (PUL)은 세균 유전체 상에서 다당류 물질을 이용하기 위해 필요한 유전자가 모여있는 부분을 말한다. 대부분 Bacteroidetes phylum의 세균에서 주로 발견된다. Pseudomonadota (전에는 Proteobacteria 였는데 이름이 바뀌었다. 적응이 안된다.) 세균들은 다당류를 이용하더라도 PUL 형태의 gene cluster가 거의 없는 것 같다. PUL에는 다당류 분해에 필요한 glycoside hydrolase, polysaccharide lyase 와 같은 carbohydrate-active enzymes (CAZy) 뿐만 아니라 transcriptional regulator, transporter 등 유전자가 함께 존재하는 경우가 많다. 그 중에서도 glycan binding, uptake에 역할하는 것으로 알려져있는 susCD 유전자는 PUL 예측하는데에 중요한 단서로 사용된다. susCD 중심으로 PUL을 찾기 때문에 susCD 주변에 다당류 분해 유전자가 없더라도 PUL로 예측되기도 한다. 참고로 Polysaccharide-Utilization Loci DataBase (PULDB, http://www.cazy.org/PULDB/) 에 있는 설명은 다음과 같다

 

"A PUL is a set of physically-linked genes organized around a susCD gene pair. PULs are prevalent in the Bacteroidetes phylum. They provide an evolutionary advantage to these species by orchestrating the breakdown of complex glycans thanks to the encoded CAZymes. Please note that our PUL prediction tool tends to predict more PULs with multiple tandem susCD pairs than what is seen in experimentally determined cases "

 

다당류 분해 관련 유전자를 찾는 거의 정석적인 방법은 CAZy database (http://www.cazy.org/) 에서 다양한 enzyme class에 대한 정보를 탐색하거나 dbCAN server에 시퀀스를 업로드하여 CAZy를 찾는 것이다. 그리고 PUL은 PULDB에서 예측되어 있는 것을 찾아볼 수 있다. 그러나 신규 균주이거나 Bacteriodetes가 아닌 다른 세균에서 PUL을 찾아야 할  때가 있다.

 

bioRxiv에 올라와있는 PULpy의 논문 (https://www.biorxiv.org/content/10.1101/421024v1.full) 에서는 CAZy와 PULDB에서 대량의 유전체나 신규유전체의 분석의 어려움을 지적했다. 저자들은 snakemake pipeline을 활용한 파이썬 기반 PULpy를 개발했고 이것을 이용해 5414개의 Bacteriodetes 유전체를 분석했으며 그 결과는 기존의 CAZy 와 PULDB 의 결과와 거의 유사하여 PULpy의 정확성과 유용함을 강조하였다.

 

새로 얻은 균주들의 PUL을 분석할 일이 있어서 PULpy를 사용해보았다. 리눅스 환경이나 파이썬 스크립트를 활용하는데에 익숙하지 않아서 설치와 실행에 애를 먹었다. 잘 아시는 분이 보면 별 거 아니겠지만 나와 같이 리눅스나 command line 기반 프로그램을 잘 모르지만 어쨌든 분석은 해내야 하는 상황에 처한 사람들을 위해 설치과정, 방법, 결과에 대해 정리해두려고 한다.


먼저 개인PC에 윈도우11에서 WSL로 우분투 20.04 를 설치하였다. 설치 방법은 간단하며 다른 블로그 등에도 많이 소개되어 있으니 참고하시면 되겠다. 나는 설치가 제대로 되지 않고 에러메시지가 나왔는데 윈도우 업데이트가 최신으로 되어있지 않아서 생긴 문제였다.

 

우분투 설치 후 최신 업데이트를 하고 파이썬과 pip, conda, Rscript, mamba, snakemake를 설치하였다. 

#apt 패키지 관리자를 최신으로 업데이트
sudo apt update

#apt apt로 파이썬 설치
sudo apt install python3

#pip 설치하고 잘 설치되었는지 버전 확인
sudo apt install python3-pip
pip3 --version

#anaconda 설치
wget https://repo.anaconda.com/archive/Anaconda3-latest-Linux-x86_64.sh
chmod +x Anaconda3-latest-Linux-x86_64.sh
./Anaconda3-latest-Linux-x86_64.sh

#Rscript 설치
sudo apt install r-base-core

#mamba 설치
conda install mamba -n base -c conda-forge

#snakemake 설치하고 잘 설치되었는지 버전 확인
pip3 install snakemake
snakemake --version

PULpy는 snakemake 기반 프로그램이다. snakemake는 워크플로우 관리 시스템으로 여러가지 명령을 순차적으로 실행시키는데에 적합한 것 같다. snakefile 안에 rule, input, ouput, shell 등 을 정희해놓으면 순차적으로 실행시켜준다. 

 

이제 PULpy github로 가서 (https://github.com/WatsonLab/PULpy) 거기 있는 디렉토리 구조 그대로 만들고 모든 파일도 같은 곳에 넣어준다. 

 

그리고 README에 있는대로 모든 명령어를 실행시키고 Pfam, DBCAN data를 다운로드 받는다. 아래 코드들이다

 

#PULpy 디렉토리 만들기
mkdir PULpy
cd PULpy

#Conda 가상환경 만들기
conda env create -f envs/PULpy.yaml
source activate PULpy

#Pfam data 다운로드
mkdir pfam_data && cd pfam_data
wget ftp://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.gz
wget ftp://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/Pfam-A.hmm.dat.gz
wget ftp://ftp.ebi.ac.uk/pub/databases/Pfam/current_release/active_site.dat.gz
gunzip Pfam-A.hmm.gz Pfam-A.hmm.dat.gz active_site.dat.gz
hmmpress Pfam-A.hmm
cd ..

#DBCAN data 다운로드
mkdir dbcan_data && cd dbcan_data
wget http://bcb.unl.edu/dbCAN2/download/Databases/dbCAN-old@UGA/hmmscan-parser.sh
wget http://bcb.unl.edu/dbCAN2/download/Databases/dbCAN-old@UGA/dbCAN-fam-HMMs.txt
hmmpress dbCAN-fam-HMMs.txt
chmod 755 hmmscan-parser.sh
cd ..

#script 파일에 실행권한 부여, scripts 디렉토리 안에서
chmod -R 755 scripts

 

PULpy는 nucleotide FASTA 파일을 input으로 사용한다. NCBI assembly 등에 가서 fasta 파일을 다운받자.

snakefile에 보면 아래와 같은 부분이 있다. genomes 라는 디렉토리 안에 "이름_genomic.fna.gz" 이런 형식으로 input 파일이 있어야 한다는 뜻이다. 그래야 input파일로 인식이 되므로 시키는 대로 파일이름을 만들어준다.

rule proteins:
    input: 'genomes/{id}_genomic.fna.gz'

 

이제 실행시킨다. 자신의 컴퓨터의 코어 수에 따라 적당히 적는다. 혹시 분석이 수행되다가 중단되어서 중간 결과 파일이 남아 있다면 --run-incomplete 을 붙여주면 된다. 그리고 mamba 명령어 때문에 오류가 나기도 했는데.. 그럴 땐 chatGPT에게 에러메시지를 복붙하여 물어보자...

snakemake -cores [숫자] --use-conda

별 일 없이 잘 돌아갔다면 puls 디렉토리 안에 .puls.sum.tsv와 .pul.tsv 파일이 있다. 그걸 보고 예측된 PUL의 갯수, 길이, PUL안의 유전자들을 확인할 수 있다. 

 

cat jangbogoensis.puls.sum.tsv
genome  pulid   contigid        start   end     pattern
jangbogoensis   PUL1    JSWG01000006.1  41240   59399   susC-susD-unk-GH16_3-GH149-GH17-GH158-GH30_1-unk-GH17
jangbogoensis   PUL2    JSWG01000009.1  574034  599145  GH13_10-unk-susD-susC-unk-unk-unk-GH65-GH13-CE1;GH31-GH13-GH13_19-GH97
jangbogoensis   PUL3    JSWG01000009.1  840200  844701  susC-susD

 

LIST