2019년 7월 24일 수요일

cross_match를 이용한 sequence alignment의 score 이해하기

cross_match는 아주 고전적인 염기서열 정렬(alignment) 프로그램이다. 짧은 한 쌍의 염기서열을 정밀하게 비교할 때 이보다 좋은 방법은 없다고 생각한다. 사용하는 알고리즘은 word-nucleated banded Smith-Waterman comparison이다. 수 megabase가 넘어가는 (박테리아)유전체 수준의 정렬, 또는 수많은 염기서열 데이터베이스에서 원하는 서열 단편을 찾을 때에 적합한 프로그램은 따로 있다.

cross_match에서 쓰이는 score matrix는 다음과 같다. N이 아닌 동일 염기의 매치에는 1씩의 점수가 부여된다.

Score matrix (set by value of penalty: -2)
    A   C   G   T   N   X
A   1  -2  -2  -2   0  -3
C  -2   1  -2  -2   0  -3
G  -2  -2   1  -2   0  -3
T  -2  -2  -2   1   0  -3
N   0   0   0   0   0   0
X  -3  -3  -3  -3   0  -3

프라이머 서열로 쓰기에 적합한 짧은 염기서열의 매치를 찾기 위해서 cross_match를 몇 차례 실행하고 있었다. mismatch가 전혀 없는 100 bp 길이의 alignment라면 당연히 score가 100이 될 것이라고 생각했는데 결과 파일을 보니 점수는 이보다 낮았다. 왜 그럴까? cross_match 문서를 찾아보았다.

점수가 100% identical match에 대해서 alignment length보다 짧은 이유는 기본 조건에서는 complexity-adjusted score가 쓰이기 때문이었다. 염기 조성에서 편이(bias)가 존재하는 경우 alignment score는 더 낮게 조정된다는 것이다. 매우 합당한 정책이다. 만약 조정을 하지 않은 score로 표현하고 싶다면 -raw 옵션을 주면 된다. 약 20년 전에 phred/phrap/consed의 라이센스를 받아 Sanger sequencing 결과물의 de novo assembly에 처음 쓰기 시작하면서 지금까지 별로 신경을 쓰지 않던 것을 NGS 시대에 다시 들춰보려니 감회가 새롭다. Sequencing chemistry는 두어 서대 진보하였지만, 염기서열을 커맨드 라인에서 조물락거리는 것은 그때나 지금이나 별로 다르지 않다.

Banded search의 기본 조건은 -minmatch 14이고, match의 필터 과정에서는 -minscore 30이 된다. 벡터 서열을 스크리닝하는 경우에는 좀 더 민감한 검색이 이루어지도록 -minmatch 10 -minscore 20의 조건을 준다.

그러니 primer 서열(보통 30 bp 미만)을 점검하기 위해 cross_match를 쓰는 경우에는 -minmatch 파라미터를 낮게 주도록 하자.

2019년 7월 22일 월요일

독서 기록 [이스탄불], [2010 스페이스 오디세이]

참으로 오랜만에 책을 읽었다. 2006년 노벨 문학상 수상자인 오르한 파묵의 자전적 수필집 [이스탄불], 그리고 전혀 다른 장르의 소설인 아서 C. 클라크의 [2010 스페이스 오디세이]. 앞의 것은 아내가, 뒤의 것은 아들이 권한 책이다. SF 영화의 고전인 [2001 스페이스 오디세이]를 아직도 본 일이 없기에 유튜브에서 영화 해설 동영상을 미리 보고 전편의 대강을 파악한 뒤에 본격적으로 빠져들었다.


더운 일요일 네이버 그린팩토리에서, 출퇴근길 지하철에서, 그리고 근무지에서 점심식사를 걸러가면서 정말 오랜만에 몰두하여 책을 읽었다. 지나치게 빨리 읽어서 세부를 잘 놓치는 나쁜 버릇을 여전히 고치지 못했지만 말이다(그래서 외국 소설의 등장인물 이름은 수첩에 메모를 해 가면서 읽고 싶은 충동이 인다).

국내에 소개된 오르한 파묵의 책을 먼저 읽어 보는 것이 예의이겠지만 어쩌다 보니 에세이집을 먼저 읽게 되었다. 그는 이스탄불에서 태어나 평생 이곳을 떠나지 않고 살았다고 한다. 할아버지가 사업을 해서 이룬 부를 그의 아버지대에서 거의 다 소진해 버렸고, 그는 그림에 몰두하며 성장을 했다. 공과대학에 들어갔지만 자퇴를 하였고, 첫사랑에는 실패하였으며, 23세에 소설가가 되겠다는 결심을 하고 집에 틀어박혀 글을 쓰기 시작했다고 한다(새벽 4시에 잠이 들어서 정오에 일어나는 생활을 하며). '도시 그리고 추억'이라는 부제에서 짐작할 수 있듯이 그가 어떻게 소설 창작의 길에 접어들게 되었는지에 대해서는 그렇게 자세히 나오지 않는다. 어린 시절의 기억, 그가 자라난 도시에 대한 추억, 이스탄불의 역사, 보스포루스 해협의 정경, 서구화에 대한 갈등, 그리고 우리말로 번역하기 어려운 이스탄불 특유의 감정인 hüzün에 이르기까지. hüzün은 비애, 깊은 슬픔, 우울, 우수(blues, gloom, melancholy or ruefulness) 정도로 번역이 가능하다.
한 개인으로서뿐 아니라 공동체로서 우리는 모두 외국인이나 모르는 사람들이 우리에 관해 어떤 생각을 하는지에 대해 어느 정도 고민한다. 이 고민이 우리에게 고통을 주거나, 현실과의 관계를 흐리게 하여 현실 자체보다 더 중요한 차원에 이르면, 이는 우리에게 문제가 된다는 의미이다. 서양인의 눈에 나의 도시가 어떻게 보이는지에 대한 나의 관심은 - 수많은 이스탄불 사람들처럼 - 문제가 있으며, 한쪽 눈을 서양에 고정시킨 도시 작가들처럼 나도 이 문제로 인해 가끔 머리가 혼란스럽다. - 25장 서양인의 시선 아래서
나도 글을 쓰다 보면 쉼표를 이용하여 어구를 계속 나열하는 때가 많은데(별로 바람직하지는 않지만), 이 책 역시 시각적인 묘사적인 장면에서 그런 것이 많아서 터키어가 원래 그런 것인지 아니면 번역을 일부러 그렇게 한 것인지 궁금한 생각이 들었다. 제10장 '비애-멜랑콜리-슬픔'에 134쪽에 나오는 문장을 하나 인용해 보자.
나는 어둠이 일찍 깔린 저녁 변두리 마을의 가로등 밑에서 손에 비닐봉지를 들고 집으로 돌아가는 아버지들에 대해 말하고 있다. 지속되는 불황 이후 상점에서 하루 종일 추위로 덜덜 떨면서 손님을 기다리는 늙은 책방 주인, 불경기 때문에 사람들이 면도를 하지 않는다고 불평하는 이발사,,,
여러 사람들의 유형은 무려 쉰 가지를 넘게 나열되어 - 실제로 예순도 훌쩍 넘기는 수준이었겠지만 너무 많아서 세다가 말았다 - 141쪽에서 비로소 구두점을 만난다. 중간에 사진이 많이 삽입되어 있지만 문장이 참으로 길기는 길다. 파묵의 다른 작품을 읽어 봐야 이 사람이 실제로 어떤 문체로 글을 쓰는지 알 수 있을 것이다. 풍부한 사진과 그림은 마치 여행기나 역사서를 보는 느낌을 준다. 문명이 교차하는 지역이자 주인이 계속 바뀌는 유서 깊은 도시 이스탄불에 대한 배경 지식이 있다면 책을 읽는데 도움이 될 것이다. 그래야 '이스탄불이 터키화한다'는 말의 의미를 이해할 수 있다.

[2010 스페이스 오디세이]는 정말 흥미를 가지고 몰입하여 읽었다. 우주를 배경으로 하는 많은 SF 영화들이 [2001 스페이스 오디세이]에서 얼마나 많은 장면을 오마주하였던가! 지금 생각해 보니 인터스텔라의 TARS는 컴퓨터 HAL에 해당하지만, 많은 이들이 저적했듯이 외형은 2001 스페이스 오디세이의 도입 부분에서 유인원들에게 도구 사용의 지혜를 전수하고 달과 목성에서 발견되는 수수께기의 석판(monolith)을 닮았다.

Monolith vs. TARS. 출처: Interstellar

전편(영화)에서 컴퓨터 HAL이 예상하기 어려운 행동을 한 이유를 이번 편에서 어렴풋하게나마 이해할 수도 있었다. 소설책 한 권이 영화적 상상력을 불러일으키고, 어두운 밤하늘을 올려다보게 한다. 주인공인 미국인과 러시아인들은 개별적으로 개성이 있는 사람들이지만, 중국인들은 마치 폐쇄적이고 한 가지 성격을 갖는 집단처럼 카테고리화하여 취급하는게 아주 조금은 불편하였다. 유럽인과 같은 행세를 하고 싶어하는 이스탄불 현지인을 바라보는 파묵의 마음도 이와 통하지 않을까?

피로가 몰려와서 더 상세한 독후감을 쓰지 못하는 것이 아쉽다.

다음에는 다음의 책을 사서 읽어보고 싶다.

[화제의 책] 알고리즘의 손안에서 놀아나지 않으려면 '종이책'을 읽고 '사색'을 되찾아라. 
생각을 빼앗긴 세계(프랭클린 포어 지음|이승연·박상현 옮김)

2019년 7월 14일 일요일

르 몽드 디플로마티크 한국어판

오늘은 네이버 그린팩토리에서 새롭게 발견한 읽을 거리인 르 몽드 디플로마티크(Le Monde Diplomatique)를 소개해 본다. 진보 성향의 프랑스 일간지인 '르 몽드'의 자매지이자 국제뉴스를 다루는 월간지로 20개 언어로 37개 국제판이 발간되고 있다고 한다. 논조는 매우 진보적이고 비판적이어서 자칫 지엽적인 문제에 매몰되기 쉬운 우리에게 세계 곳곳에서 벌어지는 일을 자세히 바라보게 해 준다. 다음의 기사를 보면 광고가 거의 실리지 않는 매체가 한국 실정에서도 어떻게 살아남았는지를 보여준다.

[이 언론이 사는 법] 르 몽드 디플로마티크 "관점을 가진 언론만 살아 남을 수 있다"

인터넷으로 시답지않은 소식을 찾아볼 것이 아니라 이런 매체를 정기구독하는 것이 백번 나을 것 같다. '종이신문(실제로는 월간지) + 온라인 1개월' 이용료는 12,000원인데 정기 구독을 정말로 진지하게 고려하고 있다. 생각이 다른 사람들에게는 웬 빨갱이 월간지를 돈 주고 보냐는 소리를 듣겠지만 말이다. 이 뜨거운 날씨 속에서 군복 차림으로 성조기를 들고 광화문 네거리를 서성이며 구호를 외치는 사람들에게는 불온한 사상을 퍼뜨리는 신문으로 보일 수도 있을 것이다.

르 몽드 디플로마티크가 마음에 드는 것은 기사 중간에 삽입된 시의적절한 현대미술 작품 때문이다. 

2019년 1월부터 연재되는 기획기사 [새로 쓰는 '비판경제 교과서'] 몇 편을 인상 깊게 보았다. 연재 순서는 다음과 같다. 앞으로 그린 팩토리에 갈 때마다 빼놓지 않고 전체를 찾아 읽을 생각이다.

  1. 경제학은 과학인가?
  2. 생산 증대, 무조건 더 많이!
  3. 노사관계(다리와 버팀목의 관계)
  4. 부의 분배 희망과 난관
  5. 고용, 어떠한 대가를 치러야 하나?
  6. 장을 따를 것인가 명증된 법칙을 따를 것인가?
  7. 세계화 국민간의 경쟁
  8. 화폐, 금전과 현찰의 불가사의
  9. 부채 협박
  10. 금융 지속 가능하지 않은 약속
국내에서 워낙 많은 이슈가 발생하고 있어서 국외에서 발생한 일에 대하여 미국의 관점이 아닌 균형잡힌 시각으로 관심을 갖는 것이 쉽지 않다. 날이 갈수록 어려워지는 고용과 실물경제, 남북 관계, 엽기적인 가족 살해 사건, 세대·계층·성별 간 갈등, 미세먼지, 탈원전과 지속 가능한 에너지 정책, 쓰레기, 일본과의 무역 갈등... 이런 상황에서 신장 위구르 자치구에서 벌어지는 상황이 우리와 무슨 상관이 있느냐고 할 수도 있다. 그러나 모든 나라가 밀접한 관계를 맺고 사는 요즘은 더 이상 남의 일이 아니다.

이번에 집중적으로 읽은 6월호에서는 미국에서 불어오는 사회주의 열풍과 전세계를 잠식해 들어가는 마약 자본주의에 대한 기사가 실렸다(발행인 칼럼 링크). 우리에게 마약이란 아직 일부 연예인이나 재벌 2세의 방종 정도로 여겨지지만, 마약 소비자를 망가뜨림과 동시에 재배자와 말단 공급자를 계속 착취의 하부 구조에 종속시키는 글로벌한 문제가 아닐 수 없다.

미국의 사회주의 관련 기사에서 좀바르트의 저서 [사회주의는 왜 미국에 존재하지 않는가]의 일부가 실렸기에 인용해 본다.
임금 노동자는 경제적 여건과 생활환경이 나아짐에 따라 물질적 타락에 빠졌고, 온갖 쾌락을 제공하는 경제체제를 점점 선호할 수밖에 없었다. 임금 노동자는 정신적으로 점차 자본주의 경제 메커니즘에 순응했고, 결국 대부분의 사람들은 물질과 자본의 강력한 매력에 굴복해버렸다. '진보'(자본주의)를 행한 도정에서 미국이 다른 국가를 앞서간다고 생각하며 생겨난 자부심은 미국인을 검소하며 계산적인 비즈니스맨으로 만들었다. 이는 오늘날 우리가 알고 있는 상업정신을 바탕으로 형성된 미국인의 이미지다. 이렇게 모든 사회주의 유토피아는 로스트 비프와 애플파이(먹고 사는 문제를 상징함-역주)를 넘어서지 못하고 실패했다.
이 잡지와 더불어 읽은 것은 서가에서 바로 옆에 위치한 [포춘 코리아]였다. 부(富)가 최상위층에게 몰린다는 것은 어제 오늘이 일이 아니지만, 포춘 500대 기업에서도 이와 같은 일이 벌어지고 있다고 한다. 2018년 기준으로 500대 기업 전체 매출의 47.7%가 상위 50개 기업에 몰려 있는데, 이는 어느 때보다 높은 수치이다. 과연 이것이 자연적이고 바람직한 변화일까? 절대 그렇지 않다. 기득권을 가진 기업은 더욱 유리한 위치를 차지하게 만드는 제도, 그리고 과다한 인수 합병의 산물이다. 흔히 '규모의 경제'라는 말을 통해서 거대 기업에 부가 집중되면 더욱 싼 값에 물건을 만들 수 있고 이에 따라 소비자가 혜택을 보게 된다고 한다. 그러나 지나친 인수 합병은 성장도 하기 전에 가능성이 있는 작은 기업을 나꿔챔으로써 '경쟁'을 원천적으로 막는다. 이는 혁신의 열매가 열리기도 전에 새싹 수준에서 베어 먹는 것에 비유할 수 있을 것이다. 

구글의 규모가 커지면서 의사 결정 과정에서의 투명성이 사라지고 직원 통제가 강화되며, 군사 기술이나 검열이 적용된 검색 기술(독재 국가에 팔리기 좋은 기술)을 개발하게 되면서 이에 반발하는 직원이 퇴사를 하거나 적극적으로 반대 의사를 표명한다는 기사도 흥미롭게 읽었다. '사악해지지 말자'는 이러한 활동가들이 내세우는 주장이다.

6LQ8 푸시풀 앰프 - NFB(negative feedback) 실험

NFB은 세포 혹은 개체 수준의 향상성을 유지하는 주요 메커니즘으로 생물계에서 널리 찾아볼 수 있으며, 인간에 의해 공학적으로 설계된 시스템에서도 흔히 이용된다. 오디오 앰플리파이어에서는 증폭기의 왜곡 등 결점을 줄이기 위한 방법으로 응용되고는 한다. 심각한 수준으로 들어가면 NFB을 제대로 걸기 위해서 설계까지 필요하다지만, 나는 몇 킬로옴의 저항을 연결하는 것으로 마무리를 하였다. 제작 지침서에는 350옴~2k옴 수준에서 최적의 값을 결정하라고 나와 있으나 실제로 연결을 해 보니 이 값의 저항으로는 피드백 수준이 너무 커서 소리가 거의 들리지 않을 지경이었다.

출력 트랜스의 1차쪽 배선을 짧게 정리하였다. 5극관 결선 상태이다.

10k옴 가변저항을 달아서 노브를 돌려보면 음질이 가장 좋은 위치를 찾을 수 있을 것이라 생각했었지만, 최대 저항에서는 소리가 가장 크고(물론 NFB를 전혀 걸지 않은 상태보다는 소리가 줄어들었음), 최소치에서는 가장 많은 피드백이 걸리므로 음성 신호는 전혀 나지 않으나 약간의 발진이 출력되는 것을 확인하였다. 음질이 가장 좋은 중간 위치를 찾는다는 것은 계측기와 파형 발생기 없이는 알기가 힘들다는 생각이 들었다.

그래서 가장 소리가 크게 나도록 5극관 접속 상태로 만든 다음, 10k옴 고정 저항(100pF 캐패시터를 병렬로 연결)을 연결하기로 하였다. 5극관 접속 상태에서는 소리가 매우 크고 거칠다는 느낌이 분명히 있다. 다만 커넥터를 중간에 달아서 취향에 따라 NFB를 걸지 않게 만들기로 하였다.

NFB용 저항의로 10k옴은 너무 큰 것이 아닐까? 출력의 수준과 사용한 관은 다르지만 Dynaco ST35 푸시풀 앰프(6BQ5 사용)의 회로도에는 28k옴이 쓰였다.

출처: [DIY Audio Projects] Dynaco Dynakit Stereo 35 (ST35) Schematics and Manual

심지어 PCL86 푸시풀 앰프에서는 100k옴을 쓴 사례도 있었다.

[DIY Audio Projects] PCL86 - Worth a try?

10k옴 고정저항이 없어서 페놀 만능기판 위에 2k옴 5개를 직렬로 연결하였다. 보기에 그렇게 흉하지는 않다. 출력도 적절히 유지하고 어느 수준의 NFB을 적용하는 선에서 타협을 보았다. 20원짜리 10k 1/2W 메탈필름저항 두 개면 충분할 것을 무려 열 개나 쓰다니...


출력 트랜스 2차 탭의 납땜 상태가 다소 마음에 들지 않아서 조만간 다시 납땜 인두를 들게 될 것 같다. 비록 외관은 소박하지만 음질에는 만족한다.

2019년 7월 12일 금요일

pip와 conda의 행복한 동거는 어렵다

"Conda 환경 안에서 pip로 새로운 파이썬 패키지를 설치하는 것은 좋지 않다."
Unfortunately, issues can arise when conda and pip are used together to create an environment. [Using Pip in a Conda Environment]
LS-BSR에 포함된 파이썬 스크립트를 실행하는 과정에서 pandas와 관련한 에러가 발생하였다. 에러 메시지를 이용하여 구글을 검색해 보면 흔하디흔한 에러 중 하나다. 참고삼하 말하자면 나는 파이썬 초급 교육을 몇 번 받은 일이 있고 패키지 관리와 활용 정도는 하는 편이지만 파이썬 문법 자체는 잘 모른다.

$ python ../../tools/BSR_to_cluster_dendrogram.py -b bsr_matrix_values.txt
Traceback (most recent call last):
  File "../../tools/BSR_to_cluster_dendrogram.py", line 117, in <module>
    main(options.bsr_matrix,options.cluster_method)
  File "../../tools/BSR_to_cluster_dendrogram.py", line 99, in main
    write_tree(cluster_method)
  File "../../tools/BSR_to_cluster_dendrogram.py", line 76, in write_tree
    dmx = pd.read_csv("distance_matrix", index_col=0, sep="\t")
AttributeError: module 'pandas' has no attribute 'read_csv'

분명히 설치를 했는데 왜 그런 것일까?  해결책을 찾아보다가 conda 내부에서 pip를 이용하여 파이썬 패키지를 관리하는 것은 매우 바람직하지 않다는 글을 발견하였다. Conda가 애써 설치한 파일들을 pip가 건드리게 되지만, conda는 이를 알지 못하기 때문이다. 그러면 conda로 뭔가를 새로 설치하게 되고, 시스템은 뒤죽박죽이 되어 재현하기 어려운 문제를 발생하게 된다는 것이다.

프로그램 설치 기록을 살펴보았다. Conda를 썼다가 다시 pip로 설치를 하고 이어서 또 conda를 쓰는... 매우 바람직하지 않은 방법으로 컴퓨터를 관리해오고 있었다. Conda 4.6.0에서는 아직 베타 수준이지만 pip가 설치한 패키지들을 점검하여 유연한 관리를 하는 기능이 포함되어 있다고 한다.

아나콘다 웹사이트에서 제시한 "Best Practices Checklist"는 다음과 같다.
  • Conda를 써서 되도록 많은 패키지를 설치한 뒤에 pip를 써라
  • 필요하다면 Conda 환경을 새로 만들어라
  • Conda 패키지를 추가 설치하는 가장 좋은 방법은 conda environment를 새로 만드는 것이다
  • Conda와 pip 설정 상태를 텍스트 파일로 저장해 두어라
하나의 conda 환경에 되도록 많은 추가 패키지를 설치하는 버릇을 들여왔었는데, 오늘 찾은 모범답안에 의하면 그것은 매우 바람직하지 않은 일이었다. 그러나 프로그램마다 conda environment를 하나씩 만들면 오히려 관리하기는 더 나빠진다. 특히 연달아 실행해야 하는 프로그램이 전부 다른 conda environment에 있다면 그 실행 과정이 얼마나 불편할지는 불을 보듯이 뻔하다.

보다 합리적인 운용 방안을 위해서 고민해 보자.

grep의 현명한 사용법 - 검색할 패턴(파일로 제공)이 없는 라인을 출력하기

grep은 텍스트 파일 혹은 표준 입력으로부터 주어진 패턴이 존재하는 라인을 출력하는 유틸리티이다. 검색할 패턴은 보통 명령행 옵션으로 하나가 주어진다. 그런데 찾아야 할 패턴이 여러개라면, 이를 별도의 파일('FILE')로 지정해 놓고 -f FILE 옵션으로 제공하면 된다. 검색할 패턴은 FILE 내에서 각각 별도의 라인으로 저장되어 있어야 한다. 좀 더 유식하게 말하자면 FILE 내에서 newline(개행 문자 혹은 쉬운 우리말로는 새줄 문자)로 패턴들이 분리되어 있어야 한다.

이와는 반대로, 특정 패턴이 없는 라인만을 파일에서 출력하고 싶다면? 패턴이 하나라면 -v(--invert-match) 옵션을 사용하면 된다. 그렇다면 좀 더 복잡한 상황을 가정해 보자. 배제하고 싶은 패턴이 여럿이라면 어떻게 하면 되나?

ftp://ftp.ncbi.nlm.nih.gov/genomes/refseq/bacteria/assembly_summary.txt 파일을 다운로드하여 내가 연구하는 어떤 미생물종에 해당하는 라인만을 골라내어 별도로 저장했다고 가정하자(my_species_summary.txt). 그런데 상세히 조사를 해 보니 어떤 레코드는 assembly가 불량하여 배제를 해야 되겠다고 마음을 먹었다. 배제할 레코드의 assembly accession(GCF_로 시작하는)을 따로 추려서 REJECTION이라는 텍스트 파일에 저장을 하였다. my_species_summary.txt에서 이 억세션에 해당하는 라인만을 제외한 나머지를 출력하려면 이렇게 하면 된다.

grep -Fv -f <(cat REJECTION) my_species_summary.txt

-F (--fixed-strings, --fixed-regexp)가 열쇠를 쥐고 있다. grep 매뉴얼에 의하면, -F 옵션은 newline으로 분리된 패턴을 일종의 목록으로 간주하여 각각에 대하여 매치 작업을 하는 것이다. 이것이 -v와 결합된 상태이니 딱 내가 바라는 작업을 할 수 있는 것이다.

힌트는 다음의 웹페이지에서 얻었다.

[Stack Overflow] Search multiple pattern in file and delete line if pattern matches

2019년 7월 10일 수요일

같은 미생물 균주의 유전체가 여러 기관에 의해 시퀀싱되어 등록된 경우의 처리 문제

한 종의 미생물 균주(strain)는 비록 동일한 것이라 해도 균주 기탁 기관에 따라 다른 고유 번호를 부여받게 된다. 예를 들어 Paenabacillus polymyxa의 표준 균주인 ATCC 842의 경우를 보자. 이것이 갖고 있는 균주 번호, 즉 신분증은 이렇게나 많다.

DSM 36, ATCC 842, BUCSAV 162, CCM 1459, JCM 2507, LMG 13294, NCIB 8158, NCTC 10343, CCUG 7426

과거에는 StrainInfo라는 사이트에서 특정 균주 번호를 가지고 이것이 표준 균주(type strain)인지, 그리고 다른 균주 번호는 어떤 것이 있는지를 확인할 수가 있었다. 그런데 여기를 최근 방문해 보면 다음과 같은 슬픈 소식이 눈에 뜨인다. 2019년 1월 1일부터 '영업 중단'인 것이다.

StrainInfo has permanently been put out of commission and will no longer be available.
1-januari-2019


이를 대신할 수 있는 웹사이트는 무엇이 있을까? 바로 DSMZ에서 운영하는 BacDive(The Bacterial Diversity Metadatabase)가 이에 해당한다. 이름을 참 잘 지었다고 생각한다. 단, 완벽하지는 않음에 주의해야 한다. 예를 들어서 Clostridium sporogenes의 표준 균주인 NCTC 13202는 Public Health England(NCTC를 관리하는 기관)에서는 ATCC 3584임이 잘 나타나지만(근거), BacDive에는 이 번호로 찾기가 어렵다.

연구자들이 개별적으로 근처에 있는 컬쳐 콜렉션으로부터 어떤 종의 표준 균주를 입수하여 시퀀싱을 하여 등록을 하면 이는 그대로 INSDC(International Nucleotide Sequence Database: DDBJ, EMBL-EBI & NCBI)의 데이터베이스에 등록이 된다. 특정 종의 모든 유전체를 다운로드하여 포괄적인 comparative genomic analysis를 하는 경우 이는 상당한 번거로움을 초래한다. 근본적으로 동일한 균주에 대한 레코드가 중복하여 존재하는 것이기 때문이다. 그래서 보통은 assembly level이 높은 것 하나만 택하여 쓰기도 한다. 시퀀싱 결과가 표준 균주에서 유래했는지의 여부는 RefSeq 혹은 GenBank의 assembly summary 파일(설명 파일)에서는 22번째 컬럼인 "relation_to_type_material"의 값이 'assembly from type material'인지를 이를 참조하면 된다. 그러면 표준 균주가 아니지만 다른 번호를 갖는 동일한 균주의 중복된 서열을 정리하려면? BacDive를 고독하게 들이파는 수밖에...

하지만 동일한 (표준)균주라 해도 각 기탁 기관에 배포된 뒤 유지를 하는 과정에서 조금씩 변이가 생길 수도 있다. 그렇기 때문에 독립적인 기관에서 같은 균주를 시퀀싱한 복수의 결과를 가끔은 진지하게 들여다볼 필요성은 있다. 간단한 사례를 들어보자. 재조합 단백질의 대량 생산에 쓰이는 유명한(?) 대장균인 Escherichia coli BL21(DE)의 유전체 서열은 완성된 것으로서 두 건이 존재한다. Assembly accession으로는 GCF_000022665.2와 GCF_000009565.1이다. 전자는 나의 작품이고(KRIBB) 후자는 오스트리아의 Universität für Bodenkultur Wien에서 등록한 것이다. Journal of Microbiolgy에 논문(PMID 19786035)이 출간된 것이 2009년이니 10주년 기념을 뭔가 해야 되는데...

두 유전체의 길이는 각각 4,558,953 bp와 4,558,947 bp이다. 딱 6 bp의 길이 차이에 해당한다. 서열 내부를 서로 비교하면 SNV 수준의 차이가 있을지도 모른다. 이 정도라면 시퀀싱 결과가 내포하는 오차의 범위 내라고 보아도 무방하고, 어쩌면 실제로 두 샘플 사이에 존재하는 염기의 차이를 반영하는 것일지도 모른다. 이에 대해서 학문적인 관심을 가지고 집중적으로 연구하는 것도 재미있는 일이 될 것이다.

내가 등록한 대장균 BL21(DE3)는 EZBioCloud에서 검색되지 않는다. 반면에 오스트리아에서 시퀀싱한 게놈은 등록이 되어 있다. EZBioCloud는 내가 알기로 한 균주에 대한 유전체 서열이 중복하여 존재하는 경우 어느 하나만 유지한다. 위에서 살펴본 Clostridium sporogenes의 경우도 DSM 795만이 type으로 등록이 되어 있다. 그러면 왜 EZBioCloud에서는 대장균 BL21(DE3)의 유전체 정보에 대해서 시기적으로도 먼저 공개되었고 논문도 출간된 우리 것을 택하지 않고 오스트리아의 것을 선택하였단 말인가. 살짝 자존심이 상하려고 하네~

EZBioCloud에서 찾은 어떤 유전체 정보의 assembly accession, 즉 GCA_000111222.3을 RefSeq에서는 찾지 못할 수도 있다. RefSeq에 있는 것이 최신 버전이라면(GCF_000111222.4) 이는 당연하다. 매일 증가하는 NCBI의 유전체 정보가 EZBioCloud에 실시간으로 반영되지는 못하기 때문이다. 아마 몇 달에 한번 정도의 업데이트가 있을 것이다. 또 다른 가능성으로는 같은 서열이라 해도 RefSeq에서는 reject된 유전체가 종종 존재한다. 즉 GCA_000111222.1(GenBank)는 NCBI에 등록된 상태이나 이와 동등한 RefSeq 레코드인 GCF_000111222.1은 없는 경우이다. Pseudogene이 너무 많거나, contig의 수가 너무 많거나 등이 사유가 있을 때 RefSeq에는 오르지 못한다. RefSeq에서 배제되는 구체적인 이유에 대해서는 다음을 참고하라. 이런 유전체는 위에서 소개한 assembly summary 파일의 21번째 "excluded_from_refseq" 컬럼에 나름대로의 사연을 담게 된다.

Assembly anomalies and other reasons a genome assembly may be excluded from RefSeq