2019년 11월 29일 금요일

MetaWRAP - a flexible pipeline for genome-resolved metagenomic data analysis

Shotgun sequencing을 이용한 메타게놈 연구가 이렇게까지 발전할 줄은 몰랐다. 내가 이 분야에 관심을 갖게 된 것은 2015년쯤 충북대학교 미생물학과의 이성근 교수의 제안을 통해서였다. 초창기 연구자료를 교환하고 약간 들여다본 것 이상으로는 진도가 나가질 않아서 논문 형태로 업적을 만들어내거나 하지는 못했었다. 지금 검색을 해 보니 "Genomic and metatranscriptomic analyses of carbon remineralization in an Antarctic polynya"라는 논문으로 Microbiome(링크)에 출간이 되었다. 저자 중에 낯익은 사람이 많아서 반가운 느낌이다.

당시에 참고했던 논문은 이것이었다. 그때로서는 아마 가장 앞선 방법이었을 것이다.

Genome sequences of rare, uncultured bacteria obtained by differential coverage binning of multiple metagenomes. 
Albertsen M Hugenholtz P Skarshewski A Nielsen K Tyson G Nielsen P
Nature Biotechnology 2013 vol: 31 (6) pp: 533-538 PubMed

활성슬러지 생물반응기로부터 DNA 추출 조건을 약간 다르게 하여(hot phenol을 쓴 것과 그렇지 않은 것) 얻은 샘플에 대한 deep sequencing을 한다는 것이 이 논문에서 사용한 핵심 기법이었던 것으로 기억한다. Binning 과정부터는 슬슬 수작업 비슷한 것이 들어가기 시작하여 끈기있게 그 과정을 끝까지 따라서 해 보지는 못했었다.

그 이후로 실험 설계부터 제대로 된 shotgun metagenomics를 할 기회는 없었다. Microcystis처럼 heterotrophic bacteria와 필연적으로 공유를 하는 미생물의 유전체를 해독하거나, 특별한 샘플을 다루다가 우연히 발견하게 된 microorganism contamination의 정체를 깊은 수준까지 밝혀보기 위하여 shotgun metagenomics적 방법을 조금 쓰게 되었다.

요즘은 인체 마이크로바이옴의 전성시대라는 것을 그 누구도 부인할 수 없다. 새롭게 실험을 디자인하여 샘플을 모으거나, 혹은 NIH Human Microbiome Project 또는 유럽의 MetaHIT 등에서 공개된 shotgun metagenome sequencing 결과를 가져다가 공들여 조립하여 MAG(metagenome-assembled genomes, 메타게놈 조립을 통해 만들어진 것이라서 실제 배양 가능한 균주가 분리되지 않은 것들이 대부분)를 만들었다는 논문이 종종 눈에 뜨이고는 한다. 그중에서 가장 최근의 연구 성과는 아마 다음의 것으로 생각된다. 현재는 bioRxiv에만 올라 있지만 조만간 major journal에서 출간될 것으로 믿는다. 화려한 저자 목록을 보라. 다 이 분야에서 대단한 지명도를 갖고 있는 사람들이 아닌가(밑줄 친 저자는 최소한 내가 논문이나 소프트웨어를 통해 알고 있는 사람들)? 더군다나 Philip Hugenholtz는 위에 언급한 논문에서도 저자로 참여하였다.

A unified sequence catalogue of over 280,000 genomes obtained from the human gut microbiome.
Alexandre Almeida, Stephen Nayfach, Miguel Boland, Francesco Strozzi, Martin Beracochea, Zhou Jason Shi, Katherine S. Pollard, Donovan H. Parks, Philip Hugenholtz,  Nicola Segata,  Nikos C. Kyrpides, Robert D. Finn
doi: https://doi.org/10.1101/762682

이 논문의 저자 Nayfach와 Kyrpides는 국외 학회에 가서 본 일이 있다. "만나본 적이 있었다'라고 쓰려면 최소한 인사라도 하고 악수라도 해 봤어야 한다^^ 그렇게 말할 수 있는 외국인 과학자는 몇 명 되지 않는다.

인체 장내 마이크로바이옴에서 유래한 유전자 카탈로그는 Integrated Gene Catalog(IGC, 논문 링크)라는 것이 알려져 있다. 그러나 이 자원은 유전자 중심이라는 것이 한계이다. 이번 bioRxiv 논문에서는 유전체와 단백질 서열을 총망라했다는 것이 핵심이다. Unified Human Gastrointestinal Genome (UHGG) collection에서는 무려 286,997개의 유전체를 확보하였으며 여기에서 유래한 Unified Human Gastrointestinal Protein (UHGP) catalogue에서는 6억 2500만개의 단백질을 포함한다. 이는 IGC가 수록한 단백질의 두 배가 넘는 분량이다.

오늘 올리는 글의 제목인 metaWRAP(PubMedGitHub)은 MAG를 만들 때 필수적인 프로그램들의 실행을 편하게 할 수 있도록 도와주는 wrapper script이다. Robert D. Finn의 2019년 Nature 논문 "A new genomic blueprint of the human gut microbiota(링크)"의 일부분을 잠깐 살펴보면 metaWRAP이 어디에 쓰이는 것인지 감을 잡을 수 있다.


MetaWRAP은 Microbiome이라는 저널에 실렸었다. 이 저널에는 좋은 방법론이 종종 소개되고 있어서 참조하기에 아주 좋다. 특히 Unicycler를 사용하여 ONT nanopore long read와 Illumina를 잘 조합한 미생물 유전체 해독 방법 논문을 최근에 흥미롭게 읽었었다. 언제 기회가 된다면 이에 관해서 포스팅을 하고 싶다.

오늘 소개한 첫번째 논문은 무려 6년 전에 나온 것이다. 당시에는 bioconda라는 것이 나오기도 전이다. 이에 비하면 metaWRAP은 얼마나 편리한가? 프로그램의 설치와 관리 및 활용법 문서가 인터넷을 통해 체계적으로 보급되고 있어서 이제는 몰라서 못한다는 말은 하기 어려운 시대가 되었다.

"이제 해 볼 만하다"

2019년 11월 25일 월요일

드디어 야마하 베노바(Yamaha Venova YVS-100)을 구입하다

관심이 생기기 시작하여 웹을 통한 조사를 거치고, 드디어 악기 구입까지 너무 짧은 시간 안에 모든 일이 끝난 것 같다. 사실 이날(2019년 11월 24일), 그것도 베노바를 꼭 사야겠다고 다짐은 한 것은 아니었는데 마침 일요일이라 낙원상가는 문을 열지 않았고, 종로2가 사거리 금강제화 바로 곁의 '종로야마하'는 문을 열었기에 여기에서 구입을 하였다. 지금까지 이곳을 수백번도 더 지나쳤지만 직접 들어가서 악기 또는 관련 물품을 산 것은 이번이 처음이다.




리드(reed) 관악기를 접한 것도 이번이 처음이다. 어쨌든 소리는 난다. 전혀 아름답지 않은 소리, 아니 소음 수준이다. 주변에 소음 피해를 주지 않을만한 곳을 찾아서 하루 한두시간 일주일 정도는 애를 써야 아주 조금 감을 잡을 수 있을 것이다. 그런데 어디서 연습을 할 것인가? 오피스텔에서는 불가능이다.

관악기는 왜 악보대로 연주하면 C장조가 되질 않는지, 높은음자리표 둘째칸의 '라(A)'는 연주하는 곡의 시대나 단체에 따라서 440Hz를 쓰기도 하고 442 Hz를 쓴다든지(이것은 정말 충격적이었다!), 우리가 흔히 초등학교의 음악교육에서 피리라고 부르던 소프라노 리코더의 독일식 운지법은 바로크식 운지법과 무엇이 다른지.. 평소에는 전혀 모르던 것들을 이번에 많이 알게 되었다.

음정(pitch)에 대해서는 다음의 위키피디아 표제어를 참고하라.

하지만 악기 연주는 책이나 구글 검색으로 배울 수 있는 것은 아니다. 유튜브에 초보자를 위한 동영상이 무척이나 많은 것은 다행이지만, 연습을 하지 않으면 아무런 소용이 없다.

베노바는 소프라노 색소폰용 마우스피스(야마하 4C)를 그대로 쓰면 된다고 한다. 리드는 합성수지제라서 오래 사용할 수 있다고 하였다. 몇 번 불지 않았는데 흥건하게 액체가 고이는 것을 보니 연습 후에는 반드시 청소를 해 두어야 되겠다. 음식을 먹은 직후 악기를 입에 무는 것 역시 악기에 대한 실례가 아닐까 한다.

암뷰슈어(embouchure 또는 lipping)은 관악기를 연주할 때 입술을 사용하는 방법이라 한다. 모든 악기가 그렇지만 사용자가 몸으로 미묘하게 콘트롤할 부분이 관악기에서는 더 많은 것 같다. 내 입 구조에 잘 맞는, 그러나 표준적인 방법을 잘 따르는 암부슈어를 찾아 나가야 한다.
색소폰 암부슈어를 2주 이내에 잡으라고 말하는 이유는 평생 젓가락질은 배우는 순간에서 이미 결정이 난다는 생각에서 말하고는 한다. 링크

2019년 11월 20일 수요일

오늘부터 Amazon Web Service(AWS)를 이용하기 시작하다

시작이 많이 늦었다. 가장 늦었다고 생각할 때가 가장 빠른 때라는 말도 있지만, 그건 뒤쳐진 사람을 위로하기 위해 쓰는 수사(修辭)에 불과한 것이 아닐까?

출처 링크

물리적인 서버를 더 이상 두지 않는 것, 이것이 내가 꿈꾸는 가까운 미래이다. 업무용 PC까지 완전히 없앨 수는 없겠지만 복잡한 계산을 수행하거나 데이터 파일을 안정적으로 보관·공유하는 데에는 클라우드 서비스 이상 가는 것이 없을 것이다. 가장 기본적인 서비스만 이용할 수 있는 계정으로 가입하여 프리 티어 내에서 할 수 있는 것들을 테스트하기 시작하였다.

자습서를 이용하여 EC2 서비스에서 공개된 AMI(Amazon Machine Image)의 인스턴스를 생성하고 명령행에서 SSH 접속을 해 보았다. 다음으로는 DocMind Analytics에서 준비한 AMI를 이용하는 것을 따라서 해 보는 중이다. 후자에서는 원격 데스크톱 연결을 해야 되는데 아직 개념이 부족하여 어려움이 많다. 돌이켜보니 보니 바로 옆 책상 위에 설치된 리눅스 서버를 연결하면서 원격 데스크톱 접속을 할 생각을 전혀 하질 않았었다. Xmanager로 서버와 연결하는 것을 너무나 당연하게 여겼었는데, 사실 PC와 서버 간에 파일 전송이 필요한 업무를 하는 것이 아니라면 원격 데스크톱 연결이 더욱 탁월한 작업 환경 아니겠는가?

DocMind Analytics의 AMI. 원격 데스크톱 연결을 위해 3389번 포트를 추가로 열어야 한다. 이는 '6. 보안 그룹 구성'에서 추가하면 된다.

구독 경제(subscription economy)의 시대가 되었다. 필요한 자원을 필요한 때에 필요한 만큼만 빌려서 사용하고 그에 상응하는 비용만 지불하면 되는 것이다. 관리에 따르는 책임을 질 필요가 없어지고 말았다. 이제는 컴퓨터가 마치 '배민 라이더스'와 같은 존재처럼 여겨진다. 이것이 미래의 올바른 방향인지는 아직 잘 모르겠다.

AWS 관리 콘솔에 로그인하여 무엇을 클릭해야 할지 아직은 어리둥절한 마음으로 모니터를 바라보는 내 모습이 어쩌면 패스트푸드 매장의 자동주문기 앞에서 긴장을 하고 서 있는 중년의 모습과 다르지 않다. 세상이 변해가니 살아남으려면 배우고 적응을 해야 하는데 그것이 늘 쉽지는 않다.

mg-GlobOS의 제작도 전혀 계획하지 않고 어찌하다보니 여기까지 흘러오게 된 일인데, 그 과정에서 내가 얼마나 큰 즐거움과 보람을 느꼈던가? AWS 입문도 마찬가지의 경로를 걷게 될 것이라 믿는다.

플라스틱 관악기의 세계

관악기를 하나 배워보겠다고 몇년을 벼르던 아들이 결국 없는 용돈을 모아서 동네 악기점에서 오랫동안 진열만 되어있던 트럼펫을 하나 구입하였다고 알려왔다. 연습을 할 환경이 제대로 갖추어지지 못하였는데 어떻게 소리를 내려는지 걱정이 된다. 며칠 연습을 하더니 이제 음계 소리가 나온다면 소리를 녹음하여 보내주기도 했다.


아들이 관악기류를 조사하면서 보내준 정보에 의하면 일반인에게는 아직 잘 알려져있지 않은 재미난 악기가 많았다. 관악기를 플라스틱으로 만들어서 취미로 악기를 배우려는 초심자들이 부담없이 입문하게 만든 것들이다. 우선 전부터 알고 있었던 야마하의 베노바(Venova)라는 것이 있다. 모양은 리코더에 가까운데 색소폰과 클라리넷의 중간쯤 되는 소리를 재현하고 있다. 야마하에서는 이를 캐주얼 관악기라고 부른다. 좀 더 조사를 하니 이런 부류의 악기 중에서 베노바가 가장 늦게 나온 편임을 알게 되었다. 초기 모델(YVS-100)과 알토 베노바(YVS-120) 두 종류가 있다. 꽤 상세하게 기록한 YVS-100의 구입 및 사용기가 여기에 있다.

출처: 야마하 홈페이지

하지만 몇년 전에 아들과 낙원상가를 둘러보다가 접했던 클라리넷 모양의 하얀 플라스틱 악기는 베노바가 아니었다. 한동안 이름이 생각나지 않아서 도무지 인터넷에서 검색을 할 수가 없었다. 그런데 아들이 알려준 Nuvo Instruments라는 회사의 제품 목록에서 드디어 내가 궁금해하고 있었던 악기를 찾아냈다. 그것은 바로 클라리네오(Clarinéo)였다.

출처: Nuvo Instrument 홈페이지
Nuvo에서 개발한 제품을 보니 정말 기가 막히는 것들이 많았다. jFute, jSax, jHorn 등 웬만한 관악기(특히 금관악기)가 다 있는 것이 아닌가. 'j'는 주니어를 뜻하는 것으로 안다. 원래 어린이에게 쉽게 관악기를 익히게 하기 위해 만들어진 것이지만, 성인이 입문용으로 사용하기에도 손색이 없다.

이런 악기로만 구성된 일본의 오케스트라가 있으니 그 이름하여 Akiba Plastic Orchestra! 아마도 플라스틱 악기를 제조하는 업계의 지원을 받는 것 같다. 유튜브에 올라온 라벨의 볼레로를 들어보자. 튜닝 상태는 약간 불만인데(조정 가능한지는 모르겠다) 그래도 멋진 시도 아닌가? 트럼펫, 트롬본에 이러 튜바까지 플라스틱으로 만들었다니 정말 놀랍니다.


이상에서 소개한 악기는 베노바를 제외하면 기존의 악기를 플라스틱으로 재현한 것이다. 이에 반하여 사푼(Xaphoon, 위키피디아)이라는 악기는 하와이 마우이섬의 원주민 연주자 Brian Wittman이 대나무를 이용하여 1972년에 직접 개발한 것이다. 베노바와 마찬가지로 2 옥타브의 음역대를 갖추었다.

출처 링크

대나무를 가공하여 일일이 만들다보니 공급이 달려서 이를 플라스틱으로 대체한 것은 포켓 색스(pocket sax)라고 한다. Xaphoon store에서 다양한 제품을 만나보자.

뉴질랜드에서 만들어지는 Saxmonica는 킥스타터 크라우드 펀딩을 통해서 제품화가 이루어졌다. 현재는 두 개의 관을 추가한 Generation 2가 발매되고 있다.

출처: 아마존
Saxmonica는 반주용 트랙 연주기 앱을 제공한다는 것이 특징이다.

미국 플로리다에서 만들어내는 스테인리스 스틸 재질의 MiniSax라는 것도 있다. 이 글의 제목인 '플라스틱 관악기의 세계'와는 어울리지 않으나 쉽게 배워서 가볍게 들고 다니며 연주하기 위해 만들어진 악기라는 면에서는 일치한다. 공식적인 음역은 1 옥타브에 불과하지만 특별한 테크닉을 써서 높은 음을 낼 수 있다고 한다. 이는 다른 악기에 대해서도 마찬가지일 것이다. 제작자가 만든 동영상을 여기에서 만날 수 있다.

출처 링크

포켓색스는 좁은 의미로는 사푼을 플라스틱으로 재현한 것이지만 휴대용 색소폰이라는 일반적인 의미로도 쓰인다. 알리익스프레스에서 pocket/mini/portable/little sax(or saxophone)을 검색하면 위에서 소개한 것과 거의 같거나(사푼 계열) 또는 다른 플라스틱 관악기가 꽤 많이 나온다. 그중에서 Ammoon이란 악기 회사의 것은 10 best pocket saxophone reviews 2019 - best xaphoon에서도 언급되었다.

Ammoon B♭ mini saxophone. 출처 링크
마지막으로 소개할 것은 미니 클라리넷 또는 클라리노(clarineau)라 불리는 것이다. 앞서 소개한 모든 악기들의 원형이자 클라리넷의 원형인 샬뤼모(chalumeau, 위키피디아)에서 발전된 것이라 한다. 독일식 리코더(그렇다, 초등학교에서 누구나 배웠던)의 운지법을 따르기 때문에 입문용으로는 좋을 것 같다는 생각이 든다. 물론 바로크식 운지법을 따르는 클라리노도 있다. 클라리노는 독일 Kunath의 것이 원조인 것으로 보이고 국내 브랜드인 YAN(현재는 중국 OEM 생산, Yan Music 블로그)의 'clarino'가 있다. 서초동에 있는 유럽악기 웹사이트에서 사푼/미니오보에/께나 카테고리를 보면 관련 제품이 많이 보인다. 유럽악기는 국내에 Kunath의 제품을 독점 공급하고 있으며 YAN 제품은 악기나라 등에서 공급한다.

Kunath 웹사이트의 리드 악기 소개. chalumeau와 clarineau는 별개의 악기이다.


출처: 악기나라
바로크 및 독일식 운지법의 차이(리코더)는 여기를 참고하라. 대단히 중요한 정보가 담겨 있으니 정독을 권한다.

원래 내가 가장 좋아하는 음색을 내는 관악기는 호른(혼)이다. 그러나 내가 이를 배울 수 있을 것이라고는 생각하지 않는다. 이것이 오보에와 더불어 가장 연주하기 어려운 관악기라고 하지 않던가. 현실적으로 배울 수 있는 악기 중에서는 클라리넷에 관심이 많다. 사촌 동생이 클라리넷 연주자라서 혹시 독학을 하다가 막히면 도움을 좀 받을 수 있지 않을까하는 마음도 있다. 색소폰은 중년 남성들이 너무들 많이 달려들어서 왠지 호감이 가지 않는다.

내가 만져본 관악기는 초등학교 교재용 악기의 대명사로 잘못 인식된 소프라노 리코더와 단소가 전부이다. 단소는 소리를 제대로 내 본 적이 없다. 리드의 구조와 소리가 나는 원리, 입술의 떨림으로 소리가 나는 트럼펫 계열과의 차이, 이조악기라는 묘한 특성 등등 새로 공부할 것이 무척 많다.

문제는 연습을 할 장소가 마땅치 않다는 것. 이러한 점에서는 아들녀석도 마찬가지이다. 몇 대의 일렉기타와 신세사이저가 내 관심을 기다리면서 집과 사무실에서 먼지만 뒤집어쓰고 있는데, 이 와중에 관악기라니... 좀 더 고민을 해 보자.

2019년 11월 16일 토요일

mg-GlobOS 0.11(1911)의 탄생

이번 월요일에 있었던 미생물 유전체 해독 및 분석 교육에서 사전에 준비했던 자료를 수업 시간에 전부 소화하지 못한 아쉬움을 달래기 위하여 당시에 사용한 환경을 리눅스 가상 머신으로 만들어 그 OVA 파일을 배포하기로 결심을 하였다. 이름은 mg-GlobOS라고 지었다. mg는 microbial genome, Globe는 내가 쓰는 도메인인 GenoGlobe(.com 및 .kr)에서 딴 것이며, OS는 CentOS처럼 Operating System을 의미한다. 첫 공개판의 버전은 0.11 (1911)이다.

공식 웹사이트는 다음의 위치로 정했다.

http://genoglobe.kr/kribb/mg-globos

OVA 파일 및 실습용 데이터는 나의 구글 드라이브에 올려서 전체 공개를 해 놓았다. 일루미나 플랫폼으로 읽은 미생물 유전체의 데이터를 평가, 조립, 매핑, 비교 분석 및 pan-genome analysis 등을 하기 위한 프로그램들을 bioconda 및 기타 방법으로 설치하였고, 전체 과정을 재현할 수 있는 스크립트와 샘플 데이터를 준비해 두었다.

어쩌면 TORMES 파이프라인(PubMed 링크)과 같은 것을 잘 익혀서 교육 및 실무용으로 사용하는 것이 더 효율적일지도 모른다. 그러나 작업 스타일에 따라서 가져다 붙여야 하는 요소 프로그램이 전부 다르므로 한 가지 파이프라인이 꾸준하게 살아남는 일은 드물다. 오히려 특정 기능을 담당하는 'killer app'은 계속 살아남지만 말이다.

mg-GlobOS를 유지하고 개선하는 일 자체가 나에게는 보람있는 일이 될 것이라 믿는다.

아나콘다를 설치해 놓은 다음 필요한 conda package를 하나씩 설치하다보면 dependency 사이에 inconsistency가 있다면서 거의 모든 패키지를 홀라당 뒤집어 엎는 일이 생긴다. mg-GlobOS에서도 첫번째 패키지인 khmer를 설치한 뒤 jellyfish를 설치할 때 뭔가 심상치 않은 일이 있음을 느꼈고, 나중에 다른 패키지를 설치할 때 전체를 뒤집어 엎는 듯한 메시지를 만났었다. 비록 치명적인 에러가 발생하지는 않았지만 왜 이런 일이 벌어지는지 늘 그 원인이 궁금했었다. GitHub의 conda 이슈 목록에 올라온 다음의 글에서 해결 방안이 보이는 듯하다.

After fresh install of 2019.03, second run of conda upgrade --all removes nearly all packages. #8940 (o12joyns의 7월 23일 코멘트를 참고할 것)

Anaconda 설치 직후 conda upgrade --all을 두 차례 실시하면 된다. 쉽게 말해서 설치에 사용한 anaconda distro와 현재의 차이점을 전부 없애주는 일이라고 생각할 수 있다. 일부 패키지가 custom 버전으로 되돌아갔다가 다시 원상복구(혹은 업데이트?)되는 것은 결코 바람직하지는 않지만 현실은 그러하다.

갑자기 upgrade와 update의 차이점이 궁금해지기 시작했다!

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는 어떻게 대처하는지 궁금하다.

2019년 11월 12일 화요일

NCBI에 등록된 미생물 유전체 정보를 기준으로 가장 많이 시퀀싱된 종은 무엇일까?

10월 하순에 다운로드한 GenBank의 bacterial genome assembly summary file(링크)을 기준으로 species 단위로 집계를 해 보았다. subspecies는 고려하지 않았다. 이 파일은 매일 업데이트되고 있는데, 오늘 기준으로 무려 477,023 줄이나 된다. 첫 두 줄은 코멘트와 컬럼 설명이므로 등록된 유전체의 수는 477,021 건이란 뜻이 된다.

가장 많이 시퀀싱된 species 상위 100개를 정리하였다. 오른편의 숫자는 등록된 서열 건수이다. 1,000 건이 넘는 species는 28개이다. Pseudomonas sp.처럼 종이 특정되지 않은 것을 제외한다 하여도 대부분 병원성 세균이다. 특히 1위와 2위의 격차가 상당히 크다. 이 집계가 의미가 있으려면 시퀀싱된 것 중에서 complete genome level까지 된 것의 비율(혹은 수)을 산출하는 것도 필요하다.

나는 Salmonalla enterica가 왜 이렇게 중대한 병원성 세균인지에 대한 지식은 별로 갖고 있지 않지만, 최근 출판된 논문 앞부분을 슬쩍 훑어보니 꽤 심각한 녀석임에는 틀림이 없다.

Genomic features of high-priority Salmonella enterica serovars circulating in the food production chain, Brazil, 2000-2016. Scientific Reports volume 9, Article number: 11058 (2019)
Multidrug-resistant (MDR) Salmonella enterica has been deemed a high-priority pathogen by the World Health Organization. Two hundred and sixty-four Salmonella enterica isolates recovered over a 16-year period (2000 to 2016) from the poultry and swine production chains, in Brazil, were investigated by whole-genome sequencing (WGS).
아래 목록에서 11위를 차지하고 있는 Acinetobacter baumanii 데이터 중에는 내가 속한 연구 그룹에서 연세대학교 의과대학과 같이 작업을 했던 99건의 시퀀싱 결과물도 포함되어 있을 것이다. 등록한 데이터의 규모가 문제가 아니라 좋은 연구 논문이 나와 주어야 하는데.. 그게 걱정이다.

Salmonella enterica 170291
Campylobacter jejuni 28931
Listeria monocytogenes 23428
Streptococcus pneumoniae 21530
Escherichia coli 20299
Campylobacter coli 11687
Staphylococcus aureus 10907
Klebsiella pneumoniae 8642
Mycobacterium tuberculosis 6680
Pseudomonas aeruginosa 5223
Acinetobacter baumannii 4394
Clostridioides difficile 2824
Pseudomonas sp. 2649
Streptococcus pyogenes 2604
Neisseria meningitidis 1971
Shigella sonnei 1847
Enterococcus faecium 1804
Mycobacteroides abscessus 1724
Burkholderia pseudomallei 1568
Helicobacter pylori 1518
Enterococcus faecalis 1451
Vibrio parahaemolyticus 1346
Streptococcus suis 1303
Vibrio cholerae 1257
Streptococcus agalactiae 1222
Bacillus cereus 1094
Bordetella pertussis 1056
Rhizobiales bacterium 1006
Mesorhizobium sp. 999
Gammaproteobacteria bacterium 925
Streptomyces sp. 874
Legionella pneumophila 824
Enterobacter hormaechei 819
Bacteroidales bacterium 800
Haemophilus influenzae 753
Shigella flexneri 751
Enterobacter cloacae 739
Staphylococcus epidermidis 737
Bifidobacterium longum 709
Neisseria gonorrhoeae 650
Prochlorococcus sp. 643
Chloroflexi bacterium 631
uncultured Clostridiales 578
Actinobacteria bacterium 565
Bacillus thuringiensis 545
Serratia marcescens 538
Clostridiales bacterium 537
Bacillus sp. 529
Alphaproteobacteria bacterium 504
Lachnospiraceae bacterium 484
Deltaproteobacteria bacterium 472
Pseudomonas syringae 469
Lactobacillus plantarum 467
Cronobacter sakazakii 456
Xanthomonas oryzae 448
Stenotrophomonas maltophilia 436
Bacteroidetes bacterium 433
Acidobacteria bacterium 423
Acidimicrobiaceae bacterium 418
Firmicutes bacterium 415
Acinetobacter pittii 414
Yersinia pestis 400
Yersinia enterocolitica 389
candidate division 367
uncultured Collinsella 354
Clostridium sp. 351
Brucella melitensis 343
Verrucomicrobia bacterium 336
Campylobacter upsaliensis 333
Acinetobacter sp. 333
Parcubacteria group 332
Ruminococcaceae bacterium 321
Flavobacteriales bacterium 321
Flavobacteriaceae bacterium 315
Yersinia pseudotuberculosis 311
Bacillus subtilis 311
Leptospira interrogans 310
Campylobacter lari 309
Burkholderia ubonensis 307
Klebsiella oxytoca 301
Burkholderia cenocepacia 301
Bacteroides fragilis 301
Rhizobium leguminosarum 298
Bifidobacterium adolescentis 298
Klebsiella variicola 295
Planctomycetes bacterium 293
Prevotella sp. 276
Klebsiella quasipneumoniae 276
Cutibacterium acnes 274
Alistipes onderdonkii 270
Ruminococcus sp. 267
Streptococcus equi 265
Proteobacteria bacterium 263
Staphylococcus haemolyticus 262
Rhodobacteraceae bacterium 261
Pseudomonas stutzeri 261
Clostridium botulinum 248
Staphylococcus sp. 246
Francisella tularensis 243
Oenococcus oeni 242