2017년 6월 25일 일요일

세상에서 가장 간단한 스피커 지연회로

인켈에서 제조한 P878이라는 미니 컴포넌트 시스템의 리시버 앰프부(RX878)를 3년 전에 중고로 구입했다가 즉시 반품한 일이 있다(당시 올린 글). 출력과 스피커 사이를 연결하는 릴레이가 노후하여 접촉 불량이 있어났던 것이다. 이는 오래된 앰프 기기에서 흔히 발생하는 문제이다. 이 릴레이가 음질을 열화시킨다고 주장하는 사람들도 간혹 있다. 스피커를 연결하는 선재가 음질을 좌우한다는 진지한 논의는 정말 그 기원이 오래되었고, 심지어 전원부의 퓨즈도 중요하다고 한다. 물론 나는 여기에 동의하지는 않는다.

스피커 보호회로의 필요성은 크게 두 가지 정도로 생각할 수 있을 것이다. 하나는 증폭 소자가 망가져서 단락이 일어나면 출력쪽에 갑자기 DC 대전류가 흘러서 스피커의 보이스코일이 파손되므로 이를 감지하며 짧은 시간 안에 스피커쪽으로 가는 연결을 끊는 것이다. 또 하나는 전원이 들어온 뒤 몇 초가 지난 뒤에 스피커가 연결되게 하는 단순한 지연 회로이다. 앰프에 따라서는 전원을 켜거나 끈 직후 스피커에서 '퍽'하는 popping noise를 발생하는 것이 있다. PC용 증폭 스피커를 사용하는 사람은 아주 흔하게 경험하는 현상이다. 이 잡음이 실제로 스피커를 망가뜨리게 되는 일은 없지만,  분명히 기분 좋은 소리는 아니다. 발생 원인이 의외로 매우 다양하여 이를 근본적으로 없애기는 어렵다. 대신 스피커측 연결을 단순히 지연시키는 회로를 추가하여 해결할 수 있다.

출력 트랜스포머를 사용하는 앰프에서는 증폭부에서 심각한 고장이 발생해도 스피커까지 영향을 미치는 일은 거의 생기지 않는다. 그리고 칩앰프의 증폭 소자는 다양한 오류 상황에 대처할 수 있는 자체 보호회로를 내장하고 있는 경우가 많다. 하지만 팝 노이즈까지 항상 없애주는 것은 아니다.

집에서 사용하는 자작 앰프(산켄 SI-1525HD 칩 사용)는 팝 노이즈가 꽤 크다.  책상위에서 쓰는 소출력 스피커에서는 참을 수 있을 정도이지만 대출력 스피커를 연결하여 전원을 넣으면 상당한 타격감의 큰 소리가 우퍼에서 발생한다. 시판되는 스피커 보호회로 또는 지연회로 보드(예: FK650; 알리엑스프레스에는 훨씬 다양한 제품이 있음)를 구입하여 사용할 것을 여러번 고민해 보았으나 전원을 인가할 적당한 방법이 없다는 것이 문제였다. 스피커 보호회로 보드는 보통 정류회로를 내장하고 있어서 12~16 V 정도의 교류 전압을 연결하면 된다. 그러나 내 앰프에 들어있는 파워 트랜스포머는 두 조의 0-18 V 출력 단자만 제공하기에  스피커 보호회로를 구동하기에 적당하지 않다. 무엇이 문제인가? 앰프보드에서는 양전원이 필요하므로 파워트랜스포머의 출력을 직렬로 연결하여 +18 V 0 V -18 V를 만들었으니 이중에서 한쪽 절반만에서 선을 뽑아서 18 V를 만들면 양전원의 균형이 깨질 것이다. 만약 이 문제가 해결된다고 해도 18 V를 스피커 보호회로 구동에 맞게 강하시키는 것도 쉬운 일이 아니다. 오히려 스피커 보호회로를 위한 파워 트랜스포머를 하나 더 다는 것이 더 나을 수도 있다.

그래서 아주 단순한 방법을 택하였다. 스피커로 가는 출력선측에 4P 스위치를 달아버리는 것이었다. 아래 사진에서 보였듯이 볼륨 조절 놉 바로 왼쪽에 보이는 검정색 로커 스위치가 바로 그것이다. 망가진 외장 HDD의 전원부에서 적출한 파워 스위치를 재활용하였다.


이보다 더 간단한 - 그러나 성가신 - 스피커 지연회로는 있을 수가 없다. 


2017년 6월 20일 화요일

Oxford Nanopore sequencing, 기껏 조립을 했더니 박테리오파지 람다였다

어제 세 번째의 ONT(Oxford Nanopore Technologies) 시퀀싱을 실시하였다. 최초의 두 번은 lambda control DNA에 대한 것이었고 이번에는 실제 세균 유전체 DNA를 가지고 만든 라이브러리였(다고 믿었)다. 어제 오후 3시쯤에 러닝을 시작하였으니 48시간의 표준 러닝을 마치려면 하루를 더 기다려야 한다.

MinKNOW 실행 화면을 보면 실제로 DNA가 통과하는 구멍, 즉 'strand'로 표시되는 nanopore의 수가 그렇게 많지 않다. 특히 하루를 넘어가면서 얻어지는 read의 수가 줄어드는 것이 확연히 드러났다. 48시간 러닝에 대한 전형적인 read의 수 혹은 염기쌍의 수는 얼마라고 이야기하는 것이 가능할까? 초창기에 나온 어떤 논문에서는 매 4시간마다 라이브러리를 리필하라는 말까지 있지만 ONT community에서 아직 이와 관련한 정보를 찾지는 아니하였다.

러닝 수 22시간쯤이 경과했을 때, fast5 파일을 다른 위치에 복사하여 base calling을 한 뒤 reference mapping을 실시하였다. 이 샘플은 예전에 일루미나로 시퀀싱을 한 적이 있어서 200개 수준의 contig 서열을 확보한 상태이다. 플라스미드와 트랜스포존 등이 많아서 contig의 수가 불가피하게 많다.

 Mapping 및 QC는 NanoOK를 사용하였다. PDF report를 열어보니 성적이 너무 나쁘다. 어떻게 된 것일까? 내가 알고 있는 세균의 유전체 염기서열이 맞나? 2 kb짜리 read를 아무거나 하나 선택하여 NCBI에서 BLASTN을 해 보았다. 결과는 전혀 예상하지 못한 것이었다. 박테리오파지 람다의 유전체 서열이 나오는 것 아닌가?  Percent identity는 93% 수준이었다.

De novo assembly를 하면 정확한 진단이 될 것 같았다. Canu를 사용하여 조립을 하니 약 47 kb 크기의 contig가 떡하니 나왔다. 같이 만들어진 3 kb 짜리 contig는 depth도 낮고 서열 자체도 GTT의 반복이라서 의미 없는 서열로 판단된다.

이번에는 람다 DNA 서열을 reference로 하여 다시 NanoOK을 실행해 보았다.  Reference  전체가 depth > 30 수준으로 잘 매핑되었다. 아마도 라이브러리를 만든 연구원이 실제 세균 샘플 DNA와 람다 콘트롤 DNA를 혼동하여 서로 바꾸어서 실험을 한 것 같다.

어떻게 해야 하나의 flowcell에서 러닝을 하여 좀 더 많은 read를 얻을 수 있을까? ONT community에 잠복하여 다른 사용자들이 올린 글과 답변을 전부 읽어봐야 되겠다.

2017년 6월 18일 일요일

영화 <악녀>를 보다

흥행의 보증수표, 톰 형이 주연하는 미이라를 볼 것인가, 새로운 여전사(실사 영화로 말하자면)인 원더우먼을 볼 것인가? 최종 선택은 한국 영화인 '악녀'였다. 잔혹한 싸움 장면이 워낙 많아서 옆자리의 아내는 보는 내내 고개를 돌리고 있다시피 하였다. 영화는 낮 1시가 조금 지나서 끝났는데, 점심으로 무엇을 먹어야 할지 약간은 고민이 되기도 하였다. 여담이지만 식욕을 떨어뜨리는 영화라면 '곡성(2016)'이 더하면 더했지 덜하지는 않았다.


김옥빈이 연기한 킬러 '숙희'는 최소한 시각적으로는 여러모로 스칼렛 요한슨이 연기한 블랙 위도우를 떠올리게 한다. 일부러 그런 효과를 노린 것인지는 알 수 없다. 밀라 요보비치(영화 '레지던트 이블')을 연상하는 사람도 있겠으나 나는 그 영화를 제대로 본 적이 없어서 뭐라고 말하기는 어렵다. 권력 기관의 철저한 훈련을 통해 만들어진 여성 킬러로서 그저 지시에 의해서 충실하게 살인을 행하는 인간 병기라면 물론 '니키타(1990)'가 원조의 자리를 차지할 것이다.


영화의 시작 부분에서 악녀 '숙희'가 혼자 건물로 침투해 들어가서 수십명의 남자들을 해치우는 장면은 정말 대단했다. 5분 동안 약 70명을 죽였다고 하던가? 마지막 한 사람을 끝장내면서 건물 밖으로 떨어져 사뿐히(그건 아니고 아마 기진맥진했다고 보는 것이 맞을듯) 착지하는 장면 역시 블랙 위도우의 전투 장면을 연상하게 하였다.


아마 이 영화를 본 많은 사람들은 다른 유명한 영화의 여러 장면들을 떠올릴 것이다. 죽을 운명이나 다름없다가 정부 비밀 조직에 의해 킬러로 다시 태어나는 장면은 뤽 베송의 '니키타'를, 긴 칼을 이용한 거침없는 액션신은 쿠엔틴 타란티노의 '킬 빌'을, 초반 1인칭 시점의 장면은 비교적 최근 영화인 '하드코에 헨리'를. 이 영화들과 다른 점은 멜로적인 요소가 상당히 많이 섞였다는 것이다. 겉으로 풍기는 이미지 - 검은색 타이트한 복장 - 은 분명히 블랙 위도우를 떠올리게 하지만 섹시함은 그다지 강조되지 않았다.

롯데 시네마의 영화 평점은 오늘 현재 7.5(10점 만점), 예매율은 4위이다. 일부 조연급 배우들의 연기가 약간 어색하고, 스토리 자체도 완벽하지는 않다. 냉혹한 살인기계인 숙희를 움직인 원동력은 복수와 딸을 지키기 위한 모성애, 그리고 사랑으로 위장하여 자기를 한갖 수단으로만 취급한 중상(신하균 분)에 대한 배신감을 오간다. 그녀를 둘러싼 인물 중 진실된 남자는 단 한사람이었다. 더 언급하면 스포일러가 될지 모르니.. 마지막 장면은 결국 개인적 차원의 복수를 마무리하는 것으로 끝나지만, 기왕이면 자기를 이용하여 이렇게 만든 국가적 권력에 대한 응징까지 이어졌더라면 좋았을 것이다. 중상의 조직이 개인적인 것인지 국가 차원의 것인지는 잘 알기 어렵지만, 이것도 포함해서다.

여러가지로 아쉬운 점도 있고 기성 영화의 장면이 자꾸 떠오르는 것은 피할 수 없으나 정성들여 만든 액션 신이 모든 것을 용서하게 만든다. 이만하면 잘 만든 영화라고 평한다.

2017년 6월 17일 토요일

CentOS 7의 첫경험

CentOS 7이 처음 나온 것은 2014년 7월이니 벌써 만으로 3년 가까운 시간이 흘렀다. ISO 파일을 내려받아 DVD-ROM을 구운 것은 바로 어제이고, 이를 컴퓨터에 처음으로 설치한 것은 오늘 오전이다(글을 쓰는 동안 자정이 지났으니 하루씩을 더해야 정확할 것이다). 나는 그동안 몇 대의 서버에서 CentOS 6을 주력으로 사용해 왔다. OS를 재설치하고 숙달하기 위해 노력하는 것은 상당히 번거로운 일이라서 CentOS 7을 접하는 것을 계속 미루고만 있었다.  귀찮음 이외에도 CentOS 7에서 달라진 것이 꽤 많아서(비교표) 관리자 입장에서는 신경을 쓸 것이 많다는 소문을 들어온 터라 지레 겁을 먹고 있었던 것도 사실이다. 엄밀하게 말하자면 나 혼자서 쓰는 서버들이고 복잡한 설정이 필요한 서비스를 하는 것도 아니기에 이 부분은 그렇게 마음에 담아둘 일은 아니었다.

OS의 업그레이드를 처음으로 생각하게 된 것은 일년쯤 전에 맞닥뜨렸던 python과 gcc의 버전 문제였다. 생명정보학쪽에서는 상당히 많은 유틸리티들이 파이썬으로 제공되는데, CentOS 6에 기본으로 따라오는 파이썬 2.6으로는 돌아가지 않는 것들이 점점 많아지는 추세이다. Linuxbrew 혹은 pyenv를 설치하면 상위 버전의 파이썬을 설치할 수는 있다.

하지만 최근 일주일 동안  nanopore sequencing 데이터의 분석용 프로그램을 검토하다가 이제는 CentOS를 버전 7로 올려야 되겠다고 결심을 하게 되었다.  Nanopore sequencing raw data(.fast5 file)를 직접 다루는 poretools가 제대로 작동하지 않는 것을 알게 된 것이다.  이 프로그램은 파이썬 2.7 이상에서 돌아가므로, pyenv를 통해서 먼저 해당 버전의 파이썬을 갖춘 다음 poretools를 실행해 보았다.  Basecalling(Albacore를 먼저 실행해서 .fast5 내부에 baseball 정보를)이나 기타 다른 수치 추출은 잘 되지만, QC와 관련한 plot을 그려내는 명령을 실행하면 파이썬의  Tk configuration이 제대로 되지 않았다는 에러 메시지가 나온다.

구글을 검색해 보고 인실리코젠 김형용 수석 개발자에게도 문의하여  tcl-devel/tc-devel(우분투에서는 다른 이름) 및 tkinter라는 패키지를 설치하면 된다는 정보를 접하여 몇 번 이를 그대로 따라서 해 보았지만 파이썬은 여전히 똑같은 메시지를 출력하였다. 한동안 시행착오를 겪으면서 알아낸 것은 yum은 시스템에 기본적으로 설치된 파이썬 버전과 동일한 tkinter만을 설치한다는 것이었다. 즉 내가 아무리 pyenv를 통해서 파이썬 2.7을 설치해 봐야 CentOS 6에서는 tkinter-2.7을 깔 수가 없는 것이었다.  tkinter-2.7은 CentOS 7용 패키지이고, 당연히 파이썬 2.7을 요구한다.

사실은 어제 DVD-ROM을 들고 서버를 숨겨둔(?) 방에 갔다가 기기에서 발생하는 열기로 너무 더워서 일단은 포기하고 사무실에 있는 다른 컴퓨터에 CentOS 7을 설치하여 테스트를 하는 것으로 전략을 수정하였다. 집에서 사용하다가 최근에 퇴역한 Dell Inspiron 660s가 테스트를 위한 희생양이 되었다. CentOS 7을 설치한 뒤 뒤이어 필요한 rpm과 poretools를 깔았다.  poretools 설치 과정에서 의존성 패키지를 자동으로 다 깔아주지를 못해서 간간이 pip를 돌려야 했다. 최종 결과는 성공적이어서 poretools를 이용하여 QC plot들이 잘 만들어졌다.  pyenv로 약간 높은 버전의 파이썬을 설치한 뒤 이를 배경으로 poretools를 깔았다. 여기서도 그림을 잘 만들어 냄을 확인하였다.

우분투나  Mac에 비교할 바는 아니지만  CentOS의 Genome Desktop 환경도 꽤 쓸만하다고 느꼈다. 아무리 선호하는 리눅스가 있다고 해도 다른 배포판(Ubuntu vs. CentOS)과 버전(CentOS 6 vs. CentOS 7)을 조금씩은 다 같이 다루어 보는 것이 유리함을 알게 해 준 경험이었다.

서버실 - 원래 용도와는 거리가 있지만 - 에는 냉방 시설이 없음에도 불구하고 올해 초에 한 대의 서버를 옮겨두었으니 컴퓨터들이 벌써 시작된 더위를 잘 버텨낼지 걱정이 된다. 온도 체크용으로 디지털 온도계를 하나 갖다 두었다.

2017년 6월 15일 목요일

Oxford Nanopore sequencing 매핑 및 시각화 연습

Real data로 매핑한 결과를 보이면 정말 좋겠으나 첫 nanopore sequencing 경험은 이를 도저히 시퀀싱이라고 부를 수 없는 처참한 결과로 끝나고 말았다. 그래서 안타깝지만 PoreCamp2016에서 사용한 에볼라바이러스 교육자료를 가지고 연습을 해 보았다.

처음으로 만들어낸 .fast5 파일에서 basecalling을 하는 것부터 쉽지 않았다. Metrichor(EPI2ME desktop agent를 통한)의 basecalling을 이제 별로 의미가 없는 것 같다. ONT 고객상담실에서도 Albacore를 사용하라고 했으니 말이다. 이것이 nanopore sequencing의 공식적인 basecaller가 되어가는 느낌이다. MinKNOW에서는 live basecallig을 하지 않는 이상(1D sequencing에서만 가능) fast5 파일 내에 염기서열 정보가 존재하지 않는다. Albacore는 이를 읽어들여서 fastq 형태의 파일을 만들기도 하고, 염기서열 정보를 새겨넣은 fast5 파일을 만들기도 한다. poretools로 QC를 하려면 염기서열 정보가 들어간 fast5 파일이 필요하다.

poretools는 매우 감동적인 도구이다. 다양한 diagnostic plot을 만들어내는 것은 물론이거니와 각종 집계와 fastq/fasta 파일 추출(basecall 결과가 수록된 fast5로부터)도 가능하기 때문이다. 그렇지만 진단용 그림을 뽑아내려면 Tcl/Tk 및 tkinter라는 것과 관련한 파이썬 설치 문제가 보통 복잡한 것이 아니다. CentOS 6.x에서 어떻게 해서든 설치를 해 보고 싶었지만(pyenv 환경) 결국은 실패하고 MinKNOW가 깔린 우분투 서버에서 겨우 성공하였다. 이것은 추후에 다시 한번 진지하게 도전해 볼 영역으로 남겨두겠다. 어쩌면 poretools을 계기로 하여 CentOS 7로 넘어가거나 혹은 Docker를 쓰는 단계로 넘어가게 될지도 모른다. Docker의 기본 개념은 여기에서 잘 설명하고 있다.

PoreCamp 교육 자료에 나온대로 ENA에서 자이레 에볼라바이러스의 MinION raw data를 몇 개 다운로드하였다. 임의로 하나를 골라서 pass 서브디렉토리 아래의 fast5 파일로부터 fasta 서열을 뽑아내었다. 다음은 poretools stats의 결과이다.
total reads 20787total base pairs 21,929,768mean 1054.98median 1013min 288max 3711N25 1060N50 1019N75 981
이를  bwa로 매핑을 하여 bam 파일로 출력, 소팅과 인덱싱을 한다. samtools 0.1.18과 1.2를 번갈아 사용하였지만 다음의 명령이 소팅 단계에서 도무지 먹지를 않는다.
bwa mem -x ont2d EM_079517.fasta Ebola2D.fasta | samtools view -bS - | samtools sort -o Ebola2D.sorted.bam -
samtools sort의 용법이 내가 알던 것과 약간 다르다. 구글을 열심히 뒤져서 이해해보려고 무던히 노력을 했지만 속 시원한 설명은 별로 없고 samtools sort 명령어 문법은 기괴하다('bizarre')는 글과 이를 수정하겠다는 개발자의 글만 발견할 수 있었다. samtools를 1.4.1로 업그레이드하여 모든 문제를 해결하게 되었다.

다음으로는 매핑 결과를 직접 눈으로 살펴보았다. tablet이나 IGV 등 몇 가지 솔루션이 있지만 나는 CLC Genomics Workbench를 이용하였다. track으로 전환한 다음 reference sequence(역시 track으로 전환)과 함께 track list를 만들어서 확대해 보았다. ONT 특유의 insertion error가 많이 보이지만 reference와 잘 맞는 consensus sequence를 볼 수 있다.
이번주 안에 실제 데이터를 이용한 성공적인 nanopore sequencing 결과를 보고 싶었는데 벌써 목요일이 다 지나가고 있다.

개발도구와 라이브러리의 버전 문제로 인하여 CentOS 7의 도입을 정말 진지하게 고민해 볼 시점이 되었다. 피할 수는 없는 대세이지만, 관리자 측면에서 너무나 많은 것이 변해서 공부를 하려면 또 얼마나 애를 먹게 될지...

2017년 6월 13일 화요일

GRUB를 이용한 리눅스 멀티부팅 꼼수 부리기

멀티부팅은 일반적으로 서로 다른 OS(예: 리눅스와 윈도우즈)를 하나의 컴퓨터에서 운영하기 위해서 쓰인다. 때로는 동일한 OS를 서로 다른 버전으로 각자 설치해 놓고 이를 선택하여 부팅하는 용도로 쓸 수도 있다.

멀티부팅을 능수능란하게 쓰려면 OS의 설치 순서가 매우 중요하다. 특히 리눅스와 윈도우를 선택적으로 부팅하려면 윈도우를 먼저 깔고 나서 리눅스를 나중에 설치한 뒤, 리눅스의 GRUB를 통해서 OS를 선택하는 것이 불문율로 여겨지고는 한다.

오늘 나는 매우 엉뚱한 시도를 해 보았다. 지난 5년간 사무용(윈도우 7)으로 쓰이다가 일선에서 물러난 데스크탑 컴퓨터가 하나 있다. 오래된 Xeon CPU에 수퍼마이크로 마더보드로 구성된, 나름대로 서버급의 컴퓨터이다. 여기에는 우분투 12.04를 설치하여 이따금 PhyloPythiaS+(PPSP) 구동용으로 사용하였다. PPSP 또는 PPS+는 metagenomic read의 taxonomic binning 프로그램이다. 최신 우분투를 기반으로 한다면 모니터의 해상도를 최적화하여 훨씬 편리하게 컴퓨터를 쓸 수 있겠지만 우분투 12.04에서 PPSP를 설치하는 것이 가장 편리하기에 개발자가 권장하는 환경을 그대로 맞추어 사용한 것이다.

얼마 전부터 Oxford Nanopore sequencing을 접하게 되면서 MinION 구동을 위한 컴퓨터가 필요하게 되었다. 바로 어제까지는 노트북 컴퓨터(윈도우 10)에 필요한 프로그램들을 깔아서 연습삼아 사용을 해 오고 있었으나 화면도 너무 작고 약간 답답한 감이 없지 않아서 우분투가 깔린 데스크탑을 사용할 생각을 조금씩 하던 중이었다. MinION 구동 프로그램은 컴퓨터의 하드웨어 성능을 좀 가리는 편이다. 그래서 Xeon CPU에 메모리 16 GB가 장착된 데스크탑에 눈이 가기 시작하였다. 여기에는 이미 우분투 12.04가 설치된 상태이고, MinION을 구동하려면 14.04가 필요하다. 어찌할 것인가? 이미 우분투 12.04가 설치된 디스크에 상위버전의 우분투를 덮어쓰지 않는 조건으로 설치를 하려니 파티션 등 문제가 복잡해진다. 아예 속 편하게 하드 디스크를 분리한 다음 새 디스크(사실은 쓰던 것)을 단독으로 연결하여 우분투 14.04를 설치하였다. 그 다음 MinION 구동에 필요한 프로그램(MinKNOW, EPI2ME Desktop Agent, Albacore basecaller)를 설치하고 configuration test를 성공적으로 진행하였다.

MinION이 연결된 모습.
그러면 필요한 OS 버전에 따라서 하드 디스크 연결을 바꾸어가면서 부팅을 할 것인가? 불가능하지는 않지만 너무나 번거로운 일이다. 디스크 두 개를 전부 연결하고 Grub 설정을 어떻게든 하면 일반적인 멀티부팅과 같은 환경이 조성될 것으로 기대하고 AskUbuntu 사이트를 뒤져서 나와 비슷한 상황에 대한 질문과 대답을 검색하여 보았다.

두 개의 하드디스크를 연결하고 무작정 어느 한쪽 우분투로 부팅을 한 뒤 sudo grub-update라고만 입력하면 될 것만 같은 생각이 들기 시작하였다.

그래, 한번 해 보는 거야. 디스크가 망가질 일은 없으니.

기대는 완벽하게 들어맞았다. 커넥터 연결, 부팅, 그리고 명령어 한줄로 모든 것이 끝났다. 기본 부팅은 우분투 14.04로 되었고, grub를 업데이트한 뒤 재부팅을 하니 너무나 낯익은 grub 화면이 뜨는 것이었다. 오늘도 이렇게 잔기술 하나를 익혔다.

실험 진화에서 유래한 여러 분리균주(동일 조상 유래)의 연구를 NCBI BioProject에 등록하는 요령

가톨릭대학교와 중앙대학교에 근무하는 동료들과 같이 수행한 공동 연구 성과가 최근 Microbial Cell Factories 저널에 게재 승인을 받았다. 대장균 W3110에 어떤 외래 유전자를 도입하여 chemostat에서 장기간 배양하여 얻은 변이주의 특성을 유전체 서열 해독을 포함하여 탐구한 것이 주된 내용이다. 대장균을 매일 플라스크에서 계대배양하면서 진화의 궤적을 추적하는 이른바 long-term experimental evolution(LTEE)은 미국 미시건주립대의 리처드 렌스키 교수로부터 시작되어 많은 생명과학자들에게 영감을 주었다. 프로젝트의 공식 웹사이트는 여기이다. 우리 연구 그룹에서는 chemostat라는 멋진 장비를 사용하고 있지만 아직도 많은 연구실에서는 50 ml 들이 삼각 플라스크(배지는 10 ml이 들어있음)에 1:100(v/v)으로 이전 배양액을 옮기는 고전적인 방법으로 실험을 진행하고 있다. 이렇게 하면 하루에 약 6.67 세대가 진척되는 것으로 계산이 된다. 물론 플라스크는 하나만 쓰는 것이 아니다. REL606(Ara-)과 REL607(Ara+) 2개의 클론을 각각 6개의 플라스크에 나누어 계대배양을 시작했으니 총 12개의 집단이 각자 다른 방식으로 진화를 해 나가는 것이다. 1980년대에 실험을 시작하여 40,000 세대에 이르렀을때 막 대중화의 길로 접어든 next-generation sequencing 기법을 접목하여 실제 유전체 서열 상의 변화와 fitness의 변화가 보조를 맞추어 나가지 않는다는 논문이 2009년 Nature에 실렸었다(Genome evolution and adaptation in a long-term experiment with Escherichia coli). 나도 이 논문에 공저자로 참여하였던 것을 매우 기쁘게 생각하고 있다.

그러면 글 도입부에서 소개한 원래의 이야기로 돌아가보자. 진화 실험을 개시한 원균주와 변이균주의 유전체 시퀀싱 raw data를 NCBI의 SRA(sequence read archive)에 등록하려 한다. 하나의 원균주에서 유래한 여러 샘플의 데이터를 어떻게 등록하는 것이 현명한지를 논하려는 것이 오늘 포스팅의 주제이다. 나는 지금까지 단일 미생물 유전체 프로젝트(monoisolate)만을 NCBI에 등록해 왔었다. 하지만 실험 진화에서는 서로 '직계' 혹은 '사촌' 관계에 있는 여러 isolate에 대한 유전체 시퀀싱을 하게 된다. 이를 하나의 BioProject로 묶는 것이 자연스럽지 않을까?

우선 서열 데이터베이스와 논문의 연결 관계를 간단하게 적어보도록 한다. 생물학적 서열을 새로 발견하여 이를 논문에서 다루려면(예: 신종 미생물의 유전체 해독 논문) 서열 자료가 DDBJ/ENA/GenBank와 같은 공공 데이터베이스에 등록이 되어 발급받은 accession number를 논문에 적시해야 한다. Microarray나 RNA-seq과 같은 발현 관련 데이터는 GEO에 등록을 해야 한다. 그러나 이번 연구의 경우는 일종의 resequencing 개념으로서 contig나 scaffold 형태로 서열을 제공할 필요는 없고 다만 논문의 본문에서 표 형태로 어떤 변이가 발생했는지를 언급하는 것으로 충분하다. 대신 sequencing raw data를 등록하여 공개하면 이를 활용하려는 다른 연구자에게 도움이 될 것이다.

렌스키 교수는 작년에 50,000 세대째를 맞는 대장균의 유전체 진화를 다룬 대규모 연구tjd과를 Nature에 발표하였다(Temp and mode of genome evolution in a 50,000-generation experiment). 2016년은 렌스키 교수가 환갑을 맞는 해이기도 하니 그 의미가 남달랐을 것이다. 12개의 집단에서 뽑은 총 264개나 되는 변이균주을 일루미나 장비로 시퀀싱을 하여 분석을 하고 또 이를 전부 NCBI에 등록을 하려니 정말 손이 많이 가는 일이었을 것이다. 우선 BioProject는 어떻게 등록이 되어있는지를 찾아보았다. 논문에서는 long-term evolution experiment with E. coli(PRJNA294072)를 언급하였는데 이는 실제로는 umbrella project이고 그 아래에 총 11개의 정규 BioProject가 존재한다. 가장 많은 데이터(224개의 SRA experiments와 BioSample)을 포함하는 PRJNA295605가 바로 작년의 Nature 논문에 직접적으로 관련된 것으로 보인다. Project scope는 monoisolate이지만 200개가 넘는 균주의 유전체 시퀀싱 데이터가 하나의 프로젝트 아래에 개별적인 biosample과 SRA experiment로 존재하는 것이다.

다음으로는 연세대학교에서 등록한 Acinetobacter baumannii 유전체 시퀀싱 데이터를 살펴보자. 이 연구는 실험 진화와는 무관하며, 환자에서 개별적으로 분리한 blaOXA-23 함유 Acinetobacter 균주에 대한 유전체 시퀀싱 결과를 등록한 것이다. BioProject PRJNA380857의 scope는 multisolate로 선언되어 있고 총 13개의 assembly가 각자 별도의 BioSample 정보화 함께 보여진다. 그렇다면 multiisolate는 어떤 경우에 선택하는 것이 옳은가? BioProject FAQ에서는 다음과 같이 설명하였다.

  • 단일 종에서 유래한 여러 개체 혹은 스트레인을 비교하는 것이 목적이라면 multiisolate를 선택하라.
  • 서로 다른 종을 연구하는 것이라면 multispecies를 선택하라.
  • DNA 혹은 RNA source가 여러 개체에서 온 것이라 해도 그 목적이 단일 genome 혹은 transcriptome의 assembly라면 monisolate를 선택하라.
이 지시를 충실히 따르자면 렌스키의 50,000 세대 유전체 연구를 위한 BioProject는 monoisolate가 아니라 multiisolate가 되는 것이 맞다. 그러면 이 글의 맨 처음에서 소개한 우리 연구 그룹의 시퀀싱 데이터는? Multiisolate로 정의한 단일 BioProject 아래에서 두 개의 BioSample과 SRA experiment(조상 균주 및 변이 균주 각각에 해당)을 선언하여 SRA 데이터 파일을 등록하면 되는 것이었다. 그러나 나는 완전히 두 개의 BioProject를 만들고 말았다. 하나의 BioProject에 복수의 BioSample이 연결될 수 있다는 것을 미처 몰랐기 때문이다. NCBI에 일단 등록한 데이터는 그 어떤 요청을 해도 수정을 해 주므로 일단은 이것을 믿어보지만, 처음부터 단일 바이오프로젝트로 묶었다면 연구의 개요 전체를 좀 더 쉽게 파악할 수 있었을 것이다. 각 균주에 대한 시퀀싱 프로젝트를 개별 바이오프로젝트로 등록할 당시에는 나중에 umbrella bioproject로 묶어줄 것을 요청할 생각을 했었던 것이 사실이다. 하지만 단일 유형(raw sequencing data)의 소량 데이터로만 구성된 바이오프로젝트를 umbrella로 묶는다는 것은 격이 맞지 않는 일이다.