2019년 11월 13일 수요일

TORMES 힘겹게 설치하기

경기창조경제혁신센터. 각 지역에 설립된 창조경제혁신센터는 올해로 투자 및 운영계획이 종료되면서 각 대기업들은 앞으로의 운영을 두고 고민에 빠졌다고 한다. 동아일보 2019년 11월 11일 기사 "손떼자" vs "더 투자"... 대기업들 '창조경제혁신센터' 고심.

재직자 재교육 단기과정 유전체 데이터 분석교육(제2차)

지난 월요일(11월 11일), 경기창조경제혁신센터에서 미생물 유전체 분석 이론 강의 및 실습을 마쳤다. 실습 자료를 너무 많이 준비해서 뒷부분의 1/3 정도는 그냥 말로 때운 것 같아 수강생들에게 죄송스런 마음이 앞선다. 이를 보충하는 의미에서 실습을 위해 사용한 스크립트는 전부 다음의 웹문서로 공개를 하였다. 앞으로도 이 문서는 계속 설명을 달고 업데이트를 해 나갈 예정이다.

http://bit.ly/2WNG5XZ

무엇보다 걱정이 앞서는 것은 분석용 프로그램이 잘 설치된 환경이 아니라면 이 스크립트가 별로 소용이 없다는 점이다. bioconda를 이용하여 프로그램을 설치해 나가는 과정을 별도의 위키 문서로 정리해 놓았는데, 과연 이를 재현하는데 어려움이 없을지 모르겠다. 관리자 권한이 없어도 필요한 프로그램을 설치할 수 있도록 애를 썼다.

미생물의 whole genome sequencing(WGS) 결과물을 분석하기 위해 미리 만들어진 pipeline이 있다면, 개별 application을 다운로드하여 설치하지 않아도 되므로 무척 편리할 것이다. 스페인의 연구그룹에서 최근에 발표한 TORMES가 이러한 목적으로 만들어진 것으로 보여서 실제 설치를 해서 사용해 보기로 하였다. 논문을 처음 접한지는 꽤 되었는데 dependency가 많아서(yml 파일을 보라) 성가시다는 생각이 들어 관심을 갖지 않았다가 conda를 통해서 이들이 한번에 설치된다는 것을 알고서 도전해 보기로 했다.

TORMES: an automated pipeline for whole bacterial genome analysis. Bioinformatics 35(21), 2019, 4207-4212 https://doi.org/10.1093/bioinformatics/btz220
https://github.com/nmquijada/tormes
The progress of High Throughput Sequencing (HTS) technologies and the reduction in the sequencing costs are such that Whole Genome Sequencing (WGS) could replace many traditional laboratory assays and procedures. Exploiting the volume of data produced by HTS platforms requires substantial computing skills and this is the main bottleneck in the implementation of WGS as a routine laboratory technique. The way in which the vast amount of results are presented to researchers and clinicians with no specialist knowledge of genome sequencing is also a significant issue. Here we present TORMES, a user-friendly pipeline for WGS analysis of bacteria from any origin generated by HTS on Illumina platforms. TORMES is designed for non-bioinformatician users, and automates the steps required for WGS analysis directly from the raw sequence data: sequence quality filtering, de novo assembly, draft genome ordering against a reference, genome annotation, multi-locus sequence typing (MLST), searching for antibiotic resistance and virulence genes, and pangenome comparisons. Once the analysis is finished, TORMES generates and interactive web-like report that can be opened in any web browser and shared and revised by researchers in a simple manner. TORMES can be run by using very simple commands and represent a quick an easy way to perform WGS analysis.
 WGS = whole genome sequencing인가? NCBI에는 WGS를 whole genome shotgun의 의미로 쓰지만 마지막 S를 sequenicing의 약자로 이해하는 사람이 더 많은 것 같다. 이 파이프라인은 특히 대장균과 살모넬라의 경우 플라스미드 분석, 항생제 내성 점돌연변이(유전자 획득에 의한 항생제 내성 예측은 기본 분석에 포함), 혈청형 및 fimH 타이핑 등의 상세 분석까지 진행해 주는 것이 특징이다.

TORMES란 스페인 Salamanca 시를 관통하여 흐르는 강의 이름인데, University of Salamanca의 개교 800주년(2018년)을 기념하여 이 분석 파이프라인의 이름으로 사용했다 한다. 스페인에서는 가장 오래된 대학이고, 유럽 전체로는 두번째라고 한다. 유럽 최초의 대학은 1088년에 설립된 볼로냐 대학(이탈리아)이다.

TORMES의 설치 과정은 순탄하지 않았다. 2019년에 작성된 내 블로그의 글에서 아마도 가장 많이 다루어진 자체발급 SSL 인증서 문제 때문이었다. 현재 근무 중인 파견기업의 모든 전산망은 SOMANSA라는 국내 보안 업체의 웹프록시 서버 뒤에서 "보호"를 받는다. 그래서 자체 인증서를 통하여 내부적으로 돌아가게 되어 있고, 리눅스 장비를 통해서 https(443번 포트)로 파일을 받으려면 여간 성가신 것이 아니다. git, curl, wget, R 패키지 설치 등 걸리지 않는 곳이 없다. tormes-setup 명령으로 필요한 나머지 dependency와 외부 DB를 받으려면 이것들이 다 동원되니 얼마나 번거롭겠는가. 저 메시지만 보면 머리에서 김이 날 지경이다.

Resolving ccb.jhu.edu... 128.220.233.141
Connecting to ccb.jhu.edu|128.220.233.141|:443... connected.
ERROR: cannot verify ccb.jhu.edu's certificate, issued by ‘CN=Somansa Root CA,O=Somansa,C=KR’:
  Self-signed certificate encountered.

하나씩 해결을 해야지 어쩌겠는가. 먼저 R의 필요 패키지 설치를 하려면, 홈 디렉토리리에 .Renviron 파일을 만들어서 CURL_CA_BUNDLE=.cert/Somansa_ROOT_CA.cer라는 내용을 넣어야 한다. 그리고 tormes-setup 스크립트도 홈 디렉토리에서 실행해야 한다. Somansa_ROOT_CA.cer 파일은 각자 환경에 맞게 따로 만들어야 한다.

다음으로는 CGE_module을 설치하기 위한 git 작동에서 SSL 인증을 건너뛰게 해야 한다. 이는 환경변수를 하나 건드리면 된다(export GIT_SSL_NO_VERIFY=0). 아예 설정 파일을 건드려서 앞으로 git를 실행할 때 항상 SSL 인증을 건너뛰게 할 수도 있다. git와 SSL 인증서 문제를 해결하기 위한 상세한 설명은 정광섭 님의 글 git 에서 https repository 연결시 SSL 인증서 오류 해결법에 잘 나와 있다. CGE_module은 아마도 덴마크 공과대학(DTU) Center for Genomic Epidemiology에서 제공하는 타이핑 도구 및 DB를 의미하는 것으로 여겨진다.

마지막으로 minikaraken DB의 설치 문제를 해결하자. tormes-setup 스크립트를 텍스트 편집기로 열어서 wget 명령어가 있는 곳을 찾은 다음, 라인 끝에 --no-check-certificate 옵션을 추가하였다. 이것은 git에서처럼 설정 파일이나 환경변수를 조작하여 해결할 수 있는 것이 아니다.

이러한 세 가지의 문제를 해결하기 위해서 tormes-setup을 몇 번이나 실행했는지 모른다. 지금은 가장 마지막 단계인 minikraken DB의 다운로드가 진행 중이다(49분 남았다).

점심식사를 하고 자리에 돌아와서 최초의 테스트 실행을 해 보았다. 샘플 데이터는 E. coli RR1(HB101 RecA+)에서 유래한 220x 일루미나 시퀀싱 데이터이다(2 x 101 nt). 실험실 균주라서 항생제 내성 유전자나 virulence factor 예측에서는 별다른 결과가 나오지 않을 것이다.

$ tormes -m samples_metadata.txt -o tormes_out -t 24 -g Escherichia 
Software: /opt/anaconda2/envs/tormes-1.0/bin/abricate found
Software: /opt/anaconda2/envs/tormes-1.0/bin/convert found
Software: /opt/anaconda2/envs/tormes-1.0/bin/fasttree found
Software: /opt/anaconda2/envs/tormes-1.0/bin/kraken found
Software: /opt/anaconda2/envs/tormes-1.0/bin/kraken-report found
Software: /opt/anaconda2/envs/tormes-1.0/bin/megahit found
Software: /opt/anaconda2/envs/tormes-1.0/bin/mlst found
Software: /opt/anaconda2/envs/tormes-1.0/bin/parallel found
Software: /opt/anaconda2/envs/tormes-1.0/bin/prinseq-lite.pl found
Software: /opt/anaconda2/envs/tormes-1.0/bin/prokka found
Software: /opt/anaconda2/envs/tormes-1.0/bin/quast found
Software: /opt/anaconda2/envs/tormes-1.0/bin/roary found
Software: /opt/anaconda2/envs/tormes-1.0/bin/roary2svg.pl found
Software: /opt/anaconda2/envs/tormes-1.0/bin/sickle found
Software: /opt/anaconda2/envs/tormes-1.0/bin/spades.py found
Software: /opt/anaconda2/envs/tormes-1.0/bin/trimmomatic found

ERROR: Software /opt/anaconda2/envs/tormes-1.0/bin/../share/mauve-2.4.0.r4736-0/Mauve.jar not found! Please check if:
  * Software is not installed
  * Software is installed but the path in /opt/anaconda2/envs/tormes-1.0/bin/../files/config_file.txt is incorrect

Mauve.jar 파일의 설치 위치는 mauve-2.4.0.r4736-1 디렉토리인데 /opt/anaconda2/envs/tormes-1.0/bin/../files/config_file.txt 설정 파일에는 mauve-2.4.0.r4736-0으로 표시되어 있다. tormes-1.0.yml에는 그저 mauve=2.4.0.r4736라고만 적혀 있는 상태이다. contig.txt의 해당 라인을 찾아서 0을 1로 고친 뒤 다시 실행을 하니 모든 소프트웨어가 제대로 자리잡고 있음을 확인한 뒤 trimmomatic을 실행하고 있음을 보여주었다.

결과를 살펴 보았다. R markdown으로 생성된 리포트와 각 단계별 서브디렉토리로 구성된 결과물이 있어야 하는데 텅텅 비어있는 상태이다. 왜 그런 것일까? trimmomatic으로 전처리를 한 뒤 quality filtering(prinseq, sickle 또는 trimmomatic 중에서 선택; --filtering 옵션 사용; 기본은 prinseq)을 통과한 read가 전혀 없다는 것이다. tormes 옵션 중에서 --min_len의 기본 크기가 125라서 그런 것 같다. 오늘 사용한 샘플 데이터의 read 길이는 101 bp이기 때문이다.

 --min_len       Minimum length to the reads to survive after filtering (default=125) 

--min_len 75로 맞추어 놓고 다시 시도를 해 보았다. quality filtering이 잘 진행되고 이어서 SPAdes가 진행된다. 결과물은 적절하게 생성되었다. 비교할 다른 샘플이 없이 단일 균주라서 pan genome analysis 등은 생략되었다.

결과 리포트는 tormes_report.Rmd라는 RMarkdown code로 생성된다. 샘플 리포트는 여기에서 볼 수 있다. 다음 명령어를 사용하면 html 파일로 바뀐다. 마크다운 언어 또한 피해갈 수 없는 대세인 것 같다. Rmd를 컴파일하여 html을 만들다니... 아주 오래 전에 LaTeX으로 학위 논문을 컴파일하던 기억이 떠오른다.

Rscript -e 'library(rmarkdown); rmarkdown::render("tormes_report.Rmd", "html_document", encoding="UTF-8")'
나중에 Acinetobacter baumannii의 일루미나 시퀀싱 결과를 몇 개 넣어 돌려볼 생각이다. 오염이 발생한 샘플이 있었는데(결국은 수작업으로 점검하여 k-mer filtering을 했지만) 이를 TORMES는 어떻게 대처하는지 궁금하다.

댓글 없음: