2021년 12월 3일 금요일

설계된 프라이머의 결합 위치를 그림으로 표시해 보자

BioPerl의 그래픽스 기능(Bio::Graphics)을 사용하여 서열 'track' 위에 여러 feature를 표시할 수 있다. 프라이머 정보 역시 feature로 간주하여 방향까지 표시되는 화살표로 표현하면 된다. HOWTO 문서를 참조하여 직접 손으로 Perl 코드를 짜도 되지만, 남들이 먼저 만들어 놓은 것을 살짝 고쳐서 쓰면 더욱 낫지 않겠는가?

프라이머를 설계하고 시각화하는 공개 프로그램을 뒤적거리다가 이런 논문을 발견하였다.

PrimerView: high-throughput primer design and visulaization (2015).  GitHub 링크

미국 조지 워싱턴 대학의 Damien M. O'Halloran이라는 사람이 단독으로 개발하여 발표한 것이다. 이 도구는 리눅스에 설치하여 쓰는 Perl module이다. 여러 유전자를 multi-FASTA file로 제공하면 primer3가 각 유전자를 증폭하는 프라이머쌍을 설계하고, template DNA에 결합하는 위치를 이미지 파일로 보여주는 소박한(?) 도구이다. O'Halloran은 2016년에 GUI tool인 PrimerMapper(GitHub 링크)라는 것을 발표하기도 하였다. 기능은 훨씬 많아진 것 같은데 아직 제대로 테스트를 해 보지 못하였다.

PrimerView는 내부적으로 primer3_core를 사용하도록 되어 있다. Template DNA의 염기서열은 사용자가 제공하면 되지만 각 염기서열에서 설계하는 최대 프라이머쌍의 수 등 사용자가 입맛에 맞게 파라미터를 맞추어 넣을 수가 없다. 핵심 구성요소인 PRIMERVIEW.pm을 아무리 들여다 보아도 primer3 파라미터를 넣는 곳은 없다. 

그러면 소스를 고쳐 보면 되겠지... 모듈에서 대부분의 기능을 구현하고 메인 소스 코드는 간결하게 만드는 스크립트 작성 스타일에는 별로 익숙하지 않아서 시행착오를 거듭하여 수정을 해 보았다. 그런데 뭔가 이상하다. 아무리 모듈을 고쳐도 결과는 변화가 없다. 그거 참 이상하다. 이유는 간단한 곳에 있었다. 스크립트가 참고하는 모듈의 위치는 /usr/local/share/perl/5.30.0인데 프로그램을 설치한 곳의 lib/ 이하 위치를 참조하는 것으로 생각하여 엉뚱한 것을 고쳤던 것이다. @INC 배열로 지정된 곳 중 어디에 PRIMERVIEW.pm이 있는지를 찾고 나서야 비로소 답을 알게 되었다. Perl의 모듈 관리가 원래 그렇다. FindBin과 use lib 디렉티브를 잘 사용하여 보다 깔끔하게 고쳐야 되겠다.

원본 모듈에서는 사용자가 입력한 염기서열만을 primer3로 보내게 된다. 서열 정보를 담는 input file의 앞부분에 내가 별도의 파일로 제공한 primer3 파라미터 파일을 삽입하게 만들었다. 다음은 그 결과로 얻은 그림이다. 입력 template는 신종코로나바이러스의 게놈 서열을 주었고 총 20쌍의 프라이머를  만들게 하였다. Product size는 150-200 bp range로 하였다.

Primer Map이 그려주는 그림보다는 나은가? 해상도가 다르다는 것이 가장 큰 차이점이라고 생각한다.
프라이머 위에 적힌 숫자는 프라이머 ID를 대신하는 것으로서, 5'-end의 위치에 해당한다. 여기서 주의할 것이 하나 있다. Primer3의 위치 체계는 0-based라는 점이다. 그리고 한쪽 프라이머가 (거의) 동일한 상태에서 반대편 프라이머는 별도의 것을 취하는 복수의 amplimer를 예측하기도 한다는 점이다.

이 그림에서는 어떤 프라이머가 서로 짝을 이루고 있는지 한눈에 보이지는 않는다. 그러나 잘 관찰하면 어렵지 않게 파악할 수 있다.

PrimerView의 독특한 점은 설계한 프라이머가 결합하는 위치를 muscle alignment를 돌려서 찾는다는 것이다. 아니, primer3 결과 파일에 결합 위치가 다 있는데 왜 이런 수고를? 염기서열이 그대로 보이는 출력물을 이미지로 만들기 위해서 그런지도 모르겠다.

만약 다른 프로그램으로 프라이머를 설계한 뒤 결합 위치를 표시하고자 한다면 이러한 정보를 수록한 텍스트 파일을 먼저 만든 다음, PRIMERVIEW.pm의 _graphics_all_primers 함수를 참조하여 코드를 직접 만들어야 한다. 이것은 별 문제가 되지 않지만, 정보 파일을 만드는 일은 각자 알아서 해야 한다. EMBOSS의 primersearch가 되었든, 최근에 소개한 MFEprimer가 되었든 다른 프라이머 평가 도구를 써서 만든 결과 파일을 다듬어야 한다.


댓글 없음: