2025년 3월 4일 화요일

2박3일에 걸쳐 대전에서 상주로 가기

부석사, 소수서원, 도산서원, 하회마을. 지난 이틀 동안 들른 곳이다. 긴 우회로를 거쳐 오늘(3월 3일) 저녁에 드디어 최종 목적지인 상주에 도착하였다.

부석사 석등과 무량수전.



아내는 무량수전 배흘림 기둥에 기대앉았다.

영주 소수서원 입구에서.





상상외로 거대했던 안동 법흥사지 칠층전탑.


임금이 내려 준 '도산서원'이란 이름을 명필 한석봉이 선조 앞에서 직접 썼다는 이야기가 전한다. 내부에는 '전교당'이라는 편액이 걸려 있다. 


도산서원 앞마당에서 낙동강을 바라보면 기묘하게 생긴 둔덕이 있다. 이는 시사단(試士壇)이라고 부른다. 정조때 퇴계 이황을 추모하기 위해 이곳에서 과거 시험을 치른 것을 기념하기 위해 지은 작은 건축물인데, 안동댐이 만들어지면 수몰 위기에 처하자 약 10미터 높이의 언덕을 만들어 그 위로 옮겼다고 한다.


아무도 밟지 않은 눈길을 밟으며 퇴계 이황의 묘소에 들렀다.



이름도, 벼슬도 새겨져 있지 않은 묘비의 한가운데 새겨진 글은 
'퇴도만은 진성이공지묘(退陶晩隱眞城李公之墓)'. 퇴도는 퇴계가 쓰던 호의 하나이고, 만은은 늦게 은거했다는 뜻이다. 진성은 본관. 좌측에 새겨진 글은 퇴계가 생전에 직접 지었다고 한다. 이에 대한 해석은 여기를 참고하라.

성리학, 또는 유학이 21세기를 사는 우리에게 부르짖는 바는 무엇일까? 어제 영주의 소수서원과 선비촌 박물관을 둘러보면서 시작된 골치아픈 물음은 여행 이틀째 더욱 내 머릿속을 강하게 울리고 있었다. 볼거리와 맛있는 음식을 찾아 눈과 입을 자극하는 여행이 아니라 관념을 뒤흔들며 질문을 던지는 여행이 되었다.

나는 유학 또는 유교에 대해 매우 비판적인 사람이다. 그러나 제대로 비판을 하려면 제대로 아는 것부터 출발해야 한다. 그러려면 한자 공부부터 시작해야 할까? 같은 시간을 투자한다면 차라리 한자보다 영어 공부를 하는 것이 더 나을까?

한국고전번역원 - 새로운 해석이 필요한 유교와 유학

명종의 어필 편액. 이로써 소수서원은 최초의 사액서원이 되었다. 3월 2일에 방문하였다.


도산서원에서 멀지 않은 이육사 문학관(안타깝게도 오늘은 휴관일...)에서 바라본 풍광이 예사롭지 않았다. 한 폭의 수묵화로 표현한 겨울 산을 보는 듯하였다.

옥빛으로 빚나며 하회마을을 휘감아 흐르는 낙동강물. 여기는 하회 옥연 구곡이다. 물 저편으로 보이는 것이 조금 뒤에 오를 부용대이다. 바위 색깔도 예사롭지 않았다. 안동의 '지질학'이 궁금하다.


부용대에 올라 바라본 하회마을. 여행 이틀째의 마지막 코스였다. 여기를 오르지 않았으면 후회했을 것이다.



선비란 무엇인가? 학식과 인격을 갖춘 사람으로서 아직 벼슬에 오르지 않은 '양반'이라는 것이 문제이다. 선비 정신을 현대에도 가치 있는 것으로 인정하려면, 신분에 의한 진입 장벽이 분명히 존재했던 과거의 기준을 털어 내야 한다고 믿는다. 양인(양반, 중인, 상민)뿐만 아니라 비록 노비로서 생존을 위해 힘겨운 삶을 살고 있다고 하여도 고매한 인격을 갖추고 있으며 시간을 내어 학문에 힘쓰고 있다면 선비라 불러 마땅하다.

조선시대에는 벼슬살이를 하는 것이 선비의 완성이었다. 모욕을 참으면서 때를 기다리다가 권력자를 만나 비로소 세상에 드러나는 것도 그러한 방법의 하나일 것이다. 그러나 이러한 자세는 나의 신념과는 잘 맞지 않는다. 옳다는 생각도 잘 들지 않는다.

노동을 천시하지 않고, 모든 국민에게 공평하게 부과된 의무를 회피하지 않으며(서원은 세금과 병역을 회피하는 수단으로 변질되된 것으로 알고 있음) 권력 지향적인 자세를 과감히 버릴 때, 그러한 선비 정신이라면 현대에도 계승할 가치가 있다고 본다. 

2025년 3월 3일 월요일

예기치 않은 FASTQ 파일 조작 실수가 가져온 새로운 발견?

10년도 더 된 옛날 만든 미생물의 일루미나 시퀀싱 데이터를 정리하여 국가바이오데이터스테이션(K-BDS)에 등록하는 '유전체 박물관(고물상?)'에 열심히 매진하는 과정에서 데이터 검수 책임을 맡는 관리자에게 늘 고마운 마음을 갖게 된다. 등록 당시에 포함된 어이없는 오류를 바로잡기 위해 번거로운 부탁을 해도 매번 잘 수용해 주기 때문이다. 아직 GenBank의 서열 정보와 같이 버전 관리가 이루어지고 있지는 않지만, 앞으로는 이 기능이 포함되리라 믿는다.

최근 품질관리 담당자로부터 내 HiSeq 2000 raw sequencing data(FASTQ 파일)를 검수하는 과정에서 동일한 서열 ID가 중복하여 나타난다는 소식을 들었다. 당시에는 한 샘플의 FASTQ 파일이 너무 크면 001, 002...와 같은 이름을 붙여서 분할한 형태로 제공하였었다. 이를 'cat' 명령어로 하나의 FASTQ 파일로 합치는 과정에서 똑같은 원본 파일을 두 차례 반복하여 이어 붙인 것이 원인이었다.

72개의 샘플 중에서 이런 문제가 발생한 것은 6가지였다. 문제를 수정한 뒤 모든 분석 작업, 즉 jellyfish를 이용한 21-mer abundance analysis, phyloFlash, ZGA pipeline 및 GTDB-Tk를 전부 새로 실시하였다. 특히 GTDB-Tk는 공식 문서를 기계적으로 따라하다가 너무 오래된 소프트웨어 및 reference DB를 설치하였음을 발견하고 최근 재설치를 하였기에 어차피 모든 데이터에 대한 재작업이 필요한 상태였다. Sequence read ID가 전부 2회씩 중복하여 존재함에도 불구하고 내가 사용한 그 어떤 소프트웨어도 오류 메시지를 뱉어내지 않았었다. 아마도 프로그램 내부에서는 read ID를 전부 단순한 일련번호와 같은 것으로 치환하여 쓰고 있는 것이 아닐까 한다.

수정된 FASTQ 파일을 이용하여 재분석을 하던 과정 중에 Methanobrevibacter smithii의 어느 균주에 대한 시퀀싱 데이터가 이상하다는 것을 발견하였다. FASTQ 파일에 오류가 있었을 때, 즉 정상에 대하여 2배로 부풀려진 상태에서는 contig의 수가 500개에 육박하였고 CheckM(실제로는 ZGA pipeline 내부에서 실행)에서 계산한 completeness가 40%도 되지 않았었다. 그래서 sequencing coverage가 상당히 부족해서 문제가 생겼을 것이라 생각하고 더 이상 쓸 수 없는 데이터로 간주하였었다(KAP241424). 21-mer abundance analysis에서도 main peak가 그렇게 잘 드러나지 않았기에 이런 생각을 하는 것도 당연하였다.

그런데 total contig length를 보니 약 1.8 Mb였다. 이는 Methanobrevibacter smithii의 유전체 크기로 알려진 값과 매우 유사하였다. Contig의 수가 지나치게 많이 나올 정도로 sequencing coverage가 충분하지 않다면, total contig length도 매우 낮은 수준이어야 한다. 표준 균주인 ATCC 35061의 유전체를 NCBI에서 다운로드한 뒤 ZGA로 CheckM 점검을 해 보았더니 이것 역시 completeness가 40% 미만으로 나타났다. 이건 말이 되지 않는다. 두 유전체 서열에 대하여 CheckM을 직접 실행해 보았다. ZGA가 설치된 conda 환경을 그대로 이용하였으니 CheckM 버전은 ZGA pipeline의 것과 동일하다.

결과는 놀랍게도 두 균주 모두 completeness가 100%인 것으로 계산되었다. ZGA pipeline 안에서 CheckM을 실행하고 그 메시지를 처리하는 과정에 문제가 있는 것이 틀림없다(나중에 확인한 것이지만 이는 나의 오해였음). 따라서 내가 시퀀싱한 Methanobrevibacter smithii 균주는 아무런 문제가 없으며, 분리 정보만 되찾아 정리한다면 K-BDS에 등록하여도 아무런 품잘 상의 하자가 없으리라는 결론을 내렸다.

수정한 FASTQ 파일을 이용하여 조립을 하면 contig의 수는 겨우 41개에 불과하다(~156x coverage). 이 데이터를 그대로 duplicate하여 분량을 두 배로 만든 상태에서 조립을 하였더니 contig 수가 500개 가까이 된다? 사실 이 현상은 나의 지식이나 경험으로는 잘 이해가 가지 않는다. 일루미나의 경우 대략 150x 정도의 sequencing coverage에서 최적의 결과가 나오게 되고, 투입량을 그 이상으로 올린다고 해도 더 좋아지지는 않는다는 논문을 본 일은 있다. 하지만 투입량을 그 이상 올렸을 때 조립 결과가 심각하게 나빠진다는 것은 이해하기 어렵다.

이번 데이터에 포함된 오류는 단순히 시퀀싱 분량이 2배로 늘어난 것과는 상황이 다르다는 생각이 들었다. 시퀀싱을 한 판 더 실시하여 read를 2배로 얻었다 해도 이전의 것과 모든 염기서열과 quality가 똑같은 read가 발생할 가능성은 극히 적다. 하지만 내가 초래한 실수에서는 그렇지 않다. 완벽하게 똑같은 read가 2개씩 존재하고 있다. 그렇다면 k-mer spectrum에서 가장 왼쪽에 있는 것들(시퀀싱 오류에 의해서 1,2...회 정도의 저빈도로 존재하지만 그 종류는 가장 많은 것)이 둘 씩 만나서 짧은 contig를 다수 만들게 되는 것이 아닐까?

그림 출처: 손장일, 남진우. Present and future of de novo whole-genome assembly (https://doi.org/10.1093/bib/bbw096, Figure 4)


아직 이전 FASTQ 파일로 만든 contig의 길이 분포 및 평균 read depth를 점검해 보지는 않았다. 버릴 데이터라고 생각해서 신경을 쓰지 않았기 때문이다. 만약 이 assembly에서 짧은 low depth contig가 많은 수를 차지한다면, 나의 원인 분석이 그렇게 틀리지는 않았다는 결론을 내릴 수 있을 것이다.

그래서 '망친' 데이터라고 해서 함부로 내다 버려서는 안된다고 생각한다. 조작 실수에 의해 '망친' 것으로 오해를 할 수도 있기 때문이다. 망친 데이터의 모임인 KAP241424는 전반적인 검토를 거친 뒤 데이터와 README 파일을 바꾸어야 한다. 물론 오늘 글의 주제가 된 Methanobrevibacter smithii의 데이터는 한번 더 확인을 거쳐서 '부활'하게 될 것으로 본다.


2025년 3월 5일 업데이트 - CheckM 실행 결과의 고찰

ZGA pipeline 내부에서 CheckM을 실행할 때에는 'checkm taxonomy_wf' subcommand를 쓰되 기본적으로 bacterial marker를 사용한다. 만약 고세균이라면 '--domain archaea'라는 옵션을 주어야 한다. 문제는 바로 여기에 있었다. 여러 genome에 대하여 일괄적으로 ZGA pipeline을 돌렸으니 개별적으로 domain 정보를 주지 않았고, default setting인 bacteria 마커셋을 사용했던 것이다. 그러니 당연히 genome completeness가 40%도 되지 않는 값이 나올 수밖에... Standalone CheckM 실행에서 나는 'checkm lineage_wf' subcommand를 사용했다. 이 경우에는 domain을 소프트웨어가 알아서 판단하여 적용하는 것으로 보인다. 따라서 ZGA pipeline은 아무런 잘못이 없으며, 매뉴얼을 꼼꼼하게 읽지 않은 나의 잘못이었다.

2025년 3월 1일 토요일

달리기 입문 7개월을 마치며

어제는 너무 피곤하여 달리기를 건너 뛰었다. 긴 회의와 면접으로 몹시 바빴던 오늘, 8 km 달리기로 2월을 마무리하였다. 칼로리 소모량으로 환산한다면 라면 1인분을 불태운 셈이다. 야심차게 10 km를 채워보고 싶었으나 다리에 묵직한 피로감이 느껴져서 무리는 하지 않기로 하였다. 좀 더 달려서 둔산대교 북단을 반환점으로 삼으면 10 km 코스가 될 것이다.


2월에 달린 총 거리는 90 km를 겨우 넘긴 정도이다. 조금만 더 노력을 했더라면 100 km를 채울 수도 있었을 것이다. 다음 달에는 연속해서 10 km를 달리는 것이 가능할 것 같다. 페이스 욕심만 내지 않는다면 말이다. 

앞으로 '하루 달리기의 최소 거리는 7 km'라는 규칙을 지킬 수 있을 것이다. 2월에 총 13회를 달리는 동안 7 km 이상을 달린 것이 10회나 되기 때문이다. 7 km로 15회를 달리면 105 km가 된다. 아주 약간 '도전적'인 목표이다.

2025년 2월 25일 화요일

GTDB-Tk의 reference database를 release 220으로 업데이트한 뒤 발생하는 'Reference genome missing from FastANI database' 에러 해결하기

GTDB-Tk의 배포용 최신판에는 r202_v2 레퍼런스 데이터베이스가 포함되어 있다(혹은 '있었다?'). 최소한 내가 지난 1월에 Bioconda를 이용하여 이를 설치할 때에는 그러하였다. 최근에 공개된 미생물 표준균주의 유전체는 여기에 반영이 되어 있지 않을 것 같아서 레퍼런스 DB를 최신 버전인 r220으로 업데이트한 뒤 재분석을 실행하니 다음과 같은 에러가 발생하였다.

[2025-02-25 08:40:48] ERROR: Reference genome missing from FastANI database: /data/gtdb/release220/fastani/database/GCF/004/000/985/GCF_004000985.1_genomic.fna.gz

데이터베이스가 설치된 곳(/data/gtdb/release220/)을 확인해 보니 fastani라는 디렉토리 자체가 없다. 패키지에 포함된 download-db.sh 스트립트를 이용하여 무려 두 차례나 재설치 후 분석을 시도했으나 마찬가지였다. 데이터를 받는데 하루 종일 걸렸는데 이게 무슨 일이람... GTDB 데이터베이스 최신판의 풀 패키지는 여기에 있다(r220의 파일 크기는 101.04 GB). 만약 파일이 전송되다가 불완전한 상태로 끊겼다면 다운로드 후 설치 및 환경 설정까지 담당하는는 download-db.sh 스크립트가 정상 종료될리가 없다.

r202_v2의 설치 경로 아래에는 분명히 62 GB나 되는 fastani라는 디렉토리가 있었다. r220은 도대체 뭐가 다른가... 다시 한 번 살펴보니 디렉토리 구조가 조금 다르다. r220에는 r202_v2에는 없었던 skani라는 디렉토리가 있었다. 그 아래에 다시 database가 있고, 하위 구조를 보아하니 이 상태 그대로 fastani 하위에 심볼릭 링크를 만들면 될 것 같았다. 

이와 같이 나름대로 조치를 취한 뒤 다시 GTDB-Tk 분석을 실시하였다. 잘 돌아간다! 최종 결과 파일인 gtdbtk.bac120.summary.tsv가 무사히 생성되었다.

레퍼런스 데이터베이스의 구조가 바뀌었으면 제대로 알려 주었어야 하는 것 아닌가! 현재 설치용 배포판으로 제공하는 GTDB-Tk v2.1.1에서는 skani를 사용하기 전에 개발된 것으로 추측된다. 최신 버전은 v2.4.0인데 비교적 최근에 설치를 한 나는 왜 v2.1.1이란 말인가. 조만간 GTDB-Tk도 v2.4.0으로 업데이트를 해야 되겠다.

GitHub에 가 보니 FastANI가 skani로 대체되었다는 공지가 있었다. 개발자는 자기 할 일을 다 하고 있었는데 나만 몰랐다.

✨ New Features

GTDB-Tk v2.4.0+ includes the following new features:

  • FastANI has been replaced by skani as the primary tool for computing Average Nucleotide Identity (ANI).Users may notice slight variations in the results compared to those obtained using FastANI.

skani는 도대체 무엇인가? FastANI의 뒤를 이을 고속 분석법인가? 그렇다! 대량의 metagenome-assembled genome(MAG)을 상호 비교할 일이 많아지면서 기존의 FastANI도 느리다도 느껴지는 시대가 되었다. 특히 ANI 계산은 contamination과 incompleteness에 대하여 취약하다. skani는 단편 상태의 불완전한 MAG를 비교함에 있어서 FastANI보다 20배 이상 빠르며, 더욱 정확하다고 한다.

조금만 손 놓고 있으면 이렇게 최신 동향을 놓치게 된다. Announcements를 제대로 챙겨 보았다면 내가 설치한 GTDB-Tk 자체의 버전(2.1.0, 2022년 5월 11일)이 너무 옛날 것이라는 것을 알게 될 것이다. 늘 깨어 있으라! 현잰ㄴ 2024년 4월 24일에 배포된 2.4.0이 통용되고 있다.


2025년 2월 27일 업데이트

나의 두 눈으로 똑똑히 보고 말았다.... GTDB-Tk 공식 문서의 Bioconda를 통한 설치 관련 항목(링크)에 어떤 내용이 있었는지를...





2025년 2월 24일 월요일

k-mer 분석 프로그램인 jellyfish를 미련하게 쓰고 있었다

khmer, jellyfish, KAT... NGS read로부터 k-mer 분석을 할 때 내가 즐겨 사용하는 프로그램들이다. 초창기에는 khmer를 즐겨 사용했었다. 이 프로그램은 특히 k-mer에 대해 어떤 기준을 적용하여 필터링을 할 수 있다. 그러나 모든 작업에서 이렇게 데이터를 잘라내는 '침습적' 조작을 필요로 하지는 않는다. 요즘은 khmer의 핵심 프로그램보다는 부속 파이썬 스크립트를 쓰는 일이 많다. 예를 들어 readstats.py나 interleave-reads.py 같은 것.

그다지 크지 않은 데이터셋에 대해서 간편하게 k-mer abundance 분석을 하려면 jellyfish가 더 편리하다. 최근 K-BDS에 등록할 '묵은지와 같은' 옛날 NGS 데이터(일루미나 HiSeq 2000)을 재정비하다가 jellyfish를 아주 무식하게 쓰고 있다는 것을 깨달았다. 사실 Getting started 문서만 제대로 읽었어도 이런 비효율적인 일은 하지 않았을 것이다. 이 비효율적인 실행 방식은 몇 년이나 작동하고 있었다. 이 모든 실수는 게놈 고물상 영업을 개시하면서 비로소 드러난 것이다.

k-mer spectrum을 시각화하려면 'jellyfish count'로 k-mer를 센 뒤, 'jellyfish histo'로 히스토그램을 만든 다음 gnuplot으로 적당히 그림을 그리면 된다. 그런데 미련하게도 첫 명령어에서 산출된 파일에 대하여 'jellyfish dump'로 모든 k-mer의 수를 수록한 텍스트 파일을 뽑은 뒤 다시 여기에서 awk/uniq/sort 조합으로 히스토그램을 만들고 있었으니... 물론 이것도 나의 순수한 창작은 아니고 인터넷 어디선가 검색을 통해서 알아낸 것이었다. 이 미련한 한 줄 스크립트는 아래와 같다. SAMPLE.kmer21.txt는 'jellyfish count'의 결과 파일이다.

awk ‘{print $2}’ SAMPLE.kmer21.txt | sort -n | uniq -c | awk ‘{print $2 "," $1}' > SAMPLE.jf.hist

텍스트 파일 덤프는 정말 쓸데없는 일이었다. 처음부터 히스토그램을 뽑아내면 되는 것이었다. Fwd 및 rev read를 하나로 합쳐서 interleaved fastq file(*.pe.fq)을 만들어 놓은 다음 k-mer abundance plot을 그리는 방법을 알아보자. jellyfish 명령어로 21-mer를 세어서 히스토그램을 만든 뒤 gnuplot에서 플로팅하는 전체 명령어를 다음과 같이 재정비해 보았다. 

for x in *pe.fq
do
  echo Processing $x...
  x=${x%%.pe.fq}
  jellyfish count -m 21 -s 100M -t 12 -C $x.pe.fq -o $x.counts.jf
  jellyfish histo -o $x.jf.hist $x.counts.jf
  echo Running gnuplot...
  echo set term png > $x.jf.gp
  echo set output \"$x.jf.png\" >> $x.jf.gp
  echo set logscale x >> $x.jf.gp
  echo set logscale y >> $x.jf.gp
  echo set grid >> $x.jf.gp
  echo set xlabel \"21-mer frequency\" >> $x.jf.gp
  echo set ylabel \"number of distinct 21-mer\" >> $x.jf.gp
  echo set key off >> $x.jf.gp
  echo set title \"$x\" >> $x.jf.gp
  echo plot \"$x.jf.hist\" using 1:2 with lines >> $x.jf.gp
  gnuplot $x.jf.gp
done

실행을 마치면 *.jf.png라는 파일이 생겨날 것이다. 히스토그램 파일의 필드 구분자가 만약 콤마인 경우에는 'echo set datafile separator \“,\” » $x.jf.gp'라는 줄이 'echo plot...' 전에 들어가야 한다. 

히스토그램 파일을 넣어주면 분석 그림을 그려주는 GenomeScope라는 웹서비스도 있었다. 2020년에 Nature Communitations에 발표된 논문 제목은 'GenomeScope 2.0 and Smudgeplot for reference-free profiling of polyploid genomes'. 교싲신저자인 M.C. Schatz의 이름이 아주 낯이 익다. 어디서 봤더라... 논문 목록을 훑어보다가 'Hawkeye and AMOS'라는 2011년도 논문(링크)을 찾아냈다. 내 블로그에도 몇 차례 언급되었던 소프트웨어이고 사용했던 경험도 있다. 

2025년 2월 23일 일요일

작업 과정을 보여주는 친절한 ChatGPT - '미생물의 유전체 분석을 위한 universal single-copy gene과 관련한 연구 역사를 정리해 줘'

어떤 연구자 그룹에서 발표한 성과물이 어떤 시간 순서대로 나왔는지 알고 싶어서 ChatGPT에게 질문을 던졌다. PubMed에서 조금만 검색을 해 보면 될 일이지만, 어차피 유료로 사용하는 ChatGPT를 이런 목적으로라도 써야 하지 않겠는가. 질문은 다음과 같았다.

UCSD의 Jonathan A. Eisen이 PhyloSift와 AMPHORA, AMPHORA 2를 언제 논문으로 발표했는지 알려줘. 논문 URL도 같이 보여줘.

참고로 amphora는 고대 그리스와 로마 시대에 널리 쓰이던 길쭉한 항아리로, 두 개의 손잡이가 달렸다(위키피디아).

뉴욕 메트로폴리탄 박물관('The MET') 소장품인 Terracotta Nolan amphora(링크). 이 박물관의 소장품 사진 대부분은 자유롭게 복사, 변형, 재배포가 가능하다. 심지어 상업적 용도라 하더라도! 


조금 기다리고 있으면 최종 답변이 나올 것으로 기대하였다. 그런데 화면에서는 현재 ChatGPT가 어떤 궁리를 하면서 내가 던진 질문에 대한 답변을 준비하는지를 보여주기 시작하였다. 내가 제출한 질문을 먼저 확인하고, 정보를 찾은 뒤, 나름대로 논리적 전개를 하여 종합한 다음 마지막으로 점검하는 과정까지 친절하게 보여주는 것이었다. 예전보다는 분명히 더욱 영리해졌다. 작업 화면을 녹화하여 동영상을 만들어 보았다. 중간에 기다리는 시간이 있어서 약간 지루하게 느껴질 수도 있겠다.


이 동영상의 초기 버전을 내 유튜브 채널에 올렸다가 다시 내렸다. 정보량이 그렇게 많은 유용한 동영상은 아니라는 생각이 들었기 때문이다. ChatGPT의 최종 답변은 다음과 같았다. 위에서 보여준 중간 처리 과정과 관련한 메시지는 사라지지 않았다. 다음의 답변 맨 위에 나오는 '1m 44s 동안 이성 처리 완료'를 ChatGPT내에서 클릭하면 '이성 처리의 과정'이 다시 화면에 펼쳐져 나온다. 물론 이 블로그에서는 클릭을 해 봐야 소용이 없다.

다음은 Jonathan A. Eisen 교수 연구실과 밀접하게 관련된 세 가지 도구에 대한 논문 정보입니다.


1. PhyloSift

이 논문은 PhyloSift를 소개하며, 다양한 게놈 및 메타게놈 데이터를 이용해 계통분석을 수행하는 방법을 설명합니다.


2. AMPHORA

비록 이 원 논문의 저자 목록에는 Wu, Y.-W., Simmons, B.A. 그리고 Singer, S.W.가 포함되어 있으며 Eisen 교수의 이름은 없지만, 해당 도구는 Eisen 교수 연구실이 주도한 계통분석 연구와 밀접한 관련이 있습니다.


3. AMPHORA2

이 논문에서는 AMPHORA의 개선판인 AMPHORA2를 소개하며, 미생물 게놈의 계통분석을 위한 자동화된 파이프라인을 제시하고 있습니다. 이 논문에는 Wu, Y.-W., Simmons, B.A.와 함께 Eisen 교수도 공저자로 포함되어 있습니다.


이와 같이 Eisen 교수 연구실에서는 2009년(AMPHORA)과 2013년(PhyloSift 및 AMPHORA2)에 관련 논문을 발표하였습니다. 

이 정도로 정보를 처리할 정도라면, 한 사람의 생애를 정리하여 전기나 연대기를 만드는 것도 어렵지 않아 보인다. '이성 처리'는 rational processing 또는 logical reasoning을 의미하는 것으로 보인다.

오늘 Eisen의 논문을 다시 찾아보게 된 것은 오랜만에 약 160건의 미생물 유전체를 아우르는 phylogenetic tree를 그리기 위함이었다. 5년쯤 전까지만 해도 PhyloSift를 종종 사용하였었는데, marker gene set 다운로드 링크가 더 이상 유효하지 않다. 전에 사용하던 낡은 서버에서 프로그램을 되살릴 수는 있었지만, 보다 최신의 연구 동향 및 도구가 궁금하던 차에 다른 논문을 뒤져보다가 서론 부분에서 Eisen 그룹의 연구 내용이 소개되어서 반가운 마음에 ChatGPT 신세를 좀 져 본 것이었다.

오늘 찾아본 두 편의 논문은 다음과 같다.

A revisit to universal single-copy genes in bacterial genomes - Scientific Reports 2022.

VBCG: 20 validated bacterial core genes for phylogenomic analysis with high fidelity and resolution - BMC Microbiome 2023.

첫 번째 논문은 잘 알려진 일곱 가지의 universal single-copy gene(USCG)를 평가한 것이다. 따라서 새로운 마커 유전자를 제시하거나 여러 유전체 염기서열로부터 이를 찾아내는 파이프라인을 제시하지는 않았다. 두 번째 논문(VBCG)에서 GitHub에 공개한 응용프로그램(링크)이 매우 유용해 보인다. 

두 논문의 서론 부분만 제대로 읽어도 이 분야의 연구 동향을 알아내기에 충분하다. 물론 세상에는 더 많은 마커 유전자 세트가 존재한다. 아직 두 논문을 철저하게 소화한 것은 아니지만, proGenomes database(v3 링크)에서 사용한 40개의 universal, single-copy phylogenetic marker gene("specI", Nature Methods 2013)을 언급한 것 같지는 않다. proGenomes와 specI는 Peer Bork이 이끄는 EMBL-Heidelberg에서 주도한 것으로 알고 있다. specI는 2017년에 내 블로그에서 조금 다루었었다(쉽게 쓴 원핵생물의 종 동정 이야기). proGenome v2에서 사용한 classifier는 GitHub에서 공개하고 있다(링크). phyloSift에 대한 글은 내 블로그에서 꽤 많이 작성해 놓았기에 여기에 전부 링크를 달 수는 없다. 한국에서 개발한 UBCG(up-to-date bacterial core gene set, v2)를 빼놓으면 섭섭할 것 같다.

시대가 변했으니 나도 좀 더 편리한 도구인 VBCG로 옮겨갈 때가 되었다고 본다. 실제로 설치 후 활용해 보니 매우 빠르다. 이따금 ezTree를 사용할 때도 있다. 이 프로그램은 정해진 적은 수의 marker gene set을 쓰는 것이 아니고 PFAM HMM library에 대해 query genome을 다 뒤진 뒤 공통적인 것만 걸러내는 스타일이라서 시간이 많이 걸린다.

올해 들어서 열 번 가까이 실행하고 있는 GTDB-Tk에서도 universal marker gene을 사용한다(설명 링크). 갑자기 공부할 것이 많아졌다!

2025년 2월 22일 토요일

달리는 거리를 8 km로 늘여 보았다

작년에 달리기를 처음 시작할 때의 목표는 딱 30분, 또는 5 km 정도를 지속적으로 뛰는 것이었다. 사실 이 두 개의 목표 수치는 서로 잘 맞지 않는다. 그러려면 6분 페이스를 맞추어야 하는데, 아직 내 페이스는 6분 25초 정도에 불과하기 때문이다.

요즘은 하루에 달리는 거리를 조금씩 늘려 나가고 있다. 5 km로 끝내는 날은 거의 없다. 이번 주의 세 차례 달리기에서는 7 km를 한 번, 8 km를 두 번 달려 보았다.

2월의 달리기 기록, 노란색 원은 7 km, 빨간색 원은 8 km를 달린 날이다. 

최근 6회의 달리기(7 km 4회, 8 km 2회)에서는 케이던스와 페이스도 매우 안정적으로 유지되는 편이다. 예전에는 달리기 후반부로 갈수록 속도가 떨어지는 것이 확연히 드러났었다. 어제는 오랜만에 레드미 워치를 차고 심박수를 측정해 보았다. 165 bpm을 넘겨서 경고가 발생하는 일도 없었다. 몇 달에 걸쳐서 매우 점진적인 수준이나마 개선이 이루어진 것은 분명하다. 확실히 숨은 과거보더 덜 차게 느껴진다.





8 km 달리기의 단점은 시간이 오래 걸린다는 것이다. 집을 나섰다가 돌아오는 시간을 전부 따지면 한 시간을 넘기기 쉽다. 평생 이렇게 지속적으로 시간을 투자해서 무엇인가를 해 본 일이 있었던가? 만약 같은 시간을 어학에 투자했다면? 악기를 연습하거나 레슨을 받는데 투자했다면? 논문을 읽었다면?

일주일에 세 번을 뛴다면 1~2회는 8 km를 채우는 것을 목표로 해야 되겠다. 페이스는 현 수준으로 유지하면서 몸을 적응시켜 나가는 것이 필요하다. 그러다가 7분 이내 페이스로 10 km를 뛰는 날을 하나 둘 만들어 나가면 되지 않을까? 가끔 검색을 해 보면 매일 10 km를 달리는 사람의 경험담을 읽을 수 있는데, 나에게 그런 일이 일어날 것이라고는 생각하지 않는다. 

올해의 목표는 단순하다. 기록 같은 것에 연연하지 않고 이따금 10 km를 달릴 수 있는 몸을 만드는 것, 그리고 평소에는 이틀에 한 번 간격으로 7~8 km를 달리되 6분 25초 이내의 페이스를 유지하는 것. 마지막으로 다치지 않는 것.


[업데이트] 8 km 달린 다음날의 부작용 

하루 종일 졸음이 쏟아짐. 주말이었기에 망정이지...