2018년 11월 13일 화요일

Microbial Resource Announcements에 논문 내기

미국 미생물학회(American Society for Microbiolgy, ASM)에서 출간하는 Genome Announcements라는 온라인 저널이 있었다. 원래 미생물학(정확히 말하면 세균학)의 유명한 학술지인 Journal of Bacteriology(JB - 안타깝게도 한국인이 죽자사자 매달리는 impact factor는 현재 그렇게 높지 않다)의 한 섹션으로 존재하다가 별도의 온라인 저널로 분리되어 운영되었고, 올해 여름에 Microbiology Resource Announcements라는 저널로 명칭이 바뀌었다.

유전체 시퀀싱이 아주 드물게 일어나던 시절에는 그 결과를 좋은 저널에 싣는 것이 지금보다는 용이했었다. 중요한 모델 생명체가 바로 연구 대상이 되었으니 사람들의 관심도 많았고, 다른 비교 대상을 찾아내어 일부러 comparative genomic analysis를 하거나 발견 또는 예측된 사실을 실험으로 검증할 필요도 별로 없었다. 지금은 왠만한 생명체는 유전체 해독이 이미 완료된 상태라서 아마도 화성에 가서 새로운 미생물을 찾아내어 시퀀싱하지 않는 이상 수준 높은 학술지에 싣기는 어려울 것이다. 그래도 간혹 미생물을 이용한 연구 결과가  Nature나 Science에 종종 실리는 것을 보면 아직 희망을 접기에는 이른 것 같다.

그러다가 next-generation sequencing이 급격히 발전하여 누구나 유전체 시퀀싱을 할 수 있는 시대가 되면서, 쏟아지는 연구 결과를 발표하는 것이 점점 힘들어졌다. GenBank에 유전체 정보를 올리는 것은 자유지만, 여기에 올리는 정보에는 왜 이러한 생물체를 택하여 연구를 했고 어떤 방법으로 라이브러리를 만들고 시퀀싱을 해서 조립을 했는지 기술하기가 어렵다. BioProject나 BioSample가 이런 정보를 담을 수 있는 공간을 제공하지만 매우 한정적이다.

그래서 공개된 유전체 서열 정보의 인용 가능한 최소한의 학술 정보 역할을 하고자 announcement류의 섹션 혹은 전문 저널이 생겨난 것이다. 여기에 투고를 하면 리뷰를 거치지 않고 편집인이 즉각 출판 여부를 결정하였다. 대신 500단어 이내라는 분량의 제한이 있고 지금도 이는 변함이 없다. 다시 말해서 미생물의 유전체를 시퀀싱하여 적절히 조립하여 GenBank에 올린 뒤 accession number를 받아서 500 단어짜리 announcements를 만들어서 투고하면 JB 논문 한 편을 낸 것과 같은 효과가 있었던 것이다. 이를 이용하여 연구 성과의 평가에 도움을 많이들 받았다. 나 역시 수혜를 입은 사람 중 하나였음을 부인하기는 어렵다. 이것을 이용하여 승진이나 이직에 도움을 받은 사람도 적지 않았을 것이다.

수치화된 연구 성과에 목을 매는 것은 한국이나 중국 마찬가지다. JB 내에서 특정 섹션에 너무 많은 투고와 출판이 이루어지다보니 저널측에서는 이를 별도의 학술지인 Genome Announcements로 분리하게 되었다. 당연히 JB의 일부로서 누리던 SCI 등재, IF 수치 등은 사라지고 말았다. 그래도 나는 여기에 꾸준히 논문을 내고 있다. 유전체 시퀀싱은 이제 누구나 할 수 있는 일이므로 모든 시퀀싱 결과에 값진 학술적 가치를 부여하여 좋은 수준의 peer review journal에 출판될 수는 없는 노릇이다. 정부에서 지원한 연구비, 즉 세금을 이용하여 생성된 연구 결과가 계속 연구자의 컴퓨터 안에서 잠자게 놔 둘 것이 아니라 빨리 공개하여 다른 사람이 이용할 수 있게 만드는 것이 중요하다.

올해 여름부터 Genome Announcements는 Microbiology Resource Announcements로 명칭이 바뀌었다. 이제는 공표하는 연구 내용이 유전체 정보에 국한된 것이 아니라 미생물학과 관련된 모든 자원으로 그 한계가 넓어진 것이다. 하지만 원고 작성 요령은 그다지 변한 것이 없다. 단, review process가 추가되었다는 것이 가장 큰 차이점이다. 그래서 늘 하던 것과 같이 가벼운 마음으로 올해들어서 지금까지 총 네 편을 투고하였는데, 의외로 까다롭게 리뷰를 하는 것이었다. Sequence read의 트리밍 조건은 무엇인지, genome assembly를 하는 데 어떤 파라미터를 설정했는지, %Q30 수치는 어떠했는지 등 Genome Announcements 시절에는 그저 default parameter의 조건으로 했다고만 기술하면 아무런 문제 없이 지나갔던 문구를 하나하나 붙들고 더 상세히 적으라는 것이었다. 심지어 예전에는 요청하지 않던 raw sequencing read의 SRA accession number를 넣으라는 주문도 빠지지 않는다. 오늘 다운로드한 instructions to authors PDF 문서의 8쪽 왼쪽 컬럼을 보면 genome sequence의 availability를 쓰는 예문만 소개하고 있다. 가장 핵심이 되는 유전체 서열 정보의 accession number뿐만 아니라 BioProject/BioSample/SRA 정보를 적당히 섞은 모범적인 예문으로 바꾸는 것이 바람직하다.


Q30이라! raw data 중에서 phred score가 30 이상인 염기의 총 수 혹은 비율을 의미한다. 그런데 이걸 굳이 논문에 넣어야 하나? 지금까지 그렇게 많은 유전체 시퀀싱 관련 논문을 쓰면서도 이 결과를 요구하는 저널은 없었다. fastaQC의 html report나 CLC Genomics Workbench의 NGS Core Tools -> Create Sequencing QC Report에도 이런 정보는 주지 않는다. 혹시나 싶어서 fastQC가 zip 파일로 묶어서 제공하는 결과 파일 중 하나(fastqc_data.txt)를 열어보니 '>>Per sequence quality scores' 섹션에 Q 값에 대한 염기의 총 카운트가 나온다. Q30부터 시작하여 합산을 한 뒤 전체 염기로 나누어야 %Q30 수치를 계산할 수 있다. 보통 성가신 일이 아니다. 다행히도 시퀀싱 업체에서 제공한 QC 리포트를 들추어서 원하는 수치를 찾아내기는 했지만. 요구하는 것을 다 모아서 원고를 수정하니 500 단어 제한을 훌쩍 넘어간다.

리뷰어가 요청하는 상세 정보가 논문의 성격과 분량 측면에서 타당한지 편집국에서 판단하여 어느 정도의 기준선을 제안하면 좋을 터인데 아직은 그 수준이 아닌 것 같다. 어찌되었든 앞으로는 더 나아질 것이라 생각한다. 마침 내가 낸 논문이 오늘자 저널 웹사이트의 Latest Articles 바로 위에 나와서 기념삼아 스크린샷을 찍었다.




2018년 11월 11일 일요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [10] 초단부 구성

지난 일주일 동안은 과제 보고서 작성에 집중하느라 새 글을 얼마 쓰지 못하였다. 금요일에급한 일은 거의 마무리가 되었다.

결국은 여기까지 오게 되었다. 반도체인 OP amp 회로를 이용하여 43번 오극관을 충실히 드라이브하여 왔는데, 기왕이면 모든 것을 진공관에게 맡기면 어떻겠는가? 전원부에 SMPS와 DC-DC 컨버터를 사용한 것은 새로운 시도라고 해 두자.

마침 12AU7이 쓰인 프리 겸 헤드폰 앰프가 망가져서 여분의 진공관을 갖게 되었다. 인터넷과 제이앨범의 자료를 근거로 플레이트 전압 150 볼트 부근에서 작동하는 회로를 구상하여 제작에 돌입하였다. 필요한 부품은 일주일쯤 전에 구입해 놓은 상태였다. 손으로 그린 회로도를 아래에 소개한다. 43번 오극관의 스크린 그리드에 연결되는 고압 직류에(그라운드 기준 155 V의 전압을 470R 저항으로 한 번 낮춘 것 수준이라 그렇게 높지는 않다) 47K 저항을 연결한 뒤 12AU7의 플레이트에 접속하였다. 12AU7의 캐소드에 바이패스 캐패시터를 달지는 않았다. 진공관의 특성 곡선을 기초로 계산을 하거나 측정을 하지는 않았다.

12AU7 + 43 single ended amplifier schematic.
페놀 만능기판에 실톱으로 직경 19 mm 정도의 구멍을 뚫어 9핀 소켓을 고정하였다. 방열을 위해 진공관을 섀시 외부로 노출시키는 경우 기판의 동박 패턴, 즉 아랫쪽으로 진공관을 향하게 하는 것이 일반적이다. 그래야 기판을 섀시 안쪽면과 최대한 가깝게 고정할 수 있다. 물론 접촉을 하면 안되지만. 그런데 이렇게 회로를 꾸미면 기판 윗쪽에서 소켓과 나머지 부품을 연결하는 일이 좀 어색해진다.


43번 5극관 전력증폭회로 입력부의 커플링 캐패시터와 그리드 리크 저항은 원래 별도의 기판에 붙여 놓았는데, 이번에 만든 초단증폭회로용 기판에 전부 수용하였다. 12AU7의 히터 는 4번과 5번 핀에 12 V 직류를 공급하여 점화하였다.

워낙 간단한 회로라서 실수는 하지 않았다. 소리를 들어보니 약간의 험이 들렸다. 12 V 및 24 V 직류 어댑터의 음극을 서로 연결하니 험이 사라졌다.



알루미늄 판 조각을 이용하여 전면 패널로 삼았다. 이전보다 훨씬 깔끔해 보인다. 소리도 매우 마음에 든다. OP amp를 사용한 드라이브 회로와 비교하면 약간 더 정갈한 것 같기도 하고... 플라시보 효과일지도 모른다.


어제 저녁에 완성을 하고 계속하여 음악을 들어보고 있다. 아직까지는 특별히 개선을 할 점이 나타나지 않았다. 이제는 섀시를 꾸며서 부품들을 수납할 아이디어가 필요하다.

전기 설비 공사에 쓰이는 '풀박스'라는 금속제 상자가 있다. 단면은 정사각형이면서 높이는 용도에 따라서 다르다. 직사각형 모양이 아니라서 앰프의 섀시로는 어울리지 않겠지만 R-core 출력트랜스(사진에서 보였듯이 받침틀 위에 한 쌍을 다 올려둔 것)의 케이스로는 쓸 수 있을 것 같다. 가로x세로x높이가 100 mm인 것이 이 용도로는 딱 적당할 것이다.


'고전관'을 이용한 매우 즐거운 제작 경험이 이제 대단원의 막을 내리려 한다.

2018년 11월 4일 일요일

대청호와 신탄진 장 구경

멀리 가지 않아도 가슴이 시원하도록 탁 트인 곳에서 가을 단풍을 즐길만한 곳이 있으니 그곳은 바로 대청호다. 대전 시민에게 계룡산과 더불어서 탁월한 경관을 제공하는 곳 중의 하나이다. 비록 댐이나 방조제가 갖는 부정적 의미에 대해서도 이제 관심을 가져야 할 시대가 되었지만 말이다.

 



전혀 의도하지 않았으나 우리 부부의 얼굴 사이에 하트 모양의 조형물이 자리잡았다. 그런데 가까이 가서 보면 결코 낭만적이지는 않은 문구가 적혀있다. 내용에 대해서는 상상에 맡긴다.
호수 건너편인 북쪽 약간 높은 곳을 바라보면 팔각정 휴게소가 있다. 그쪽은 지대가 높아서 아마 호수를 바라보는 경치는 더 아름다우리라. 시선을 약간 왼쪽으로 옮기면 가파른 산비탈에 절집이 하나 보인다. 이름은 현암사. 기회가 되면 한번 가 보고 싶다. 계단이 많아서 평소에 등산으로 다져진 체질이 아닌 우리 부부는 마음의 준비를 해야 하리라.

마침 나들이를 나섰던 어제는 신탄진 장날이었다. 큰 도롯가에서 파는 단감을 사려다가 아예 본격적으로 장을 보기로 하였다. 유성장(4일/9일)은 꽤 여러 차례 다녀 보았지만 신탄진장(3일/8일)은 처음이었다. 김치가 다 떨어져서 깍두기 거리를 사기로 했다. 장이 서는 골목은 유성장보다는 약간 넓어서 다니기는 수월하였다. 작정을 하고 장을 보러 간 것이 아니라서 발품을 팔면서 어디에서 무엇을 파는지를 파악하려고 애쓰지는 않았다. 유성장은 워낙 많이 다니다보니 골목 입구에서 얼마를 들어가면 모시 송편을 팔고 어느 골목을 돌면 돼지 껍데기 무침과 닭강정이 있는지를 아는 정도는 된다.

잔치국수와 김밥을 곁들여서 약간 늦은 점심을 먹고 길을 나섰다. 무, 쪽파, 생강, 오이, 양파, 양념닭발, 고춧가루, 그리고 홍시를 샀다. 닭발과 돼지껍데기 무침은 집에서 먹은 적이 없는데 딸아이는 그 맛을 알아서 너무나 좋아한다.

광역시에서 열리는 정겨운 장터는 사람들의 사는 내음이 흠씬 풍겨나는 곳이다. 검정 플라스틱 봉지의 사용을 조금만 더 줄일 수 있다면 더욱 좋을 것이다.

독서 기록 - [전환의 시대] 외 네 권


전환의 시대

  • 박노자 지음
선생님이 학생에게 존댓말을 하는 사회, 입시가 사라지고 명문대학도 사라져서 모두가 무상으로 양질의 교육을 받는 사회, 군대가 모병제가 되는 사회, 아프면 무상으로 치료받고 집이 필요하면 공공 영구임대아파트에 입주하는 사회, '여자 같은 남자'라는 말이 남성에게 최고의 칭찬이 되는 사회, 그리고 주말에 바람 쐬라 평양에 다녀오는 사회.

놀 줄 아는 그들의 반격

  • "꾸준한 딴짓으로 기회를 만드는 세대"
  • 오바라 가즈히로 지음|장은주 옮김

나쁜 뉴스의 나라

  • "우리는 왜 뉴스를 믿지 못하게 되었나"
  • 조윤호 지음

생명의 설계도 게놈 편집의 세계

  • "게놈 편집은 우리와 생명의 미래를 어떻게 바꿀 것인가"
  • NHK 게놈 편집 취재반 지음|이형석 옮김
게으른 생물학자는 논문 대신 이 책을 읽음으로써 CRISPR-Cas9 시스템 개발의 역사와 현황 및 의미를 파악하고자 하였다.

스워브(Swerve) ★★★

  • "나를 계속 넓히며 일하는 사람들의 6가지 비밀"
  • 닉 러브그로브 지음|이지연 옮김
전문가들에게 어떤 분야에 대한 질문을 하면 '그건 제 분야가 아닌데요'하면서 한 발 물러서는 경우를 많이 본다. 나 자신도 그런 경향이 없다고는 말하기 어렵다. 마치 공돌리기를 하듯 소관부처가 아니니 책임을 지기 싫다는 뜻도 되겠다. 평생 직업도, 평생 직장도 없는 시대에 한 우물만 파다가는 하나밖에 모르는 바보가 되기 일쑤이다. 말콤 글래드웰이 주장한 '1만 시간의 법칙'은 어떻게 하느냐고? 단순 계산으로도 평생 예닐곱 차례의 전문가가 될 기회가 충분히 있다. 폭넓은 경험과 도전을 하라.

2018년 11월 2일 금요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [9] 전원 트랜스 추방

진공관 앰프를 만든다고 해서 반도체 부품을 일절 쓰지 말라는 법은 없다. 진공관 앰프의 특성 혹은 본질에 해당하는 부분을 유지하고 있다면 - 즉 출력관과 출력 트랜스 - 나머지는 현대적인 부품으로 구성을 해도 큰 문제가 없으리라는 것이 나의 철학이다. 이에 대해서 반대하는 사람도 있을 것이다. 진공관 앰프 특유의 소리는 초단관에 기인하는 것이라고. 그래서 진공관으로 프리를 구성하고 반도체로 출력단을 만드는 앰프도 종종 보인다. 그러나 Lenard Audio Institute에 다음과 같은 글이 있다(링크).
The heart of a valve amplifier is the output valves and output transformer.   Only the output valves and output transformer contribute to the unique sound character that makes it distinctly different from a solid-state amp.
그래서 나는 이를 믿기로 했다. 중요한 것은 출력단과 출력 트랜스라는 것.

갖고 있던 전원 트랜스를 이용하여 B+ 전원과 히터 전원까지 감당을 하려니 트랜스를 두 개나 써야 하고 덩달아 배전압 정류회로까지 만들어야 하는 불편함이 있었다. 초단/드라이브단에 OP amp 회로를 쓰기로 결정하고 나니 기왕 이렇게 된 것, DC-DC 스텝 업 부스터 모듈을 적극적으로 활용하기로 했다. 그래서 다음 그림과 같은 엽기적인 구성의 앰프가 되고 말았다. SMPS 기반의 어댑터와 부스터가 만들어내는 높은 주파수의 노이즈가 범벅인 상태일지도 모르겠지만 가청 주파수 범위가 아니라면 무슨 문제가 있겠는가?

MT3608을 사용한 부스트 모듈은 바로 어제 국내에서 구입하였다. 주문에서 배송 완료까지 24 시간이 걸리지 않았고, 가격은 하나에 1,100원이었다. 이번 전원부 개조작업의 핵심 역할을 한 고전압 부스트 모듈을 eBay에서 구입하였는데 주문에서 배송까지 무려 45일 가까이 걸렸다. 이렇게까지 긴 시간을 기다리면서까지 취미 제작을 해야 하는가 하는 회의감이 들기도 했다.

LF353 OP amp를 이용한 증폭회로는 원래 +/- 15 V 정도(최대 18 V)의 양전원을 공급해야 한다. 그러나 이는 매우 번거로운 일이므로 단전원 어댑터를 이용하되 저항과 캐패시터로 이를 반으로 나누어서 간이 양전원을 공급하고 있다.

OP amp를 이용한 전압증폭회로에서는 저항의 비율을 이용하여 수백배 이상의 이득을 얻을 수 있다. 하지만 당연하게도 전원전압을 넘어갈 수는 없다. 제이앨범 매니저의 설계에 의하면 43 오극관 싱글 회로를 적정 출력으로 구동하려면 40 V 가까운 범위를 스윙해야 하는데, 내가 마련한 OP amp 회로에서는 출력이 약간 부족할 수밖에 없다. 이에 따라서 제이앨범의 힌트에 따라서 오디오용 트랜스포머를 사용해 본 것이다. 신호의 크기를 가감없이 전달하려면 600 Ω : 600 Ω 트랜스포머를 쓰는 것이 정석이겠으나, 조금이라도 증폭을 하기 위해서 IPT-14라는 것을 뒤집어서 사용하였다. 원리적으로 주파수 특성, 특히 저음부의 전달에서 손실이 있을지는 모르겠으나 귀로 듣기에는 아주 만족스럽다. 출력단을 위한 12 V 어댑터로 OP amp 드라이브단까지 전원을 공급하고, 권선비가 더 높은 트랜스포머를 쓰면 더욱 간단하게 마무리를 할 수 있을지도 모른다.

국내의 웹사이트에서 IPT(input transformer)와 OPT(output transformer)라는 것을 찾으면 두어 가지 종류의 것이 나온다(예: IC114). 그런데 그 용도를 도대체 모르겠다. 전자회로 실습용으로 만드는 전자새 키트 혹은 라디오 키트 말고는 이 부품들이 쓰이는 곳이 보이질 않는다. 권선비와 임피던스비도 잘 이해가 가지 않는다. 이에 대해서는 추후에 좀 더 조사를 해 볼 예정이다.

어찌되었든 오늘은 그림에서 소개한 다이어그램대로 구성을 마쳤고, 무난한 성능을 보였다. 25 V를 만드는 부스터 모듈이 다소 뜨겁기는 한데 55도를 넘을 것 같지는 않다. 며칠동안 테스트를 하여 문제가 발생하지 않는지 확인한 다음 적절한 섀시를 꾸며보도록 하자.



11월 4일에 추가한 글

MT3068 모듈을 잘못 건드려서 두 개를 망가뜨렸다. 12 V 어댑터의 자체 보호 기능이 있어서 망가진 모듈이 단락 상태가 되었지만 자동으로 전원이 차단되어서 더 큰 사고를 예방할 수 있었다. 만약 내가 만든 SMPS를 사용했다면? 아무런 보호 기능이 없어서 어디선가 연기가 나기 시작했을 것이다. 반도체 소자는 무엇인가 잘못되어 파괴되면 도통 상태가 되어버린다는 것이 문제이다.

별도의 24 V 1.5 A어댑터를 사용하여 프리앰프와 진공관의 히터를 연결해 두었다.

용량이 큰 24 V 어댑터가 있다면 히터와 프리앰프에는 직접 전원 공급을 하고, 부스터를 이용하여 고전압을 제공할 수 있을 것이라는 생각을 하지 않았던 것은 아니다. 며칠 전 모니터용 24 V 어댑터를 구해서 이러한 구상대로 연결을 해 보았지만 '웅-'하는 심한 잡음이 발생하였다. 이미 갖고 있던 전원 트랜스와 정류회로를 조합하여 직류를 만들어 보았지만 이것 역시 만족스럽지 않았다. 대용량 캐패시터를 아무리 덧대어 보아도 소용이 없었다.

앰프 전체를 하나의 어댑터로 구동하려면 프리앰프의 출력은 IPT로 아이솔레이션해야 된다. 왜냐하면 OP amp에 공급되는 양전원은 제대로 만들어진 것이 아니라 단전원을 분할한 것이기 때문이다. 따라서 공급전압의 1/2에 해당하는 곳을 그라운드로 삼아서 움직이게 된다. 고전압을 만들어내는 부스터는 입력전압쪽과 분리되어있지 않다. 따라서 진공관 전력증폭회로의 그라운드는 전원의 음극 및 OP amp로 공급되는 직류의 그라운드(신호의 그라운드가 아니라)와 연결된 상태이다. 상황이 이러하니 OP amp 출력의 그라운드를 메인 회로에 연결하는 것은 옳지 않다. 그러나 IPT를 중간에 넣으면 이러한 문제가 해결된다.

12 V 5 A 어댑터와 부스터로 155 V를 만들고 히터(24 V)는 다른 어댑터로 점화하는 것이 현재까지의 최선이다. 전체 구성도는 다음 그림과 같이 바뀌었다.

프리앰프보드를 너무 만지작거리다가 그라운드 신호선의 납땜이 떨어져서 스피커가 부서질듯 '두두두두...'하고 울리는 소음을 접하기도 했다. 출력단자에 거의 전원전압 그대로가 검출되어서 처음에는 OP amp가 망가진 줄로만 알았다. 자작 취미를 하면서 일어날 수 있는 나쁜 모든 일은 모두 다 경험하는 것 같다.

2018년 10월 27일 토요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [8] 프리앰프 바꾸기

나무판 위에 서툴게 만든 43 오극관 싱글 엔디드 앰프를 매일 흐뭇하게 바라보면서 어떻게 섀시를 만들지 고민을 하던 중 프리앰프가 망가지고 말았다. 재생 중에 갑자가 전원이 들락날락거리기 시작한 것이다. '퍽' 소리와 함께 파일럿 LED도 꺼지고 아무런 소리가 나지 않는다. 잠시 살아나는 것 같다가 또 꺼지고를 반복하였다. 처음에는 전원 커넥터쪽의 접촉 불량이라고 생각했지만 납땜을 새로 해고 아무리 만져 보아도 소용이 없었다. 전원을 넣고 무슨 일이 벌어지는지 기다리는데 갑자기 연기가 나면서 대용량 저항이 타고 말았다. 문제점을 진단하고 고칠 능력이 없으니 이제 이 앰프는 12AU7 진공관 한 알을 남기고 잡동사니 상자에 들어가는 신세가 되었다.

43 오극관은 전력증폭회로를 담당한다. 이 앞에서 신호(오디오 신호이므로 교류)를 적당한 수준으로 흔들어 줄 '드라이버'가 필요한 것이다. 드라이브단은 소스 기기에서 출력되는 전압을 흔들어 주는 것이라서 큰 전력을 소비하지는 않는다. 명색이 진공관 앰프이니 드라이브단도 진공관을 쓰는 것이 자연스럽다. 그러나 43 오극관의 히터(25 V) 및 B+ 전원(95~160 V)은 요즘 보통 사용하는 다른 진공관과 같이 쓰기에는 적합하지가 않다. 그래서 나는 진공관-MOSFET 하이브리드 헤드폰 앰프 겸 프리앰프를 사용했던 것이다.

제이앨범의 매니저께서는 요즘 43번 오극관을 이용한 앰프 회로의 설계를 거의 마쳐가고 있다. 초단에는 오극관인 6KT6을 사용한다. 계산 결과에 의하면 드라이브단에서는 36~40 V 정도의 범위를 흔들어야 한다. 반도체 프리앰프로는 이는 도달하기 어려운 값이다. 왜냐하면 전원전압이 결국 프리앰프의 출력 범위를 결정하기 때문이다(물론 게인도 중요하다).

이에 나는 수년 전에 만들었던 op amp 기반의 CMoy 헤드폰 앰프(위키피디아)를 개량하기로 하였다. 이것은 헤드폰 앰프 스테이션(하스)의 신정섭 님(sijosae)이 상세한 제작법을 소개하여 국내에 널리 알려진 것이다(제작 정보). 놀랍게도 이 글은 2002년 작성된 글이고 2006년 이후 신정섭 님은 하스 커뮤니티의 자작방에 글을 올리지 않고 있다. 근황이 무척 궁금하지만 나는 하스의 회원이 아니니 물어볼 수가 없다. 그의 작품은 외국에서도 많이 알려져 있다. 궁금하다면 Sijosae's DIY Gallery를 방문해 보자.

헤드폰 앰프는 프리앰프로 써도 별 문제가 없는 것으로 안다(그 역은 항상 성립하지는 않는다). 그렇다면 별도의 목적을 갖고 있는 프리앰프가 진공관 싱글 앰프의 초단에 쓰여도 되는가? 진공관 전력증폭회로가 필요오하는 전압의 폭보다 훨씬 낮은 것은 사실이다. 그러나 침실에서 그다지 크지 않은 음량으로 듣는 것이 목적이라서 문제는 없을 것으로 생각한다.

초단, 드라이브단, 위상반전단...

여기에서 잠시 진공관 앰프의 회로 구성에 대해서 잠깐 논하기로 한다. 위상반전단(inverter)은 푸시-풀 앰프에서 필요한 것이니 제외하기로 한다. 

사진 출처: Lenard Audio Institute
위의 그림을 보면 출력관을 구동(drive)할 전압을 만들기 위해 pre-amp와 driver의 두 단계(stage)를 거친다. 이것은 흔히 이야기하는 초단과 드라이브단을 각각 일컫는 것으로 보인다. 그러나 우리나라에서는 pre-amp라고 하면 특정한 목적이 있는 별도의 장비(즉 power amplifier 혹은 integrated amplifier와 구별되는)로 인식되는 것 같다. 소출력 앰프라면 진공관 한 알을 가지고서 프리앰프과 드라이버의 두 stage를 전부 담당하도록 설계하는 것이 보통이다. 초단, 위상반전단, 드라이브단 및 출력단의 의미를 서병익오디오 기술칼럼에서 확인해 볼 수 있다(링크).

헤드폰 앰프의 개조

내가 신정섭 님의 제작 정보를 따라서 만든 헤드폰 앰프는 게인이 약 1.3 정도에 불과하다. 그래서 저항을 각 채널에서 하나씩 바꾸어서 11배(20.8 dB)로 만들었다. 이렇게 하면 43 오극관 전력증폭회로에 잠시 물려서 사용했던 프리앰프의 그것과 거의 비슷하다. 사용된 op amp는 LF353(datasheet)이다. 


원래 op amp는 직류 양전원이 필요하다. CMoy 헤드폰 앰프에서는 9 V 전지 두 개를 직렬로 연결하여 +9/0/-9 V를 얻는 것이 기본이고, 신정섭 님의 버전에서는 9 V 전지 하나에 캐패시터와 저항을 연결하여 이를 반분하여 +4.5/0/-4.5 V를 만든다. 나는 갖고 있는 SMPS 어댑터를 사용하기로 했다. 9 V, 24 V 및 32 V의 것을 전부 연결해 보았다. 부품의 내압에는 문제가 없다. LF353 데이터시트에 의하면 최대 공급 전압 범위는 ±18 V이니 안전하다. 물론 게인을 더 올리지 않으면 출력 전압이 여기에 접근하지 못할 것이다.

TDA7297 '반찬통 앰프'가 희생되었다.
소리를 들어 보았다. 음량 수준은 바로 수일 전까지 사용하던 진공관-MOSFET 하이브리드 프리앰프와 비슷하다. 고급 op amp라고 할 수는 없지만 잡음 수준도 양호하다.

반찬통 안의 남은 공간이 넉넉하다.

여분으로 보유한 op amp (TL072와 NE5532). 회로 기판에 지금은 LF353이 꽂혀 있는 것은 아마도 이들 중에서 잡음이 제일 적어서 선택된 것 같다.
만약 내가 인내심이 충분했더라면 AliExpress 혹은 eBay에서 몇 달러에 판매하는 NE5532 preamplifier board를 구입하여 사용했을지도 모른다. 그러나 가장 최근에 주문한 물건이 한 달이 훨씬 넘도록 배송이 되고 있지를 않아서 당분간은 해외 구매를 자제하려고 한다.

2018년 10월 26일 금요일

awk와 sed를 사용하여 muti-fasta 파일의 서열 ID를 일괄적으로 바꾸기

수십 개의 대장균 유래 MiSeq 데이터를 Unicycler(GitHub 링크)로 조립하였다. 실행 결과물은 전부 샘플별 디렉토리에 나뉘어 저장된 상태이다. 디렉토리 이름은 전부 다르지만, 그 내용물의 파일 이름은 전부 같다. 예를 들자면 최종 조립 결과 파일의 이름은 모두 assembly.fasta이다. 이를 한데 모아서 저장하자면 파일 이름에 샘플의 이름이 들어가도록 바꾸어야만 한다.

이 작업은 파일의 내용을 직접 건드리는 것이 아니라서 비교적 쉽다.

1
2
3
4
5
$ mkdir final
$ find . -name assembly.fasta | while read f
> do
> cp $f `echo $f | awk -F/ '{sub(/assembly/, ""); print "final/"$2"_plasmid"$3}'`
> done

이상의 명령을 실행하면 ./123/assembly.fasta 파일은 ./final/123_plasmid.fasta로 바뀐다. 세 번째 줄을 참고하면 awk의 sub() 함수를 사용하여 assembly라는 문자열을 제거하고, 파일 경로로부터 샘플의 이름(원래는 디렉토리 이름이었음)을 추출하는 것이 핵심이다.

다음으로는 각 fasta 파일로 들어가서 서열 ID를 바꾸는 방법을 알아보자.

1
2
3
4
5
6
7
$ ls *fasta
1039_plasmid.fasta  1536_plasmid.fasta ... 
$ ls *.fasta | while read f
> do 
> h=${f%%_*}
> sed -i "s/>/>s${h}p/" $f
> done

현 디렉토리에 존재하는 .fasta 파일의 이름을 변수 f에 넣은 다음 밑줄('_')부터 끝까지를 제거하는 명령(다섯 번째 줄)을 먼저 눈여겨 보자. Shell에서 문자열을 조작하는 매우 유용한 방법이니 잘 기억해 두어야 한다. %%, %, ##, #에 따라서 삭제의 범위와 위치 기준이 달라지고, 치환도 가능하다. 상세한 사항은 Advances Bash-scripting Guide: Manipulating Variables를 참조하자. 다음에는 서열 ID를 sed 명령으로 치환한다. sed의 -i 옵션은 파일을 직접 고치는 것을 뜻한다. 따라서 실수를 하면 곤란하다. 그러나 -i.bak라고 입력하면 원본파일.bak이라는 백업본이 남는다.  흥미롭게도 -i와 SUFFIX 문자열 사이에는 공백이 없어야 한다. Shell variable을 sed의 치환 명령어 내에서 그대로 쓸 수 있다는 것이 매우 편리하다. 단, 명령어를 겹 따옴표로 둘러싸야 한다. 이상을 실행하면 서열의 ID는 다음과 같이 바뀐다.

(변경 전) >1 length=25428 depth=1.01x
(변경 후) >s1039p1 length=25428 depth=1.01x

awk를 사용하면 똑같은 일을 좀 더 복잡하게(?)할 수 있다. Shell variable을 awk 명령어 내에서 쓰려면 -v 옵션을 이용해야 하고, 서열 ID가 있는 라인과 서열만 포함한 라인을 모두 출력하려면 next 명령을 써야 한다. 그러나 printf() 함수를 이용하여 좀 더 세련된 결과를 얻을 수 있다.


1
2
3
4
$ ls *fasta | while read f
> do
> awk -v s="${f%%_*}" '$1~/^>/{sub (/>/, ""); printf ">s%d-p%d %s %s\n", s, $1, $2, $3; next}{print}' ${f} > ./edit/${f}; done
> done

세 번째 줄의 awk 명령어 구조가 좀 난해하다. 이를 이해하려면 다음의 두 명령어가 무엇이 다른지를 알아야 한다.

  1. awk '조건{명령어A}{명령어B}' 파일
  2. awk '조건{명령어A; next}{명령어B}' 파일
작업 중이 라인이 조건에 맞으면 {명령어A} 블록을 실행하고, 맞지 않으면 {명령어B} 블록을 실행하는 것이 아니다! 첫 번째 명령어는 조건에 맞으면 A를 실행하고, 같은 라인에 대해서 그대로 B를 수행함을 뜻한다. B를 수행함에 있어서는 앞에서 선언한 조건과는 상관이 없다. 따라서 조건에 맞는 줄에 대해서 A를 실행하고, 다음 줄로 넘어가려면 그 블록 안에서 next 명령을 선언해야 한다. 이렇게 해야 조건에 맞지 않는 줄에 한하여 명령어 B 블록이 수행된다. 이렇게 표현하는 것이 마음에 들지 않으면 if ~ else ~ 구문을 써야 한다.

아무 fasta 파일에 대해서 다음의 명령을 실행시켜 보라. NR은 현재 작업 중인 라인의 번호를 의미한다. 그 다음에는 next를 제거한 뒤 다시 똑같은 명령을 실행해 보라. 어떤 차이가 있는지를 쉽게 이해할 수 있을 것이다.

$ awk '$1~/^>/{print NR, ": header"; next}{print NR, ": seq"}' test.fasta

오늘 소개한 방법이 최선이 아닐 수도 있다. 다음 웹페이지에서 소개하는 짤막한 awk 코드에도 공부할 것이 많이 숨어 있다.

one liner to split a multifasta into separate single file


1
2
3
4
print 'hello world!'cat hg18.fa | awk '{
        if (substr($0, 1, 1)==">") {filename=(substr($0,2) ".fa")}
        print $0 > filename
}'


2018년 10월 24일 수요일

블로그 포스트에 코드 조각 삽입하기

코드 조각(code snippet)을 블로그 포스트에 예쁘게 삽입하려면 정성을 기울여야 한다. 한때 Syntax Highlighter를 써 보려고 노력했지만 블로그의 템플릿을 수정하는 것도 까다로웠고 실제 적용한 뒤에 페이지를 로드해 보면 제대로 불러오는데 시간이 많이 걸린다는 느낌이 들었다.

좀 더 간편한 방법은 없을까? Stack Overflow에서 그 해답을 찾았다.

Formatting code snippets for blogging on Blogger

첫번째는 hilite.me 웹사이트를 이용하는 것이다. 웹사이트 주소도 아주 외우기 쉽다. '하이라이트 미' 아니겠는가? 여기를 방문하여 소스코드 창에 원하는 코드 조각을 입력하고 언어의 종류와 스타일을 결정한 뒤 나오는 HTML 코드를 복사하여 블로그 편집창에 넣으면 된다. 이렇게 말이다. 편집모드는 HTML로 놓는 것이 좋다.


#!/usr/bin/perl

while (<>) {
    chomp;
    my @data = split /\t/, $_;
    print "$data[0]: $data[3]\n";
}

이러한 용도의 웹사이트는 몇 군데가 더 있다.
또 다른 사용자는 다음의 css 스크립트를 복사하여 쓰는 것을 제안하였다. 중간의 블록에 코드를 삽입한 다음 이를 그대로 블로그 편집창에 넣으라는 것이다. syntax highlighting 기능은 없지만 소스 코드를 그대로 보이는 데에는 유용하다. 매우 단순한 방법이다.

 <pre style="font-family: Andale Mono, Lucida Console, Monaco, fixed, monospace; 
                color: #000000; background-color: #eee;
                font-size: 12px; border: 1px dashed #999999;
                line-height: 14px; padding: 5px; 
                overflow: auto; width: 100%">
       <code style="color:#000000;word-wrap:normal;">

            <<<<<<<YOUR CODE HERE>>>>>>>

       </code>
 </pre>

이를 한 번 적용해 보았다.

#!/usr/bin/perl

while (<>) {
    chomp;
    my @data = split /\t/, $_;
    print "$data[0]: $data[3]\n";
}       

블로그 문서 내에서 '<'과 '>'을 제대로 표시되게 하는 것은 여전히 어렵다. 몇 번씩 '미리보기'로 확인을 해야 하니까 말이다. 오늘 찾은 방법은 잘 기억해 두었다가 활용하도록 하자.

2018년 10월 23일 화요일

Protein sequence clustering과 dN/dS 분석

새로운 과제를 시작하면서 단백질 서열 클러스터링이라는 매우 고전적인 일을 하게 되었다. 단백질 패밀리의 분석, pan-genome 계산, ortholog 추출, dN/dS 분석, 데이터셋의 크기 축소 등 단백질 클러스터링은 매우 여러 분야에 쓰인다. 자료를 조사하면서 지난 2월에 작성했던 글인 Usearch 맛보기도 업데이트하였다. 오늘 작성하는 글은 "How to cluster protein sequences: tools, tips andcommands"을 많이 참고하였다.

단백질 서열 클러스터링 기법은 크게 다음의 두 가지로 나눌 수 있다.
  • Sequence-based clustering: CD-HIT, UCLUST, USEARCH...
  • Graph-based clustering: LAST, legacy BLAST, BLAST+...
  • Network clustering: MCL
Graph-based clustering에서는 모든 단백질 서열 사이의 1:1 similarity 정보를 얻어내는 것이 필요하다. BLAST 계열의 프로그램을 사용하는 경우 결과물을 파싱하여 Reciprocal Best BLAST hit(RBB, RBH, or biodirectional best hit BBH)을 추출하여 활용하면 되는 것이다. RBB는 두 genome 사이에서 ortholog candidate를 산출하는 데에도 널리 이용된다.

RBH으로부터 ortholog를 정확하기 추출하기 위한 BLAST option을 제안한 논문이 2008년에 발표된바 있다(PMID: 18042555). 이를 기반으로 하여 다음의 BLASTP 옵션이 제안되었다. 논문에서는 첫번째 조건만을 제안하였다. 이렇게 함으로써 ortholog의 수는 가장 많게, 그러나 error는 최소화할 수 있었다고 한다.
  • -F "m S" -s T (combination of soft filtering and Smith-Waterman final alignment)
  • E value: 10-5 또는 10-6 이하
BLAST 프로그램은 database search와 alignment의 두 단계로 이루어지는데, soft filtering이란 첫번째 단계에서만 low-complexity sequence를 마스킹하는 것을 의미한다(-F "m S"). 기본 조건은 -F T -s F이다. -F "m S"라는 옵션이 있다는 것은 blastall의 모든 옵션이 수록된 페이지(링크; 혹은 명령행에서 blastall이라고만 치면 나오는 텍스트)에서 찾아보기 어렵다.

이상의 옵션은 legacy BLAST에 대한 것이다. 그러면 요즘 권장되는 BLAST+에서는 무엇이라고 옵션을 제공해야 하는가? NCBI의 매뉴얼 페이지(링크)를 참조해 보면 -soft_masking T -use_sw_tback (-evalue 10-5)일 것으로 추청된다. 

다음의 북 챕터에서는 BLAST+를 이용하여 상동유전자 정보를 찾고, 이로부터 dN/dS 분석일 실시하는 방법을 친절하게 설명하였다. 사용된 Perl script(BLAST+ 결과물에서 RBB를 추출하는 스크립트 포함)는 제1저자인 Daniel Jeffares의 웹사이트에서 입수 가능하다고 해 놓았다.

A Beginners Guide to Estimating the Non-synonymous to Synonymous Rate Ratio of all Protein-Coding Genes in a Genome. Methods Mol Biol. 2015;1201:65-90. doi: 10.1007/978-1-4939-1438-8_4. PMID.

그러나 지금 이 사이트를 방문해보면 figshare에 Perl 스크립트 일부만이 남아있다. 그러나 Daniel은 이를 기반으로 하여 VESPA라는 파이프라인을 개발하여 2017년 PeerJ Comput. Sci.에 발표하였다(VESPA: Very large-scale Evolutionary and Selective Pressure Analyses. 저널 GitHub 매뉴얼). VESPA를 공부하려면 단순히 RBB를 찾으려는 목적이 아니라 더 큰 안목을 가지고 착수해야 할 것이다.

InParanoid를 사용해서 두 단백질 세트 사이에서 ortholog를 찾을 수도 있다. 그런데 Why InParanoid sucks라는 글(2014년도)을 보니 이제는 이 프로그램을 떠나야 하는 것이 아닐까하는 생각도 들기 시작하였다. 알고리즘적으로 특별히 문제가 되는 것은 아니지만 말이다. 어쩌면 blast_rbh.py 스크립트가 바로 내가 찾던 것이 아닌지 모르겠다. 이를 다운로드하여 실행해 보았다. duplicate가 있다는 경고는 나오지만 결과 파일에서 이들이 어느 것인지를 보여주지는 않는다. 상동유전자를 찾는 프로그램으로서 GET_HOMOLOGUES도 유용한 프로그램으로 여겨진다.


$ ls
A.faa  B.faa
$ python ~/script/blast_rbh.py -o example.tab -t blastp -a prot A.faa B.faa 

Done, 10 RBH found
Warning: Sequences with tied best hits found, you may have duplicates/clusters
$ ls
A.faa  B.faa  example.tab
$ head -n 1 example.tab 
#A_id B_id A_length B_length A_qcovhsp B_qcovhsp length pident bitscore

BLAST+ 분석 결과물에서 best hit(RBB는 아님)을 추출한 뒤 mcl로 클러스터링하는 명령행을 정리하여 보았다. 이는 서두에서 언급한 참고문헌에서 발췌한 것이다.

$ makeblastdb -in DB.fasta -dbtype prot -out DB
$ blastp -query example.fasta -db DB -outfmt '6 std qlen slen' -out output_tmp.list -evalue 1.03e-05
$ awk '{if($1!~/^#/ && $3>=50) print $1"\t"$2"\t"($3/100)}' output_tmp.list > hits.list
$ sort -nrk 3 hits.list | sort -k 1,2 -u > best_hit.list
$ mcl hits.list -I 1.8 --abc -o clusters.txt
$ awk '{if(NF>=2) print}' clusters.txt > clusters_after_threshold.txt

맨 아래의 awk 명령어는 singleton을 제거하기 위함이다.

마지막으로 대용량의 pan-genome 분석을 위한 새로운 프로그램을 하나 소개해 본다. 늘 Roary만 편식을 심하게 했었는데 이제는 다른 것에도 눈을 돌려볼 때이다.



2018년 10월 21일 일요일

독서 기록 - [디스럽션] 외 세 권

대출 기간이 임박하여 책 표지 사진을 찍은 뒤 곧바로 반납을 해 버려서 간단한 서지정보만 남긴다.


디스럽션

  • "사물인터넷 비즈니스의 모든 것"
  • 저자: 강시철
커넥슈머, 프라이버시 스왑...

모든 교육은 세뇌다

  • "4차 산업혁명 시대의 경쟁력, 몰입의 힘"
  • 호리에 다카후미 저|박흥규 감수|하진수 역
도서관에는 아직도 '4차 산업혁명 관련 도서' 서가가 따로 마련되어 있다. 과연 이 유행어가 내년까지 갈지 두고 보아야 되겠다.

다시 읽는 한국 현대사

  • "정치의 새로운 실천을 기대하며"
  • 양우진 저
근대사의 전 과정을 부정의 역사로 보는 진보 진영의 시각에 대한 보수주의자의 비판. 시각을 넓혀보자는 차원에서 고른 책이다.

열한 계단

  • "나를 흔들어 깨운 불편한 지식들"
  • 채사장 저(책 소개)
이 책을 읽기 전까지는 채사장(팟캐스트 지대넓얕 진행자, 블로그)을 전혀 몰랐다. 지대넓얕이란 '지적 대화를 위한 넓고 얕은 지식'을 뜻한다. 알쓸신잡보다 먼저 만들어진 낱말인가? 인문학 = 교양이 아니다. 인문학은 그 자체로서 의미가 있는 것이지 치장을 위하여 '소비'되는 것이 아닌데.. 물론 저자의 노력을 폄훼하고자 함은 아니다. 

한자 丁에는 '고무래'라는 뜻이 전혀 없다

丁 넷째 천간 정, 장정 정

단 두 획으로 이루어진 매우 간단한 모양의 한자이다. 장정이란 한 사람의 일꾼 몫을 하는 어른 남자를 뜻한다. 군대에 갈 연령, 즉 징집 연령에 달한 남자를 뜻하는 것이기도 하다.
이 한자는 한국 또는 중국인의 성씨에도 쓰인다. 우리 집안의 성이 바로 이 한자를 쓴다. 인구 비율로 훨씬 많은 鄭(나라 정, 나라 이름 정)과 구별하기 위해 흔히 丁자를 '고무래 정'이라고 부르기도 한다. 고무래는 곡식 낱알 등을 긁어모으는 농기구의 일종으로 이 글자와 모양이 똑같다.

출처: 국립중앙과학관

그러나 이 글자 자체에 고무래라는 뜻(훈, 訓)은 전혀 없다는 것이 나의 상식이었다. 과거에 분명히 한자사전에서 이러한 설명을 분명히 보았었다. 심지어 어떤 사람이 丁자를 '갈고리 정'이라고 부르는 바람에 아연실색을 한 적이 있었다. 남의 성씨를 마치 공포영화에 나옴직할 흉칙한 물건으로 칭하다니...

며칠 전에 컴퓨터를 만지작거리면서 그냥 호기심에 丁자의 의미를 검색해 보았다. 그런데 놀랍게도 '고무래'라는 뜻이 있는 것으로 나타나지 않는가?

먼저 네이버 한자사전. '고무래'라는 뜻이 맨 위에 있다.


다음 사전. 여기는 정확하게 풀이하였다. 매우 친절하게도 '※ 흔히 「고무래 정」이라 칭하는 것은 글자 모양에 따른 속칭임.'이라는 추가 설명을 달았다.


나무위키. 고무래를 맨 위에 올렸다.


이외에도 한자 학습을 위해 만들어진 많은 사이트에서 이 한자가 '고무래'를 뜻한다고 기록해 놓았다. 이는 잘못되어도 한참 잘못되었다. 마치 '입 구(口)'자의 모양이 네모를 닮았다고 하여 이를 '네모 구'라고 부르다가 인터넷 한자사전에 '네모'라는 뜻이 있다고 등재하는 것이나 다를 것이 없다. 실제로 口자를 네모라는 뜻으로 쓴 사례가 없으면 아무런 소용이 없는 것이다. 丁자 역시 마찬가지이다. 과거 혹은 현재의 문헌에서 이를 고무래라는 뜻으로 쓰지 않았다면 이런 훈이 있다고 붙여서는 안된다.

정말 내가 알고 있는 丁의 뜻이 맞는지 한자 사전을 찾아보고 싶었다. 그러나 요즘은 종이책으로 된 사전이 거의 나오지를 않고 집에도 국어사전과 영한사전 뿐이라서 직접 도서관에 가서 민중서림의 한자대사전(전면개정·증보판)을 찾아 보았다.


그 어디에도 고무래라는 뜻은 없다. 글자의 본래 모양은 '못'이지 '고무래'가 아니다. 그리고 여기에도 '고무래정으로 훈함은 잘못'이라고 하였다. 홍윤표 연세대 교수도 이 한자에 고무래라는 해석을 달았던 시대는 없었음을 분명히 하였다('사나이'의 어원).

사실에 기반한 것도 아니고 검증도 되지 않은 엉터리 지식이 인터넷을 떠돌면서 진짜 지식으로 이렇게 둔갑하는 것이다. '인터넷에서 보았다'라는 것은 그 지식 자체가 정확함을 입증하는 근거가 전혀 되지 못한다.

2018년 10월 18일 목요일

구글플러스 검색법

블로그로 작성한 글은 별도의 검색창이 있으니 찾는데 그렇게 큰 수고가 들지 않는다. 하지만 구글플러스에 내가 쓴 글을 찾는 방법을 아직도 잘 모르고 있었다. 연주회가 끝나고 기타연주자 박규희 씨와 찍은 사진을 구글플러스에서 찾느라 애를 먹은 적이 있었다.

구글을 로그아웃한 뒤 구글 검색창에 숫자로 된 내 아이디를 넣으면 내가 쓴 공개글이 다 보인다고 한다. 이외에도 몇가지 유용한 팁이 다음에 소개되어 있다.

https://plus.google.com/+googlekorea/posts/XND1ENoA3Mc

Whizz Xanadu 님이 쓴 글이다.

그런데 구글플러스 숫자 계정을 어떻게 확인해야 할까? 구글플러스 -> 프로필을 클릭하면 주소창 맨 끝에 숫자 계정이 잠깐 나왔다가 순식간에 '+영문이름'으로 바뀐다. 너무나 당연하고 간단하지만, 평소에는 일부러 찾아보지를 않으니 알 수가 없다.

또 검색을...

이렇게 짧은 글을 구글플러스가 아니라 블로그에 남기는 것은 나중에 쉽게 검색을 하기 위함이다. 아, 부끄럽다.

Plasmid Profiler 삽질기

100 건이 넘는 다제내성 Acinetobacter baumannii의 MiSeq read에 대해서는 잘 돌던 Plasmid Profiler가 40 건의 대장균 시퀀싱 결과물에 대해서는 에러를 토해내었다. 벌써 며칠째 제자리 걸음인지를 모르겠다. Plasmid Profiler를 제외하면 Galaxy를 쓰지 않으니 익숙하지 않은 시스템에서 출력하는 에러 메시지를 접해도 해결하기는 곤란할 것이라고만 짐작하였다.

파이프라인의 맨 끝까지 가서 png/html/csv 파일을 만들어내는 R 스크립트가 제대로 결과를 내지 못하는 것이 직접적인 이유였다. 이 스크립트는 사용자가 워크플로우를 실행하면서 입력하는 4 가지 파라미터 이외에 두 종류의 중간 결과 파일(BLAST TSV, SRST2 TSV)을 이용하게 된다. 에러 메시지를 직접 확인해 보았다. BLAST TSV 파일을 파싱하는데 서열 중간에 하이픈이 있다는 것이다. Plasmid Profiler가 기본적으로 제공하는 DB 파일은 플라스미드 서열 및 replicon + AMR(antimicrobial resistance) 서열 파일의 두 가지이다. 그런데 두번째 파일에서는 기본 제공된 AMR gene이 얼마 되지 않는다. 그래서 내가 ResFinder에서 항생제 내성 유전자 서열을 가져다가 기존 DB 파일 뒤에다가 추가를 한 뒤 사용을 했었다. 에러가 발생한 FASTA file의 라인 번호를 찾아가 보았다.


어라? '>'가 나오는 위치에서 줄바꿈을 하지 않은 것이었다. 이 라인은 줄을 바꾼 뒤 다음과 같이 시작하도록 고쳐야 한다.

>(AMR)mcr-1_1_KP347127

Acinetobacter baumannii의 시퀀싱 결과물을 분석할 때에는 이 AMR gene에 대한 hit가 없어서 에러가 발생하지 않았던 모양이다. 이 라인을 수정한 뒤 다시 프로그램을 실행하였다. 그런데 또 비슷한 종류의 에러가 발생하였다. 여기 말고도 줄바꿈 실수가 있었던 곳에 다섯 군데나 더 있었던 것이다. 분명히 Perl 스크립트를 짜서 DB 파일을 수정한 것으로 아는데 왜 중간의 몇 줄에서만 오류가 발생했는지 그 이유를 모르겠다.

DB 파일 전체를 대상으로 줄바꿈 오류를 전부 수정한 뒤 테스트 데이터셋을 투입하여 Plasmid Profiler를 돌려 보았다. 이제 제대로 된 heat map이 나오기 시작한다. 이 문제로 말미암아 약 삼일을 낭비하였다. 서열 분석에서 다루는 데이터 파일에 오류가 없는지를 가끔은 점검해 볼 필요가 있다는 단순하고도 심오한 진리를 깨달았다.

글을 끝마치기에 앞서서 Enterobacteriaceae family의 플라스미드 서열 데이터셋을 하나 소개한다. 구조화된 데이터가 아니므로 database가 아니라 dataset이라 하였다.

A curated dataset of complete Enterobacteriaceae plasmids compiled from the NCBI nucleotide database. Data in Brief 2017 PMC

학술용 data를 figshare에서 공유한다는 것이 특이해서 지난주에 내 블로그에도 글을 올렸었다(링크).

2018년 10월 16일 화요일

정류용 브리지 다이오드 주변에 0.01 uF 바이패스 캐패시터를 연결하는 이유

인터넷에서 프리앰프 회로를 뒤적거리다가 정류회로의 브리지 다이오드 주변에 4개의 0.01 uF 캐패시터를 연결한 것을 보게 되었다. 다음의 그림은 4S Universal Preamplifier for 12A?7 Valves에서 인용한 것이다. 이 전원회로는 Mark Houston이 작성한 것으로서 원래 Matt Renaud가 제안 간단한 프리앰프에 기초한 것이다(원본). Matt의 원본 회로에서는 정류관을 쓰고 있다.

그림 출처: diyaudioprojects.com

정류용 다이오드 주변에 소용량 캐패시터를 병렬로 배치한 것을 가끔 본 일이 있어서 그 이유가 궁금하였다. 해답은 Designing a Power Supply(Augustica Technologies)에서 찾았다.

그림 출처: Augustica Technologies.
정류용 실리콘 다이오드는 입력된 전압이 0.7 V를 넘어야 출력을 내기 시작한다. 따라서 교류가 입력되는 경우 0 V 근처에서 전혀 전류가 흐르지 않는 dead zone이 대칭적으로 생기게 된다. 유도성 소자인 트랜스포머는 이렇게 회로가 끊어진 것과 동등한 상태에서 유도 기전력을 발생한다. 트랜스포머 내부의 부유 용량(stray capacitance) 덕분에 유도 기전력이 너무 높아지지는 않지만, 이것이 발진을 일으킬 수도 있다. 0.01 uF 필름 캐패시터는 이를 바이패스시켜 제거하는 역할을 한다.

코일의 유도기전력은 전원이 차단될 때 더 심하다. 인덕터의 기초지식 가장 처음에 나오는 그림을 참고하라.

2018년 10월 12일 금요일

figshare에 데이터 파일을 올리고 공유하기

Elsevier의 학술지 Data in Brief에 소개된 어떤 유전체 서열 데이터셋의 파일을 받기 위해 URL을 확인하니 figshare였다. figshare는 (파워포인트) 문서 파일 정도를 올려서 공유하는 사이트가 아니었던가? 아, 그건 slideshare였던가? 그런지도 모르겠다.

웹사이트를 방문하니 Store, share, discover research라는 문구가 보였다. Elsevier와 협정을 맺고서 이 저널에 출판되는 논문에 부속되는 대용량 데이터에 한해서 업로드 및 공유가 가능한 것인지, 혹은 이 저널과 관계없이 누구나 회원 등록을 하면 데이터를 올릴 수 있는 것인지는 잘 모르겠다. 데이터 등록 요령 사이트를 방문해 보았다.

How to upload and publish my data

개인 공간에는 20 GB를, 공개하는 경우에는 용량에 제한이 없다고 한다. 한번에 올릴 수 있는 파일의 크기는 5 GB이다. 그러면 어떻게 수익을 창출하는지 매우 궁금하다. 혹시 이것 역시 공공 기관에서의 접속이 막혀있는 것은 아닌지 모르겠다. 구글 드라이브나 드롭박스가 그랬듯이 말이다. 백문이 불여일견이다. 회원 등록을 하고 웹 인터페이스에 논문 PDF 파일을 하나 드래그하여 넣었다. 나에게 저작권이 있는 것이 이나니 'Publish' 버튼을 클릭하지는 않았다.

잘 들어간다. 채워야 하는 메타데이터는 다음과 같다.


남들도 다 아는 것을 뒤늦게 발견한 것은 아닌지 모르겠다. 공공 목적이 큰 데이터라면 여기에 올리는 것도 좋을 것 같다는 생각이 들었다. 학술 목적이 아닌 것이면 또 어떠랴.

Publish or perish가 아니고 이제는 Share or perish의 시대가 되었는지도 모르겠다. 약간 냉소적으로 말한다면 공개는 곧 미덕이므로 '사생활도 없다'.

Awk를 이용한 간단한 텍스트 파일 조작

Awk는 개발자 세 사람 - Alfred Aho, Peter Weinberger 및 Brian Kerninghan - 이름의 머리글자를 따서 명명된 프로그래밍 언어이다. 이들은 전부 1940년대 초반에 출생하신 원로이다. 아마추어 무선을 하는 사람을 일컫는 ham (ham radio)역시 무선통신의 역사를 세운 세 사람의 이름인 Hertz, Armstrong, Marconi에서 왔다는 설도 있으나 이는 근거가 없다고 한다(Etymology of ham radio). 여담이지만 우리나라에서는 radio라 하면 공중파 방송을 듣는 라디오 수신기만을 생각하지만, 미국에서는 무선을 이용한 모든 활동을 뜻하는 것 같다. 무전기(휴대용 및 거치형 전부)를 two-way radio라고도 부른다고 하니 말이다.

우선 첫번째 AWK 사례를 설명해 보자. 왼쪽과 같이 의 조합으로 이루어진 단순한 텍스트 파일이 있다고 가정한다. 이를 오른쪽처럼 변환하려면 어떻게 하면 좋을까?


이때 awk의 associative array(예제 링크)가 쓰이게 된다. Associative array는 숫자가 아닌 것도 인덱스로 사용할 수 있는 배열을 의미한다. Perl에서 흔히 사용하는 hash와 매우 유사하다. 위에서 기술한 매우 간단한 과업을 수행하려면 다음의 명령어 한 줄이면 된다.
$ awk -F, '{a[$1] = a[$1] FS $2} END{for (i in a) print i a[i]}' file
-F,는 입력 파일의 field separator를 쉼표로 지정한다는 뜻이다. {}으로 둘러싼 AWK 명령어 내부에서는 FS가 같은 의미로 쓰였다.

다음으로는 약간 복잡한 응용 사례이다. Using Awk to join two files based on several columns를 참조하였다. 여러 컬럼으로 이루어진 두 개의 텍스트 파일 file_a.bed와 file_b.bed가 있다고 가정하자. 첫번째 파일의 컬럼 1-2와 두번째 파일의 컬럼 3-4가 동등한 종류의 내용을 담고 있다. 빨갛게 표시한 것은 값 자체가 같은 것이다. 컬럼을 구분하는 것은 공백이 아니고 탭문자이다.

$ cat file_a.bed
chr1 123 aa b c d
chr1 234 a b c d
chr1 345 aa b c d
chr1 456 a b c d
$ cat file_b.bed 
xxxx abcd chr1 123 aa c d e
yyyy defg chr1 345 aa e f g

이때 다음과 같이 두번째 파일에서 동일한 라인에 해당되는 결과를 끌어다가 첫번째 파일의 해당되는 라인에 출력하는 것이 목적이라고 하자. 아래 그림에서는 파랑색으로 표시하였다.

chr1 123 aa b c xxxx abcd
chr1 234 a b c
chr1 345 aa b c yyyy defg
chr1 456 a b c

다음과 같이 awk 명령어를 작성하면 된다.

$ awk 'NR==FNR{a[$3,$4,$5]=$1OFS$2;next}{$6=a[$1,$2,$3];print}' OFS='\t' file_b.bed file_a.bed

먼저 awk의 내장 변수에 대해서 이해를 넓힐 필요가 있다. NR는 현재 처리 중인 라인 번호를 의미한다. Awk가 여러 파일을 처리하는 경우 NR은 전체 파일에 대한 라인 번호를, FNR은 각 입력 파일에 대한 라인 번호를 의미한다. 다음을 실행해보면 감이 잡힐 것이다.

$ awk '{print FILENAME, NR, FNR}' file_a.bed file_b.bed
file_a.bed 1 1
file_a.bed 2 2
file_a.bed 3 3
file_a.bed 4 4
file_b.bed 5 1
file_b.bed 6 2

NR==FNR{}은 첫번째 인수로 주어진 파일(file_b.bed)에 대해서 {} 내의 명령을 실행하라는 뜻이다. next는 그 다음에 따라오는 {} 명령어 블록을 실행하지 말라는 뜻이다. 이것은 약간 어려운 개념이다. 그림으로 설명을 해 보겠다. 부디 내가 이해한 것이 옳기를 바란다.

numbers라는 파일은 각 라인에 1..10까지의 숫자를 수록하고 있다. 각 라인의 수와 홀수 또는 짝수줄 여부를 화면으로 프린트하려면 어떻게 하는지를 다음의 그림에 설명하였다. next가 왜 중요한지를 잘 보여준다.


그러면 다시 원래의 awk 문으로 돌아가자. 두번째 인수로 주어진 file_a.bed에 대해서는 NR==FNR이 FALSE가 된다. 따라서 두번째 {} 내부의 명령어를 수행하게 된다. 즉 file_a.bed를 읽어서 마지막 필드($6)를 associative array의 값으로 바꾸어서 프린트하게 된다.

어쩌면 if..else를 쓰는 것이 좀 더 명확할지도 모르겠다.

$ awk '{if(NR==FNR){a[$3,$4,$5]=$1OFS$2}else{$6=a[$1,$2,$3];print}}' OFS='\t' file_b.bed file_a.bed

첫번째 주어진 답을 다르게 표현하면 이렇게 된다. 오히려 이것도 이해하기 쉬운 해결책이다.

$ awk 'NR==FNR{a[$3,$4,$5]=$1OFS$2}NR!=FNR{$6=a[$1,$2,$3];print}' OFS='\t' file_b.bed file_a.bed

awk에서 다음을 잘 구별하는 노력이 필요하다.
  • 조건{...} {...} <= 조심해서 써야 한다!
  • 조건1{...} 조건2{...}
  • if문을 사용하는 것

2018년 10월 9일 화요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [7] 최종 마무리

얼핏 보아서는 어제 찍어서 올린 사진과 별로 다르지 않다.


전원 트랜스와 정류회로 사이를 배선을 납땜으로 처리하였다. 오늘 아침까지는 악어클립 케이블이었다. 그리고 스피커 연결을 위한 바인딩 포스트를 아예 출력 트랜스 받침대에 고정해 버렸다. 출력 트랜스를 다른 앰프에도 연결하여 사용하기 쉽게 만들기 위한 사전 포석이다. 어수선한 배선들도 케이블 타이로 조여서 정리하였다. 전선을 깔끔하게 잘라내지 못하고 길게 유지하는 좋지 못한 버릇이 있다. 그러나 이렇게 프로토타입 형태로 만든 상황에서는 나무판에 고정한 부품을 잠시 떼어서 손을 볼 때 배선이 너무 짧으면 불편하다.


https://www.vivatubes.com/ 에서는 Super Silvertone을 포함한 브랜드의 43번 중고 5극관을 판매한다. 이베이 등에서도 이따금 눈에 뜨인다. 43번 오극관은 40번대 두자릿수 출력관 중에서 그렇게 고급 취급을 받지는 못하는 것 같다.

2018년 10월 8일 월요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [6] 전원 스위치 장착

43번 오극관 싱글 앰프는 계속 변화의 길을 걷고 있다. 이번에는 전원 스위치를 달았다. 각재로 만든 R-core 출력 트랜스 받침대도 미처 설명을 하지 않았지만 개조를 하여 바닥 면적을 좁혔다. 이 시리즈물의 다섯번째 글(링크)의 사진을 보면 트랜스 받침대에 하얀 신발끈을 묶어 놓은 것이 보일 것이다. 톱질을 하여 길이를 줄인 뒤 목공용 접착제를 발라서 고정해 놓은 것이다.

아래의 사진은 어제까지의 작업 결과물이다. 약간 다른 각도에서 두 장의 사진을 촬영하였다.



왼쪽 끝의 전원 스위치 고정대는 'ㄱ'자형 알루미늄 판에 1t 포맥스판을 순간접착제로 붙인 것이다. 알루미늄판에 실톱으로 가공을 하다가 구멍을 너무 크게 뚫어버리는 바람에 이렇게 된 것이다. 포맥스는 가공성이 매우 좋으며 그 위에 글씨를 쓰거나 도색을 하기에 아주 좋지만 아무 처리를 하지 않으면 때가 잘 탄다.

램프형 파워 스위치(정식 명칭은 SPST illuminated rocker switch; SPST = single-pole, single-throw = 단극단투 스위치)를 달다가 실수를 하였다. 전원이 들어올 때 불이 켜지게 하려는 것이 원래 의도였으나 배선을 잘못하여 항상 불이 켜지는 것이 아닌가. 이에 대해서는 예전에 글을 작성해 둔 적이 있다(램프형 스위치의 올바른 결선법).


그런데 제품에 따라서는 핀 번호가 다르다. 다음을 보라. 위의 그림과 달리 가운데의 공통핀이 1번이다.

출처: https://www.fasett.info/spst-illuminated-rocker-switch-wiring-diagram/unusual-lastest-collection-lighted-rocker-switch-wiring-diagram/
따라서 배선을 하기 전에 꼭 확인을 하는 것이 현명하다.

아직 납땜을 하지 않고 악어클립으로 물어 놓은 곳이 있다. 두 개의 전원 트랜스 사이, 그리고 두번째 전원트랜스와 정류회로 사이이다. 첫번째 트랜스에서 나오는 13 V를 두번째 트랜스의 12 - 15 - 18 V에 취향껏 연결함으로써 B+ 전압을 선택하는 효과를 누릴 수 있기에 아직 어느 하나의 탭에 붙이지를 않은 것이다.

저전압(그래도 100 볼트를 넘는다)에서 작동하는 진공관 앰프가 매력이 있다!


FM 수신용 안테나 보수하기

발코니 난간에 현 상태로 FM 수신용 안테나가 설치된 것은 지금으로부터 꼭 3년 전이었다.

옥외용 FM 안테나 재설치(2015.9.6.)
FM 안테나 설치 상태 변경(2015.9.20.)

붐대(커튼용 봉을 자른 것)와 안테나를 고정하는데 케이블 타이를 몇 군데 사용하였었다. 이것이 햇볕에 장기간 노출되면서 하나씩 끊어지기 시작하였고, 급기야 안테나가 한쪽으로 기울었다. 다른 곳을 노끈으로 묶어 놓았기에 안테나가 추락할 염려는 없지만 보수 작업이 필요한 상태이다. 무엇보다도 케이블 타이를 대체할 다른 고정 장치가 필요하다. 그래서 택한 것은 바로 다음의 물건이다.


붐대와 안테나 암(arm; 도파기와 방사기 엘리먼트를 고정하는 중앙의 짧고 두꺼운 봉)이 이 부속에 의해서 전기적으로 접촉 상태에 있다는 것이 안테나의 성능에 영향을 미치게 될지는 잘 모르겠다. 안테나 엘리먼트가 발코니 난간 등 다른 금속성 물체에 닿지 않게 하나는 것은 안테나 설치의 상식이다. 이번 경우는 엘리먼트 자체가 아니므로 상관이 없지 않을까? 다른 기성품 안테나의 사진을 찾아보면 내가 사용한 부품에 해당하는 것에서 절연처리를 한 것은 보이지 않는다. 원래 이 물건은 대형 모니터 고정용 부속인데 엉뚱한 곳에서 최종 용처를 찾았다.

10월 초순의 햇살은 여전히 강렬하여 땀을 뻘뻘 흘리면서 설치 작업을 하였다. 아래 사진에서 붐대와 화분 설치대를 묶은 것은 운동화 끈이다. 합성수지로 만들어진 끈(케이블타이 포함)은 이러한 조건에서 사용하기에 적당하지 않다는 것을 알았기 때문이다. 물론 힘을 많이 받지 않는 곳에는 사용해도 괜찮다.

이 안테나는 우리집 기준으로 서쪽에 위치한 계룡산 송신소를 향하고 있다. 남쪽으로는 식장산 송신소가 위치한다. KBS Classic FM 청주(식장산)과 대전(계룡산) 방송을 전부 들을 수는 있는데 MBC FM(식장산)에 비하면 방송 수신의 질이 나쁘다.

새로 만든 진공관 앰프와 보수를 마친 안테나가 FM 방송 청취의 즐거움을 더한다.

2018년 10월 7일 일요일

43번 오극관(43 power pentode) 싱글 앰프 프로젝트 - [5] 발열과 험 문제 개선

나무판 위에 부품을 얼기설기 늘어놓아 만든 앰프는 계속 손길을 필요로한다. 케이스 안에 넣어버리면 귀찮다는 이유로 사소한 문제를 방치하고 싶을 것이다. 사실은 결코 사소한 문제가 아닐 수도 있다.

이번에 만든 43번 5극관은 꽤 좋은 소리를 내고 있다. 하지만 아직 완성의 단계는 아니다. 첫번째 문제는 히터 공급용 배전압 정류장치의 전류제한 저항에서 너무 열이 많이 난다는 것이다(아래에 보인 회로도에서 빨강 타원으로 둘러친 것). 5와트의 정격을 넘는 수준은 결코 아니나, 저항과 닿은 코팅 합판의 표면이 까맣게 탈 정도라면 방열 대책을 세워야 한다. 이 저항에 다이오드를 연결하는 리드선 역시 매우 뜨겁다. 저항에서 나는 열이 리드선을 타고 다이오드까지 가는 것 같았다.


재활용 부품을 이용하여 저항에 방열판을 달아주기로 하였다. PC용 파워서플라이에서 뜯어낸 방열판과 못쓰는 그래픽 카드의 마더보드 고정용 부속을 이용하였다. 직접 연결된 저항과 다이오드 사이를 끊은 다음 두꺼운 선재를 사이에 넣어서 연결하였다. 저항에서 발생한 열이 리드선을 타고 가지 말라는 의도였다. 시멘트 저항과 방열판 사이에 방열 시트를 삽입하여 잘 밀착하게 만든 다음 사무용 악어클립으로 고정하였다.



살다보니 저항에 방열판을 다는 일이 다 생긴다. 작동을 시키면서 발열 정도를 체크해 보았다. 방열판이 손을 댈 수는 있을 정도로 뜨거워진다. 방열 처리를 하기 전에는 거의 100도에 육박했을 것이다. 그런데 이렇게 한 이후에도 다이오드는 여전히 전과 같은 정도로 뜨겁다. 그렇다! 다이오드가 뜨거워진 것은 저항과 연결한 리드선을 타고 열이 전달되는 것이 아니라 다이오드 자체의 발열이었던 것이다. 1N400x 다이오드의 최대 작동 온도는 150도 가량이다. 이를 위협할 정도로 열이 나지는 않겠지만 신경을 늘 쓰는 것이 좋을 것이다.

다음은 험(hum)을 잡는 문제이다. 트랜스를 차폐하고, 회로를 금속제 섀시에 꽁꽁 가두고, 접지를 하고... 이런 대책들이 보통 요구된다. 나무판 위에 부품을 그대로 노출시켜서 만들면 온갖 잡음이 유입된다는 의견을 모르는바 아니지만, 합리적으로 잘 만들어진 앰프라면 충분히 극복 가능하다고 생각한다.

현재의 상태에서는 분명히 험이 들린다. 이는 볼륨 폿(프리앰프에서 조절)의 위치와는 무관하고, B 전압을 낮추면 줄어든다. 이를 어떻게 잡아야 하나? 해결책은 전원부에 RC 필터를 하나 더 추가하는 것이었다. 다음 회로도에서 빨강 점선 박스로 둘러싼 부분을 삽입하여 험을 사실상 제거하였다. 처음 설계할 때에는 이 필터를 사용하지 않았었다.

데이터시트에 의하면 플레이트와 스크린 그리드에는 같은 전압을 걸어도 된다고 하였다(95 V 혹은 135 V). 현재의 작동 전압은 110 V 수준(바이어스 전압 포함)이다. 따라서 100R과 470R 사이에서 OPT 및 스크린 그리드로 직접 연결하거나, 혹은 470R-47uF 필터를 제거해도 문제가 없어야 한다. 하지만 이렇게 회로를 바꾸면 스피커에서 험이 들린다. 왜 그런지는 알 수 없다(2018년 10월 16일 추가).

위의 그림에서 'Rectifier & filter'라고 표현된 파랑 상자는 PC의 파워서플라이 기판에서 잘래낸 것을 활용함을 의미한다. 이 회로의 출력부에 대용량의 전해 캐패시터가 이미 존재하므로 추가적인 캐패시터는 없어도 될 것이라고 생각했었다. 하지만 PC 파워서플라이에서는 입력 전압을 정류하여 반분한다. 다음 그림을 보면 빨강 원으로 표시한 곳에서 전선을 뽑아내어 진공관 B 전압용으로 쓰는 셈이다. 대용량의 캐패시터가 두 개 있지만 이들 각각은 출력 전압을 반분하는 곳에 걸쳐있다. 빨강색에 해당하는 곳을 직접 가로지르는 캐패시터는 없는 셈이다. 내가 삽입한 47 uF 캐패시터(100R 저항과 함께)가 정류후 남은 리플을 제거하는 효과가 있다고 생각하기로 했다. 대부분의 진공관 앰프용 전원회로가 이러한 형식을 따르고 있음을 물론이다.

그림 출처: https://www.pocketmagic.net/wp-content/uploads/2012/05/simple_smps_5.png

내가 만드는 진공관 앰프는 모두 이렇게 초크 코일이 없는 구조를 하고 있다. 그러나 음질에 특별한 문제가 느껴지지 않는다.

여기에 보인 RC 필터가 잡음 제거에 결정적인 역할을 하였다.



어제까지 끝낸 작업의 결과물이다. 오른쪽에 보이는 프리앰프도 나무판 위에 고정하였고, 남는 외가닥 인터케이블(노랑색 RCA 커넥터를 보라)을 잘라서 프리앰프를 연결하였다. 스피커를 연결하는 바인딩 포스트의 고정 방법도 바꾸었다.

하루 종일 소스를 연결하여 음질과 발열 상태 등을 점검하고 있다. 내 막귀로는 충분히 듣기 좋은 소리가 난다. 솔직히 말해서 다른 앰프와 무엇이 다른지를 잘 모르겠다. 6N1+6P1 싱글 앰프에 비하면 조금 더 부드러운 것 같기도 하다.

남은 일은 전원 스위치를 다는 일 정도이다. 이 앰프는 앞으로도 계속 실험의 대상이 될 것이므로 당분간은 섀시에 넣지는 않을 것이다. 순전히 호기심으로 시작된 프로젝트였지만 지금 생각해보니 뛰어들지 않았더라면 정말 후회했을 것이다.