Tuesday, March 30, 2010

시퀀스에서 Di-nucleotide frequency 계산 문제.

지난해 pung96님의 블로그에 올라왔던 Di-nucleotide composition frequency 세기 문제( http://perlog.pung96.net/20 ) 를 다시 한번 언급해 본다.

문제를 다시 정리해 보면,

AGATAGCGATAGCG
AGATGACGATAGAG
...

위 처럼 DNA 서열이 담긴 input 파일이 있을 때, DNA base 두개씩을 끊은 dinucleotide ( e.g., AG, CT ) 와 같은 16개 조합( DNA base가 4개 이므로 2개의 조합 가지 수는 16개 )의 빈도를 계산하는 것이 원글의 문제다. 이때, 앞에서 순서대로 2개씩 읽되, window size는 1로 하여 1칸씩 옮겨가며 2개씩 읽어 조합을 계산해야 한다.

구체적으로 AGAA 네개 DNA 서열인 경우, AG, GA ,AA 세개의 dinucleotide 조합으로 계산해야 한다는 것이다.

TIMTOWTDI, perl의 특성답게 이를 해결하는 방법은 상당히 다양한데, pung96님의 글에 언급되지 않은 내용을 추가로 정리해 보고자 한다.

substr을 이용하는 경우 ( DNA 서열은 $seq에 저장되어 있는 경우 )

for( my $i=0; $i< length( $seq ) - 1 ;$i++ ){
$count{ substr($seq,$i,2) }++;
}


정규식의 lookahead 이용하는 경우,

my @di=$seq=~/(?=(\w{2}))/g;
$count{$_}++ for @di;


이걸 한줄로 줄이면,

$count{$_}++ for $seq=~/(?=(\w{2}))/g;


반복을 while로 돌리면,

$count{$1}++ while $seq=~/(?=(\w{2}))/g;


map 에 넣으면,

map{ $count{$_}++ } $seq=~/(?=(\w{2}))/g;

와 같은 방식으로도 문제를 해결할 수 있다. 포스팅의 요지는 lookahead 를 이용한 정규식 사용!!

사족을 좀 덧붙여 보면, 이 문제는 연세대 생명공학과 대학원 이인석 교수의 bioinformatics 수업 과제 문제다. 지난해와 올해 연구소에 연대 대학원 학생분들이 있어, 내게 이 문제에 대한 조언을 구해와 본의 아니게 2년 연속으로 이 문제에 대해 생각해볼 기회가 생겨, 포스팅해 본다.

Tuesday, March 2, 2010

HelloGene :: 한국 최초 개인유전체 정보 분석 서비스

KOBIC 센터장이었던 박종화 박사가 합류하면서 이목을 끌었던 테라젠(Theragen)에서 드디어 한국에선 최초로 개인유전체 분석 서비스를 출시하였다. 서비스 이름은 HelloGene 이며, 웹사이트 ( htttp://hellogene.co.kr/pgp/ )를 통해 서비스 신청을 할 수 있다.


서비스 내용을 살펴보면, 23andME에서 최초로 서비스 했던 SNP 칩 분석을 통한 개인유전체 분석 서비스와 Knome, DecodeME 등의 회사가 제공하고 있는 Whole genome sequencing 분석 서비스 두가지 모두를 서비스 상품으로 내놓고 있다.

가격은 SNP칩 분석 서비스의 경우 1,100,000( 백십만원, 일반형 ), Whole genome sequencing의 경우 150,000,000 (1억 5천만원, 일반형) 으로 23andME의 SNP칩이 $390, Knome의 whole genome sequencing이 $68,500 임을 감안하면 HelloGene의 서비스 가격이 2배 이상으로 비싼 편이다.

그러나 기존의 미국계 개인유전체 회사들의 분석 내용이 서구인에 대한 연구 결과를 바탕으로 한 것으로, 한국인의 유전체 분석에 오류가 상당하다는 단점이 있었기 때문에, HelloGene 서비스의 분석에서 이런 부분을 보완한다면 상대적으로 높은 가격에 의의를 부여할 수 있을 것 같다.

지난 겨울 직접 테라젠(Theragen, Teragen이 아님)에 방문했을 때만 해도 아직 연구소 셋팅이 제대로 되지 않은 상태여서, 서비스는 고사하고 정상적으로 연구 기반을 잡는데만 상당한 시간이 걸릴 것으로 생각했었는데, 벌써 이런 상용 서비스를 개시하다니 상당히 놀랍다.

테라젠의 HelloGene 서비스를 위시하여 한국에도 개인유전체 관련 산업이 시작되었다. 테라젠이 가천의대와 밀접한 연관을 가지고 연구를 하고 있어, 병원의 환자 의료 정보 시스템과의 연계 등에 비전을 가지고 연구를 진행한다면, 세계적으로도 유례없는 개인유전체 기반 의료 서비스를 선보일 수도 있을거라 생각한다. ( 병원의 환자 의료 정보에 대한 접근은 개인 정보 접근 등에 제한이 많은 외국보다 한국이 훨 수월하다고 생각한다.)

아뭏든, 최초의 한국형 개인유전체 분석 서비스인 HelloGene의 선전을 기원한다!!

Monday, March 1, 2010

Jquery이용한 dynamic 페이지 스타일

Javascript 라이브러리인 Jquery를 이용하면, 간단하게 복잡한 Javascript 기능을 구현할 수 있다.
최근에 간단한 웹DB를 만들면서 로딩된 page에 CSS 스타일을 적용하는 기능을 구현하였는데, Jquery( 및 Javascript) 를 이용할 때, 주의해야할 사안에 실수를 저지르는 바람에 한참 삽질을 했는데, 이를 정리해 본다.

먼저 아무런 내용이 없는 html 구조를 아래와 같이 설정하자.
(이 페이지의 html코드에서 html tage (<, >) 가 허용이 안되어, tag 괄호를 <> 대신 () 를 사용하였다. )

(html)
(div id="main")

(/div)
(html)


그다음 Jquery를 이용해서, id=main 부분에 외부 html 파일을 읽어 뿌려주는 부분을 html head부분에 script로 추가한다.

(script)
$(document).ready(function(){
$(#main).load('content.html');
});
(/script)



* 여기서 첫번째 문제, load된 html 내용에 원 html 파일에 적용된 CSS 가 적용될까?
적용된다. 페이지에 설정된 CSS 이기 때문에 load되어 원 페이지의 CSS 규칙 적용을 받는 내용에도 CSS 규칙이 적용된다.

다시 page로 돌아가서, 이번에는 load된 html의 특정 div id 를 가진 부분에 대해 CSS 규칙을 추가한다.

(script)
$(document).ready(function(){
$(#main).load('content.html');
$('#top').addClass('css_top'); //id=top에 CSS 규칙 css_top을 적용한다.
(/script)



* 여기서 두번째 문제, load된 html의 특정 부분에 CSS 규칙이 적용될까?
정답은 조건적으로 그렇다 이다. 문제는 네트워크 지연에 있다. AJAX방식의 모든 구현에서 발생하는 문제로, script에서는 load 이후, css가 추가되는 것 처럼 보이지만, 실제 html이 load되는 시점은 html을 읽어오는 동안의 '지연' 이 발생하므로 css 추가 부분이 적용된 이후가 될 수 있다. 이런 경우엔 css 규칙 적용 부분이 먼저 실행되고 html이 로딩이 되었기 때문에, css 규칙 추가가 이루어 지지 않는다.

실제로는 plain html 파일인 경우, 지연효과가 미미하여, 이 문제가 발생하지 않을 수 있는데, 내가 작업하는 상황에서는 읽어오는 파일이 그 자체로 Mysql 을 긁고 processing 을 하여 조금 시간이 걸리는 php 파일이었기 때문에, 이 문제가 발생하였다.

이런 상황에서 문제없이 순서대로 원하는 기능을 구현하기 위해서는 '콜백' 기능을 이용해야 한다. 즉 각 jquery 라인을 순서대로 실행하도록 조건을 걸어두는 것이다.

콜백 기능 구현은 간단한데, 위의 상황에서 html 파일을 load하고 난 이후, css 규칙을 추가하는 콜백 함수를 구현하면, 원하던 기능을 문제없이 수행할 수 있다.


(script)
$(document).ready(function(){
$(#main).load('content.html', function(){
$('#top').addClass('css_top');
});
});
(/script)