2015년 9월 10일 목요일

[Next-Generation Sequencing] Variant calling 작업의 오류 해결과 Bowtie 2

다음 달에 있을 미생물 유전체 정보 분석 교육에 사용할 실습 자료를 만들고 있다. 워낙 많은 양의 시퀀싱 결과물이 있어서 적당한 것을 골라서 정해진 시간 내에 실습이 무난히 이루어지도록 분량을 줄이고 프로그램 버전을 확인하는 작업을 한창 진행 중에 있다. 어쩌다보니 이번 가을에는 개인적으로 몇 사람의 연구원에 대한 교육을 시작하여 이제 마무리 단계에 있고, UST 강의까지 겹쳐서 그동안 축적한 정보를 정리하는데 아주 좋은 기회가 되고 있다.

다만 아쉬운 점이 있다면 나는 실무에서 상용 tool인 CLC Genomics Workbench를 써서 대부분의 분석 작업을 실시하지만, 교육에서는 그럴 수가 없다는 것이다. 따라서 사용이 다소 불편하더라도 공개된 소프트웨어를 이용하는 방식으로 교육을 하지 않을 수 없다. 상용 툴이 모든 것을 다 해주는 것은 아니기에 공개 툴을 조금씩 쓰기는 하지만 이를 남에게 전수하려면 더욱 많은 사전 경험이 필요하므로 실수가 없도록 철저하게 매뉴얼을 숙지하고 점검에 점검을 거듭하고 있다.

어제는 미생물 NGS 데이터를 이용한 variant calling 작업을 하다가 오류를 만났다.
$ samtools mpileup -uf ref.fa BL21.sorted.bam | bcftools view -bvcg - > var.raw.bcf
[mpileup] 1 samples in 1 input files
Set max per-file depth to 8000
[bcf_sync] incorrect number of fields (0 != 5) at 0:0
[afs] 0:0.000
빨강색으로 표시한 것이 오류 메시지이다. 구글을 열심히 뒤져 보았으나 이것과 딱 맞는 사례는 없었다. 도무지 이유를 알 수가 없었다. 필드의 수가 5개가 아니고 6개라는 오류 메시지를 보고한 경우는 매우 많았으나 나처럼 아예 아무것도 나오지 않은 사례는 보이질 않았다. 문제 해결을 위해 이것저것 한참을 알아보다가 내 시스템에 몇 가지 프로그램이 버전이 맞지 않은 상태로 뒤섞여 존재함을 알 수 있었다.

문제는 바로 de novo assembly pipeline인 A5-miseq 때문이었다. 내가 사용하는 A5-miseq에는 0.1.99-4428cd 버전의 samtools, bcftools 및 vcfutils.pl이 포함되어 있다. 그런데 별도로 설치한 samtools 1.2와 뒤섞여 실행이 되면서 오류가 난 것이다. samtools 0.1.18에는 bcftools/vcftools.pl이 같이 포함되어 있었지만 1.* 대의 버전으로 올라오면서 각자 따로 배포되고 있다. 이에 대해서는 최신 배포판 사이트를 참조하면 된다. Scaffolding tool인 SSPACE에도 bwa와 bowtie가 같이 들어있다. 이를 설치할 때에는 시스템에 먼저 깔려있던 것들과 서로 혼동되지 않도록 주의가 필요하다. 아무 생각 없이 bwa를 실행하였을 때 도대체 어느 경로에 설치된 바이너리가 돌아가고 있는지는 알고 있어야 한다는 뜻이다.

그렇다면 /usr/local/bin에 위치해서 나를 혼동스럽게 했던 samtools 1.2를 지우고 A5-miseq에 포함된 samtools와 bcftools만을 이용하여 variant calling 작업을 해 보자. 이제는 아무런 오류 없이 성공적으로 수백개의 variant가 출력되었다. 이런 성가신(?) 작업이 CLC Genomics Workbench에서는 일관적인 GUI 환경 안에서 편리하게 수행되지만 편리한 만큼 적지 않은 돈이 드는 선택이라 강요할 수는 없는 노릇이다. Command line interface 위주의 공개형 도구는 비록 사용은 불편할지라도 분석 과정의 기본을 익히기에는 좋으니 이것과 담을 쌓고 살 수는 없는 노릇이다. 

Variant Calling 과정의 상세

글을 작성한 김에 변이 추출(variant calling) 과정에 대하여 좀 더 자세히 기술해 보고자 한다. 변이 추출은 유전체 resequencing의 가장 기본적인 목적이다. copy number variation이나 structural variation처럼 까다로운 것은 다음으로 미루고, SNV의 추출에 대한 것만을 정리하겠다.

매핑 도구는 bowtie2를 쓰기로 한다. 따라서 bowtie2에 포함된 공식 매뉴얼을 참조하는 것이 바람직할 것이다.

bowtie2로 만들어진 SAM 파일을 정렬 및 인덱싱을 하여 samtools pileup 명령으로 처리하는 것이 기본이다. ref.fa 파일은 미리 samtools faidx 명령으로 인덱스를 생성해 두어야 한다.
samtools mpileup -u -f ref.fa sample.sorted.bam > sample.bcf
bcftools view -v -c -g sample.bcf > sample.raw.vcf 
파이프를 사용하면 한 줄의 명령어로 줄여서 실행할 수도 있다.
samtools mpileup -uf ref.fa sample.sorted.ban | bcftools view -bvcg - > sample.raw.bcf
이쯤에서 SAMtools의 공식 문서를 참조해 보자.


위 단계에서 추출한 변이를 100% 전부 믿고 받아들일 수는 없는 노릇이다. 이제 vcfutils.pl로 적절히 필터링하여 정확한 결과만을 남기도록 한다. read depth가 100 이상인 곳에 대해서만 필터링하려면 다음과 같이 한다.
bcftools view sample.raw.bcf | vcfutils.pl varFilter -D100 > sample.flt.vcf
Short read aligner의 최강자는 누구인가?
여기에 대해서는 꽤 많은 논문이나 포스팅이 있으니 몇 개를 간추려서 소개하는 것으로 갈음하도록 하자.

2015년 9월 8일 화요일

고음 스피커용 고정대 제작

이번에는 사무실용 풀레인지 스피커의 부족한 고음을 보충할 트위터의 고정대를 만들어 보았다. <엘렉혼>에서 구입한 4천원짜리 트위터에 콘덴서만 하나 직렬로 연결한 것이 전부이다. 역시 목공계의 전설 <우두>님에게 스케치를 보내어 정밀하게 재단된 자작나무 합판을 받았다. 직각 접합 및 사선 접합용으로 재단된 결과물 두 조가 하루 뒤에 도착하였다. 외형 치수는 사선 접합용이 조금 더 길고 나머지는 같다. 테이프를 붙여서 임시로 모양을 잡아보았다.


조립이라고 할 것도 없다. 목공본드를 바른 뒤 한 조씩을 서로 맞물리니 줄로 묶을 수가 있었다. 하룻밤을 두어 완전히 굳힌 다음 사포로 표면을 연마하였다. 마감 처리는 별로 할 생각이 없다.


바인딩 포스트도 달아야 하고, L-pad를 써서 -3 dB 혹은 -6 dB 정도 감쇠를 시키기 위해 <엘레파츠> 웹사이트에서 부품(5와트 시멘트 저항)을 골라 장바구니에 담아놓기까지 했다. 그런데 트위터 유닛을 끼우고 연결하니 고음이 너무 강하다는 생각이 그다지 들지 않는다. 구멍에 유닛이 꽉 차게 들어가니 나사못을 아직 박지 않은 상태에서도 잘 버티고 있다.



고무발과 바인딩 포스트만 달면 그대로 사용하는데 문제가 없을 것 같다. 이로써 지난 9월 2일에 선언한 연말까지의 오디오 DIY 프로젝트의 대부분을 마무리하였다.

2015년 9월 6일 일요일

옥외용 FM 안테나 재설치

남쪽 발코니 난간에 설치한 FM 안테나가 자꾸 처지고 있어서 보수 공사를 단행했다.

예전의 설치 상태는 이전 포스팅에 남겨 두었다.

야기 안테나, 정식 명칭은 Yagi-Uda 안테나의 일반 구조는 다음과 같다. 내가 사용하는 FM 수신용 안테나는 급전부가 달린 방사기(수신용이라서 방사기라고 하면 좀 이상하지만...) 앞에 도파기는 하나만 있고 반사기는 없는 구조이다. 그림 출처는 정보통신신문이다.

http://www.koit.co.kr/news/articleView.html?idxno=33524

고정 방식을 바꾸어서 그동안 쓰지 못했던 도파기를 설치하게 만들었다. 갈색의 지지봉은 커튼봉을 재활용한 것이다. 지지봉이 알루미늄이라서 안테나의 수신에 영향을 줄지도 모르겠다. 다른 엘리먼트와 전기적 접촉은 하지 않지만, 그건 도파기나 반사기(본 안테나에는 없다)도 마찬가지 아니겠는가? 만약 다음에 재보수를 한다면 PVC 파이프를 쓰는 것도 한 방법이지만 알루미늄 봉과 유사한 강도가 나오려면 상당히 무거울 것이다.


설치를 마치고 옆에서 보니 역시 수평을 유지하지는 못하고 약간 처진 모습이다. 화분 받침에 걸쳐져 있어서 더 이상 처지지는 않겠으나 미관상 영 좋지 않다. 다음에는 노랑색 화살표 밑에 뭔가를 고여서 수평에 가깝게 만들어야 되겠다.



현재의 배치는 계룡산에서 송출되는 KBS 대전 FM을 잘 잡기 위함이다(서쪽을 지향해야 함). 예전 포스팅에 우리집 주변의 송신소 상황을 지도 상에 표시해 두었다. 정서(西) 방향보다는 서남서로 약간 트는 것이 더 나을지도 모른다.

[추가한 글: 사진 상의 안테나 방향은 서쪽이 아니라 동쪽을 향하고 있는 것이다! 도파기 없이 사용하던 시절에는 정동이나 정서 어느쪽으로든 상관이 없었다. 이전 설치 상태와 달라진 것은 도파기 하나가 추가된 것에 불과하다. 비록 도파기의 방향을 잘못 달아서 안테나가 정동 방향에서 송출되는 전파를 잘 잡도록 된 것은 맞지만, 도파가가 없던 시절보다 수신 능력이 더 떨어졌다고는 생각하지 않는다. 실용적으로는 문제가 없으나 원리적으로는 말이 안되니 나중에 방향을 180도 돌려서 다시 설치해 보도록 하자. 안테나를 90도로 세워서 수신 상태가 달라지는지에 대해서도 테스트를 해 볼 생각이다.]

재설치 이전과 비교하여 무엇이 확 나아졌는지는 체감하기 어렵다. 더 나빠지지는 않았으니 일단은 만족하다. 이렇게 하여 4가지 오디오 관련 DIY 숙제 중 3가지를 이번 주말에 해결하였다.



2015년 9월 5일 토요일

주말을 이용한 오디오 DIY 2건

오늘도 구멍을 수십개는 뚫어야 한다. 금속 재료가 하나도 없음을 감사히 여기며 작업에 임하였다. 먼저 락앤락 밀폐용기에 앰프 보드 넣기. 처음에는 기판의 위쪽에 20 mm 서포트를 달아서 뚜껑에 고정을 할 계획이었다. 그러나 단자들을 통과시키기 위해 옆면에 뚫어야 할 구멍의 위치가 영 마음에 들지 않는다. 고정용 돌출부분과 살짝 겹치는 것이 아닌가? 계획을 수정하여 통 바닥에 기판을 고정하는 것으로 바꾸었다.



수평형 볼륨이 쓰인 특이한 구조라서 음량을 조정하려면 뚜껑에 구멍을 내야 한다. 차마 뚜껑의 사진을 올리지 못한 것은, 구멍을 뚫었다기보다 파헤쳤다는 것이 맞을 정도로 엉망이기 때문이다. 아래쪽에는 의자 다리에 붙이는 바닥 긁힘 방지용 보호 스티커를 잘라서 붙였다. 이것이 없으면 기판 서포트를 고정한 나사의 머리에 의해 바닥이 긁힌다. 점착식 고무다리를 구할 수 있다면 앞으로의 공작에 도움이 될 것이다.


다 만들고 나서 생각해 보니 기판 고정용 서포트를 조금만 긴 것(25 mm)으로 선택했다면 의도한대로 뚜껑에 기판을 고정할 수 있었다. 그러면 볼트가 뚜껑에 고정되니 바닥면에 긁힘 방자용 패드를 붙일 일도 없었을 것이고.. 다음에 새로 통을 구입하여 가공해야 되겠다. 폴리프로필렌 재질을 가공하는 것을 싫어하지만 하도 여러번 하다보니 요령이 조금씩 생기고 있다.

다음 할 일은 2호기 스피커에 단자대를 붙이는 것이다. 2핀짜리 일자형 미니 스프링 클립을 주문하였었는데 재고가 없다면서 사진과 같은 사각 컵 형태의 부품이 왔다.


6 mm 드릴로 미리 맞추어 그린 밑그림의 네 귀퉁이에 구멍을 뚫었다.


구멍을 촘촘하게 더 뚫은 뒤 칼로 파내어 다듬는다. 옆판은 자작나무 합판이지만 앞뒤판은 MDF라서 가공이 매우 수월하다. 수성 페인트를 칠해서 흰 색을 띠고 있다. 포트는 외경 38 mm의 PCV 파이프이다. 


스피커로부터 온 선을 단자대에 납땜해 연결한 뒤 최종적으로 나사못을 박아서 고정하였다. 아주 마음에 든다. 스피커가 고정된 전면판은 아직도 고정을 하지 아니한 상태이다. 뒷판을 목공본드로 붙여버렸으니 앞판을 나사못으로 고정하여 필요한 때에 개방할 수 있게 해야 하는데, 아름다운(?) 흰 판에 흉칙한 나사못 머리를 보이게 하는 것이 싫어서이다.



2015년 9월 2일 수요일

2015년 연말까지의 오디오 DIY 프로젝트

1. 트위터 스피커를 제대로 만든 마운트에 고정하고 L-pad로 attenuation하기



풀레인지 스피커통 위에 임시로 얹혀있는 트위터 스피커를 제대로 고정시킬 마운트로 목공으로 제작할 예정이다. 중저음에 비하여 약간 음압이 높은 느낌이 들어서 시멘트 저항을 몇 개 이용하여 L-pad를 만들도록 한다. 그런데 지금 트위터 없이 바이올린 실내악곡을 듣는 중인데 별로 고음이 부족하다는 생각은 들지 않는다.

2. 스피커 2호기 마무리하기

스피커 단자도 달아야 하고, 살짝 끼워진 상태인 전면 배플판도 고정해야 한다. 원래 나사못으로 고정할 계획이었지만 단정하게 흰색 페인트가 발라진 전면판에 구멍을 내가가 싫어졌다. 구멍을 수직으로 똑바로 뚫지 못하면 또 얼마나 보기가 흉할 것인가? 판을 목공본드로 붙여버리면 앞으로 영영 통을 열지 못하게 된다. 그래도 괜찮은가? 스피커 유닛을 갈거나 수리할 일은 실제로 앞으로 일어날 것으로 생각하지 않는다. 좀 더 생각해 본 다음에 결정하자. 단자로는 바인딩 포스트 대신 저렴한 클립식 단자를 달겠다.


3. TPA3125D2 칩앰프를 락앤락 반찬통에 넣기

폴리프로필렌 통에 깨끗하게 구멍을 뚫는 기술을 익혀야 한다. RCA 단자를 관통시키려면 현재 갖고 있는 가장 큰 드릴 비트(8 mm)로는 부족하다. 10 mm짜리 비트를 따로 사야 하는가, 아니면 단품으로 사야 하는가? 드릴 비트는 세트로 사는 편이 유리하지만 말이다.


4. 그 밖에...

이상의 일을 추진하는데 몇 달이 걸릴지도 모르는 노릇이다. 새로운 것을 자꾸 만들거나 구입하려 하지 말고, 일단은 현재 벌여놓은 일들의 부족한 부분을 마무리하는 것으로 만족하고자 한다. 장기적으로는 라즈베리파이와 외장형 ODD를 이용하여 인터넷 라디오 및 DVD 플레이어를 만들어 보는 것, 그리고 조금 더 출력이 높은 앰프를 만들어 보는 것에 관심을 두기로 하겠다. 스피커 보호회로가 있는 TDA8950 앰프보드, LM1875 완제품 앰프, 또는 TDA7498 완제품 앰프가 그러한 사례이다. 진공관 앰프는 지금 쓰고 있는 2종(인티그레이트 앰프 및 헤드폰 앰프)로 충분하다.

2015년 9월 1일 화요일

헤드폰 쿠션 교체(audio-technica TH-380AV)

찢어진 헤드폰의 쿠션(이어패드가 더 정확한 명칭이리라)을 대체할 것을 G마켓에서 구입하였다. 직경 약 70 mm에 해당하는 것을 구하면 된다. 외피가 부서져 떨어져 나가는 것을 보고 버려야 하는 것 아닌가 하는 생각을 한 적이 있었다. 물론 지나친 걱정이었다.

이 헤드폰은 전문 음악감상용이 아니다. TV에 꽂아놓고 멀직히 소파에 앉아서 감상을 하기 위한 물건이다. 그래서 케이블이 꽤 길고, 야외에서 포터블 기기에 꽂아서 듣기가 곤란하다. 케이블이 줄줄 끌리므로.


재질은 그다지 마음에 들지 않는다. 내부의 쿠션 형태나 외피의 부드러움이 원래의 것을 따르지 못한다. 정품이 아니라 적당히 만들어진 호환품이니 어쩔 도리가 없을 것이다. 오디오-테크니카 웹스토어에서 교체용 이어패드를 구입할 수 있다고 되어 있다. Accessory & Spares -> Spare pars -> Headphone 카테고리가 있다! 그렇지만 고급 헤드폰도 아닌데 바다 건너 주문을 할 필요가 있겠는가.

헤드폰에 대해서는 그다지 많이 알지는 못하고, 또 큰 투자를 할 생각은 없다. 쿠션을 찾으면서 내 스타일에 맞아 보이는 헤드폰을 찾아보았다. Takstar의 모델 및 크리에이티브의 AURVANA Live! 등에 관심이 간다. 젠하이저나 소니의 헤드폰은 비싸다는 생각이 든다.

나는 귀를 많이 덮는 스타일을 선호한다. TH-380AV는 이런 측면에서 간신히 요건을 충족시키는 정도? 국내 브랜드인 크레신 제품 중에는 딱 마음이 끌리는 것이 없다.

또다시 락앤락 반찬통 가공을 해야 한다

헐벗은(?) 기판 상태의 앰프를 들고 있노라면 정말 내가 뭔가를 만들고 있다는 즐거운 기분이 든다. 그러나 그 기쁨도 잠시, 제대로 된 통에 이를 수납하지 못하면 활용도가 현저히 떨어진다. 누군가 그런 말을 하였다. 앰프 자작의 완성은 섀시 가공이라고! 핵심 기능(80%)은 앰프부 기판과 주변 부품이 담당하지만, 나머지 20%를 만드는데 사실상 가장 많은 수고가 들어간다.

딸아이의 방학 숙제로 같이 만든 TPA3125D2 앰프를 기판에 서포트만 받친 상태로 계속 쓸 수는 없는 노릇이다. 결국은 또 마트에서 파는 락앤락 식품용기 중 가장 작은 것을 구입해 왔다. 옆면이 직각에 가까와서 이런 용도의 케이스로는 나쁘지 않다.


내가 락앤락 용기를 싫어하는 이유는 약간 질긴 성향이 있어서 구멍이 깨끗하게 뚫리지 않기 때문이다. 실력 부족이라고 해 두자. 이번에는 서포트를 위에 달아서 뚜껑에 고정해 보려 한다. 아래쪽에 고정을 하면 나사 머리가 바닥에 돌출한다. 고무발을 바닥에 달 수가 없을 정도로 작은 케이스라서 되도록이면 바닥면은 나사머리가 나오지 않게 매끈한 상태로 두는 것이 가장 좋을 것이다.

어떻게 구멍을 똑바르게 뚫는단 말인가? 정말 드릴 스탠드가 하나 있어야 하나? 트위터 스피커에 음압 감쇠를 위한 L-pad를 달아야 하고, 그러려면 시멘트 저항도 몇 개를 사야 하고, 2호기 스피커에도 바인딩 포스트나 클립을 달아서 완성도 해야 하고... 소소하게 할 일이 많다.