Thursday, November 18, 2010

phylogeny tree

영건씨와의 프로젝트에서 내가 맡은 부분인 distance matrix에서 phylogeny tree를 그리는 것을 수행하기 위해.. 일주일 정도 나름 고생했다.. 아.. 

나름 고생해서 얻은 것들은 대충 적는다.

phylogeny tree를 그리는 방법에는 UPGMA (biological sequence analysis(BSA) 책에 보면 이름만 거창하다는 식으로 intro를 시작한다), neighbor joining, parsimony 가 있는데 이번에 선택한 방법은 neighbor joining (NJ). 왜냐고 물어보면... 음.. FFP를 사용한 reference가 되는 sims의 논문이 FFP를 구하고 나서 이를 NJ 방법으로 tree를 그렸기 때문에?(좀 구차한거 같은 느낌이.. 사실 위의 방법들의 장단을 봐야 하는데).. 

NJ 방법이 알고보니 unrooted tree를 그리는 것이다 (아.. 것도 모르고 마지막 두개 남은 node에서 error가 나는걸보고 알고리즘이 이상하다고 느꼇음). BSA 책에 보면 rooted로 만드는 2가지 방법을 소개하는데, 하나는 완전 outgroup인 것을 넣어서 그걸 root로 삼으라는 것과 연결선의 가장 긴 chain의 midpoint를 root로 하라는 것인데.. outgroup을 억지로 넣어주면 edge의 값이 조금씩 변하는게 맘에 들지 않고 해서 그냥.. 나름 unroot인데 root인 마냥 나오게끔..

그리고 결과 파일을 newick format으로 만드는 작업은 추가 해야 겠다. 다른 프로그램 (phylip 같은) 것에서도 사용할수 있게. 

아래는 이번 작업하면서 무자비하게 search 한것 모음

---------------------------------------------------------



정리해 보자면 현재 나에게 떨어진 해당 과제가.. FFP를 이용한 시퀀스 사이의 similarity matrix가 있을때 이를 phylogeny tree로 그려야 하는것.
이는 clustalw가 모든 pairwise 시퀀스를 다이나믹 프로그래밍으로 alignment 해서 similarity를 구한다는 것 이외에는 그 뒤 과정이 내가 해야 하는 것과 동일하므로. clustalw를 참조하기로 한다.
우선 clustalw가 neighbor joining 방식으로 similarity 트리를 그리므로 neighbor joining 한번 점검하고... 역시 clustalw 처럼 dnd 형식을 최종 output으로 만들고 싶기 때문에 neighbor joining 이후에 dnd 파일 만들기를 check 해야 할것이다.

기본적으로 multiple sequence alignment와 phylogeny tree 그리기가 무엇이지를 알기위해서는 http://www.cbs.dtu.dk/courses/humanbio/2010/exercises/ExMulPhyl/Ex_Phylo.php에 나오는 HIV의 phylogeny tree 그리기 예제를 살펴 봐야 전체적인 그림이 나올것 같고..

그런데 dnd 파일이 꼭 phylogeny tree를 나타내는 것이 아니라는 내용이 http://www.ebi.ac.uk/Tools/clustalw2/faq.html에 guide tree와 phylogeny tree의 차이가 무엇이냐라는 것에 있고.. 좀 헷갈리는데.. 알아봐야 할거 같네.. 그냥 clustalw2를 돌려서 나오는 dnd가 guide tree인지 아니면 phylogeny tree인지(아무래도 이건 최종으로 나오는 거라 phylogeny tree 인거 같지만)


음 보아하니.. 순수하게 pairwise alignment 한거가지고 나온건 guide tree인것이고 이거로 multiple alignment 해서 나온 결과로 그린것이 phylogeny tree인 것인데.. 기본적으로 clustalw의 manual을 훑어볼필요가 있는듯

-HMMER3는 multiple alignment file format을 clustalw2에서 나온 aln을 인식하지 못한다. 그래서 biopython의 AlignIO.convert 를 이용해서 HMMER3가 인식할수 있는 stockholm 파일로 변환해서 사용한다(AlignIO.convert('temp.aln','clustal','temp.sto','stockholm')).

-clustalw2는 phylip의 file format으로 output file 생성 가능

clustalw의 과정
step1 : 가능한 모든 pair의 시퀀스를 align 하고 distance(mismatch position/non-gapped position)를 정한다. 그 다음 distance matrix를 만든다.
step2 : neighbor joining method를 이용해서 similarity tree를 그린다.
step3 : 위의 similarity tree를 참조해서 가까운 시퀀스부터 하나씩 combine 해서 multiple alignment 를 하는데.. 위의 similarity tree의 root 로부터의 거리를 weight를 갖게 된다. 그러니 같은 banch 안에 들어가는 시퀀스는 그 weight를 나눠 갖게 된다.

-check list

1.neighbor joining method

2. dnd file format (newick)