2014년 1월 29일 수요일

[CLC bio - de novo assembly] 최적의 word size와 bubble size 결정

들어가는 말 - 나는 bioinformatics의 전문가가 아니다. 그저 매뉴얼 보고 공부하면서 업무에 필요한 몇 종류의 tool을 익혀 쓰는 사람이고, 리눅스를 즐겨 쓰는 수준이다.

거대 유전체의 de novo assembly에는 ALLPATHS-LG가 현재 가장 인기있는 도구라고 생각된다. 내가 주로 다루는 데이터는 세균과 효모 정도라서 아무리 게놈이 커 봐야 15 Mb 정도이다. 이런 상황에서는 CLC Genomics Workbench가 가장 편리한 솔루션이다. 메모리나 임시 디렉토리가 부족하여 곤란을 겪는 일도 별로 없다.

관련 매뉴얼은 여기에 있다. CLC Genomics Workbench 또는 CLC Assembly Cell 항목을 클릭하여 원하는 섹션을 찾아보라.

http://www.clcsupport.com/


CLC를 사용할 때 설정을 건드릴 만한 부분은 그다지 많지 않다. 가장 중요한 것은 word와 bubble의 size이다. Word는 de Bruijn graph를 사용하는 NGS de novo assembly 알고리즘에서 논의되는 k-mer와 동등한 개념인 것으로 알고 있다. 그런데 내가 알기로 k-mer는 항상 홀수로 지정되는데 반하여 CLC의 word는 짝수로 설정할 수도 있는 모양이다. 프로그램 내부적으로 어떻게 취급되는지는 나도 잘 모른다.

SOAPdenovo의 웹페이지에 실린 글을 참고해 보자. 이 프로그램에서 k-mer는 13..127 범위의 홀수로 설정할 수 있다. k-mer가 크면 그래프가 심플해지지만 시퀀싱 depth가 높아야 하고 read의 길이도 커져야 한다. k-mer가 read 길이보다 작아야 함은 당연하다. VelvetOptimiser는 최적의 결과를 산출하는 k-mer와 -exp_cov, -cov_cutoff 조건을 결정해 준다.

Word size

시퀀싱 분량이 많고 오류가 적다면 word size가 큰 것이 repeat을 해결하는데 유리하다. 그러나 시퀀싱 오류가 많은 경우에는 word size가 크다면 오류에 의해 영향을 받는 word의 비율이 커지고 그에 따라 그래프의 complexity가 증가하므로, 오히려 word size를 줄이는 것이 좋다고 한다. 시퀀싱 커버리지가 낮거나 read 길이가 짧을 때에도 word size가 작은 것이 좋다(word table이 커지고 따라서 겹치는 read를 찾아낼 가능성이 높아진다). 30x 이상의 커버리지, 50 bp 이상의 read length라면 최적의 word는 [20, 30]의 범위가 된다.

CLC Genomics workbench에서는 데이터 분량에 따라서 word의 크기를 자동으로 설정한다. 32비트 컴퓨터에서는 [12, 24], 64비트 컴퓨터에서는 [12, 64]의 범위가 된다.


이렇게 표시해 놓으니 도무지 마음에 와 닿질 않는다. word size = 23이면 1.77~5.31 Gb, word size = 24면 15.94 Gb까지이다. 경험적으로는 최대치인 64로 놓는 것이 가장 좋은 결과를 냈었다. 여기서 한가지 짚고 넘어갈 것이 있다. 나는 항상 read trim 시 50 bp 미만인 것은 버리게 했었다. 그렇다면 소량이지만 k-mer의 크기보다 작은 read가 항상 존재할 것이고, 이러한 것들은 assembly 과정에서는 쓰이지 못하고 대신 마지막의 read mapping에서나 활용될 것이다. 그러면 min length cutoff를 조금 높여서 65 bp 정도로 하는 것이 바람직하지 않겠는가? 물론 대세에는 큰 영향을 주지 않겠지만.

Bubble size

k-mer로 낱낱이 분해된 read들이 처리 과정을 통해 병합되고, 마지막에는 polymorphic한 부분에서 bubble이 생긴다. 454와 같이 systematic sequencing error가 존재하는 상황에서는 수백 bp에 이르는 큰 버블이 만들어진다. CLC는 설정된 bubble size보다 큰 버블 내에서 reduced node마다 contig를 형성한다. 따라서 systematic error가 많은 데이터에 대해서 너무 작은 버블을 적용하면 짧은 contig를 양산하는 결과를 낳는다. 따라서 버블 사이즈를 크게 잡는 것이 버블을 푸는데 도움이 된다. 그러나 지나치게 키우면 misassembly의 가능성이 커진다.(사실 이 부분이 정확히 무슨 의미인지 잘 모르겠음...)

그림을 통해서 이해해 보도록 하자.

평균 read length의 1/2이 bubble size 조정의 좋은 시작점이 된다. error rate가 높다면 bubble size를 조금씩 올려보라. 최대 read size를 넘길 수도 있다. 그러나 조립 오류가 발생할 수 있음을 염두에 두자.

댓글 없음: