2020년 7월 6일 월요일

Circlator fixstart 작업의 실수 - 모든 contig를 대상으로 fixstart를 해서는 안된다!

Circlator all 명령으로 circlator의 모든 과정을 일괄적으로 실시하는 것이 아니라 개별 task를 실행할 때가 있다. 특히 fixstart를 할 일이 많다. 요즘 nanopore에서 시퀀싱한 long read와 같은 샘플에서 유래한 일루미나 read를 같이 다루면서 circlator를 다시금 열심히 사용하고 있는데, contig가 여러 개인 경우 circlator fixstart를 함부로 하면 안된다는 평범한 사실을 이제 깨달았다.

생각해 보라. 원형 구조임이 확인되지 않은 contig에 대한 fixstart란 무슨 소용이 있단 말인가? 이를 대비하여 fixstart를 건너뛸 contig의 목록을 미리 만들어 둔 다음, cicrlator fixstart --ignore FILENMAE으로 처리해야 하는 것이었다.

너무나 당연한 것을 이제 깨달았다. 혹시 그동안 NCBI에 이미 등록하여 공개한 세균 유전체 서열 중에서 이런 실수를 한 것이 있지 않았을까?

Flye assembler가 만들어 내는 assembly_info.txt 파일을 열어보면 circular 구조 여부가 이미 포함되어 있다. Canu assembler는 circular 구조임을 제안했다 하여도 circularization까지는 해 놓지 않는다. 그러나 flye는 circularization을 해 놓은 상태이다. 따라서 circ. = N으로 표시된 contig를 circlator fixstart를 할 때 제외하도록 만들면 된다. 제외한 contig의 목록 파일은 awk 명령어를 쓰면 assembly_info.txt에서 간단히 만들 수 있다.

다음은 flye의 GitHub 웹사이트에서 인용한 것이다(Question about circular sequence output).
The sequence should be circularized already. Some people reported that Flye might delete a few (~10) bases at the contig's breakpoint. We are planning to fix this in the future. See the Ryan Wick's evaluation for the details (https://github.com/rrwick/Long-read-assembler-comparison).

Rosegarden에서 녹음한 미디 파일(FluidSynth)

iCON 키보드로 실시간 입력을 하여 녹음을 한 뒤 인터넷에 공개할 수준은 아직 전혀 되지 못한다. 오늘의 목표는 리눅스 환경의 Rosegarden에서 미디 파일을 재생하면서 오디오 트랙으로 녹음을 하고, 이를 mp3로 전환하는 것이었다. 펌웨어를 V1.06으로 업그레이드한 iCON 5Nano는 Rosegarden에서 FluidSynth를 잘 울려 주었다. 별도의 USB audio interface는 쓰지 않고 컴퓨터의 내장 사운드 카드를 그대로 이용하였다.

QJackCtl에서 입출력 연결을 제대로 해야 오디오 트랙에 제대로 녹음이 된다. 아래는 기본 상태로서 이대로 녹음을 하면 노트북 컴퓨터의 내장 마이크로 들어오는 신호가 녹음이 되어 버린다. 드뷔시의 피아노 곡 미디 파일을 오픈하여 사용하고 있다.


아래 스크린샷에서 보인 것처럼 fluidsynth의 출력을 rosegarden의 녹음 입력으로 보내야 한다.


오디오 녹음을 위한 트랙을 새로 만들고 arming을 한뒤 'T'를 입력하여 Transpose 창을 열고 빨간 버튼을 눌러 녹음을 개시한다. 메트로놈 사운드는 꺼 버렸다. 녹음 시 모니터 출력으로는 메트로놈이 들리지만 녹음용 트랙으로는 들어가지 않게 하는 방법이 당연히 있을 것이다. 아래 이미지는 녹음 중의 모습이다.


녹음이 정상적으로 끝나면 오디오 트랙에 파형이 보인다.


녹음 결과물은 .wav로 기록된다. 이를 audacity에서 mp3로 전환하였다. 그 결과물을 아래에 링크하였다.



Audacity에서 아무런 수정을 하지 않고 그대로 전환을 한 것이라서 듣기에 어떠한지는 나도 잘 모르겠다.

리눅스에서 Rosegarden을 쓰는 방법은 Demonic Sweaters(Justin Wierbonski LinkedIn)의 유튜브 동영상을 많이 참조하였다. 아직까지 매우 기본적인 기능만을 쓰는 중이다. 아래에 소개한 동영상 중에서 마지막 세 개는 리눅스 컴퓨터에서 음악 작업을 하는데 매우 중요한 개념을 잘 설명하고 있다. 노트북 컴퓨터의 내장 스피커로 모니터링을 하다가 헤드폰을 연결하면 소리가 즉시 헤드폰으로 전환되어 나오지 않는 사소한 문제는 아직 해결하지 못했다.






다음 목표는 USB audio interface를 Rosegarden에서 쓰는 것이다. 노트북 컴퓨터의 USB 포트가 두 개뿐이라서 키보드(타자를 위한 키보드가 아니라 MIDI keyboard controller)와 마우스까지 연결하려면 아마도 USB 허브를 써야 될 것이다. 유전원 USB 허브가 필요할까? 아직 잘 모르겠다. USB audio interface는 Behringer UCA200일 수도 있고, 사운드캔버스 SC-D70이 될 수도 있다. NanoPiano의 소리를 녹음하려면 오디오 인터페이스를 반드시 써야만 한다.

장난감의 범위가 점점 넓어진다!

2020년 7월 5일 일요일

iCON iKEYBOARD 5NANO를 구입하다


낙원상가 3층에 자리잡은 (주)엠앤에스. 306이라는 호실 표시가 선명하다. 
우연히 구하게 된 사운드캔버스 SC-D70와 나노피아노의 화려한 부활을 위해 마스터 키보드를 구입하게 되었다. 요즘은 마스터 키보드에서 5핀 DIN 커넥터가 점점 사라지고 USB로 컴퓨터에 연결하여 DAW 소프트웨어를 구동하게 만드는 추세라서 구식 사운드 모듈에 MIDI 케이블을 연결하여 쓸 키보드를 낮은 가격대에서는 구하기가 쉽지는 않다.

토요일 오후, 낙원악기상가 3층 306호에 위치한 (주)엠앤에스를 찾아서 Korg의 microKEY와 iCON의 iKEYBOARD 5NANO를 놓고 휴대성과 편의성 사이에서 고민하다가 결국 iCON의 것을 골랐다. USB 연결만 지원되는 키보드는 아이패드와 유전원 USB 허브, 그리고 USB MIDI 케이블을 이용하면 어떻게 해서든 구식 사운드 모듈을 연결할 수 있을 것 같았으나 아무래도 사용이 번거로울 것 같았다. iCON 5NANO는 디자인도 깔끔하고 생각보다 그렇게 무겁지 않았다(3.87 kg). 크기는 806 x 189 x 72 mm이다. 파견 근무지 숙소의 작은 책상 위에 가까스로 올라간다. 키 터치 느낌은 그런대로 합격점이다. 

출처: ICON Pro Audio. 현재 iCON 제품의 공식 수입처는 HDC영창이다. 

MIDI 케이블로 외장 모듈을 연결하면 아주 잘 작동한다. 그러나 컴퓨터에 연결하여 쓰는 것은 아직 익숙하지가 않다. 상자에는 BITWIG 8 track 제품이 번들되었다는 스티커가 붙어 있는데, 동봉된 CD-ROM과 인쇄물을 아무리 뒤져봐도 시리얼 번호를 찾을 수가 없어서 설치를 제대로 할 수 없었다. 이게 아니더라도 무료로 풀린 Cakewalk이 있으니 별 문제는 없을 것이다. 설정 변경 프로그램인 iMap을 버전 1.17로 바꾸고 펌웨어도 1.06베타로 업그레이드를 하였다. iMap을 업그레이드하니 펌웨어를 미리 다운로드하지 않아도 되는 것 같다. 펌웨어 업그레이드와 관련하여 자잘한 일들이 있었지만 일일이 블로그에 기록할 수준의 것은 아니다.


ASIO4ALL을 설치하고 일단 Cakewalk에서 이 키보드를 건드려서 Cakewalk TTS-1의 소리가 잘 나는 것을 확인하였다. 리눅스에서는 펌웨어 버전에 따라서 동작 상황이 조금 다른 것 같다. 리눅스에서 Rosegarden을 이용하여 녹음 작업이 되게 만드는 것이 당장의 목표이다.

대충 마련한 방구석 스튜디오.


2020년 7월 1일 수요일

Long read용 de novo assembler는 왜 이렇게 많은지...

일루미나 데이터의 조립에는 전적으로 CLC Genomics Workbench에 의존하면서 가끔 SPAdes를 사용하는데 반하여 long read sequencing data의 조립용 도구는 종류가 더 많아서 선택이 어렵다. 현재까지는 Canu 2.0을 신뢰하는 편이고 UniCycler도 비슷한 정도로 사용한다. UniCycler는 hybrid assembler이지만, long read만 제공하여 조립을 할 수도 있다. 내부적으로 돌아가는 것은 miniasm/racon이다. UniCycler를 miniasm/racon용 wrapper로 사용하려는 생각을 며칠 전부터 하고 있다.

F1000Research에 UniCycler의 개발자인 Ryan R. Wick이 여러 long read assembler를 prokaryote genome 조립용으로 벤치마킹한 논문을 실었다. 여기에서는 무려 일곱 가지의 de novo assembler -  Canu, Flye, Miniasm/Minipolish, NECAT, Raven, Redbean and Shasta - 를 비교하였다.

Benchmarking of long-read assemblers for prokaryote whole genome sequencing [version 2; peer review: 4 approved]

F1000Research는 일종의 개방형 저널로서 투고와 리뷰 과정이 전부 공개되는 것으로 알고 있다. 이러한 저널에 IF를 붙이는 것이 옳은지는 모르겠으나 2019년도 IF는 2.64이다. 연구뿐만이 아니라 의견이나 네거티브 데이터에 관한 논문도 받는다니 여러모로 혁신적인 학술지라 할 수 있겠다.

Ryan R. Wick의 이번 논문에 의하면, Flye와 Miniasm/Minipolish에 가장 높은 점수를 주었다고 한다. 하지만 조립과 관련된 모든 수치를 만족시키는 최고의 assembler는 없었다고 한다. 상황이 이러하니 canu만 편식할 것이 아니라 flye에도 관심을 갖지 아니할 수가 없다. Flye라는 assembler가 나왔다는 것을 작년쯤 알게 되었을 때에는 '무슨 이름이 이렇지?'하고 그냥 지나갔는데, 논문은 무려 Nature Biotechnology(2019)에 실렸다! 사람이란 참 간사해서 논문 정보에 눈히 확 뜨이면서 비로소 관심을 더 갖게 되었다... 논문의 저자 Mikhail Kolmogorov, Jeffrey Yuan, Yu Lin & Pavel A. Pevzner 중 교신저자는 바로 그 유명한 Pevzner였다. 위키피디아를 찾아보니 Pevzner의 지도교수는 Michael Waterman이었다. 유명한 사람은 다 나오는구나...

Assembly of long, error-prone reads using repeat graphs (Flye 논문)

Conda 환경에 설치를 해 놓은 뒤 테스트할 궁리를 하는 중이다. 옵션 중에서 특히 흥미를 끄는 것은 --plasmids와 --asm-coverage-option이다. 거대 유전체를 조립할 때에는 메모리 사용량을 줄이기 위하여 longest read의 subset을 선택하여 사용하는 것이 좋은데, 이때 쓰이는 것이 --asm-coverage-option이라 한다. 30x면 good initial contig를 만들 수 있고, 보통 40x 정도면 'good disjointig(unitig와 비슷한 용어인가?)'를 만드는데 충분하다고 한다. 하지만 최종 단계에서는 모든 read가 전부 다 쓰인다고 한다. 대단히 현명하다.

어떤 결과가 나올지 당장 테스트를 해 보고 싶은데 지금은 6개 샘플의 UniCycler(long reads only) 조립 중이라서 몇 시간은 더 기다려야 한다.

2020년 6월 27일 토요일

Alesis NanoPiano의 부활

완전히 망가졌던 것은 아니니 부활이라고 하는 것은 적절하지 않겠다. 대전 사무실에 몇년 동안 처박혀 있었던 Alesis NanoPiano와 USB MIDI cable을 챙겨왔다. 구입은 아마 2002년쯤에 한 것으로 기억한다. 내 블로그에 남긴 마지막 글은 2016년의 것이다(링크). 노트북 컴퓨터(Windows 10)에 USB cable로 연결한 SC-D70의 MIDI out과 NanoPiano의 MIDI in을 케이블로 연결한 뒤 피아노 연주곡의 MIDI 파일을 재생해 보았다. NanoPiano의 출력을 직접 앰프에 연결하든, SC-D70의 audio input에 연결하든 소리를 잘 내었다. 하나의 파일을 연주하면서 시퀀서 프로그램에서 SC-D70과 NanoPiano로 번갈아 미디 신호를 보내면서 재생되는 음악을 비교하여 보았다. 용량이 더 크고 스테레오로 샘플링이 된 NanoPiano가 더 입체감이 있는 소리를 내지만 약간 건조한 느낌도 있다. 인터넷을 찾아보면 NanoPiano의 음질에 대한 평은 중간 정도에 불과하다. Korg의 SG-Rack이나 Kurzweil의 MicroPiano이 피아노 소리로는 더 우위에 있었던 것 같다. 물론 이것은 거의 20년 전에 해당하는 이야기이다. 지금이야 훨씬 더 용량이 큰 가상 악기가 흔하니 말이다.




USB MIDI cable은 우분투 18.06에서도 잘 인식이 되었다. lsusb 명령을 치면 Textech International Ltd. MIDI Interface cable이라고 표시가 된다. 본체에 찍힌 http://www.hsrtech.com.ar라는 주소는 이제 더 이상 유효하지 않다. 지금은 우분투에서 pmidi 명령어로 베토벤의 월광 소나타 MIDI 파일을 듣고 있다.


Kunst der Fuge 사이트에 오래전에 유료 구독을 해 놓았던 것도 까맣게 잊고 있었다. 회원 정보를 보니 2011년 7월에 등록을 했었다. 이 사이트는 평생 무료이다. 이 웹사이트가 과연 얼마나 유지가 될까? 이 사이트에서 소개하는 vanBasco의 가라오케 플레이어는  Windows 95/98/ME/NT 4/2000/XP를 지원한다고 되어 있다. Windows 10에서 작동을 하는지는 아직 확인을 해 보지 않았다.

단순히 미디 파일의 재생을 넘어서 '시퀀싱(DNA sequencing이 아니다!)' 또는 녹음까지 하려면 한 차원 위의 프로그램이 필요하다. 리눅스에서 작동하는 것으로서 요즘 써 본 것을 나열해 보자. 윈도우라면 Cakewalk for BandLab이 있다.

오늘 챙겨온 장비만으로도 당분간 소일거리가 부족함은 없을 것이다.

2020년 6월 25일 목요일

사운드캔버스 SC-D70의 활용도를 높이는 방법

간단하다. 컴퓨터에 연결하여 사운드카드 대신으로 사용하면 된다. 별도의 전원 공급이 필요하지 않은 Behringer UCA200에 비하면 약간 불편하지만 말이다.

아이패드는 SC-D70을 외장 사운드 기기로 인식하지 못한다.
이 오래된 장비에 대한 흥미가 앞으로 얼마나 유지될지는 자신하기 어렵다. 되도록이면 오랫동안 갔으면 한다. 어차피 건반을 갖추지 않은 외장형 음원의 시대는 지나갔고, 앞으로 새로운 제품이 만들어질 가능성이 없기 때문이다. SLR과 비슷한 운명이다. 현재 통용되는 기술에 비하면 보잘것이 없지만 희소성은 있다.


나의 책상 위에는 더 오래된 기술이 버티고 있다. 1940년대에 만들어진 진공관 43 pentode.


길 건너는 민달팽이 구하기

이슬비가 내리는 하천 옆 산책로를 따라 출근을 한다. 운동을 위해 지하철역을 내려 일부러 산책로를 우회하여 2 km 조금 넘는 거리를 걷는다. 기분에 따라서 수백 미터를 추가하기도 한다. 장마철에 막 접어들었고 밤새 비가 내려서 산책로를 따라 우거진 수풀에는 물기가 가득하다. 한참을 걷다가 눈 앞에 열심히 길을 건너는 민달팽이 한 마리를 발견하였다.

길 건너는 민달팽이.
몸을 한껏 늘인 민달팽이의 길이는 거의 8 cm 정도는 됨직하였다. 땅이 젖은 날이면 평소에는 지렁이들이 그렇게 많이 외출을 하더니 오늘은 큼직한 민달팽이가 느릿느릿 길을 횡단한다. 마치 대륙횡단열차가 사막을 지나는 모습을 상공에서 바라보는 듯한 모습이었다. 삐죽 솟아나온 눈은 마치 통신용 안테나 또는 팬터그래프를 닮았다.

떠나는 이들은 누구나 사연이 있다. 목적지에서 무엇인가를 얻기 위하여, 혹은 지금 머무는 곳에서 비롯된 괴로움을 잊기 위하여, 심지어는 그대로 남아 있어서는 더 이상 살 수가 없기 때문에! 한승석&정재일의 2014년 앨범 [바리 abandoned]에 수록된 곡 '건너가는 아이들'의 뮤직 비디오를 소개한다. 가사는 이 글 마지막 부분에 올렸다.



그냥 놔두면 무심히 지나는 행인에게 밟히거나 자전거에 깔릴 것 같아서 구출을 해 주기로 하였다. 근처에서 나뭇가지를 가져다 몸을 밀치니 본능적으로 위험을 직감한듯 몸을 수축시키며 C자 형태로 잔뜩 구부려서 움직임을 멈춘다. 잔뜩 경직된 몸체는 마치 죽은 것 같다. 이것도 천적으로부터 자기를 보호하는 본응이리라. 껍데기조차 지고 다니지 않는 연한 몸을 지닌 동물이 무슨 수로 자기를 지치겠는가. 수축한 녀석의 몸을 보니 길을 건널 때는 최대로 몸을 늘였음을 알 것 같다. 일단 녀석의 행선지로 볼 수 있는 길 왼쪽 가장자리로 치워 놓았다. 그런데 구출을 마치고 자리를 떠난 뒤 생각을 해 보니 그쪽은 약간의 흙과 풀이 있지만 결국 콘크리트 벽으로 막힌 곳이다. 차라리 출발지쪽으로 가져다 놓았더라면 하천쪽이라서 민달팽이에게는 더욱 안전한 곳으로의 귀환이 되었을 것이다.

사무실에 도착하여 나무위키에서 민달팽이를 찾아보니 농작물을 갉아먹으므로 해충으로 분류하기도 한단다. 괜히 살렸나? 어차피 내가 민달팽이를 발견한 곳은 농사를 짓는 곳 근처도 아니요, 해충이니 익충이니 하는 것은 철저히 인간의 이익이라는 관점에서 동물을 양분하는 것 아닌가? 그렇게 따진다면 인간과 그 문명은 지구라는 환경에게는 그야말로 해충이고 암종이다..

산책로를 지나면서 만나는 지렁이나 달팽이 등 작은 동물들을 안전한 곳으로 피신시키는 것이 일종의 습관이 되었다. 같이 산책을 하던 동료의 행동을 보고 따라하게 된 것에 불과하하다. 내가 생물학을 전공한 것은 지구상에 존재하는 모든 생물체를 자원화하여 인류에게 이롭게 하자는 뜻은 아니었을 것이다. 모든 생명은 저마다 다 소중하니까.

코로나-19 덕분에 지구 오염이 잠깐 늦추어졌다는 기사를 많이 접한다. 그러나 늘어난 일회용품과 마스크 같은 위생용품 쓰레기가 급증하여 곧 환경에 부담을 주게 될 것이다. 먼 훗날, 쓰레기 매립지를 시추했더니 유난히 마스크가 많이 나오는 지층이 발견될지도 모른다. 그리고 그 지층 위아래로는 닭뼈가 하나 가득히... 조개무지만 만들어지라는 법이 있는가? 유난히 치킨을 사랑했던 한국인이 조성한 닭뼈무덤, 닭뼈무지가 지금 어디선가 만들어지고 있는지도 모른다.

건너가는 아이들 (Young Refugees)
사람들이 말했다. 공주님이 우리의 마지막 희망입니다. 무쇠갓쓰고 무쇠 지팡이 짚고 바리는 길을 떠났다. 설산을 넘고 사막을 지나 바다를 건너갔다. 이 저녁, 세상 어느 모퉁이 가난한 어미들은 먼 길 가는 아이에게 가벼운 짐을 들려주네 더했다가 뺐다가, 뺐다가 더했다가 더할 것도 없이, 뺄 것도 없이 먼 길 가는 아이 손에 건네주는 그 가벼운 짐 모래바람 부는 아프리카 펄럭이는 난민촌 천막 안에서 연기 자욱한 미드이스트 (The Mideast) 폭격으로 무너진 폐허 위에서 히말라야 가까운 티베트 버터기름 불밝힌 곰파 안에서 바다를 건너야 할 아이들에게 사막을 지나야 할 아이들에게 설산을 넘어야 할 아이들에게 빵 몇 조각, 옷 몇 가지, 양말 몇 켤레, 돈 몇 푼, 사진 몇 장, 그리고, 그리고 더할 것도 없고 뺄 것도 없는 몇 마디의 말. "나는 괜찮아, 네가 그곳에 가니까. 넌 우리의 희망이야. 사랑한다" 갈 수 있을까요? 저 바다를 건너, 모래바람 지나 총성과 폭음 속에 무사히 칼바람 부는 얼음산 너머 저 곳에 내가 갈 수 있을까요? 언젠가, 언젠가 우리 다시 만나게 될까요? 아이는 묻지 않았지 아무 것도 묻지 않았지 그 저녁, 세상 어느 모퉁이 가난한 어미들이 먼 길 가는 아이에게 가벼운 짐을 건네줄 때 한없이 무거운, 한없이 가벼운, 그 약속 앞에서