2015년 11월 28일 토요일

1호기 스피커 시스템(풀레인지)의 개조

저역이 탄탄하지 못하고 동굴 속에서 소리가 울려나오는 느낌을 어떻게 개선할까? 드라이버 크기에 비해 통의 용적이 다소 크고 재료의 두께(MDF 12 mm)가 얇아 통 자체가 울린다는 것이 내가 내린 나름대로의 결론이었다. 모서리에 각재를 대서 강도를 보강하고 내부에 자투리 목재를 채워서 용적을 줄여보기로 하였다. 아울러서 저음이 빠져나가는 통로의 면적을 줄여 보았다.


윗 사진에서 보이는 좌우 가장자리의 각재(나사못 구멍이 이미 난) 외에는 원래 전혀 보강이 되지 않은 상태였다.

용적을 줄이기 위한 자투리 목재는 60 x 60 x 160 mm 정도의 크기이다. 하나의 용적은 약 560 cc가 된다. 내부가 좁아서 쓰러질 일은 없으므로 바닥에 고정하지 않고 그냥 세워두어도 된다. 내부에 채운 목재의 최적 갯수는 1개일까, 2개일까? 그것까지는 아직 모르겠다.


뒷뚜껑을 닫고 음악을 들어보았다. 전면 개구부에는 솜을 채운 상태이다. 개조를 하기 전과 비교하여 확실하게 변한 것은 전체 무게가 제법 늘어났다는 것... 좀 더 밀도있는 소리가 나는 것 같다. 개조를 했으니 소리가 더 나아졌다는 '믿음'으로 귀를 익숙하게 만드는 중이다.


2015년 11월 27일 금요일

내가 파이썬에 아직 익숙해지지 않은 이유


  1. 아직은 Perl이 편하고
  2. 본성이 게으르기도 하고
  3. 패키지 설치 방법이 혼동스러워서
Perl 모듈의 설치 방법은 비교적 단순하다. 널리 쓰이는 모듈은 리눅스 패키지로 존재하는 경우가 많아서 이를 yum이나 apt-get으로 설치하면 된다. 이제 rpm을 직접 쓰는 경우는 무척 드물어졌다. 일상적이지 않은 위치에 모듈을 두고 쓰려면 스크립트를 실행할 때 perl -I 인자를 주거나 혹은 스크립트 내에서 use lib... 등을 쓰면 된다.

그런데 파이썬에서 모듈을 설치하는 방법은 pip, setuptools, easy_install 등 여러가지가 있다. 기초 수준의 파이썬 교육을 받은 적은 있으나 주로 프로그램 작성 기법에 관한 것이었지 이처럼 내게 꼭 필요한 모듈 설치에 대한 실용적인 팁은 접할 수 없었다. 한술 더 떠서 아예 다른 버전의 파이썬을 설치하여 필요에 따라 각각을 운용하는 것도 가능하다. 사실 내가 파이썬에 대해 갖는 가장 큰 불만은 이것이다. 왜 하나의 컴퓨터 시스템에 2.x과 3.x이 동시에 있어야 하는가? 하위 호환성이 그만큼 보장이 되지 않는다는 것인지?

어쨌든 작정하고 앉아서 조금만 공부하면 충분히 익히고도 남을 지식이건만 아직도 이러한 상태로 머물러 있다는 것은 부끄러운 일이다. 다음주에는 공부를 시작해 보도록 하자.

어제 구입한 물건 두 가지

역시나 음악과 관련된 것이다.

음반: Harvey Mason Trios 2 "Changing Partners"


시내 중고서적 판매점 알라딘에서 구입한 중고 CD이다. 이곳에서 눈에 뜨이는 음반을 사기는 참 어렵다. 다른 사람에게도 팔리기 어려운 가요 CD가 대부분이기 때문이다. 한참을 골라서 보석같은 음반을 하나 찾아냈다. 여러 재즈 피아니스트와 함께 서로 다른 곡을 녹음했기에 앨범의 제목도 Changing Partners이다. 밤에 듣기 좋은 재즈 음악들이 수록되어있다.

나무: 60x60mm 자투리 집성목과 19x19mm 스프루스 각재 


어설픈 스피커 1호기를 보강하고자 아이베란다에서 구입하였다. 각재로는 12T MDF로 만든 인클로저의 모서리를 보강하고, 자투리 집성목(사진)은 내부 용적을 줄이기 위함이다. 사진에 보인 스피커는 개조 대상이 아니다. 향긋하고 부드러운 나무의 질감이 좋아서 하나를 힐링용(?)으로 사무실에 들고 나온 것이다.

5인치급 스피커 유닛용으로는 1호기 통이 너무 크다는 자체 진단에 따라 이러한 개조를 준비하였다. 요청한 길이보다 조금씩 길어서 자르느라 애를 먹었다. 워낙 부드러운 나무(스프루스)라서 큰 힘은 들지 않았지만. 아직 뒷판 근처의 각재는 다 붙이지를 못했다. 보강목 덕분에 스피커통은 전체적으로 많이 무거워졌다.

올해의 오디오 DIY 목표는 거의 다 달성하였다. 주말에는 스피커통 개조를 완료하고, 케이벨 KB20W 앰프에 음량 조절용 포텐셔미터를 달아주어야겠다. 

HiSeq 결과물 들여다보기(파일의 크기와 k-mer abundance 분포)

HiSeq 2x00 장비에서 생산된 whole-genome sequencing 결과물(fastq 파일)의 크기에 대해 점점 무감각해지는 것이 요즘의 현실이다. 지난 3주 동안 파일 크기가 100 GB에 육박하는 결과물을 다루면서 이러한 수치에 대한 확실한 '감'을 잡고 있는 것이 좋겠다는 생각이 들었다. 예전 대학원생 시절에는 1 kb ds DNA 1 마이크로그램 안에는 DNA 갯수가 대략 몇 개 들어있다는 것(몰 단위로서)을 암기하고 있지 않았던가?

혼동을 줄이기 위하여 염기는 b, 바이트는 B로 표시하겠다. 컴퓨터 세상에서는 1 KB = 1024 B(byte)이지만 나머지 세상에서는 1 K = 1000이다. 좀 더 솔직하게 말하자면 컴퓨터 세상에서도 1 K = 1,000, 1 M = 1,000 K로 표시할 때가 있다. 바로 HDD 용량을 말할 때. 그래야 조금이라도 더 크게 보이기 때문이다.

pair end sequencing 결과 파일이 있을때 압축을 하지 않은 상태로 파일의 크기는 얼마인지, 포함된 read와 염기쌍의 수는 얼마인지, 마지막으로 target genome의 추정 크기에 대한 시퀀싱 배수는 얼마인지에 대한 감을 잡아보도록 하자. 우선 오래전에 생산한 HiSeq 101 x 2 결과물을 하나 꺼내어 보자. fastq 파일의 수치를 뽑는 도구는 여러가지가 있겠지만 khmer 패키지의 readstats.py가 요즘 마음에 든다.
$ du -sh *fastq
5.8G BL21TKR_1.fastq
5.8G BL21TKR_2.fastq
파일 크기가 제법 크다. 
$ readstats.py BL21TKR_1.fastq  BL21TKR_2.fastq
(화면 표시 과정 중간 생략)
... BL21TKR_2.fastq 23400000
... BL21TKR_2.fastq 23500000
... found 2379737962 bps / 23561762 seqs; 101.0 average length -- BL21TKR_2.fastq
---------------
2379737962 bp / 23561762 seqs; 101.0 average length -- BL21TKR_1.fastq
2379737962 bp / 23561762 seqs; 101.0 average length -- BL21TKR_2.fastq
---------------
4759475924 bp / 47123524 seqs; 101.0 average length -- total
파일 하나에 대하여 2.38 Gb를 수록하고 있다. 파일 쌍 전체로는 4.76 Gb, 2천4백만 read pair이다. 이 시퀀싱 결과물은 대장균 BL21에서 유래한 것이니 sequencing coverage는 1,000x 정도가 되겠다.

따라서 단일 fastq 파일에 대하여 5.8 GB(기가바이트)의 크기라면 2.4 Gb(기가베이스페어)라는 뜻이다. 요즘의 미생물 시퀀싱 서비스에서는 보통 1개 샘플에 대해서 1 Gb 생산, 즉 5 Mb 게놈에 대해 200X를 목표로 하고 있으니 지나치게 많은 분량을 시퀀싱한 셈이 된다.

다음으로는 이 데이터를 가지고 k-mer abundance 분포를 그리는 방법에 대해서 알아보겠다. 게놈 서열 자체가 아니라 충분히(과하게!) 오버샘플링이 된 read임을 염두에 두도록 한다. 메타게놈 데이터를 이용하는 것이 더욱 바람직하겠지만, 갖고 있는 데이터는 너무 분량이 커서 분석에 시간이 많이 걸린다. 사용하는 프로그램 패키지는 요즘 집중적으로 공부하고있는 khmer이다. 우선 위에서 다룬 fastq 파일 쌍을 하나의 interleaved file로 바꾸어보자. 예전에는 velvet distribution에 포함된 shuffleSequences_fastq.pl을 주로 사용했었다. 
$ interleave-reads.py -o BL21TKR.fastq.pe BL21TKR_1.fastq  BL21TKR_2.fastq
역시 이런 종류의 작업은 시간이 많이 걸린다. 솔직하게 말하자면 khmer의 유용성과 개발 철학에는 동의하지만 소요시간이 너무 길다는 것이 불만이다. 물론 비슷한 부류의 다른 프로그램을 전부 테스트해보고 하는 말은 아니지만... unique k-mer의 수는 322919167였다.
$ load-into-counting.py -k 20 -N 4 -x 4e9 BL21.count.ct BL21TKR.fastq.pe
$ abundance-dist.py BL21.count.ct BL21TKR.fastq.pe BL21.count.hist
만들어진 k-mer abundance histogram을 한번 열어보자.
$ head -5 BL21.count.hist
abundance,count,cumulative,cumulative_fraction
0,0,0,0.0
1,268607656,268607656,0.832
2,33381122,301988778,0.935
3,9908255,311897033,0.966
첫번째 컬럼은 abundance이다. 즉 주어진 read에 대해서 단 1번 출현한 길이 20-mer가 무려 2억6860개나 된다는 뜻이다. 5 Mb 게놈을 20-mer로 나누는(1-bp shift) 경우를 상상해 보자. 모든 위치에서 얻어지는 20-mer가 전부 다 다르다고 가정하고(실제 repeat에서 유래하는 것도 있으니 그럴 수는 없다), complementary sequence까지 감안을 해도 천만개 정도에 불과하다. 그런데 단 1번 출현하는 20-mer가 2억하고도 거의 7천만개? 이는 바로 일루미나 특유의 시퀀싱 에러에서 기인하는 것이다. 즉 실제 genome에는 존재하지 않는 서열인 것이다.

자, 그럼 이걸 가지고 gnuplot에서 그림을 그려보자. 필드 구분자가 공백이 아닌 콤마이니 gnuplot 내에서 set datafile separator ','를 실행해야 한다.
gnuplot> set datafile separator ','
gnuplot> plot 'BL21.count.hist' using 1:2 with lines
플롯 창이 열렸지만 아무것도 안보인다. 왜? 극단적인 값들 때문에 그렇다. 각 스케일을 로그로 변환하여 다시 그리자.
gnuplot> set logscale x
gnuplot> replot

바로 왼쪽의 파랑색 상자로 둘러싼 low abundance 영역 내의 read가 바로 error에서 기인한 것이다. abundance ~750 근처에 나타난 피크가 바로 실제 시퀀싱 커버리지가 된다. 그보다 더 빈도가 높게 나타나는 피크는 repeat에서 유래한 것들이다. 만약 다른 피크가 더 있다면 타 샘플로 오염이 일어났음을 증명하는 셈이 되겠다. 만약 시퀀싱 리드가 아니라 완성본 게놈 서열을 가지고 에러가 전혀 없는 시퀀싱 리드를 시뮬레이션하여 k-mer 분포를 조사하면 저 왼쪽 영역의 수치는 나오지 않을 것이다. 내가 가끔 사용한 NGS read simulator ART는 너무 충실하게 데이터를 생성해주는 바람에 error-free data를 만들지는 못하는 것 같다. 

다음으로 생각해 볼 것은 히스토그램의 끝부분에는 어떤 데이터가 있느냐 하는 것이다. 이 히스토그램 파일의 길이는 무려 65537 라인이나 된다. abundance가 수천을 넘는 것은 손가락에 꼽을 수준으로 매우 적게 존재한다. 그런데 히스토그램의 마지막 줄을 보니 65535회 존재하는 20-mer가 53종류나 있다. 이건 뭘까? 이건 틀림없이 어댑터 서열에서 유래한 20-mer일 것이다.

그런데 이상의 분석은 kmerspectrumanalyzer로 전부 가능한 것이 아닐까?

2015년 11월 25일 수요일

FASTQ 파일 처리 도구의 단편화?

다양성이라는 것은 생태계에서 보편적으로 관찰되는 현상이고 늘 지켜져야하는 미덕이기도 하다. 표준화 또는 산업화라는 틀에서 보면 평균에서 벗어나는 존재들이 늘 성가실 수도 있다. 요즘 리눅스나 안드로이드의 단편화라는 개념이 종종 보인다. 각자 나름대로의 철학과 하드웨어에 맞춘 최적화(특히 휴대폰의 경우)를 거쳐 리눅스 기반의 OS가 조금씩 변해가는데, 이러한 현실은 개발자에게는 골칫거리인 모양이다.

FASTQ 파일을 다루는 엇비슷한 도구가 너무 많아지는 현실에 대해서 불평을 해야할까? GitHub에는 FASTQ 파일의 처리에 쓰이는 다양한 소프트웨어 프로젝트가 꽤 많이 존재한다. 간단하게는 awk 스크립트 몇 줄로 해결이 되겠지만, 좀 더 수준이 높은 조작을 하려면 이것만으로는 부족하다. 어떤 것은 논문을 통해 발표되기도 하지만, SeqAnswers를 아예 프로그램 소개의 공간으로 사용하는 개발자도 있다.

전에는 FASTQ file 2개로 이루어진 paired end sequencing 결과물을 하나의 interleaved file로 전환하려면 Velvet에 포함된 shuffleSequence_fastq.pl을 사용했었는데, 이제는 다른 프로그램 패키지에 들어있는 스크립트를 쓰는 것이 더 편하다.

내가 즐겨쓰는 도구 위주로 정리를 해 보겠다.

일반적인 QC

  1. FastQC 전체 read 수는 나오지만 bp는 출력되지 않는다. 트림/필터를 거쳐서 길이가 균일하지 않은 파일에 대해서는 좀 불편하다. 
  2. PRINSEQ 평소에 잘 쓰지는 않는다.

Extended QC, trimming, filtering 등

  1. FASTX-Toolkit 꽤 역사가 깊은 소프트웨어.
  2. SolexaQA quality에 의한 트리밍을 거친 뒤 최소 길이 조건을 충족하는 read의 pair를 다시 수립할 때 종종 사용하던 소프트웨어.
  3. Trimmomatic 어댑터 서열 제거 용도로 요즘 즐겨쓴다. 가끔 cutadapt를 쓰기도 했다.

일반적인 조작

  1. seqtk 백문이 불여일견. 웹사이트에 나온 사용례를 참조할 것.

전처리 종합 도구

  1. khmer 요즘 집중적으로탐구하는 중이다. Metagenomic read처럼 coverage가 불균일하고 분량이 많은 일루미나 데이터를 위한 전처리를 목적으로 한다(digital normalization 및 abundance 기반의 필터링). Read statistics 계산, file pair <-> interleaved file이 전환, paired read의 추출 등 일반 용도의 유틸리티가 포함되어있다.
  2. BBMap 설치만 해 두고 아직 쓰지는 않았다.

2015년 11월 22일 일요일

스피커 개조는 계속된다

어설픈 스피커 시스템의 제작은 이제 그만 두기로 마음먹었다. 그러나 이미 만든 것을 개선하는 것을 그만 두겠다고 하지는 않았다. 5인치급 풀레인지 유닛(Toptone F120U73-3) 하나를 이용한 나의 스피커 1호기는 산만한 저역과 '동굴속 울림' 같은 소리로 인하여 만족을 할 수 없었다. 홧김에 앰프에서 분리하여 옷장 위에 팽개쳐 두었다가 다시 한번 손을 대기로 하였다.


내부에 채워진 솜을 전면 아래쪽의 개구부로 옮겨서 채우니 동굴 효과는 다소 줄어들었다. 동굴 효과는 내부에서 중역대의 소리가 너무 많이 빠져나오기 때문이라는 나름대로의 진단에 의한 것이다.

다음으로는 내부에 고정된 스피커 유닛을 빼내어 배플 바깥쪽에 달기로 했다. 그러려면 유닛 사양표에 따라서 배플 구멍을 108 mm보다 조금 크게 파내야 한다. 파워포인트로 109 mm의 원을 그려서 인쇄한 뒤 칼로 도려낸 다음 배플에 대고 네임펜으로 제거할 부분을 표시하였다. 구멍의 직경을 3 mm 정도 키우는 가장 경제적인 방법은 무엇을까? 처음에는 둥근줄을 이용하여 갈아낼 생각이었지만 목곡용 줄 세트는 의외로 가격이 비쌌다. 사포로 갈아내려면 너무 힘들것이 뻔하고... 최종적으로 생각한 것은 교재용 조각도였다. 근처 대형 문구점에 가서 학생용 조각도를 구입하였다. 실제 구입 가격은 3천원을 조금 넘는 수준이었다.


12 mm MDF를 조각도로 파내는 것은 매우 쉬웠다. 둥근칼과 창칼을 이용하여 공작을 시작하였다. 초등학교때의 고무판화, 그리고 중학교때의 석고조각을 마지막으로 조각도를 잡아 본 일이 없다. 사포로 대충 마무리를 하고 배플 전면에서 유닛을 고정하였다.


유닛을 내부에서 고정했을 때보다 외관은 훨씬 시원스러워졌다. 통 크기에 비해서 유닛이 너무 왜소해 보였었다. 기분 탓인가? 오늘의 개조 후 소리도 좀 더 바람직한 쪽으로 변한 것처럼 느껴진다. 개조는 아직 끝나지 않았다. 내부를 길게 잘라낸 18T 합판(폭 100 mm)으로 보강하고, 자투리 목재를 사용하여 용적을 줄이는 테스트를 할 계획이다.

2015년 11월 21일 토요일

리 릿나워의


리 릿나워의 앨범 을 대학때 LP로 갖고 있다가 어느날 분실한 이후로 들을 기회가 없었다. 한동안 테이프에 복사해 둔 것을 듣기도 했지만 열악한 음질은 비길데가 없었다. 오늘 오랜만에 멜론에서 리 릿나워의 음악을 들으려고 했더니 Earth Run 앨범이 최신앨범으로 올라와 있었다. 이제와서 재발매를 했을리는 없는데... 멜론이 뒤늦은 음원 계약을 했는지도 모른다. 

이 앨범의 표지를 장식한 기타의 모습은 매우 독특하다. 아마도 기타 형식을 취한 MIDI controller인 것으로 생각된다. 요즘의 리 릿나워 음악에 비해 꽤 실험적인 사운드를 들려주고 있다고 느끼는 앨범이다. 지금의 모습과 비교하면 너무나 젊은 리 릿나워의 모습을 보라. 데뷔때와 달리 가장 극적으로 변한 기타리스트는 조 새트리아니가 아닐까...(죄송!)

이 앨범에서 내가 특히 좋아하는 곡은 6번째 트랙의 Butterfly이다. 허비 행콕의 원곡을 여러 가수가 부른 것으로 알고있다. 언제 기회가 되면 허비 행콕의 원곡을 듣고싶다.

2015년 11월 17일 화요일

khmer 유틸리티와 파이썬

요즘은 deep metagenome sequencing data로부터 미생물 유전체를 재구성하는 방법에 대해 공부를 하는 중이다. 내년에는 MinION 플랫폼도 경험을 좀 해봐야 하는데... 하루가 멀다하고 새로운 기술이 나오는 것이 그렇게 반갑지는 않다. 더 많은 프로젝트를 할 수 있다는 것은 분명한 사실이지만 그것이 항상 가치있는 일인지는 여전히 고민스럽기 때문이다.

khmer란 무엇인가? 이는 k-mer에 기반을 둔 서열 데이터의 분석 및 전환(transformation) 도구이다. 주로 metagenome이나 transcriptome의 de novo assembly를 위한 각종 전처리를 해 주는 파이썬 라이브러리와 스크립트의 모임이라고 보면 된다. 과연 어떤 기능들이 있는지를 홈페이지를 통해 알아보았다.
  • normalizing read coverage ("digital normalization")
  • dividing reads into disjoint sets that do not connect ("partitioning")
  • eliminating reads that will not be used by a de Bruijn graph assembler;
  • removing reads with low- or high-abundance k-mers;
  • trimming reads of certain kinds of sequencing errors;
  • counting k-mers and estimating data set coverage based on k-mer counts;
  • running Velvet and calculating assembly statistics;
  • optimizing assemblies on various parameters;
  • converting FASTQ to FASTA;
나는 파이썬에 대해 잘 모르기 때문에 가끔 파이썬 스크립트를 실행하려면 당혹스러울 때가 많다. 파이썬의 버전, pip, setuptools, virtualenv 등에 관한 체계적인 지식이 없어서 늘 애를 먹는다. khmer의 설치 역시 그러하였다.  파이썬이 특히 혼동스런 것은 서로 다른 버전을 동시에 운용할 필요가 있기 때문이다. 내가 사용하는 리눅스 머신은 CentOS 6.7이고, 기본적으로 설치된 것은 파이썬 2.6.6이다. 하지만 khmer는 파이썬 2.7을 요구한다. 그러면 어떻게 해야 할까? 구글링을 통해서 유용한 자료를 하나 찾았다.


distribute란 파이썬 패키지의 빌드, 설치, 업그레이드 및 삭제를 용이하게 하는 패키지이다(Setputools에게 자리를 내어주었다는데?). virtualenv란 파이썬 개발 프로젝트 단위로 서로 다른 버전의 파이썬을 유지하게 하는 도구인 것으로 생각된다. 

간혹 gcc의 버전이 너무 낮아서 문제가 되는 경우도 있다. 현재의 CentOS에 기본적으로 딸려오는 gcc는 4.4이다. 이를 4.7로 업그레이드하려면? 리눅스 배포판에 맞추어진 패키지의 버전을 임의로 올리는 것은 그렇게 간단하지는 않다. 다음 사이트를 보면 이러한 gcc 업그레이드 방법이 상세하게 나와있다. 별도의 리포지토리를 등록하여 devtoolset-1.1을 설치한 뒤 scl command를 실행하는 것이다.

How to upgrade gcc on CentOS

khmer 설치의 실제

khmer의 git clone을 만들어서 설치하려면 오히려 더 혼동스럽다. 관리자 권한으로서 devtoolset-1.1이 설치된 상황이라면 다음과 같이 하라. /usr/local/apps 아래에 적당한 디렉토리를 만들어서 virtualenv 환경을 만든 다음에 pip2로 khmer를 설치하는 것이 좋다. 관리자 권한이 없다면 OS X에서 설치하는 방법을 따르면 된다.
# cd /usr/local/apps
# mkdir khmer
# cd khmer
# python2.7 -m virtualenv khmerEnv
New python executable in khmerEnv/bin/python2.7
Also creating executable in khmerEnv/bin/python
Installing setuptools, pip, wheel...done.
# scl enable devtoolset-1.1 bash
# gcc --version
gcc (GCC) 4.7.2 20121015 (Red Hat 4.7.2-5)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

# source khmerEnv/bin/activate
(khmerEnv)# pip2 install khmer
Collecting khmer
Collecting bz2file (from khmer)
Collecting screed>=0.9 (from khmer)
Installing collected packages: bz2file, screed, khmer
Successfully installed bz2file-0.98 khmer-2.0 screed-0.9
(khmerEnv)#

2015년 11월 11일 수요일

Spotted microarray (two-color)의 분석은 의외로 어렵다

미국 스탠포드 대학의 Patrick O. Brown 교수가 실험실에서 직접 만든 장비를 이용하여 cDNA microarray 실험에 대한 최초의 논문을 낸 것이 아마도 1995년 10월이었을 것이다. 그 후로 꼭 20년이라는 세월이 흘렀다. NGS 기술이 나온 것은 이제 10년을 넘어가고 있다. 지금은 사라진 MGuide 웹사이트를 참고하여 microarrayer와 scanner를 만들었지만 나는 정작 이를 사용하여 한번도 데이터를 만들지는 못하였다. 생물학자로서 납땜을 하고 직교로봇과 광학 부품을 조립하는 재미는 충분히 누렸었다. 2000년대에 들어서면서 나는 대용량 시퀀싱 쪽으로 방향을 완전히 선회하였다.

21세기 프론티어 미생물유전체활용기술개발사업단에서는 대장균(GPL7395)과 패혈증 비브리오 2종의 연구 대상 미생물에 대한 ologonucleotide microarray chip(스포팅 타입)을 제작하여 배포하였었다. 당시 제작에 관여한 디지탈지노믹스도 지금은 다른 회사로 바뀌어있다. 나도 이 칩을 이용하여 간단한 실험을 하였는데, 아직도 그 결과를 이용한 논문을 내질 못하였다. 어찌하다보니 다른 일에 우선 순위가 계속 밀리기도 하였고 이 실험을 통해 정말 대단하거나 새로운 발견을 하지 못한 이유도 있다. 전처리를 끝난 data를 GEO(GSE47589)에 등록한 것이 벌써 2년 전 초여름의 일인데... 우습게도 몇달 전에는 microarray data의 DB를 구축중이라는 유럽의 어느 연구자로부터 내가 등록한 데이터의 metadata가 잘못된 것 같다는 이메일을 받고 수정을 하는 일이 벌어지기도 하였다.

혼자서 microarray data를 분석해 보려고 애쓰는 과정 중에 자연스럽게 R을 접하게 되었다. 기술적으로 어려운 부분은 같은 연구소에 근무하다가 지금은 창업을 한 동료들을 귀찮게 하면서 물어보기도 하였다. 요즘 들어서 다시 이것들을 들여다 보면서 잊어버린 R(limma) 활용법을 되살리는 중이다. 지금 느끼는 것이지만 two color microarray의 분석이 single color보다 훨씬 어렵다! 특히 통계와 데이터 해석에 대한 사전 지식이 부족한 나에게는 linear model, design matrix 및 contrast matrix는 정말 넘을 수 없는 벽이다. 2011년 무렵부터 limma 매뉴얼을 펼쳐놓고 줄을 그어가며 읽어보고 실습용 코드도 따라 하면서 궁금한 점은 웹에서 검색도 해 보지만 여전히 명쾌하게 이해가 가지 않는다. Two color microarray를 이용한 direct design(공통 reference가 쓰이지 않은)에서 각각의 매트릭스를 정확하게 만드는 예제가 눈에 거의 뜨이지 않는다는 것이 문제이다. 과연 올해가 가기 전에 내가 목적한 바를 달성할 수 있을까?

limma를 쓰지 않고서도 얼마든지 microarray data를 분석하는 것이 가능하다. 그러나 Microarray data의 처리에 관한 깊숙한 곳을 이해하고 더불어서 R을 직접 연구에 활용하는 계기를 만들어 준 것이 바로 limma였으니 그 은공을 잊을 수는 없다. 특히 실험계획법을 체계적으로 배운 일이 없는 나에게 기본적인 개념들을 공부하게 해 주었으니 더욱 고맙지 않은가. "Two color" microarray를 앞으로 연구에 활용할 일은 많지 않겠지만 조금만 더 천착해 보련다.

2015년 11월 10일 화요일

어설픈 스피커 제작은 이제 그만..

지난 일년 동안 총 2개의 스피커 시스템을 만들어 보았다. 나무로 인클로저를 짜고, 풀레인지 유닛을 하나씩 넣어서 마무리하면 만족할만한 소리가 날 것으로 착각을 하고 있었다. 엄밀히 말하면 풀레인지 유닛으로는 성능이 미치지 못하는 저가의 제품이었다. 사무실 책상 위에서 가까이 놓고 실내악 위주로 들을 때에는 나쁘지 않다고 생각했었으나, 이를 집에 들고 와서 거실에 놓고 앰프를 연결해 보니 영 만족스럽지 못하다. 스피커 동호회에서 "풀어진 저역"이라고 하는 것이 바로 이런 소리일 것이다. 저음이 없는 것은 아니지만 단단함이 전혀 없고, 고역은 당연히 부족하다. 그 어느 작품도 5만원에 구입했던 T&V Vertrag보다 못했으면 못했지 나은 것이 전혀 없는 것이었다.

약 일년에 걸친 수업 기간 동안 배운 것은 아무리 저가품 스피커 시스템이라 해도(PC를 사면 그냥 주는 1만원 미만의 최저가품은 제외) 나름대로 최적화가 되어 나온다는 사실이다. 개인이 직접 제작하여 들어줄만 하다고 느낄 수준이 되려면 본인의 인건비는 빼고 30만원 이상은 투자할 각오를 해야 한다. 물론 이는 설계와 튜닝에 대한 기본 밑그림이 확보되었다는 가정 하에 그러하다. 간혹 <철가방 공방>처럼 수익성은 일단 젖혀두고 커뮤니티에 기여한다는 투철한 정신으로 제작하여 보급하는 실속형 초저가 기획품이 존재하지만, 이는 일반적으로 접할 수 있는 상황이 아니다. 90년대를 풍미하던 가정용 컴포넌트 오디오에 붙어있던 플로어형 스피커 시스템은 장터를 잘 뒤지면 몇만원 선에 구할 수 있다. 만약 몇만원을 투자하여 스피커 시스템을 만든다면, 이런 중고품과 가격과 음질 모든 면에서 도저히 경쟁이 되기 어렵다.

반면 앰프에 대해서도 저가형 완제품과 보드를 중심으로 여러 시도를 해 본 결과 대부분 만족스러웠다. 스피커 시스템은 객관적인 수치로 표현할 수 있는 세계(측정치 등)와 더불어 '예술'에 가까운 신비스러운 그 무엇인가가 아직 상당히 많이 포함되어 있어서 쉬운 접근을 불허하는 것 같다. 물론 나는 객관적인 수치 측면도 아직 한번도 만족시키지 못하였다. 수업기간과 수업료를 아직 충분히 지불하지는 않았으나 이 시점에서 어설프게 스피커를 만드는 일은 더 이상 하지 말자고 결론을 내리는 것이 바람직하다고 본다.

다음 사진은 바로 어제의 사무실 책상 위 모습이다


오늘은 이렇게 변했다. 자작 2호기 스피커는 다시 Vertrag(passive)에게 자리를 내어주었다.


2015년 11월 3일 화요일

서브우퍼 박스 제작을 위한 용적 계산

이번에 구입한 삼미의 저음용 드라이버 CWR-165B50AT의 파라미터를 이용하여 우퍼 박스의 용적을 계산해 보았다. 계산에는 다음의 사이트를 이용하였다.

http://www.diyaudioandvideo.com/Calculator/SpeakerBoxEnclosure/

스피커 인클로저의 제작 원리에 대해서는 별로 아는 바가 없다. 꽉 막힌 밀폐형보다 포트가 달린 형태가 저음을 내는데 유리하지만 좀 더 체적이 커야 하고 정확하게 만들지 않으면 효과가 떨어진다는 것 정도의 배경 지식만 있을 뿐이다.

밀폐형이 깔끔할 것이라는 편견(?)을 가지고 파라미터(Vas, fs, Qts)를 입력하여 보았다. 계산된 값은 3.46 입방피트! 무려 100리터에 가까운 용적이 나온다. 이건 말도 안되게 큰 값이 아닌가? 계산 방법이 잘못된 것일까? 차량용 서브우퍼 박스도 1~2 입방피트짜리가 주를 이루고 있는데 말이다. 네이버 <스피커공작> 카페에 물어봐야 되겠다.


[네이버 카페의 답변]

Qtc를 1로 올려보라고 한다. 어떤 사이트에서는 카 스피커의 경우이지만 Qts에 너무 구애받지 말고 0.5~0.9 사이의 값을 택하라고도 한다. 이러한 Qts의 범위에서는 Vb 값이 매우 크게 변한다. 좀 더 검색을 해 보자.

Sealed speaker and subwoofer system design tips

이 사이트에 나온 그림을 보면 Qtc는 작은 값으로 하는 것이 평탄한 주파수 특성을 나타내는 것으로 보인다. 단, 이 글의 윗부분에서 소개한 계산 사이트에 의하면 Qts < Qtc여야 한다. 내 유닛의 파라미터를 이용한 경우 Qtc를 이상적인 수치(0.707 혹은 그 근방의 작은 값)로 하면 용적이 너무 커진다. Qtc를 높여서 다시 계산을 해 보았다.

  • Qtc = 0.8, Vb = 1.52 ft3  =  42.92 lts
  • Qtc = 0.9, Vb = 0.9 ft3  =  25.52 lts
  • Qtc = 1, Vb = 0.62 ft3  =  17.56 lts
너무 심각하게 고민할 것이 아니라 1~1.5 입방피트 정도로 일단 저질러 보는 것이 정답으로 가는 지름길이다. 다음의 사이트는 자동차용 서브우퍼 인클로저의 설계에 유용한 여러 수치를 제공한다. 즉 판재의 두께와 크기를 가지고서 내부 용적을 산출하는데 도움을 준다.

Car audio subwoofer enclosures

2015년 11월 2일 월요일

TPA3125D2 앰프 보드를 망가뜨리다

샘플전자에서 지난 여름에 구입하여 조립했던 TPA3125D2 앰프 보드에 손을 댔다가 완전히 망가뜨리고 말았다. 서브우퍼용 1채널로 사용하기 위해 BTL 방식으로 배선을 고쳤으나 생각한 만큼의 결과가 나오지 않아서 원상 복구를 하는 과정에서 전혀 소리가 나오지 않게 된 것이다. 납땜 불량인가 싶어서 전원이 꽂인 채로 부속을 건드리고, 심지어는 소켓에서 칩을 빼기도 하였었다. 칩을 다시 꽂으니 파일럿 LED까지도 나오지 않는 해괴한 상황이 되고 말았다. LED 점등 회로는 칩과 무관한 것이라 생각되지만 전원 어댑터를 바꾸어 끼워도 작동 불능 상태는 마찬가지였다. 더 이상의 시도는 무의미하다고 결론을 내렸다. 수축튜브까지 끼워서 스피커 연결 단자를 만들어 다느라 수고를 했는데 이렇게 허무하게 끝나다니.

서브우퍼를 구동할 목적이었다면 회로에는 괜히 손대지 말고 앰프의 한쪽 채널만 쓰면 될 것을, 지나치게 욕심을 부린 것이 화근이었다.


뭐든지 만들 수 있을 것 같은 자신감이 막 차오르다가도 이런 일을 겪으면 '그러면 그렇지...'하는 탄식과 함께 용기가 수그러든다. 기껏해야 취미로 하는 일이고 대단히 비싼 보드를 망가뜨린 것도 아니니 그렇게 좌절감을 느낄 일도 없지만 업무와 취미의 구분을 떠나서 일단 몰두한 일에는 정성을 다하는 것이 나의 기본적인 태도이다.

2015년 11월 1일 일요일

실험적 2.1 채널 시스템

PCL86 초삼결 앰프와 인켈 SH-950 스피커로 정착한 침실의 음악감상 시스템과는 달리 거실은 항상 실험 중이다. AIWA '마이크로 Hi-Fi' AWP-ZX7, 자작 게인클론(LM1876), 중고 인켈 튜너와 자작 스피커가 늘 어지럽게 연결되어 있다.


자작(自作) '자작'나무 합판 인클로우저를 채용한 가장 최근작의 스피커 시스템(위 사진에서 검은색 아이와 스피커 위에 얹혀있음; 아이와의 two-way 스피커는 자작 LM1876 게인클론 앰프로 구동)는 3인치 단일 유닛을 이용한 one-way system이라서 저음이 늘 부족하다. 물론 고음이 풍부한 것도 아니지만... 이것은 아이와 AWP-ZX7에 연결하여 CD/아이패드 재생에 사용한다. AWP-ZX7은 USB 드라이브가 아닌 컴퓨터나 아이패드 등의 외부 USB 장비를 직접 연결할 수 있다는 것이 장점이다. 아이패드의 카메라 연결키트가 이럴 때에 매우 유용하게 쓰인다. 

아이와 앰프에 서브우퍼 출력용 단자가 있음을 감안하여 어설픈 2.1 채널을 꾸며보기로 하였다. 컷오프 주파수가 앰프 내부에서 어떻게 설정되었는지는 매뉴얼을 봐도 나오지 않는다. 적절한 대구경의 스피커 유닛과 추가적인 앰프만 있다면 실험을 진행할 수 있을 것으로 생각하였다.

선택한 스피커는 삼미의 6.5인치 유닛인 CWR-165B50AT였다. 차량에 서브우퍼를 장착하는 사람은 10인치 이상의 유닛을 택할 것이다. 내가 추구하는 것은 가슴 깊숙한 곳을 울리는 극저음이 아니라 음악 감상에 도움을 줄 정도의 저음이라서, 일부러 크지 않은 유닛을 골라 본 것이다.

(서브)우퍼 구동용의 앰프는 어떻게 할 것인가? 최초의 계획은 자작 TPA3125D2 앰프를 BLT로 개조하여 단일 채널용으로 만드는 것이었다. 그러나 실제로 해 보니 출력도 생각보다 크지 않고 잡음이 매우 심했다. 수고는 수고대로 들이고 보드에서 떼어낸 부품만 버린 셈이 되었다. 결국 선택한 것은 TDA7297 앰프 보드의 한쪽 채널(max 15 W)을 이용하는 것이었다. 반찬통을 거쳐 T&V Vetrag 스피커 속으로 들어갔던 이 보드는 다시 밖으로 나와서 다이소 1천원짜리 반찬통으로 들어갔다. 이번에는 타공과 커넥터 연결 작업에 신경을 많이 써서 예전보다는 보기 좋은 모양새가 나왔다.


서울에서 구입해 온 볼륨 놉과 커넥터가 이번 개조에 큰 도움이 되었다. 패널용 RCA 단자를 예쁘게 고정하려면 약간의 기술이 필요함을 이번에 알게 되었다. 고정용 너트를 돌리면 이것과 밀착하고 있는 그라운드 접점용 러그 단자가 딸려서 돌아가기 때문이다. 앰프 자작 사이트들을 보면 그라운드용 러그 단자 2개를 아예 납땜으로 연결하는 모습을 자주 보게 된다. 소리전자의 앰프 키트 제작 지침서에서 빌려온 다음의 사진을 참조하라. 다음에는 이러한 방식을 따르는 것이 좋을 것이다.


최종 결과물은 아래 사진과 같다. 우퍼 스피커는 두꺼운 종이상자에 넣었다. 서브 우퍼가 없는 것에 비하면 분명히 나아진 점이 있다. 수일 동안 더 들어본 다음 유용성이 입증되면 MDF 인클로우저를 적당히 주문 제작하여 수납해 보겠다. BTL 개조를 하느라 망가뜨린 TPA3125D2 앰프 보드를 되살리는 것이 주말 동안 해야 할 마지막 작업이다. 거실 가득 부스러기를 늘어뜨리면서 생계에 도움이 되지도 못할 일을 하는 한심한(?) 남편을 묵묵히 지켜봐 주는 아내가 고마울 따름이다. 아내도 남편과 더불어 음악 감상을 좋아한다는 것이 큰 위안이다.




라벨의 발레 모음곡 <어미 거위>

내가 다니는 직장이 대전문화예술의전당 법인회원으로 가입해 있어서 대전시향의 공연을 관람할 기회가 종종 주어지고는 한다. 퇴근길에 아내와 만나서 저녁을 간단히 해결하고 공연을 보는 것이 일상 생활에서 누리는 작은 즐거움이다. 대전문화예술의전당 안에는 음반점이 있어서 가끔씩은 가볍게 클래식곡 CD를 구입하여 듣고는 한다.

유튜브를 통해 알게 된 바르톡의 피아노 소나타가 기억이 나서 음반을 구해 보고자 했는데 이제는 노안이 와서 안경 없이는 CD에 인쇄된 작은 글씨를 읽기가 편하지가 않았다. 바르톡과 라벨의 곡이 수록된 CD를 하나 골라 들고는 공연을 관람하였다. 지휘자의 해설이 곁들여진 공연은 매우 만족스러웠다. 특히 마지막에 연주된 라벨의 <어미 거위>는 매우 듣기에 편안하였다. 이 곡은 평생 독신으로 산 라벨이 친구의 자녀들을 위하여 원래 피아노 연탄곡으로 만든 것으로, 나중에 관현악곡으로 편곡되어 발레 음악으로 쓰이게 되었다고 한다.

집에 돌아와서 오늘 구입한 음반을 오디오에 걸어 보았다. 앨범 자켓을 살펴보던 나는 뒷편의 곡들이 바로 <어미 거위> 모음곡이라는 것을 발견하고 깜짝 놀랐다. 아무런 계획도 없이 그저 눈에 뜨이는대로 구입한 음반에 오늘 공연에서 들은 곡은 들어있다니! 우연도 이런 우연이 있을 수가 없다.


일본의 북 <바치홀릭(Bati-Holic) 공연 관람>

2015년 대전 재팬위크 행사의 일환으로 충남대학교 정심화국제문화회관에서 열린 바치홀릭의 특별 공연을 다녀왔다. 주말에 아르바이트를 하는 아들은 부모를 위해서 공연 관람을 신청해 주었다. 교토에 근거를 둔 이들은 일본의 전통 북과 '일렉트릭' 사미센을 이용하여 전통적인 비트와 가락에 현대 록을 접목한 창작곡을 연주하는 그룹이라고 한다. 본인들의 표현을 빌리자면 '국산 Rock'이라고 하였다. 한국 공연도 십여 차례에 이른다고 한다.





두 시간 가까이 진행된 공연은 대단히 즐겁고 역동적이었다. 관객들의 호응도 매우 좋았다. 서툰 한국말이지만 '음악으로 하나가 됩시다!'를 외치면서 한국의 민요 뱃노래를 일본의 전통 뱃노래와 엮어서 연주한 것도 매우 좋았다. 여느 록 밴드의 공연 못지않게 손뼉을 치면서 목이 터지도록 환성을 지르며 관객과 연주인 모두 한 마음으로 즐긴 가을 저녁이었다.

11월 3일 저녁에는 한남대학교에서 일본 가수 고야나키 유키 콘서트가 열릴 예정이다. 화요비가 부른 <당신과의 키스를 세어보아요>가 이 가수의 노래였다는 것을 나는 지금까지 모르고 있었다. 공연 시작 시간을 맞추기가 어려워서 관람은 힘들겠지만. 

바로 전날의 대전 시향 공연에 이어서 바치홀릭 공연까지... 문화적으로 풍성한 가을을 보내고 있다.