KOBIC에서 주최하는 제10회 차세대 생명정보학 교육 워크샵에서 이틀째 날을 보내고 있다. 어제의 리눅스 기초에 이어서 오늘은 파이썬 프로그래밍이다. Perl로 굳어진 사고 체계에 파이썬을 끼워 넣는 것은 쉽지 않다. 내장 함수를 써야 하나, 메쏘드를 써야 하나? 변수명 앞에 $ 혹은 @가 붙지 않으니 이것이 예약어인지 타당한 변수명인지 알 수가 없다.
Mutable sequence를 다루고 조작하는 방법은 매우 인상적이다. 원래 파이썬에 관심을 갖게 된 것은 남들이 만들어 둔 스크립트를 이용할 때 설정 등의 문제로 에러가 난 것을 다루기 위한 가벼운 마음으로 시작한 것인데, Perl로는 하기 어려운(사실 불가능한 것이 있으리라고는 생각하지 않지만) 작업을 능률적으로 하는데 도움을 줄 것으로 보인다. 어쩌면 파이썬과 Perl을 비교하면서 Perl에 대한 사랑이 더 깊어질지도^^
인실리코젠의 김형용씨가 강의와 실습을 진행하느라 하루 종일 수고를 하고 있다.
2012년 7월 31일 화요일
2012년 7월 12일 목요일
[Perl programming #1] my()를 이용한 변수 선언
[들어가는 글]
펄(Perl)을 업무에 활용한지도 꼭 12년째가 되어 간다. 내가 펄을 처음으로 공부하면서 접한 교재는 인터넷에서 찾아서 인쇄한 Russell Quong의 "Perl in 20 pages" version 2000c와 "Robert's Perl Tutorial Version 4.1.1"이다. 이 문서들이 아직도 인터넷 공간에 살아 있는지는 모르겠다. Univ. of Washington의 Phred/Phrap/Consed에 포함되어있는 스크립트가 조금씩 펄 스크립트 작성 실력을 키우면서 정말 큰 도움이 되었던 재료들이었다. 이제는 [펄 쿡북]을 참조하면서 필요한 부분은 그때마다 참조하고 있지만, 알고리즘이나 데이터 구조에 대한 깊이 있는 지식 없이 그저 필요한 기능만 구현하는데 집중하다 보니 항상 아쉬움이 많았다. 이러한 아쉬움을 달래고자, 조금 더 진지하게 펄을 공부해 보기로 하였다. 지금부터 내가 추구하는 것은 깔끔하고, 문법적으로 정확하며, 읽기 쉽고, 재사용이 가능한 펄 코드를 짜는 것이다.
[변수 초기화]
나에게는 아주 나쁜 버릇이 있다. 변수를 선언하는데 매우 불성실하다는 것이다. use strict나 my()라고 몇 자 더 치는 것을 게을리하여 오류가 난 코드를 고치는데 무척 애를 먹기도 한다. 변수명을 잘못 기입하면 오류의 원인을 찾기가 매우 어렵다.
#!/usr/bin/perl
use strict;
use warnings;
이렇게 스크립트를 시작하는 것과,
#!/usr/bin/perl -w
use strict;
이렇게 쓰는 것은 본질적으로 같(을 것이)다.
use strict 디렉티브를 사용하면, 모든 변수는 my()를 써서 선언해야 한다. 변수의 선언과 초기화는 다르다. 괄호를 언제 써야 하는가? 다음의 사례를 보라.
my $foo; # 이것은 선언만 하는 것
my $foo = 123; # 선언과 초기화를 동시에
my ($foo, $bar); # 여러 변수를 한번에 선언
초기화하지 않은 변수가 갖는 값은 undef이다. 그러나 이는 $var eq undef 처럼 비교할 수 있는 것이 아니다. 그리고 undef는 엄연히 말하자면 null character 혹은 숫자로서의 0과는 다르다.
변수의 선언과 초기화가 다르다는 것을 다음의 스크립트에서 확인해 보자.
#!/usr/bin/perl
use strict;
use warnings;
my $foo;
if (defined $foo) {
print 'Var $foo is defined!', "\n";
} else {
print 'Var $foo is not defined!', "\n";
}
펄(Perl)을 업무에 활용한지도 꼭 12년째가 되어 간다. 내가 펄을 처음으로 공부하면서 접한 교재는 인터넷에서 찾아서 인쇄한 Russell Quong의 "Perl in 20 pages" version 2000c와 "Robert's Perl Tutorial Version 4.1.1"이다. 이 문서들이 아직도 인터넷 공간에 살아 있는지는 모르겠다. Univ. of Washington의 Phred/Phrap/Consed에 포함되어있는 스크립트가 조금씩 펄 스크립트 작성 실력을 키우면서 정말 큰 도움이 되었던 재료들이었다. 이제는 [펄 쿡북]을 참조하면서 필요한 부분은 그때마다 참조하고 있지만, 알고리즘이나 데이터 구조에 대한 깊이 있는 지식 없이 그저 필요한 기능만 구현하는데 집중하다 보니 항상 아쉬움이 많았다. 이러한 아쉬움을 달래고자, 조금 더 진지하게 펄을 공부해 보기로 하였다. 지금부터 내가 추구하는 것은 깔끔하고, 문법적으로 정확하며, 읽기 쉽고, 재사용이 가능한 펄 코드를 짜는 것이다.
[변수 초기화]
나에게는 아주 나쁜 버릇이 있다. 변수를 선언하는데 매우 불성실하다는 것이다. use strict나 my()라고 몇 자 더 치는 것을 게을리하여 오류가 난 코드를 고치는데 무척 애를 먹기도 한다. 변수명을 잘못 기입하면 오류의 원인을 찾기가 매우 어렵다.
#!/usr/bin/perl
use strict;
use warnings;
이렇게 스크립트를 시작하는 것과,
#!/usr/bin/perl -w
use strict;
이렇게 쓰는 것은 본질적으로 같(을 것이)다.
use strict 디렉티브를 사용하면, 모든 변수는 my()를 써서 선언해야 한다. 변수의 선언과 초기화는 다르다. 괄호를 언제 써야 하는가? 다음의 사례를 보라.
my $foo; # 이것은 선언만 하는 것
my $foo = 123; # 선언과 초기화를 동시에
my ($foo, $bar); # 여러 변수를 한번에 선언
초기화하지 않은 변수가 갖는 값은 undef이다. 그러나 이는 $var eq undef 처럼 비교할 수 있는 것이 아니다. 그리고 undef는 엄연히 말하자면 null character 혹은 숫자로서의 0과는 다르다.
변수의 선언과 초기화가 다르다는 것을 다음의 스크립트에서 확인해 보자.
#!/usr/bin/perl
use strict;
use warnings;
my $foo;
if (defined $foo) {
print 'Var $foo is defined!', "\n";
} else {
print 'Var $foo is not defined!', "\n";
}
상세한 설명은 Perl 공식 문서의 Private Variables via my () 섹션을 참조하자. 참고로 이 마지막 문장은 이 글을 쓴지 10년이 지난 2022년 3월 13일에 추가하였다.
2012년 7월 9일 월요일
Consed 23.0와 DISPLAY 문제
3개월만의 포스팅이다. 주로 네이버 블로그(http://jeong_0449.blog.me/)에 글을 올리고 있고, 최근에는 genoglobe.com 및 genoglobe.net이라는 도메인을 구입하여 여기에도 글을 쓰고 있으니 당연히 구글 블로거는 소홀해질 수 밖에...
올해에는 consed version 22.0과 23.0이 근소한 시간차를 두고 발표되었다. 대부분의 성능 개선은 version 22.0에서 이루어졌고, 사소한 bug의 수정과 BamView의 성능 개선이 있었다고 한다. 22.0부터는 installConsed.perl이라는 친절한 설치 스크립트까지 포함되었다. mktrace, phd2fasta 및 454 데이터 관련 바이너리를 알아서 컴파일하여 설치해 주는 것으로 보인다. Consed의 home은 여전히 /usr/local/genome이다.
만약 consed_linux64bit를 실행시키는데 libstdc++.so.5가 없다는 에러 메시지가 나오면, compat-libstdc++-33 패키지를 설치하면 된다.
consed 22.0 or later와는 직접 관계가 있는 일인지 혹은 아닌지 잘 모르겠지만, CentOS 6.2가 설치된 컴퓨터에 consed를 깔고 이를 다른 컴퓨터에서 접속하여 실행하려고 하면 꼭 다음과 같은 에러가 난다. 다른 리눅스 서버에서 ssh -X로 접속하든, 혹은 윈도우 컴퓨터에서 Xmanager로 접속하든 같은 문제가 발생한다.
CentOS 5.x이나 우분투에서는 절대로 아무런 문제 없이 실행이 된다.
[hyjeong@proton edit_dir]$ consed
no ~/consedrc file so no user resources will be used--that's ok
no consedrc file so no project-specific resources--that's ok
couldn't open readOrder.txt--that's ok
_X11TransSocketINETConnect() can't get address for localhost:6015: Name or service not known
Error: Can't open display: localhost:15.0
올해에는 consed version 22.0과 23.0이 근소한 시간차를 두고 발표되었다. 대부분의 성능 개선은 version 22.0에서 이루어졌고, 사소한 bug의 수정과 BamView의 성능 개선이 있었다고 한다. 22.0부터는 installConsed.perl이라는 친절한 설치 스크립트까지 포함되었다. mktrace, phd2fasta 및 454 데이터 관련 바이너리를 알아서 컴파일하여 설치해 주는 것으로 보인다. Consed의 home은 여전히 /usr/local/genome이다.
만약 consed_linux64bit를 실행시키는데 libstdc++.so.5가 없다는 에러 메시지가 나오면, compat-libstdc++-33 패키지를 설치하면 된다.
consed 22.0 or later와는 직접 관계가 있는 일인지 혹은 아닌지 잘 모르겠지만, CentOS 6.2가 설치된 컴퓨터에 consed를 깔고 이를 다른 컴퓨터에서 접속하여 실행하려고 하면 꼭 다음과 같은 에러가 난다. 다른 리눅스 서버에서 ssh -X로 접속하든, 혹은 윈도우 컴퓨터에서 Xmanager로 접속하든 같은 문제가 발생한다.
CentOS 5.x이나 우분투에서는 절대로 아무런 문제 없이 실행이 된다.
[hyjeong@proton edit_dir]$ consed
no ~/consedrc file so no user resources will be used--that's ok
no consedrc file so no project-specific resources--that's ok
couldn't open readOrder.txt--that's ok
_X11TransSocketINETConnect() can't get address for localhost:6015: Name or service not known
Error: Can't open display: localhost:15.0
처음에는 이것이 Xmanager의 문제인줄 알고 넷사랑 컴퓨터에 질문을 하기도 했었다. 오늘에서야 부분적인 답을 알게 되었다.
export DISPLAY=127.0.0.1:15.0
이렇게 한 다음에 consed를 실행하면 된다. consed가 설치된 컴퓨터에서 localhost의 위치를 찾지 못해서 생기는 문제라고 하는데, 왜 이런 문제가 발생하는지는 도무지 알 길이 없다. 게다가 이래가지고는 consed를 한번 실행해서 접속시마다 바뀌는 스크린 번호를 에러 메시지와 함께 알기 전에는 DISPLAY 변수를 설정하지 못한다.
/etc/hosts내에서 localhost가 잘못 정의된 것일까? CentOS 6.2를 설치한 직후의 상태는 다음과 같고, 다른 host를 추가한 것 이외에는 건드린 것이 없다.
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
어쩌면 consed 프로그램이 /etc/hosts 파일을 제대로 파악하지 못하는지도 모른다는 생각이 들었다. /etc/hosts를 다음과 같이 심플하게 변경해 보았다.
127.0.0.1 localhost
그랬더니... 잘 되네? 서버 컴퓨터의 OS를 CentOS 6.2로 업그레이드한 뒤 몇달간 골머리를 앓게 했던 문제를 이렇게 허무하게 해결하다니...
2012년 4월 6일 금요일
CentOS - LVM 설정
LVM 설정을 처음으로 시도해 본다. 기존의 하드 디스크 드라이브에 있는 정보를 지우지 않고도 LVM 설정이 되는지가 가장 궁금하다. 안전을 위해 2개의 HDD(각 1 TB)에 수록된 파일을 새로 장착한 2 TB HDD에 복사해 놓은 다음, 1 TB HDD 2개를 묶어 보도록 하겠다.
http://www.howtoforge.com/linux_lvm
http://www.centos.org/docs/5/html/5.2/pdf/Deployment_Guide.pdf

여기서 Initialize Entity를 누르면 아마도 fdisk를 거쳐서 Linux LVM을 시스템 ID로 하는 파티션을 만들게 될 것이다.
데이터를 복사하느라 오늘 중에는 LVM 설정을 하기 힘들겠다.... 오늘은 일단 퇴근!
(왜 인터넷 익스플로러에서 그림을 삽입하니까 줄간격이 막 벌어지고 그림이 원하는 곳으로 가지 않는 등 난리를 피우는가? 결국 파이어폭스에서 글을 마무리하고 말았다!)
physical volume과 volume group, 그리고 logical volume에 대한 올바른 이해가 필요하다. physical volume이란 우리가 잘 알고 있는 /dev/sda1, /dev/sdb2와 같은 실제적인 하드디스크 파티션을 의미한다. 처음에는 잘 이해를 하지 못했었는데, 가이드를 여러번 째려보니(?) 이제 슬슬 이해가 가려고 한다.
LVM 설정을 위한 초보자 가이드를 보면 fdisk를 해서 파티션의 시스템 ID를 Linux(83)에서 Linux LVM(8e)로 바꾸어야 하는 것으로 나온다. 그렇다면 당연히 데이터는 날아갈 것으로 보이는데... 참고할만한 사이트 두어 개를 소개해 본다.
http://www.howtoforge.com/linux_lvm
http://www.centos.org/docs/5/html/5.2/pdf/Deployment_Guide.pdf
이와 같이 CLI를 이용할 수도 있고, 아니면 GUI 도구인 system-config-lvm을 쓸 수도 있다. 백업을 위해 열심히 복사를 하는 도중에 한번 system-config-lvm을 실행하여 보았다.

여기서 Initialize Entity를 누르면 아마도 fdisk를 거쳐서 Linux LVM을 시스템 ID로 하는 파티션을 만들게 될 것이다.
데이터를 복사하느라 오늘 중에는 LVM 설정을 하기 힘들겠다.... 오늘은 일단 퇴근!
(왜 인터넷 익스플로러에서 그림을 삽입하니까 줄간격이 막 벌어지고 그림이 원하는 곳으로 가지 않는 등 난리를 피우는가? 결국 파이어폭스에서 글을 마무리하고 말았다!)
2012년 3월 28일 수요일
2년만에 글을 올리다
대부분의 블로그 활동은 네이버에서 하고 있으므로, 구글 블로그는 상대적으로 소홀이 취급하고 있다. 그러나 사용자가 많은 반면 네이버에서 검색하여 얻어지는 정보의 질은 지나치게 상업적이고 폐쇄적이라는 생각이 들고 있다. 나도 별로 좋아하지 않는 조선일보지만, 최근 네이버의 오픈 마켓 진출을 둘러싼 시의적절한 기사를 읽고 크게 공감하게 되었다.
비정한 포식자가 되어버린 국내 인터넷 포탈
네이버 블로그에서의 활동을 점차 줄이고 구글로 옮기는 것을 심각하게 고려하는 중이다.
비정한 포식자가 되어버린 국내 인터넷 포탈
네이버 블로그에서의 활동을 점차 줄이고 구글로 옮기는 것을 심각하게 고려하는 중이다.
2010년 10월 6일 수요일
[HMA] 01. Haeyoung's microarray analysis - 시작하는 글
먼저 [HMA](Haeyoung's Microarray Analysis)로 시작하는 글들은 웹을 통해 마이크로어레이 데이터 분석 방법을 소개하는 목적으로 쓴 글이 아님을 분명히 밝혀 둔다. 1998-1999년에 cDNA microarrayer와 scanner를 직접 만들어보고자 노력을 한 일이 있었으나, 실제 나만의 microarray data를 얻은 것은 작년이 처음이었다. 스탠포드대의 패트릭 브라운에 의해 이 개념이 도입되어 널리 퍼진지도 벌써 15년 가까운 세월이 흘렀다. 나는 그 사이에 오로지 미생물 genome sequencing/analysis에만 매달려 있었고, microarray 실험이 돌아가는 것을 옆에서 보기만 하였지 직접 내 손으로 해 본 일은 없었다.
이제 세월이 많이 흘러서 더 이상 컴퓨터를 이용한 기능 예측에만 머물 수는 없게 되었다. 그동안 애써 외면하고(?) 있었던 마이크로어레이 실험과 분석에 대한 경험을 직접 쌓아야 될 필요성을 절실히 느끼게 되어, 이제 나름대로 공부를 시작하면서 관련 정보들을 기록하기 위해 이 글을 시작하게 된 것이다. 나 자신도 이제 시작하는 입장일진대, 감히 다른 입문자를 위한 길잡이 노릇을 할 생각은 언감생심이로다.
자, 그러니 혹시 마이크로어레이 데이터 분석에 대한 기초를 공부하고자 웹 검색을 통해서 이 블로그를 들어오신 분은 실망하셔도 어쩔 수 없다. 그런 개인적인 목적으로 작성한 글이라면 뭐하러 웹에 공개하느냐고 물으신다면... 사무실이든 집이든 편하게 글을 작성하기 위해서 그렇게 결정했다고 어줍잖은 변명을 늘어놓으련다.
나에게 있는 것은 무엇인가? Perl에 대한 지식, 몇 편의 논문과 단행본, 그리고 몇 장의 GenePix 4000B 데이터들이다. 기본적으로 R을 이용한 데이터 분석을 시도해 볼 것이다. 필요하다면 TM4 software suite의 MultiExperiment Viewer나 CLC Genomics Workbench(상용)도 시도해 볼 것이다. 그러나 기본을 이해하는 데에는 R이 좋은 환경인것 같다.
이제 세월이 많이 흘러서 더 이상 컴퓨터를 이용한 기능 예측에만 머물 수는 없게 되었다. 그동안 애써 외면하고(?) 있었던 마이크로어레이 실험과 분석에 대한 경험을 직접 쌓아야 될 필요성을 절실히 느끼게 되어, 이제 나름대로 공부를 시작하면서 관련 정보들을 기록하기 위해 이 글을 시작하게 된 것이다. 나 자신도 이제 시작하는 입장일진대, 감히 다른 입문자를 위한 길잡이 노릇을 할 생각은 언감생심이로다.
자, 그러니 혹시 마이크로어레이 데이터 분석에 대한 기초를 공부하고자 웹 검색을 통해서 이 블로그를 들어오신 분은 실망하셔도 어쩔 수 없다. 그런 개인적인 목적으로 작성한 글이라면 뭐하러 웹에 공개하느냐고 물으신다면... 사무실이든 집이든 편하게 글을 작성하기 위해서 그렇게 결정했다고 어줍잖은 변명을 늘어놓으련다.
나에게 있는 것은 무엇인가? Perl에 대한 지식, 몇 편의 논문과 단행본, 그리고 몇 장의 GenePix 4000B 데이터들이다. 기본적으로 R을 이용한 데이터 분석을 시도해 볼 것이다. 필요하다면 TM4 software suite의 MultiExperiment Viewer나 CLC Genomics Workbench(상용)도 시도해 볼 것이다. 그러나 기본을 이해하는 데에는 R이 좋은 환경인것 같다.
2010년 9월 16일 목요일
Paired end sequencing vs Mate pair library sequencing
Sanger chemistry를 이용한 전통적인 샷건 시퀀싱에 익숙해 있는 내게 paired end sequencing이나 mate pair (library) sequencing이나 다를 바가 없다. 그런데 며칠 전 Illumina의 시퀀싱에 대해 검토하다가 이 두 가지 방법을 다르게 기술하고 있는 것으로 알고 깜짝 놀랐다. 라이브러리를 만드는 방법 자체가 다르기에 이를 구별할 수도 있겠지만, 나같이 전통 기술에 익숙한 사람에게는 혼동을 불러 일으킬 수도 있다. Illumina에서 이야기하는 mate pair library는 일종의 jumping library라고 하는 것이 기술적으로 더 정확할 수 있겠다.
Paired-End Sequencing - Acheving maximum coverage across the genome (Illumina)
Mate Pair Library Sequencing - Characterization genome variation (Illumina)
플라스미드에 클로닝하여 만든 라이브러리를 가지고 Sanger 방법으로 시퀀싱을 하는 경우를 생각해 보자. 클로닝 사이트 한 쪽의 벡터 서열에 붙은 프라이머로 시퀀싱을 하면 single end sequencing이고, 반대편의 프라이머로 한번 더 읽으면 이것이 바로 paired end sequencing이다. 이렇게 얻어진 한 쌍의 read를 mate라고 부른다. Paired end sequencing을 통해 얻어지는 read의 길이는 single end sequencing과 다를 바가 없다. 라이브러리를 만드는 방법도 역시 똑같다. 혹시 genomics의 석기 시대(?)에 M13 박테리오파지에 클로닝하여 ssDNA를 얻은 다음 시퀀싱을 하던 시절이 있었다면, paired end sequencing을 하려면 고생 깨나 했을 것이다. 그러면 colony picking이 아니고 plaque picking을 했었을까? M13에 클로닝한 뒤 PCR을 해서 시퀀싱을 했다는 전설같은 이야기를 들은 기억이 있는 것도 같다. 그러나 아무리 M13이라 해도 대장균을 좀먹는(?) 시스템을 가지고 대용량 시퀀싱을 하기는 좀 위험할 것이다.
Paired end sequencing이 왜 유용한가에 대해서는 이 글에서 설명하지 않아도 쉽게 알 수 있을 것이다. Resequencing이 일상화된 요즘, structural variation의 검출이라는 새로운 용도가 더해졌다는 것만 강조하자.
Genomic fragment를 뒤집어 붙여 원형을 만들어서, 수 kb 이상 멀리 떨어진 부분을 DNA 상의 연속적인 서열로 만들어 버린 뒤 이용하는 jumping library는 누가 가장 먼저 생각해 냈을까? 2005년 Science지를 장식했던 Jay Shendure의 polony sequencing에서 처음 쓰였던 것일까?
http://www.sciencemag.org/cgi/content/full/309/5741/1728
번거로와서 더 이상 거슬러 올라가지는 못하겠다. 여기서 mate-paired library란 말을 쓰고 있기는 하다. 그렇다면... mate에 해당하는(실제로는 fragment 길이만큼 떨어져 있어야 하지만) 한 쌍의 서열을 정말로 물리적으로 아주 가깝게, 짝을 이루도록(paired) 이어 놓았다는 것으로 이해해야 하나? ABI SOLiD의 기술을 소개하는 페이지에서도 mate-paired library라는 용어를 쓰고 있다. 자, 그럼 중간 결론을 내리자. 일반적인 의미의 mate pair와 mate pair(ed) library는 다르다! 그런데 위키피디아에서는 아예 Paired-end Tags라는 항목까지 있다. Paired end sequencing과 혼동할 소지가 있다...
http://en.wikipedia.org/wiki/Paired-end_Tags
정말이지 용어의 순화가 필요하겠다. 위 단락에서 빨간 색으로 표시한 것에 해당하는 라이브러리 및 이에 대한 시퀀싱을 가리키는 말을 다른 것으로 바꾸면 안될까?
내 기억이 맞다면, 원래 mate pair는 클로닝된 DNA 단편의 양 끝에서 만들어진 read의 쌍을 의미할 뿐 그 이상도 이하도 아니었다. Mate 혹은 mate pair라고만 쓰였지 Shendure에 의해서 특별한 방법을 사용해 만들어진 library로서 mate pair library라는 말이 쓰인 것 같다. 시퀀싱의 측면에서 본다면 mate를 만들어 내는 paired end sequencing과 쓰임새가 같지만.
생각난 김에 검색을 좀 해보자. 아하, "pairwise end sequencing"이 가장 역사가 오랜 용어로구나.
Pairwise end sequencing: a unified approach to genomic mapping end sequencing. Genomics 26:345-53 (1995)
이 논문에서는 어디에서도 "paired end"라는 말은 나오지 않는다. 하지만 pairwise end나 paired end나 뭐가 다른가...
Paired-End Sequencing - Acheving maximum coverage across the genome (Illumina)
Mate Pair Library Sequencing - Characterization genome variation (Illumina)
플라스미드에 클로닝하여 만든 라이브러리를 가지고 Sanger 방법으로 시퀀싱을 하는 경우를 생각해 보자. 클로닝 사이트 한 쪽의 벡터 서열에 붙은 프라이머로 시퀀싱을 하면 single end sequencing이고, 반대편의 프라이머로 한번 더 읽으면 이것이 바로 paired end sequencing이다. 이렇게 얻어진 한 쌍의 read를 mate라고 부른다. Paired end sequencing을 통해 얻어지는 read의 길이는 single end sequencing과 다를 바가 없다. 라이브러리를 만드는 방법도 역시 똑같다. 혹시 genomics의 석기 시대(?)에 M13 박테리오파지에 클로닝하여 ssDNA를 얻은 다음 시퀀싱을 하던 시절이 있었다면, paired end sequencing을 하려면 고생 깨나 했을 것이다. 그러면 colony picking이 아니고 plaque picking을 했었을까? M13에 클로닝한 뒤 PCR을 해서 시퀀싱을 했다는 전설같은 이야기를 들은 기억이 있는 것도 같다. 그러나 아무리 M13이라 해도 대장균을 좀먹는(?) 시스템을 가지고 대용량 시퀀싱을 하기는 좀 위험할 것이다.
Paired end sequencing이 왜 유용한가에 대해서는 이 글에서 설명하지 않아도 쉽게 알 수 있을 것이다. Resequencing이 일상화된 요즘, structural variation의 검출이라는 새로운 용도가 더해졌다는 것만 강조하자.
Genomic fragment를 뒤집어 붙여 원형을 만들어서, 수 kb 이상 멀리 떨어진 부분을 DNA 상의 연속적인 서열로 만들어 버린 뒤 이용하는 jumping library는 누가 가장 먼저 생각해 냈을까? 2005년 Science지를 장식했던 Jay Shendure의 polony sequencing에서 처음 쓰였던 것일까?
http://www.sciencemag.org/cgi/content/full/309/5741/1728
번거로와서 더 이상 거슬러 올라가지는 못하겠다. 여기서 mate-paired library란 말을 쓰고 있기는 하다. 그렇다면... mate에 해당하는(실제로는 fragment 길이만큼 떨어져 있어야 하지만) 한 쌍의 서열을 정말로 물리적으로 아주 가깝게, 짝을 이루도록(paired) 이어 놓았다는 것으로 이해해야 하나? ABI SOLiD의 기술을 소개하는 페이지에서도 mate-paired library라는 용어를 쓰고 있다. 자, 그럼 중간 결론을 내리자. 일반적인 의미의 mate pair와 mate pair(ed) library는 다르다! 그런데 위키피디아에서는 아예 Paired-end Tags라는 항목까지 있다. Paired end sequencing과 혼동할 소지가 있다...
http://en.wikipedia.org/wiki/Paired-end_Tags
정말이지 용어의 순화가 필요하겠다. 위 단락에서 빨간 색으로 표시한 것에 해당하는 라이브러리 및 이에 대한 시퀀싱을 가리키는 말을 다른 것으로 바꾸면 안될까?
내 기억이 맞다면, 원래 mate pair는 클로닝된 DNA 단편의 양 끝에서 만들어진 read의 쌍을 의미할 뿐 그 이상도 이하도 아니었다. Mate 혹은 mate pair라고만 쓰였지 Shendure에 의해서 특별한 방법을 사용해 만들어진 library로서 mate pair library라는 말이 쓰인 것 같다. 시퀀싱의 측면에서 본다면 mate를 만들어 내는 paired end sequencing과 쓰임새가 같지만.
생각난 김에 검색을 좀 해보자. 아하, "pairwise end sequencing"이 가장 역사가 오랜 용어로구나.
Pairwise end sequencing: a unified approach to genomic mapping end sequencing. Genomics 26:345-53 (1995)
이 논문에서는 어디에서도 "paired end"라는 말은 나오지 않는다. 하지만 pairwise end나 paired end나 뭐가 다른가...
피드 구독하기:
글 (Atom)