2017년 3월 28일 화요일

Bracken: Baysian Reestimation of Abundance with Kraken

Whole-genome shotgun sequencing 방식의 metagenomics에서 read(or contig)의 분류(또는 binning)과 더불어 중요한 목표는 군집을 이루는 각 미생물의 abundance를 추정하는 것이다. 즉 실제 미생물이 각 종에 따라서 어느 정도의 개체수를 유지하고 있는지를 알아내는 것을 의미한다. 이 수치는 직접적으로 측정하는 것은 불가능하고 단지 추정만 가능할 뿐이다.

전통적인 abundance estimation 방법으로는 유전체 안에 한 벌씩만 존재하는 마커에 대하여 서열을 query로 던져서 검색하여 추정하는 MetaPhyler,  PhyloSift 등의 방법이 있다. 이것 말고도 그 기본적인 원리를 나의 얄팍한 지식으로는 완벽하게 이해하기 어려운 방법들이 많이 존재한다.

Abundance estimation의 결과물은 각 taxon에 해당하는 퍼센트 수치이다. 그렇다면 서열 데이터를 각 taxon에 맞게 분류하면 얼마나 쓸모가 많겠는가? 이런 binning software로서 가장 최근에 공부한 것은 다음의 두 가지이다.

MaxBin: an automated binning method to recover individual genomes from metagenomes using an expectation-maximization algorithm.

PhyloPythiaS+: a self-training method for the rapid reconstruction of low-ranking taxonominic bins from metagenomes.

Read classifier로는 그동안 Kraken을 가장 즐겨 사용했었다. 하나의  short read에 하나의 taxonimic label! 매우 빠르고 깔끔한 결과가 나온다. 그러면 이러한 classifier를 사용하여  metagenomic sample의 abundance를 추정할 수는 없을까? Kraken 개발팀(존스홉킨스 대학 전산생물학 센터)에서는 최근에 Bracken이라는 도구를 발표하였다.

Bracken: estimating species abundance in metagenomics data. 프로그램 웹사이트

논문을 읽어보니 성능이 꽤 좋은 것으로 생각된다. Bracken을 사용하려면 Kraken 데이터베이스를 만들 때 사용한 라이브러리 파일(.fna)과 gi2seqid.map 파일이 필요하다. 예전에 만든 standard kraken DB는 --clean 명령을 사용해서 taxonomy 디렉토리와 database.kbd + database.idx 파일만 남기고 싹 지워버려서 Braken에 사용할 수가 없다. 따라서 다시 데이터베이스를 만드는 작업을 시작하였다.

오랜만에 standard kraken DB를 다시 만들다보니 궁금한 점이 생겼다.

  1. Kraken 매뉴얼 페이지에서는 low-complexity region을 NCBI BLAST 패키지의 dustfilter로 제거하는 것을 강력히 권장하였다. 그런데 가장 적당한 dustfilter의 옵션값은 무엇인가? Readme 파일과 논문을 봐도 잘 모르겠다. 이 필터 기능이 Kraken에 포함되어 있다면 매우 좋겠지만 그렇지 못하다. Kraken의 저자 중 하나인 Salzberg에 의하면 개발팀 내부적으로는 필터를 쓰고 있다고 하였다. dustfilter의 기본 옵션을 그대로 사용하여 필터링을 하는 사례는 여기에 소개되었다. dustfilter를 거치면 소문자로 전환되므로 이를 N으로 바꾸는 트릭이 필요하다. 실제로 필터가 끝난 파일을 하나 열어보니 최소 일곱개의 염기가 반복되면 마스킹이 된다. 너무 짧은 repeat을 필터링하는 것은 아닌지?
  2.  NCBI에서 자동으로 내려받는 파일 중 박테리아의 것은 all.fna.tar.gz(genome) 하나인데 바이러스의 것은 all.fna.tar.gz + all.ffn.tar.gz(gene) 두 가지이다. 왜 ffn 파일까지 받아서 DB 작성을 한단 말인가? 특별히 문제가 될 것은 없겠으나 - 모든 유전자 파일은 유전체 서열 파일에 포함될 것이므로 - 시간은 약간 낭비될 것이다. 다음은 download_genomic_library.sh 스크립트의 해당 라인이다.

 76       wget $FTP_SERVER/genomes/Viruses/all.fna.tar.gz
 77       wget $FTP_SERVER/genomes/Viruses/all.ffn.tar.gz
 78       echo -n "Unpacking..."
 79       tar zxf all.fna.tar.gz
metAMOS를 써 보려고 일년 가까이 노력하였고 이제 조건을 다 잡았다고 생각하였으나. HMP project의 mock sample(NCBI BioProject 48475)을 분석해 본 결과 metAMOS 논문에서 보여준 Figure 3이 재현되지 않았다. Deicoccocus-Thermus phylum만 100%가 나오는 해괴한 결과가 도무지 개선되지를 않았다. metAMOS를 설치하면서 Linuxbrew 및 python  업그레이드 등의 많은 기법을 익힌 것은 분명히 긍정적이었지만, benchmark test 결과를 신뢰할 수 없는 상태에서는 분석 실무에 쓰기가 곤란하다. Assembly에 기반한 abundance estimation이라는 것도 썩 마음에 들지는 않는다.

2017년 3월 20일 월요일

진도항에 다녀오다

2014년 4월 16일. 대한민국의 모든 사람들은 날짜를 이날 전으로 돌리고 싶은 심정일 것이다. 만약 그날 모두가 다른 선택을 할 수 있었다면, 아이들이 어른들의 말을 듣지 않았다면, 우리 사회가 좀 더 성숙한 상태였다면, 그러면 이런 참사는 벌어지지 않았을텐데.


지난 겨울, 전국을 달구었던 촛불 집회에 한번도 참석하지 못한 소심한 가장으로서 이 사회를 움직이는데 필요한 소리를 내지 못한 부끄러움을 안고 그러한 대신 다른 이들의 아픔을 조금이라도 나누고자하는 뒤늦은 생각에 아들과 함께 차를 몰고 진도항으로 향했다. 대전에서 호남고속도로와 서해안고속도로를 번갈아 달려 약 4시간 가깝게 운전을 한 끝에 진도 끝자락 진도항(구 팽목항)에 도달하였다. 진도항은 한시간에 한번 정도로 인근 도서를 오가는 배편이 서는 작은 항구였다. 관광객이 시끌벅적 모이고 어선이 분주히 드나드는 그런 항구가 아니었다. 가건물로 만들어진 분향소와 미수습자 가족 숙소 사이로 삼삼오오 추모객들이 오가며 눈시울을 붉히고 있었다.


눈물이 앞을 가린다. 수학여행을 떠나온 아이들은 곧 닥칠 자기들의 운명도 알지 못한채 선실에 그대로 있으라는 어리석은(아니, 추악한!) 어른들의 방송만을 믿고 다시는 돌아오지 못할 길을 떠나고 말았다. 왜 그래야만 했나? 어른들의 말에 순종하라는 당연한 교육을 받은 아이들은 그 말을 너무나 착실하게 들었고 배를 책임져야 할 못난 어른들이 빠져나오는 동안 차가운 바닷물 속으로 가라않고 말았다. 그들은 배를 서둘러 빠져나오면서도 휴대폰을 챙기고 바닷물에 젖은 지폐를 말릴 여유는 있었다. 도대체 무슨 생각을 하는 사람들이란 말인가? 아니, 사람이 맞나? 왜 아이들이 타야 할 배편이 황급히 바뀌고, 다른 배들은 다 출항을 취소하는 나쁜 날씨에도 불구하고 왜 세월호는 다시는 돌아오지 못할 길을 떠나야만 했나? 제대로 된 구조는커녕 왜 윗선에 보고할 생존자 숫자놀음이나 했어야 했나? 왜? 왜?


방파제를 따라 세워진 솟대는 멀리 동거차도를 바라보고 있다. 오늘은 돌아올 수 있을까? 또 오늘은 돌아올 수 있을까? 벌써 사고가 난지 만 3년이 지나고 있다. 이제야 인양을 한다니 도대체 그동안은 뭘 했단 말인가. 안타까운 사연을 담고 펄럭이는 노랑 깃발과 리본은 거센 바닷바람과 햇볕에 점점 낡아져 가는 모습이었다.



오늘도 동거차도 산꼭대기에서는 인양 작업을 감시하는 미수습자 가족의 힘겨운 하루가 저물고 있을 것이다. 기다림의 의자는 오늘도 남은 아이들이 돌아오길 기다리고 있다.




2017년 3월 17일 금요일

FALCON assembler 익히기

FALCON과 FALCON-unzip은 PacBio long read를 이용하는 de novo assembler 프로그램이다. FALCON-unzip은 진정한 의미의 diploid assembler이다. FALCON의 실행을 위한 파이썬 버전 문제, 그리고 Sun Grid Engine의 필수 여부 등과 관련하여 설치에 어려움을 겪다가 KOBIC의 지원으로 일단 테스트 러닝을 하는 데에는 성공하였다. 그러나 직접 설치를 하지 않고는 못배기는 성미로 인하여 32 코어/1테라바이트 메모리가 장착된 서버에 이를 설치하고 local job type으로 대장균 test read를 조립하는데 성공하였다. 처음에 에러 없이 실행된 결과물에서 p_contig(primary contig) 파일을 확인하니 겨우 1 megabase도 안되는 조립물이 나와서 무척 충격적이었는데, FALCON 웹사이트의 자료를 탐독한 결과 length_cutoff를 충분히 작게 잡으면(12~15 kb; -1로 설정하면 프로그램이 결정함) 제대로 된 결과가 나올 것이라고 하였다. 이 조언대로 다시 실행하여 4.6M에 이르는 대장균 염색체가 하나로 나옴을 확인하였다.

왜 나에게는 FALCON 설치가 그렇게 어려웠었나? 이 모두가 파이썬 2.6을 기본으로 갖고 있는 CentOS 6.x 배포판 덕분이다! 파이썬 2.7 이상을 설치하는 방법은 한 두 가지가 아니다.

  1. 소스로부터 패키지를 가져다 configuration & build를 한 뒤 make altinstall하기
  2. Linuxbrew로 설치하기
  3. Anaconda 사용하기
  4. pyenv 사용하기...
1 TB 서버에서 사용한 방법은 1과 3의 두가지이다. 각각 일장일단이 있다. 만약 이 컴퓨터를 나 혼자 쓴다면 Linuxbrew나 Anaconda로 최신 버전의 파이썬을 쓰도록 만들면 될 것이고, 다른 유저가 있다면 1번이 유리하다. 

파이썬만 2.7.9 버전 이상이 설치된 상태라면 다음 위키 사이트에 나온 그대로 하면 FALCON-integrate가 무사히 설치될 것이다.

https://github.com/PacificBiosciences/FALCON-integrate/wiki/Installation

그러고나서 FALCON-examples/run/ecoli로 이동하여 fc_run.cfg의 #job_type = local 라인 앞부분의 #를 삭제한다.  jobque/sge_option 등은 그대로 두거나 등호 오른쪽을 비워버려도 된다. 대신 해당 파라미터 라인을 지우면 안된다. 이제 FALCON-examples 디렉토리로 올라가서 make run-ecoli라고 하면 자동적으로 샘플 raw data를 다운로드한 뒤 조립에 착수한다. 

설치 직후 로그아웃을 한 뒤 다시 접속한 상태라면 PYTHONUSERBASE와 PATH 환경변수를 제대로 설정해야 한다. 정 귀찮으면 FALCON-integrate 디렉토리고 가서 source env.sh를 실행한 뒤 테스트 런을 하면 된다.

소스로부터 설치한 파이썬 2.7 버전을 활용과 동시에 추가적인 패키지를 설치하려면 도대체 python interpreter를 어떻게 불러야 하는지 지금껏 고민을 하고 있었다. python2.7이라고 써야 하는건지 아닌지 고민이 많았었는데, 그저 PATH=/path/to/python2.7:$PATH라고 하면 되는 것이었다. 그러면 필요한 패키지는 2.7 버전에 맞는 제 위치에 설치될 것이고(관리자 권한이 있는 경우), 아니면 PYTHONUSERBASE 환경변수를 잘 활용하면 되는 것이었다. 이렇게 허무할 데가!

지식의 샘을 팔수록 무식의 깊이가 깊어짐을 느낀다. 이것이 진정한 깨달음인가?

2017년 3월 11일 토요일

시계 줄질하기

줄질이란 손목시계의 줄을 손수 바꾸어 끼는 것을 말한다. 바넷봉(Barnett rods)의 구조와 이것이 시계 몸통에 끼워지는 원리를 알면 누구나 쉽게 할 수 있는 일이다. 요령이 있으면 전용 공구 없이도 커터칼 같은 것으로 바넷봉을 빼고 끼울 수는 있다. 지난 1월에 구입한 시계의 금속 줄이 너무 쩔렁거리며 소리를 내는 것이 싫어서 교체를 시도하였다. 이는 엔드피스, 즉 시계줄이 시계 몸통에 연결되는 부분에 마지막으로 채워지는 부품이 철판을 접어서 만든 단순한 형태이고 꽉 채워지지 않는 구조라서 생기는 문제이다. 흔히 나토밴드라고 불리는 시계줄의 단색 모델, 교체공구(사은품), 그리고 바넷봉을 인터넷으로 구입하였다. 나토밴드는 원래 국기에 쓰이는 색이 3선 또는 5선으로 들어가는 것이 정석이다.



이 시계의 몸통은 내가 보기에는 스테인리스 스틸이 아니다. 처음 물건을 받았을 때 묵직하지 않고 가볍고 광택도 너무 가볍고 튄다는 느낌이 있었는데, 금속 시계줄을 줄이느라 몇번 서툴게 다루는 과정에서 줄보다 본체에 상처가 쉽게 나는 것 아닌가? 벗겨진 광택 아래로 약간 노랑색 혹은 붉은색의 속살이 드러난다. 이게 뭐지? 그렇다. 황동 몸통에 니켈이나 크롬으로 도금을 한 것일게다. 판매처에서는 스테인리스 스틸 케이스라고 버젓이 광고를 하는데? 좀 더 알아본 뒤 문제를 제기해 보련다. 비록 저가 시계라 해도 비싼 수업료를 내고 말았다.

요즘 주력으로 차는 시계의 사진을 게시해 본다. 용두를 제외한 직경은 두 시계가 거의 같다(약 42mm). 아래는 국산 브랜드인 아르키메데스(쿼츠).


그리고 가장 최근에 해외에서 직접 구매한 오리엔트(오토매틱).




2017년 3월 3일 금요일

오리엔트 시계 FEM7P007B9 구입 및 수령기

화요일 저녁무렵이 다 되어서 Creation Watches에서 주문한 시계가 만 48시간이 되기도 전에 나에게 도착하였다. DHL을 통해서 싱가폴에서 한국까지 단숨에 배송이 된 것이다. 옥션이나 11번가 등을 이용하여 국내에서 물건을 산 것과 무엇이 다른가? 워낙 저렴한 물건이라서 관세 및 부가세는 물지 않았다.



누런 종이상자를 여니 완충재와 함께 제품 설명서와 흰 종이 상자가 나왔다. 그 안에는 오리엔트 상표가 찍힌 멋진 상자와 보증서가 들어있었다. 내가 오리엔트의 제품을 택한 것은 매우 합리적인 가격에 Made in Japan의 품질을 누릴 수 있다는 것 때문이다. 세이코의 경우 저가 제품 중에는 일본이 아닌 곳에서 제조되는 것이 매우 많다. 삼일절 무렵에 일제 공산품을 산 행위를 반성해야 할까?


기대감을 안고서 상자를 열어보았다. 오.. 이것이 오리엔트 Tristar(혹은 Three Star)의 오토매틱 손목시계란 말인가. 용두를 제외한 직경은 42 mm이며 1971년에 최초로 생산된 유서깊은 469 무브먼트를 탑재하였다. 요일은 2시 방향 옆면에 위치한 버튼을 뾰족한 것으로 누르면 철컹 철컹 둔중한 느낌과 함께 변경된다.



유일한 단점은 철판을 접어서 만든 '깡통 시계줄'이라는 것이다. 이 가격대의 오토매틱 시계에서는 피할 수 없는 선택이다. 그대신 매우 가볍다는 장점이 있다. 이 시계를 받은 날 차고 나왔던 아르키메데스 시계와 함께 사진을 찍었다. 단순 명료한 디자인의 숫자판과 시계바늘이 보여주는 시인성은 정말 최고다.


퇴근 후 시계줄을 직접 조정해 보았다. 뾰족한 것으로 가는 못 모양의 핀을 밀어서 링크를 빼는 보통의 시계줄과는 방법이 사뭇 달라서 애를 먹었다. 시계줄 안쪽의 화살표 옆에 있는 구멍에 송곳을 쑤셔넣어서 넓적한 판 모양의 핀을 바깥쪽으로 밀어내는 방식이다. 상처가 나지 않도록 조심스럽게 작업하였다. 이 시계줄은 손목에 차는데는 문제가 없지만 접히거나 꺾이질 않는다.


마지막으로 1월에 구입한 생애 최초의 오토매틱 손목시계와 함께. 중국에서 만들어진 Winner라는 브랜드의 것이다.


시계의 무브먼트를 왜 Caliber라고 표현하는지는 잘 모르겠다. Caliber 469의 일 오차는 +25~-15초 수준이다. 오후 9시와 오전 4시 사이에는 날짜/요일 변경 메카니즘이 이미 작동 중이므로 조정하지 말아야 한다. 21개의 보석이 박혀있으며 21,600 진동/시간, 즉 1초에 초바늘이 여섯번 움직인다. 수동 감기와 hack(용두를 뽑으면 초침이 멈추는 기능)은 없는 매우 단순한 기능만을 갖고있다. 태엽이 완전히 감겼을 때 작동 시간은 40시간 이상이다. 위 사진의 중국제 파랑색 시계(수동 감기가 된다)보다 더 오래 작동하는 것처럼 보인다. 왜냐하면 배송 도중의 흔들림에 의해 태엽이 감기는 정도는 매우 적을것이 자명한데, 어제 제품을 받고 잠깐동안 착용한 것만으로 오늘 아침까지도 잘 작동되었기 때문이다. 위너 서브마리너는 이런 조건이라면 밤새 작동을 멈추었을 것이다. 아마도 Caliber 469는 더 이상 나아질 것이 없는 진화의 정점에 도달한 것으로 생각된다.

처음에는 다이버 시계의 디자인에 끌려서 오리엔트 Mako를 구입할 생각을 했었다. 인터넷을 뒤지면 Mako를 비롯한 오리엔트의 인기 모델에 관한 많은 리뷰(동영상 포함)가 존재한다. 그럼에도 불구하고 저가형 입문 모델로 취급되는 Tristar 라인을 택한 것은 순전히 가격 때문이었다. 금색으로 포인트를 준 것도 큰 몫을 하였다. 왜냐하면 기왕이면 내가 끼고 다니는 모든 종류의 반지(일반 금, 화이트 골드, 스테인리스 스틸)와 골고루 어울렸으면 하는 바람이 있었기 때문이다. Symphony, Starfish, Anchor, Chicane 등 오리엔트 시계에 10자리의 모델번호 이외에 별칭이 존재하는데, 이중 심포니와 앵커도 고려 대상이었다. 하지만 이들과 같은 등급의 무브먼트를 쓴다면 저가 제품이라 해도 정확도에는 큰 문제가 없을 것이라 생각하였다. 

이것으로 시계 관련 정보를 찾아서 인터넷을 뒤지던 나쁜(?) 버릇을 그만 두고자 한다. 물론 장담은 하지 못한다.

맥북 프로 첫걸음, 가야 할 길인가 혹은 아닌가?

바로 옆 사무실의 동료가 대학으로 직장을 옮기면서 꽤 많은 컴퓨터와 모니터를 넘겨받게 되었다. 비좁은 사무실에서 나는 완전히 대형 모니터들로 포위된 꼴이 되고 말았다. 공교롭게도 바로 지난주에 장렬히 전사한 CrossOver 대형 모니터까지 아직 치우지 못한 상태이니 말이다. 첫 관문이자 시련은 삼성 32인치 LED 모니터를 내 사무용 컴퓨터에 연결하는 것이었다. HDMI 케이블로 연결을 하니 최대 해상도인 2560x1440이 나오지를 않는다. 디스플레이 포트로 연결을 해야 한다는 것이다. 작년 말에 최신 노트북 컴퓨터를 구입하면서 이런 포트가 있다는 것을 처음 알게된 수준이니 어찌 당혹스럽지 않겠는가. 하지만 내 컴퓨터 본체의 그래픽 카드에는 디스플레이 포트가 없다. 근본적인 해결책은 32인치 모니터와 같이 연결해 쓰던 컴퓨터 본체를 쓰면 되지만, 옮겨야 할 파일이 너무 많아서 당장 실행하기는 어려운 형편이다. 그리고 현재 사용하는 본체는 네트워크 어댑터가 두 개 달려있는데, 이를 가끔 활용하기 때문에 당장은 본체를 갈아탈 생각이 없다. 그래서 그래픽 카드만 뽑아서 내 컴퓨터에 장착해 보았다. 해상도는 이제 제대로 나오지만 화면이 그려지는 속도가 느리다는 것이 느껴질 정도이다. 그래픽 카드 드라이버가 문제일 것이다. 내 컴퓨터의 제어판에서는 아예 이 카드의 제조사도 표시도 하지 못하는 수준이니 말이다.

도대체 이 그래픽 카드는 어떤 제품이지? 재부팅을 시켜서 윈도가 뜨기 전 화면에 처음으로 표시되는 텍스트를 주시하였다. NVIDIA GeForce GTX 960이라고 표시가 되었다. 그러면 제조사 홈페이지에 가서 최신 드라이버를 받아다 깔면 될 것이라고 간단하게 생각하였다.

그런데 압축을 풀고 설치를 하는 과정에서 시스템 호환성 검사가 도무지 끝나질 않는다. 내 컴퓨터 본체가 너무 느려서 그런가? 컴퓨터를 구입할 때 받아놓은 드라이버 CD 혹은 DVD-ROM이 남아있다면 조금 더 편하련만. 일단 최신 그래픽 카드 드라이버를 설치하는 것은 중단하였다.

다음으로는 맥북 프로와 전용 모니터이다. 나는 아이패드를 몇 년 동안 써 본 것을 제외하면 애플의 제품을 경험한 일이 없다. 지금은 바로 문제의 맥북 프로를 가지고 글을 쓰는 중이다. 한영 전환도 어색하고, 사실상 백스페이스처럼 작동하는 delete 키도 영 이상하다. 텍스트 복사와 붙여넣기는 Control+C or V가 아닌가? 기본 설정, 앱 설치, 윈도7 동시 사용, 리눅스 서버 연결 등등 새로 배울 것이 너무나 많다. 그리고 맥북 프로 전용 모니터는 오직 여기에만 써야 하는 것인가? 벌써부터 머리가 아프다.

웹을 뒤적이다가 도발적인 제목의 글을 발견하였다.

맥북 프로 장점은 이제 없다. 남은 것은 후회뿐.

시작도 하기 전에 좌절을 미리 맛보게 하는 글이다. 온갖 불편을 감수하면서 "나 맥 쓰는 사람이야"가 유일한 이유가 되어서는 안될 것이다. 슬슬 고민이 밀려온다. 가볍게 시작하려다가 고민만 떠안게 되었다. 정말 내가 맥북 프로를 익혀서 쓸 수 있을까? 아예 이참에 업무 환경을 몇 대의 노트북과 대형 모니터, 그리고 외부 저장장치 위주로 바꾸어 볼까?

[추가 작성]

공정성을 기하기 위해서 맥의 긍정적인 면을 기술한 글도 소개해 본다.