Wednesday, December 29, 2010

language benchmark

python을 주로 쓰는데 비슷한 작업을 친구가 perl로 짯는데.. 속도가... 너무 차이난다. file IO가 많아서 그런지.. 좌절.. perl도 공부해야 겠다는 생각이 든다. 아래는 언어 performance 비교한거.
http://www.bioinformatics.org/benchmark/results.html

그리고 보통 프로그램 시간 체크 하기 위해서 time 명령어를 쓰는데 default로 real, user, sys 모드의 시간이 나온다. 거기에 대한 설명은 아래 링크
http://stackoverflow.com/questions/556405/what-do-real-user-and-sys-mean-in-the-output-of-time1


그렇다면 두 프로그램의 퍼포먼스를 비교할려면.. user + sys 로만 비교해야 하는건가... 음..


-이번에 이런저런 check하면서 알게된 tip
--어떠한 key값이 사전형 변수에 key로 있는지 없는지 확인하고 대입할경우 예를 들어 
key = 'good'
d_some = {#something in here#}
if key in d_some.keys():
      d_some[key] = "something"


이렇게 하는 것보다
try:
      d_some[key] = "something"
except:
      pass
식으로 하는것이 더 빠르다. 특히 d_some의 key가 많을때.


--그리고 itertools 괜찮은거 같다. 활용해 볼 만하다.
http://www.builderau.com.au/program/python/soa/Faster-smaller-clearer-Python-iterator-tools/0,2000064084,339280043,00.htm
위 내용을 간단하게 정리 하자면 zip()을 써서 두 list 합쳐서 거기서 하나씩 iterative하게 뽑나낼려면 우선은 두 리스트를 합치는 과정이 들어가기 때문에 느린데 izip을 쓰면 합치는 과정 없이 그냥 iterative object를 생성한다는 것 같은데..  그렇다면 고스란히 메모리에 올려놓는건가? 두 리스트를? 음.. 


--python에서 프로세스 시간을 재는 방법
http://www.tutorialspoint.com/python/time_clock.htm

Friday, December 24, 2010

web server

이것저것 고려해보다가.. 결국 웹 서버를 만드는데 옵션 사항들을 결정했다. 웹서버를 만드는데 들어가는 대부분의 사항들이 내가 약한 부분이라 많은 시간을 들여 공부해야 할것이다. 우선적으로 hanil 서버에다가 web server를 구축 할 것이 아니라 google app engine을 사용하기로 한다. python을 이용하며 google app engine에 django가 포함되어 있으므로 장고 식으로 갈거고 이 참에 jquery까지 공부해 보도록 한다.또한 버젼 관리를 위해 전에 해보지 않았던 svn을 이용하기로 한다. (아.. 근데 문제가 있긴 있구나.. 만약 내가 python에서 특정 모듈을 사용할려면 그게 서버에 깔려 있어야 하는데.. 이런 문제는 어떻게 해결하지.. 음.. biopython모듈을 사용해서 사이트를 만든 것이 있는걸로 보아 기본적으로 외부 모듈을 지원하는거 같은데 조금더 알아봐야 한다.예 :http://biosqlweb.appspot.com/ )


-결론적으로 봐야할 list
django, jquery, svn


초보자로서 큰 틀을 다시 그려보면 hanil 서버에 svn 저장소를 생성하고 내 계정에 권한을 줘서 계속 소스를 갱신해서 웹 프로그래밍을 한다. 웹 프로그래밍의 테스트 및 나중에 google app 에 올리는 것은 google_appengine을 이용한다.


-setting & study-
-google app engine SDK 설치
google_appengine_1.4.0.zip 다운로드 하고 path와 PYTHONPATH에 goolge_appengine 위치를 잡아 놓는다.
-svn
http://www.oneone.kr/?document_srl=2030
-html
http://deadfire.hihome.com/html/html01.html
-css 
http://blog.naver.com/rusdudtn2?Redirect=Log&logNo=140047835464
-javascript 
http://deadfire.hihome.com/jscript/jscript01.html (참고 : http://ej5811.blog.me/80094536125 )
-django
http://www.wikidocs.net/read/955 (참고 : http://www.wikidocs.net/read/828)

Monday, December 20, 2010

microbe annotation 추가 사항

BER
TIGRFAMs,
equivalog-level HMM
TIGR role catergory scheme
PROSITE motifs
XDOM


추가 고려

Tuesday, December 14, 2010

call process without wait

요즘 microbe annotation pipeline을 만들고 있는데 때때로 일의 진행이 동시에 일어나야 할 때가 있다. 그러니까 A , B, C 라는 프로세스가 있을때 A -> B -> C 순서대로 일을 진행하지 말고 A, B, C가 연관성이 없는 작업이기때문에 그냥 동시에 일을 진행하려 한다. 일반으로 python에서 os 상의 어떤 명령어를 실행할때 os.system을 많이 쓰는데 이 모듈은 실행시킨 프로세스가 종료가 되고 return이 되야 다음으로 넘어간다. 그래서 그냥 return 값의 wait 없이 바로 바로 진행시키는 모듈을 찾다가.. http://docs.python.org/library/subprocess.html#subprocess-replacements (17.1.3.4 참조)과 같은 링크에서 발견. 이름하여 subprocess 모듈의 Popen. 내 생각이 맞다면 알아서 os가 cpu에 잡을 나누겠지. cpu가 하나라면 의미 없겠지만(I/O 의 경우를 제외하면, 단순 계산이라면 성능의 향상이 없을거겠지만) 일반적으로 지금 쓰는 컴터가 쿼드니까 알아서 나눠주겠지.. 아닐려나.. 아니라면 누가 좀 수정해주세요.

Monday, December 13, 2010

file I/O by python

전 포스팅에도 언급했듯이 요즘 perl calendar를 참조하고 있다. 나같은 허접댕이들은 언어로 어떠한 일을 할 수 있는지 조차도 잘 모르기 때문에 그 사이트를 보면서 아.. 이런것도 할수 있구나 하고 좋은 팁을 많이 얻는다. 
이번에 봐볼 것은 파일 입출력! 우선 motive가 된 perl calendar 셋째날 http://advent.perl.kr/2010-12-03.html


위의 코드를 나름 이해하자면.. 우선 파일을 바이너리 파일로 변환한다. 파일에 특정 범위의 숫자가 들어가 있으므로 byte를 정해서 바이너리로 변환한다(pack). 변환되 바이너리 파일에 접근하기 위해서는 이미 알고 있는 행과 열의 갯수와 각 값에 할당된 byte 수로 접근 가능한 수치(offset)로 변환한다. 그리고 map 모듈을 이용해서 하드 디스크의 파일을 메모리에 같다 붙여서 아까 구한 offset을 이용해서 바로 파일의 특정 위치에 접근한다.


이걸 python으로 할려면 필요한 모듈이..
데이터를 binary로 변환하는 모듈,
perl의 map모듈과 같은 역할을 하는 python 모듈




-pickle-
우선은 내가 잘 이용하지 않았던 pickle이란 모듈: http://swingbeat.egloos.com/4076363
자세한 내용은 http://docs.python.org/library/pickle.html. 그런데 내가 산 책에는 pickle을 이용하려면 파일을 열때 바이너리 모드로 열어라고 했는데.. 근데 꼭 그런거 같진 않네. 그냥 열어도 dump를 하면 binary모드랑 똑같은 형식으로 써진다.
-mmap-
http://docs.python.org/library/mmap.html
이게 대충 보니까 mapped된 파일은 mutable 하기에 바로 접근해서 수정가능한 것 같다. 자신이 원하는 파일의 위치를 알때 이를 사용하면 좋을듯


그밖에
http://stackoverflow.com/questions/1035340/reading-binary-file-in-python
http://linux.byexamples.com/archives/478/python-writing-binary-file/



이건 상관없는건데 그냥..
-ctypes tutorial-
http://python.net/crew/theller/ctypes/tutorial.html

Friday, December 3, 2010

send message by google gdata module

금선생의 buzz에 올라온 perl calendar(http://advent.perl.kr/) 오.. 대단한데.. python도 이런거 하나하고 찾아봤는데 못찾고.. 다만 perl calendar의 12월 2일째에 올라온 구글 calendar로 문자보내기를 검색해본다. 했더니 오.. 이런 신세계가.. http://www.wikidocs.net/read/683 


gmail로도 문자 보내기가 가능하다.(이건 잘 모르겟다...음..) 
http://thesteveblog.blogspot.com/2009/02/python-script-to-send-sms-via-gmail.html
그런데 첨에 내 gmail 계정에는 sms 사용 창이 없어서 setting을 바꾸는데.. 무자게 구글을 뒤졌다. 결국 나와 같은 분을 위해
http://www.labnol.org/internet/send-sms-text-messages-from-gmail/5156/


아래도 괜찮다.
http://www.wikidocs.net/read/668



확실히 언젠가 시간 잡고 google python api를 봐야 하겠다. 

Thursday, December 2, 2010

gap closing by phrap & consed

요즘 FLX로 de novo assemble 한 scaffold의 gap closing 중인데. gap 인 N부분을 메꾸기 위해서 sager sequencing 을 이용하고 그 gap 부위의 assembly를 phrap을 이용하고 consed로 확인을 한다. phill green 이라는 사람이 만들었는데 프로그램을 얻기가 여느 프로그램 중에 젤 까다롭다. phred랑 phrap은 바로 첨부파일로 보내주지만 consed는 파일이 크기 때문에 접속할 ip를 academic 한 이유로 프로그램을 이용한다는 동의서와 함께보내야한다. 
뭐 여튼.. 기본적인 make 만 하면 되고 make install도 없다 다만 실행 파일을 모아놓은 bin을 path로 걸어놓기만 하면 끝. 


gap이 무자게 많은 관계로 가능한 automation을 하고 싶어서 이것저것 짜고 있는데.. 결론은 아무리 정리를 해도 눈으로 확인해봐야 한다는... 여튼 눈으로 확인하기 전에 최대한 정보를 정리해서 summary를 해야 하는 까닭에... 필요한 데이터를 링크, 정리는 아직 모르겠고


-ace file format
http://bcr.musc.edu/manuals/CONSED.txt


autofish라고 있는데.. 이게 뭔지는 자세히 들여다 봐야 할듯.. 
http://www.phrap.org/consed/autofinish.html

Monday, November 29, 2010

Fwd: Thank you from the Wikimedia Foundation

wikipedia에다가 기부했다. 내 생전 자발적으로 기부해보긴 첨이네. 요즘 몇번이고 wikipedia를 들어갔을때 wikipedia의 창립자의 personal appeal 이라는 배너가 계속 뜬걸 봤는데. 사실 무시하다가. 그래도 wiki 만큼 나에게 많은것을 알려준 것도 없다는 생각에. 그냥 무시하기엔 미안한 맘이 크게 들어서.. 그래서 가장 싼 값으로 선택해서 donate 했다. 난 마음이 아직 부유하지 못해서.
(아 그리고 이번 포스팅은 Email로 보내서 한다. 무슨 이야기냐면 얼마전에 알았는데 blogger.com에서 자신의 블로그에 Email 계정을 줘서 그 계정으로 메일을 보내면 보낸 내용이 바로 포스팅 된다.)


---------- Forwarded message ----------
From: Sue Gardner <donate@wikimedia.org>
Date: Mon, Nov 29, 2010 at 10:06 AM
Subject: Thank you from the Wikimedia Foundation
To: sehwan Kim <graphy21@gmail.com>




Dear sehwan,


Thank you for your gift of USD 20 to the Wikimedia Foundation, received on November 29, 2010. I’m very grateful for your support.
Your donation celebrates everything Wikipedia and its sister sites stand for: the power of information to help people live better lives, and the importance of sharing, freedom, learning and discovery. Thank you so much for helping to keep these projects freely available for their nearly 400 million monthly readers around the world.


Your money supports technology and people. The Wikimedia Foundation develops and improves the technology behind Wikipedia and nine other projects, and sustains the infrastructure that keeps them up and running. The Foundation has a staff of about fifty, which provides technical, administrative, legal and outreach support for the global community of volunteers who write and edit Wikipedia.
Many people love Wikipedia, but a surprising number don't know it's run by a non-profit. Please help us spread the word by telling a few of your friends.


And again, thank you for supporting free knowledge.


Sincerely Yours,




Sue Gardner
Executive Director


* To donate: http://donate.wikimedia.org
* To visit our Blog: http://blog.wikimedia.org
* To follow us on Twitter: http://twitter.com/wikimedia
* To follow us on Facebook: http://www.facebook.com/wikipedia




This letter can serve as a record for tax purposes. No goods or
services were provided, in whole or in part, for this contribution.
The Wikimedia Foundation, Inc. is a non-profit charitable corporation
with 501(c)(3) tax exempt status in the United States. Our address is 149 New Montgomery, 3rd Floor, San Francisco, CA, 94105. Tax-exempt number: 20-0049703






--


*********************************************
Saehwan Kim, M.S (majored in Bioinformatics)

    Email : 
graphy21@gmail.com
    Blog : 
http://graphy21.blogspot.com
    Currently working as a researcher at Macrogen Inc. (
http://www.macrogen.com/)

*********************************************

Wednesday, November 24, 2010

HMMER 사용시 주의점

이런적이 예전에 있었던거 같은데.. 뭐였지.. HMMER 사용할때.. Pfam 이 버젼 문제가 있었나.. 정확히 기억이 안나는데 여튼.. 
기억해야 할 한가지가.. HMMER가 version 3까지 나왔는데 종종 HMMER를 사용하는 프로그램이 HMMER 최신 버젼 위주로 되어 있는것이 아니라 예전 걸로 되어 있다. 
이번에 rRNA prediction을 위해 RNAmmer (http://www.cbs.dtu.dk/services/RNAmmer/) (뿐만 아니라 genometools 라는 프로그램(tallymer 땜시)도 HMMER2.3.2 버젼을 사용한다)를 셋팅하는데 자꾸 프로그램이 안도는걸 확인했는데.. 몇시간의 뻘짓으로 알아낸게 RNAmmer가 HMMER 2.3.2 버젼으로 되어 있기 때문이라는 것이다. 아.. 진짜.. 이럴 때 너무 싫어..
암튼 주의하길! 

Tuesday, November 23, 2010

adding syntax highlighter

와.. 이거 참.. 유용하다. 코드를 blog에 올릴때 syntax에 highlight 하는게 가독성에 굉장히 좋은데 그러한 일을 해주는 javascript가 있다. 오.. 이것도 모르고 항상 putty capture해서 올렸는데..
이게 그 개발자 홈피고
http://alexgorbatchev.com/SyntaxHighlighter/integration.html

이게 그 blogger.com에서 어떻게 사용해야 하는지를 나타내는 blog
http://www.cyberack.com/2007/07/adding-syntax-highlighter-to-blogger.html

사용은 간단하다. 우선은 자신의 블로그 frame에 사용되어질 스크립트를 링크시키고 저장한 뒤에 블로깅 할때마다 다음과 같이 pre 태그를 사용하고 class="brush:py" 식으로 하면 된다.

def aa():
  print 'Hi, there'

MapReduce

MapReduce 는 분산 컴퓨팅을 지원하기 위한구글에서 개발한 software framework 라고 한다.


사실 GFF 파일을 파싱하고 있는데 요즘.. biopython에 있는 Bio.GFF 모듈이 없어지고 BCBio 라고 새로히 모듈이 생성되고 있다(아직 biopython에는 완전히 포함되지 않은듯). 그런데 이 모듈 개발자 블로그를 가보니 GFF parsing을 parallel 하게 할 수 있게 해놨다는 블로깅을 보고 거기서 사용한 것이 Disco 라는 것이란다. 그런데 그 Disco는 또 MapReduce를 이용한 것이고...
아... 뭐래는 거냐 얘네.. 


그래서! 알아봐야지.. BCBio 모듈을 만든 저자가 했던 말처럼 NGS 덕에 데이터 양 엄청 많아지는데 그냥 one core parsing하면 안되니까.. 사실 내가 하려는 것도 NGS 에서 나온 데이터를 파싱하려는 것이라서.. 해야지 뭐. 


우선은 링크 
-GFF module developer blog
http://bcbio.wordpress.com/2009/03/08/initial-gff-parser-for-biopython/
http://bcbio.wordpress.com/2009/03/22/mapreduce-implementation-of-gff-parsing-for-biopython/


-Disco
http://discoproject.org/


-MapReduce (intro)
http://en.wikipedia.org/wiki/MapReduce


-MapReduce (example of using MapReduce)
http://www.michael-noll.com/wiki/Writing_An_Hadoop_MapReduce_Program_In_Python
http://atbrox.com/2010/02/08/parallel-machine-learning-for-hadoopmapreduce-a-python-example/

Monday, November 22, 2010

artemis

실험하는 사람들은 비쥬얼적인 것을 굉장히 선호한다(사실 실험하는 사람만 그런 것은 아니지만). 같은 내용이라고 해도 이것이 텍스트 파일로 되어 있냐 아니면 자신이 사용하는 툴에 보일수 있느냐에 따라 인식을 달리한다. 특히 내 주변인, 미생물 균주를 다루는 사람(지극히 내 경험적인 것이다)들은 artemis에 연연한다. 똑같은 내용이라도 excel로 된 결과와 artemis로 된 결과의 완성도가 다른 것처럼 느낀다. 그래서.. artemis 를 이용할 수 있는 아웃풋으로 assembly와 annotation 결과를 report 해야 함을 느낀다(그렇지 않으면 일도 많아지고 작업 폴더가 지져분해지기 때문에). 이번 포스트에서 artemis와 관련된 자료를 모아볼려고 한다.

artemis의 input format이 별게 아니다. 그냥 genbank 아니면 EMBL format (이번 기회에 bipython의 SeqRecord 클래스의 속성들을 파악해서 genbank 파일로 출력해야겠네..)


원래 sanger 에서 만들었나보다. 2000년도 나왔네.. 
http://www.sanger.ac.uk/resources/software/artemis/


-biopython으로 genbank 만들때 주의점
1.SeqRecord 안의 Seq 객체의 alphabet 속성이  Nucleotide or Protein alphabet 이어야 한다.
2.genbank 파일을 Bio.SeqIO.read 로 받아들이면 SeqRecord.SeqRecord의 한 속성(속성이라고 해야 하나 맴버 변수라고 해야하나) feature들의 위치가 알아서 python의 indexing 계산법으로 바뀐다. 예를 들면 genbank 파일에 gene   120...158 이라고 위치 정보가 나온 gene feature가 있다고 하고 이를 biopython으로 파싱하고 그 위치를 genbank.features[#].location이라고 해서 위치를 보면 119..158로 변해 있는 것을 확인할 수 있다. 이는 python에서 이 정보를 다를 때 유용하기에 이렇게 되어있는데 이를 주의해서 genbank 파일을 만들어야 한다. 다시 말해서 위와 거꾸로 SeqFeature를 만들때 원래 위치보다 -1 값을 한 위치 정보를 SeqFeature.FeatureLocation()의 첫번째 인자에 넣어줘야 한다.

Sunday, November 21, 2010

information theory

bioinformatics 논문을 보다보면 KL-divergence 와 같은 information theory에 관한 내용을 자주 접할 수 있다 (FFP의 논문에서도 나온다). berkeley 의 대학의 bioinformatics의 한 대학원 수업을 보면 두 개의 main text book을 중심으로 배우는데 그중 하나가 바로 information theory 에 관한 책이며 다른 하나인 BSA도 information theory를 사용하며 부록에 따로 취급한다 (http://biowiki.org/view/Teaching/BioE241).


해서 간단하게 요약하려 한다. 내용은 오일석의 패턴인식이라는 책의 내용이다.


-self information
정보라고함은 놀라운 정도이다. 그러니까 오늘 날씨가 맑은데 내일도 날씨가 맑다는 정보보다는 내일은 비가 온다는 정보가 더 놀랍다. 그렇기 때문에 내일 비가 온다는 정보가 정보량이 더 많다고 할 수 있다. 이를 식으로 나타내면 다음과 같다.
h(x) = - log2 P(x)
h는 self information으로 정보량을 뜻하고 P는 사건 x가 일어날 확률을 의미한다.


-entropy
엔트로피는 모든 사건에 대한 위의 self information의 평균값이다.
H(x) = -Σ h(x)P(x)
이 엔트로피는 모든 사건의 확률이 동일할때 그 값이 최대가 된다. 곧 엔트로피는 불화실성을 뜻한다. 모든 사건의 확률이 동일하면 그 엔트로피 값도 커지고 이는 곧 사건의 확률이 동일하므로 어떤 사건이 발생할지 예측하기 힘들다는 의미이다.


-KL divergence
두개 확률 분포 p1(x) 와 p2(x) 가 있을때 두 확률 분포간의 다른 정도를 표현하는 한 지표가 Kullback-Leibler divergence 라고 한다.
KL(P1(x),P2(x)) = ΣP1(x)log2(P1(x)/P2(x)) 
KL divergence는 relative entropy (상대 엔트로피) 라고도 한다(아마도 entopy의 구하는 식과 동일한데 다만 log에서 취하는 확률값이 두 집단의 상대적인 확률을 취하기 때문인듯). 
그리고 하나 주의해야 할것은 KL(P1(x),P2(x)) 와 KL(P2(x),P1(x)) 는 서로 다르다. 그렇기에 distance라는 표현을 사용하지 않고 divergence 라는 표현을 사용한다. 이는 패턴인식에서 특징 선택을 할때 선택된 특징에 의한 두 그룹의 분별력을 측정할때 사용가능하다.


-mutual information
두 랜덤 벡터 x, y의 의존도를 평가할때 사용 가능하다.
두 벡터 x와 y가 독립이라면 p(x)p(y) = p(x,y) 의 식이 성립하고 의존성이 클수록 p(x)p(y)와 p(x,y) 의 차가 커진다.그래서 두 값 p(x,y) 와 p(x)p(y)의 KL divergence를 구한것이 mutual information (상호 정보)이다
I(x,y) = KL(P(x,y),P(x)P(y))
이러한 mutual information은 기존 특징 벡터 x에다가 새로운 특징벡터 y를 추가 하였을때 얻는 이득을 평가 할때 사용가능하다.즉 새로운 특징 벡터 y가 x와 상호 정보가 크다면 y를 추가하였을때 얻는 이득이 적다.

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)

Thursday, November 11, 2010

md5 checksum

이번에 hanil 서버에 blast+를 설치 하고 nr과 nt만 ncbi (ftp://ftp.ncbi.nih.gov/blast/db/)에서 다운 받는데.. md5란 사이즈가 작은 파일이 있는것을 확인했다. 이것이 뭘까.. 아마도 사이즈가 작은걸로 보아 원본 파일에 대한 정보가 들어 있는걸일 거란 추측을 해본다. 그런데 웹에서 대충 뒤져보니... 파일 다운받고 나서 이게 제대로 된 파일인가를 검사할 수 있는 clue가 되는 파일이라는 것. 음 괜찮네.. 사실ftp나 update_blastdb.pl로 다운 받는데 끊기고 잘 안되서 for문으로 wget 써서 다운 받았는데 이게 온전한 것인지 확인할 필요가 있었는데.. 음 아래 링크가 가장 보기 편했다.


http://blog.naver.com/redfreek2c?Redirect=Log&logNo=120108091920


뭐 이런것도 가능하다 :
http://mcchae.egloos.com/9759236




위의 것을 정리하자면
$md5sum nr.00.tar.gz         #라고 명령어를 치면
b67116260f2d4962bd84b5b9ccafba89  nr.00.tar.gz    #다음과 같이 나오는데 이는 nr.00.tar.gz.md5의 내용과 동일
그러므로 그냥
$md5sum -c nr.00.tar.gz.md5    #라고 하면 알아서 md5와 원본파일의 md5sum과 비교해서
nr.00.tar.gz: OK     #다음과 같이 나오게 된다.


두번째 링크는 여러개의 파일의 md5sum을 해놓은 md5 파일을 만들어 놓고 확인하는 방법.이를 이용해서 update된 파일을 확인 가능하게 된다. 음 신기하네.




MD5의 설명:
http://ko.wikipedia.org/wiki/MD5

Wednesday, November 10, 2010

blast+ 설치 뒤 DB 땜에 group관리

biopython에 빠져서 blast 모듈도 써볼려는 요량에 hanil 서버에다가 blast를 까는데...
어머.. blast가 변했다.. blast+라고 해서 기존의 blast를 c++를 이용해서 다시 만들고 뭐 이것저것 추가 한거 같은데.. 여튼 역시 프로그램 install은 피곤해.. 
이것 저것 알아보고 한 결과(사실 예전의 blast 까는거 보다 매우 쉽다.).
위의 사이트에 나온데로 하면 local하게 깔수 있고 아니면
http://blast.ncbi.nlm.nih.gov/Blast.cgi?CMD=Web&PAGE_TYPE=BlastDocs&DOC_TYPE=Download
root 계정에서 rpm -ivh으로 깔면 전부 사용가능하게 깔수 있고 주의 할점은 DB의 위치를 셋팅해햐 하는데 위 웹사이트 나온데요 home 디렉토리에 .ncbirc 를 만들고 db의 위치를 넣어주면 된다.

문제는 db 보통 customize db 아니라면 가장 많이 쓰는게 nr, nt인데(blast+ 패키지 안에 update_blastdb.pl 이용하면 편하게 download 가능) 이게 용량이 많은 관계로 한곳에다가 받아서 여러 사용자가 동시에 사용 가능하게 해야 하는데.. 그룹관리를 전혀 안해본 나로는.. 아.. 해봐야 하는 수 밖에 
위사이트가 그래도 좀 나와있다. 

그리고.. blast+가 blast 보다 나은점. blast+에서 blastn이 megablast로 되어있는데.. 이또한 기본 blastn과 다른점이 무엇인지 확인해 봐야겠네...... 

만화로 쉽게 배우는 회귀 분석

대박 아이템 하나 얻었다. 웹에서 이것저것 떠돌다가 얻어걸린 책. 평이 괜찮길래, 사봤는데. 헐.. 학부때 통계학 책은 버렸으면 한다. 우선 이거 부터 읽고 다음 일반적인 통계학 책을 읽기를 추천한다. 정말 쉽게 배울 수 있다. 어려운 부분은 저자가 알아서 스킵하고 큰 틀과 컨샙을 얻어갈수 있도록 정말 배려 많이 한 책이다. 강추다.
책의 처음 장은 그냥 거의 고등학교 때 내용을 아주 기초적으로 설명한다. 그리고 회귀 분석을 그 다음에 여러가지 요인으로 부터 수치를 예측 하는 중회귀 분석, 그뒤 확률의 예측인 로지스틱회귀분석까지 알기 쉬운 예제와 설명으로 구성되어 있다.
원래 저자는 일본인인데... 무서운 일본인들.. 이런 책 은근 많다. 뉴튼 시리즈도 사실 일본에서 나온거고.. 어려운 컨셉을 쉽게 설명하는류의 책이 많다.

Friday, November 5, 2010

eutil을 이용한 genbank 파일 가져와서 biopython 으로 파싱하기

아.. 기억력이 거의 붕어급이라.. 했던거 까먹고 했던거 까먹고.. 기록으로 남겨야 한다.
예전에 썻던 NCBI의 eutil, 역시 기억이 안난다. 해서 정리한다. 


eutil을 통해 ncbi의 nucleotide 데이터베이스에 접근해서 ncbi id 에 해당하는  시퀀스와 정보를 가져온 뒤 파싱하는 프로그램을 정리할 필요가 있어서, 이거 만들면서 해당 자료를 죄다 모아보자.


-genbank file format : 
http://www.ncbi.nlm.nih.gov/Sitemap/samplerecord.html#Top



-ncbi의 데이터 모델 : 사실 이걸 찾은 이유는 검색하고자 하는 쿼리(ncbi id)에 대한 이해가 있어야 할거 같아서
http://mail.ypu.edu.tw/~wnhuang/Bioinformatics/2.pdf


-eutil 에 대한 manual : 
http://www.ncbi.nlm.nih.gov/bookshelf/picrender.fcgi?book=coursework&part=eutils&blobtype=pdf


<위 manual 설명>
eutil 자체는 entrez system을 이용하기때문에 entrez 에 속해있는 database의 search만이 가능하다(근데 대부분 다 들어 있다). 각 DB에 맞는 UID (integer id)를 이용해야 한다(예: PMID for pubmed, GI number for nucleotide & protein DB). 
-the Common Entrez engine : 
   Esearch : 정해진 database에서 text query 매치되는 uid들을 return
   ESummary : query 로 uid를 받고 이와 매치되는 DocSum(Document symmary) return
   EGQuery : Esearch의 global 버젼으로 모든 entrez database를 뒤진다.
-Entrez Databases:
   EInfo : 정해진 database의 자세한 정보제공(indexing field와 어느 DB로 연결가능한 uid return)
   EFetch : 정해진 format으로 query uid에 대한 정보를 생성한다.
   ELink : input uid와 관련된 특정 DB에서의 uid를 return 한다 (Nucleotide에 GI number를 넣어주면 관련 SNP DB의 uid를 return)
-Using the Entrez history server :
   entrez search의 장점중에 하나가 (ncbi의 pubmed 사용시 느낄수 있는것인데) 한번 검색했던 결과 (uid list)에 대해서 임시적으로 저장을 한다. 그래서 그것들의 조합을 이용할수도 있다(그러니까 첨에 pubmed에서 "cancer"라는 키워드로 검색을 하고 두번째로 "gene"이라는 키워드로 검색한담에 이 두결과에 대한 or 내지는 and 가 가능). 이렇듯 검색 결과 나온 uid를 history server에 임시적으로 저장하고 나서 "query_key"(integer label) 와 "webEnv"(endoded server address)를 제공한다.
   EPost : uid 리스트가 history server에 임시 저장시키고 query_key와 webEnv를 제공한다.
   위의 ESearch 역시 history sever에 결과를 임시 저장한다. 


-query가 url을 만들시 대문자는 쓰이지 않으며(WebEnv 파라미터명과 boolean 제외) space는 +로 대신하고 query key를 나타내는 #문자는 url encoding 인 %23 을 대신한다.   




-biopython install :  이전에는 genbank parsing 하는 스크립트를 만들었는데 이번에는 biopython을 이용해 보려 한다. 아무래도 내가 짠거보다는 완성도가 높을거 같아서.
http://www.biopython.org/DIST/docs/install/Installation.html


솔직히 이번에 biopython을 처음 써봤는데.. 강추다. 특히 DNA sequence를 다루는 사람들에게 꼭 메뉴얼을 훓어보길 권장한다. 위의 eutil 역시 biopython에 모듈로 들어가 있다. 이것 때문에 기존에 내가 만들어 놨던 module을 싹 버리고 biopython 모듈을 쓰기로 마음 먹었다. 내껀.. 허접하므로.. 

Thursday, November 4, 2010

클러스터 관련...

요즘 회사에서 서버구축에 신경을 많이쓴다. human genome같은 경우에 assemble할려면 200기가 이상의 램이 필요하고... 뭐시기 뭐시기.. 하드웨어적인 감이 전혀 없는 별나라 이야기 같아서.. 이래선 안된다란 생각에 조금씩이라도 읽고 긁어보아보자라는 생각에 관련 링크 및 정보 정리를 한다.


우선은 클러스터 제작과정의 블로그 : 
http://blog.neosgen.net/84


위 사이트에서 나오는 노드 컴퓨터에 하드 디스크 없이 사용하는 네트워크 방법 NFS : 
http://hanyjuny.blog.me/40106543467

NFS이 간략한 정의 : 
리눅스를 비롯한 유닉스 운영체제 등 동일한 운영체제 상호 간에 파일을 공유하고자 할때 사용되는 서비스이다. NFS는 서버에 의해서 파일 시스템이 마운트되는 것이 아니라, 클라이언트에 의해서 서버의 파일 시스템이 마운트되어 클라이언트가 서버의 파일 시스템을 자신의 파일 시스템처럼 사용하는 것이 특징이다.


==> 쉽게 말하면 NFS(network file system)서버가 NFS 서비스에 필요한 패키지를 깔고 관련된 데몬을 띄운다음 /etc/exports 파일에다가 클라이언트에게 공유할 디렉토리명과 클라이언트 주소 그리고 관련 옵션을 적어주면 exports 파일에 적힌 내용대로 클라이언트들이 서버의 자원을 자신의 파일 시스템인 것 마냥 쓸 수 있게 해주는 것. 

Tuesday, November 2, 2010

contrasting chromatin organization of CpG islands and exons in the human genome

최박사님이 올해 낸 논문.
음. 대단하다. 항상 그의 생물학적 지식에 놀란다. 이야기를 만들어 내는 스킬과 함께.
사실 네이쳐 급에 나오는 데이터 생산의 의미에 논문보다 솔직히 난 이런 논문이 더 어렵다고 생각한다. 이미 있는 데이터를 가지고 재조명한다는 것은 인용한 논문이 이미 누구나 쉽게 관찰할 수 있는 내용은 다 한번 들쳐 본것이기 때문에 더 주의 깊은 관찰력 내지는 좀 더 넓은 시야를 요구한다. 어떻게 보면 요즘같이 넘쳐나는 데이터 속에 필요한 생물학자가 아닌가 싶다. 
그래서 그런지 논문의 초점이 데이터 프레젠테이션에 있는 것이 아니라 논리 전개에 있다. CGI를 들여봄으로 시작해서 promoter 부위와 genebody 부위로의 확장 결국 CGI에의한 exon position effect와 functional effect 가지고 exon의 methylation에 대한 설명을 이어간다(전개를 이해하는데 상당히 오랜 시간이 걸렸다. 흐름을 못잡는 바람에). 더욱 RNA-splicing과 연관 시키기 위해서 exon들을 inclusiveness 에따라 분류하고 nucleosome과 CpG methylation의 패턴을 확인한다. 그리고 이런 패턴이 H3K36me3 에도 나타나는것을 확인한뒤 그럼 왜 이 세가지 요인(nucleosome occupancy, DNA methylation, H3K36me3) 가 얽혀 있을까란 생각을 한다. 그래서 expression 양에 따라 

아 아직도 잘 정리가 안되네..

내 언제쯤 이 정도 될까싶다. 
아마도 집중력 차이다. 한 문제에 대해 오래 생각할 수 있는.. 숙성일 수도 있고


이번 epigenomic 저널 클럽 발표 논문이다.






ppt

Monday, November 1, 2010

각종 non-coding RNA

요즘 논문을 보면 각종 RNA에 대한 논문들이 많은데.. 그래서 이러한 각종 RNA에 대해 정리를 해야 한다는 생각이 들어 단순히 wiki를 링크 걸어본다. 읽어보고 정리는 언제 할지 미지수지만.. 시작이 반이라고.. 


non-coding RNAhttp://en.wikipedia.org/wiki/Non-coding_RNA


miRNAhttp://en.wikipedia.org/wiki/MicroRNA


piRNAhttp://en.wikipedia.org/wiki/Piwi-interacting_RNA


snoRNAhttp://en.wikipedia.org/wiki/SnoRNA


snRNAhttp://en.wikipedia.org/wiki/Small_nuclear_RNA


lincRNAhttp://en.wikipedia.org/wiki/Long_non-coding_RNA 
lincRNA는 large intergenic non coding RNA 의 준말인데.. 음  long non coding RNA의 한 종류이겠지...



Friday, October 29, 2010

miRNA-seq

miRNA seq에 대한 분석을 리뷰 하기위해.. 다음과 같은 논문을 정리한다.


1.discovering microRNAs from deep sequencing data using miRDeep (Nature computational biology 2008)
2.Current tools for the identification of miRNA genes and their targets (Nucleic Acids Research 2009)
3.miRTRAP, a computational method for the systematic identification of miRNAs from high throughput sequencing data (2010 Genome Biology)
4.DSAP: deep-sequencing small RNA analysis pipeline (2010 Nucleic Acids Research)


위의 1번 논문은 거의 NGS 데어터를 이용한 miRNA 분석의 초창기 논문으로 볼수 있으며
2번 논문의 경우 거의 computational prediction에 가까운 논문이고 3번은 전혀 들여가 보지 않았으며 4번의 경우 web-server로 최근에 나온 논문.


다른건 모르겠는데.. isomiRs를 찾기위한(?) alignment 및 multiple alignment에 대한 공부가 필요한 것 같다(한때 BSA 책 공부 할때 바짝 up 됐었는데...).




PPT

bit 연산자

-사례 1
context.Dr7 |= 1 << (available * 2)
"파이썬 해킹 프로그래밍"이라는 책을 보고 있는데 하드포인트브레이크를 설정할때 위와 같은 구절이 나온다. 도대체 |= 는 뭔가? 평소에 잘 보지 않은 연산자로 보아 비트 연산자 일거고.. 사실 위의 구절이 하려는 의도(디버그 레지스터인 Dr7는 0~3까지 디버그 레지스터인 Dr0~3까지의스위치 역할을 하기에 0~3번째 위치의 bit 를 on 해주기 위한 것)를 이미 알기에 대략 추측을 햇지만.. << 는 비트를 왼쪽으로 미는것일거고 |=는 다양한 시도 끝에.. 아 bitwise or인 | 를 실행 시키고 그 결과를 대입 연산자 = 를 통해 다시 context.Dr7에 넣는구나라는 것을 깨달았다.


available 이 1이라고 가정하고 bin(context.Dr7) =  0b1010이라고 하면 1<< (1*2) 이므로 bin(1<<(available*2)) = 0b100 이 될 것이기에 0b1010과 0b100을 bitwise or로 하면 0b1110이 될것이고 그 값이 Dr7에 들어 가게 된다.


결과적으로 변수의 특정 위치(그러니까 그 변수의 특정 포지션의 bit)에 특정값을 밀어 넣는다고 생각하면 된다.


 -사례 2
전에 포스팅한 reference free short read validation의 논문의 quarc인가 하는 프로그램을 들여다 보면 K-mer 를 int 형 배열에 넣는데, K-mer에 K를 2라고 가정하면 종류가 최대 4**2=16가지의 K-mer 가 생성되기때문에 
_base2int = int[16]
d_base = {'A':0, 'G':1, 'C':2, 'T':3} 으로 해서 "AC" 라는 K-mer가 있으면 value= 0 으로 초기화 한뒤 value += d_base['A'] ; value = value << 2; value += d_base['C'] 식으로 각 K-mer의 index value를 만드뒤 이 값을 이용해서 _base2int의 값에 접근.

Thursday, October 28, 2010

circos

용주형의 특명으로 살펴보게된 circos. 사실 알아두면 나중에 필요할 일이 생길거 같다는 느낌에 보게되었다.
circos는 comparative genomics 데이터를 visualization하기 좋은 툴이다. 물론 개발자는 여러다른 예를 들지만..

처음에 메뉴얼 찾는데 웹페이지를 막 뒤지고 다운 받을 수 있는 모든 pdf를 다운 받고 훓어본 결과...
http://mkweb.bcgsc.ca/circos/tutorials/course/ 로 가서 개발자가 여러 컨퍼런스에서 강연했던 자료인 handout이랑 slide에 대한 ppt를 다운 받고 handout은 글이 많으므로 slide만 보면 대충 내용이 파악된다.
xml 처럼(이런게 xml 형식인가?.. 여튼) 그리고자 하는 결과의 component들을 인풋 파일로 정의해주고 이를 태그로 나타내주면 그려주는 형식이다.

개발자의 홈피를 가면 재밌는게 많은거 같은데.. 이 사람.. 색다르다. CSH 에서 나오는 저널중에 하나의 표지도 이사람이 만들었다는데(DNA sequence를 GC content로 색깔을 나타내고 sequence fragment repeat frequency로 curve를 만들어서 그렸는데 보면 무슨 virus를 형광 다이로 염색한 듯한 모습이다).. visualization에 매력을 느끼게 한다.

Saturday, October 23, 2010

python 개발 환경 구축

요즘 보는 있는 python 책들 어디서나 IDE(intergrated development enviroment)로 eclipse와 PyDev를 추천한다. 해서 미루다 미루다 미루다 오늘 한번 새로운 IDE로 이를 써볼려고 install 중이다.


1.eclipse + PyDev install
의외로 간단하다. eclipse 홈피 가서 eclipse 다운받고(난 classic 버젼으로 다운 받음) 그뒤 eclipse 압축 풀고 그담에 실행 시키고 help 메뉴로 가서 install new software을 선택한 뒤에 work with란에 http://pydev.org/updates 라고 넣어준다음에 pydev를 클릭해서 인스톨한다.
그뒤 다시 eclipse를 재실행 시킨후 window 메뉴에서 preferences 메뉴를 선택한뒤 PyDev 트리 마이템을 펼쳐 Interpreter에 python을 선택한다. 그리고 나타나는 대화상자 상단에 python interpreter 섹션에 new 버튼을 클린한뒤에 browser에서 python실행 파일을 선택하고 open 버튼을 누르고 나면 선택한 인터프린터를 위한 라이브러리 리스트를 보여주는 대화상자가 나타나는데 ok 버튼을 누르면 설정이 끝나게 된다.
http://pydev.org/manual_101_install.html

2.동적 라이브러리란?
ctypes 이라는 python의 모듈이 있는데 C언어와 호완이 가능하게 하는 모듈로 동적 라이브러리는 가져다가 쓸수 있게 한다. 그런데 동적 라이브러리란 무엇인가. C 언어 include 설명때 본적이 있는것 같은데.. 그래서 링크를 걸어본다.
http://blog.naver.com/ddrkcodz?Redirect=Log&logNo=10069875361

3.gcc 설명 및 옵션
http://blog.naver.com/alan100?Redirect=Log&logNo=60045179899

3.동적 라이브러리 만들기
opcode (*.o)에서 프로그램에서 바로 동적 라이브러리 생성: http://adnoctum.tistory.com/231
정적 라이브러리 생성 후 이를 가지고 동적 라이브러리 생성 : http://blog.naver.com/mklife?Redirect=Log&logNo=150024128340

4.동적 라이브러리의 장점
http://blog.naver.com/no1rogue?Redirect=Log&logNo=30094944212

In conclusion
정리를 해보면.. 결국 ctypes 모듈로 C 언어로 된 라이브러리(동적 라이브러리) 를 사용하려면 
C 언어로 된 프로그램을 동적 라이브러리로 생성. 
오른쪽과 같은 libhello.c 프로그램이 있을때 
gcc -fPIC -c libhello.c   #컴파일을 하되 링크까지는 수행하지 않고 오브젝트 파일 까지만 생성한다.
gcc -shared -fPIC -o libhello.so libhello.o  #shared 옵션을 이용해서 공유(동적) 라이브러리 생성
오른쪽 그림과 같이 동적 라이브러리를 사용한 python 프로그램 생성


끝...


동적 라이브러리를 이용하는 C 언어 프로그램을 만들시에는 사용하는 동적 라이브러리가 /usr/lib64에 있어야 한다. (주의 : *.so 파일을 옮긴 뒤에 ldconfig를 해야 한다)

Thursday, October 21, 2010

knock out, knock in, knock down - genetically manupulated mice and the nobel prize

http://www.nejm.org/doi/pdf/10.1056/NEJMp0707712

The New England Journal of Medicine 에 2007년도에 나온 논문
2007년도 노벨상 생리의학 부문에 대한 설명이다.

Eukaryotic Cytosine Methyltransferases

Yong-Gun Lee and I decided to write introduction and method of paper which we are planning. I don't want to fit introduction shortly after finishing research for publishing the paper. that's not the right order of work. Though this process, we try to make up for lack of story line.

This paper is quite long, but it's really good to understand a general concept of methyltransferase. Actually it's true that I deferred a study on DNMT families. Through this time, I will organize these things.


This paper was published in Annu. Rev. Biochem. 2005.

Introduction
     Cytosine Methylation in Host Defense and Genome Stability
     Cytosine Methylation and Gene Regulation
     Conservation Between Bacterial and Eukaryotic Cytosine Methyltransferase
The cytosine methyltransferase families of eukaryotes
1.Dnmt1 : 처음으로 purified & cloned 된 DNA methyltransferase. Cedar가 hemimethylaed DNA가 unmethyl보다 빨리 methylation된다는 것을 발견. Dnmt1은 hemimethylated DNA 의 methylation에 preference 하나 de novo methylation 기능도 있는것처럼 이야기를 한다(어떤 factor에 의해 inhibit 되어 있을지도 모르지만 여튼 methylation pattern이 유지 된다는 의미에서 de novo methylation 이 block을 당해야 해서). 처음 murine erythroleukemia cells의 Dnmt1의 cDNA를 찾았고, 이것은 1620개의 AA(1100 N-termi + GKGK.. + 500 C-termi)로 되어 있고 그중 C-terminal 쪽의 ~500AA가 bacterial restriction methyltransferase M.Ddel과 유사함을 알아냄.
N-termi를 보면 진화 과정에서 functional 한 domain이 늘어나는것을 볼 수있다.N-termi에 핵안으로 Dnmt1을 import 시키는 시퀀스(NLS domain)와 replication foci와 결합하는 시퀀스가 있다. 원래는 G0기에는 Dnmt1은 degradation되나 두번째 start codon에서 부터 생긴 짧은 Dnmt1은 그렇지 않으며 이 짧은 것만 가지고 있는 mouse는 생존가능.
mouse의 oocyte에는 Dnmt1의 짧은 폼만 있으며 이를 Dnmt1o 라고 한다(이와 같이 truncation되어있는것은 oocyte에서의 Dnmt1의 많은축적과 연관되어 보임).
Dnmt1의 functional domain 중 BAH(bromo-adjacent homology) domain은 protein-protein interaction module로 chromatin regulation에 속하는 protein에서도 발견된다. cysteine-rich region은 zinc ions과 결합하는데 기능은 안알려져 있지만 모든 mammalian의 methyltransferase와 MBD(methyl-binding domain) protein와 CpG binding protein에서 발견. GK(glycine, lysine) rich region은 N-termi와 C-termi를 연결해주는데 histone H4의 N-termi 와 유사하고 posttranslational modification의 역할을 하는게 아닐까 추측된다.
biological role of Dnmt1 :
loss of function allleles of Dnmt1의 결과 1. genome이 demethlation되어있고 2. homozygous embryos에서는 대부분의 imprinted gene의 biallelic expression이 나타나고 3.Xist 유전자의 demethylation결과 activation되서 모든 X chromosome 이 inactivation되고 4.exogenous marker gene의 mutation rate 올라가며 5.ES cells이 undifferentiated 상태에서는 정상적으로 크다가 differentiative 상태로 유도되면 apoptosis로 인해 죽게 되고 6.마지막으로 LTR transposons의 발현이 많아진다.
Heterozygosity for mutations in Dnmt1 결과 : 이것이 실제 측정가능한 demethylation에  영향을 미치는 지는 정확히 밝혀지지 않았지만 1.Dnmt1을 wild type의 10%정도 발현하게 했더니 생존 가능하나 성장의 제한이 생기며 lymphoma에 걸리 확률이 크게 높아지며 2. Dnmt1의 overexpression의 경우 imprinted loci에 unmethylated allele이 de novo methylation되는 현상이 나타났다(이는 Dnmt1이 methylation maintenance 역할을 한다는 것에 반하는 것).
DNMT1은 human colon cancer에서 200배 가까이 많이 발현된다는 것이 보도되어 있다(어떤 랩에서는 human colon cancer에서 다른 양상을 보이기도 한다). 일반적으로 tumor에서 m5C가 적어지는 것을 발견하는데 이는 Dnmt1의 발현이 많아지는 것과 모순되는 결과다.또한 아직까지 Dnmt1 유전자의 amplication이나 mutation으로 인한 cancer의 보고가 없기때문에 이것이 꼭 oncogene이라는 증거는 없다.
2. MET1 of A.thaliana : 처음 plant의 DNA methyltransferase는 A.thaliana에서 발견되었으며 이는 Dnmt1과 유사하였고 이름을 MET1이라 하였다. 시퀀스는 Dnmt1와 거의 유사(GK rich region이 살짝다르지만 C-termi 는 50% identity, N-termi 는 24%), BAH domain이 존재, cysteine-rich region은 없다. invitro 상에서는 MET1의 methylation 기능이 보고되지 않았지만 in vivo 상에서 homozygous mutation이 demethylation되고 phenotypic abnormalities가 나타난다. MET1의 mutant는 CpG 에 국한되어 demethylation이 나타나고 오히려 CpNpG의 methylation은 증가함을 보인다. 또한 MET1이 de novo methylation에 관여한다는 논문이 있다. homozygous mutation에 의한 demethylation은 식물에서는 후손의 heterozygous mutant나 wild-type segregants에 유전된다. 이는 각 세대마다 methylation pattern이 reset되는 mammalian과 차이를 나타낸다. 이는 genome을 알더라도 그 genome의 history를 알지 못하면 phenotype을 알 수 없다는 이야기가 될수 있다.
3. The Dnmt3 Family : 야기mammalian genome은 Dnmt3 family에 속하는 Dnmt3A와 Dnmt3B를 encoding한다. 또한 세번째 homologue인 Dnmt3L도 있는데 이는 methyltransferase activity는 없고 germ line에서의 regulatory factor로의 역할을 한다. 식물(A.thaliana)에서는 Dnmt3 family인 DRM(domains rearranged methyltransferase) family 는 methyltransferase의 motif가 circular permutation 되어 있다. 또한 Apis mellifera(꿀벌)에서도 Dnmt3가 발견됨.
-DNMT3A AND DNMT3B IN MAMMALS : Dnmt3A와 Dnmt4B의 시퀀스는 거의 유사하고 PWWP domain, cysteine-rich zyinc-binding region, MBDs를 포함하고 있다. hemimethylated 와 unmethylated 를 같은 rate로 methylation 하며 거의 CpG를 methylation시킨다. 그러나Dnmt3A는 CpA도 methylation 시킨다고 알려져 있다. adult cell에서 tissue마다 양이 다르게 발현되나 기본적으로 Dnmt1보다 발현양이 적다.


-DNMT3L :

-DNMT3 FAMILY MEMBERS IN INVERTEBRATES :
-THE DRM FAMILY : RNA-GUIDED METHYLTRASFERASES IN PLANTS :


4.DIM-2 and RID in N.crassa
5.Chromomethylases
6.Dnmt2
Methylated DNA binding proteins
regulatory inputs that control sequence-specific DNA methylation
     interatcion of Repeated seqeunces
     regulation of cytosine methylation by histone H3 Methylation
     swi2/snf2 helicase homologues and cytosine methylation
     RNA directed DNA methylation
conclusion

Wednesday, October 20, 2010

Reference-Free validation of Short Read Data

plos one에 얼마전에 나온 논문
NGS 데이터 파이프 라인을 구축하는데 가장 처음의 step으로 들어가게 될 프로그램이라 생각해서 리뷰를 해봤는데...
genome bias 에 대한 이야긴 줄 알았는데 그건 아니다. 하긴 read 만 가지고 전체 genome이 아닌 bias된 게놈만이 시퀀싱 된 줄 알수는 없다만..

이 논문은 리드 자체에 bias가 있는지를 체크 해볼 수 있는 프로그램이라고 보면 될거 같다.
read 별 각 position 별로 AGTC가 잘 분포 되어 있는지 또 k-mer로 정했을때 그 k-mer또한 분포가 position별로 동일한지를 체크 할수 있다 (체크 할수 있다기 보다는 그림으로 그릴수 있다 (우리같이 수주를 하는 사람들한테는 가능한 그림이 많이 들어가는게 좋아보이기 때문에).

java로 된 프로그램인데 사실 내용은 너무나 단순하다. 그런데 그 단순한 프로그램에다가 왜 두번째 analysis는 넣지 않은건지.. java 전혀 모르는 나에게 고생하면서 k-mer 일 때의 frequency가 나오게 만들게 하다니.. 아 그리고 quality 파일 만들어주는 변수가 int형으로 선언되는 바람에 read가 무자게 많으면 overflow나서 음수값이 출력된다는거..(스크립트 언어에 익숙한 나로는 이거 찾느라 피곤하게 됐다.)


알게된 내용:
1. mac에서 개발할 프로그램을 archive로 packing하면 __MACOSX가 딸려 생성된다는 것(첨에 프로그램 풀고 나서 이 폴더가 뭔가 했다.http://floatingsun.net/2007/02/07/whats-with-__macosx-in-zip-files/ : 이것에 대해 한소리 하는 블로거).
2. solexa 의 read가 첫 10 base의 퀄리티는 좋을지 몰라도 상당히 시퀀스가 안정적이지 못하다(뒷부분의 퀄리티가 안좋아 져서 항상 그것만 고려해서 trimming을 햇는데 앞부분의 시퀀스도 썩 훌륭한 경향을 보이지 않다니... 얼마나 짤라내야 하는거야...).


PPT

Tuesday, October 19, 2010

linux distribution. choice of linux

http://www.linux.com/learn/docs/ldp/282996-choosing-the-best-linux-distributions-for-you

어떤 linux를 쓸까 고민하는데 위 링크가 이에 대한 나름의 조언이랄까.. 정리랄까..

use-case 별로 가장 괜찮은 linux를 추천한다.

hanil 서버의용도 best enterprise server라고 해야 하나.. 어떤 카타고리인지도 모르겠지만..
확실한건 fedora 가 많이 언급이 안된다. desktop으로는 ubuntu를 laptop으론 openSUSE를 추천하는데..

괜히 fedora 깔았나.. 난 푸른 계열의 기본 바탕화면이 좋은데..

gnuplot

http://hgh73.blog.me/90093480100

Sunday, October 17, 2010

linux server

--apache server--

일단 hanil 서버를 관찰 결과를 보자면 fedora 13을 깔았는데 기본적으로 모든 서버가 다 작동 되는걸로 보인다.

apache server의 위치는 /etc/httpd/ 그 안에 conf 폴더가 설정 폴더.
-httpd.conf 파일을 내용: 대부분 주석에 내용으로 파악이 가능. 
httpd.conf 를 수정뒤 syntax error가 없는 지 확인하기 위해서 httpd -t 명령어를 이용하면 된다.


"keepAlive"에 대한 설명 : http://cafe.rootcenter.com/130079030932
"MPM"(multi_processing modules) : perfork, worker, perchild 방식이 있고, 현제 시스템의 방식은 httpd -l 명령어로 확인가능
1. perfork : 응답 프로세스를 미리 띄어 놓고, 클라이언트의 요청이 있을 때 자식 프로세스가 반응할 수 있도록 하는 설정
2. worker : 프로세스 기반의 서버인 prefork와 스레드로 클라이언트 요청에 응답하는 혼합된 스레드 서버.
3. perchild : 고정 프로세스 개수를 설정한 후 각 프로세스는 특정 스레드를 개수만큼 작동시킴.
"Listen" : 웹서버의 서비스 포트로 80 이 기본이며 다른 포트 번호를 사용할 경우  ServerName 지시자에 명시해야 한다.


"ServerAdmin" : 시스템 관리자 Email 주소
"Directory tag:아파치 서버가 접근하는 각 디렉토리에 아떠한 서비스와 기능들을 허용하고 또는 삭제 할 것인가 설정하는 부분
1.options: "indexes" : 웹사이트에 접속했을 때 index.html이 없을 경우 웹서버 스스로 그 디렉토리의 파일들을 보여 줄것이라는 의미, ExecCGI: CGI 스크립트 실행 허용,
SSI 란? http://blog.naver.com/v_kazel_v?Redirect=Log&logNo=110028893616
2.AllowOverride : 웹문서 디렉토리에서 접근 제한 설정 파일인 .htaccess 파일을 작동시킬 것인지 여부를 결정(접근 제한을 위해선 AllowOverride를 All로 설정하고 .htaccess 만들어 놓는다),
3.order : http://blog.naver.com/hkh119?Redirect=Log&logNo=120021176586
"UserDir" : 루트 이외의 다른 계정으로 홈페이지를 운영하고자 할때 사용자의 웹문서 기본 기렉토리를 UserDir 지시자로 지정 해준다. 먼저 default 로 되어 있는 UserDir disabled를 제거 하고 일반적으로 UserDir public_html 이라고 지정하고 나서 를 지정한다.
"DirectoryIndex" : 클라이언트가 웹서버에 대한 요청이 있을 때 클라이언트에 전달하는 html문서의 순서를 지정해 주는 지시자
"AccessFilleName" : 각 디렉토리에서 접근 제어 정보를 가지고 있는 파일명을 지정하는 지시자.


--보안--
기본적으로 파일이 생성되면 umask에 값을 뺀 값으로 퍼미션이 잡힌다. umask 명령어로 기본 umask 값을 볼수 있다(일반적으로 umak는 0022).
SUID,SGID 프로그램은 보안상 위험하다.
<참고>파일 권한 {'x'1:,'w':2,'r':4}, user,group,other 순, 4자 permission 구조 sticky bit(1000) : 모든 사용자가 쓰고 삭제 할수 있는 디렉토리를 의미, 파일구조 맨마지막에 t가 붙는다, SetGID(2000) : , SetUID(4000)
http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=110&docId=64531886&qb=Y2htb2QgU2V0dWlk&enc=utf8&section=kin&rank=2&search_sort=0&spq=0&pid=g7VyQB331xwssZijnSKssv--138254&sid=TLsxtXIPu0wAAC2@F3g
find / -type f \( -perm -04000 -o -perm -02000 \) : SUID/SGID 프로그램 존재 확인 명령어
find / -perm -2 -print : 누구나 쓰기 가능한 world-writable 파일을 모두 찾는 명령어
find / -nouser - nogroup -print : 유저 권한이 없는 파일 검색
find / -name .rhosts -print : 원격 호스트 파일 (.rhost) 파일 검색. 이는 제거 하는것이 좋다.

charttr : 파일 속성을 변경해주는 유틸리티로 루트 자신도 파일을 변경하지 못하도록하는 것.
lastlog : /etc/passwd에 등록되어 있는 사용자의 최근 로그인 상황을 볼수 있다(자주 사용하지 않을 사용자가 로긴 되어있을 경우 크래킹을 의심).

Nmap : 포트 스캔 도구
yum list  : 설치된 패키지와 업데이트 가능한 패키지 보기
yum list installed <패키지 명> : 특정 패키지 설치 확인
yum list available 'somthing*' : yum 가능한 패키지 보기(somthing이란 이름이 들어간 패키지)
yum check-update : 업데이트 가능한 패키지 보기
yum install <패키지 명> : 패키지 설치
yum info <패키지 명> : 패키지 정보 알아보기

yum install nmap 으로 nmap 설치 이후 hanil 서버의 열린 포트를 알아본다
nmap -sS  
그뒤 특정 포트에 대한 설정을 iptable이용하여 하면 STATE 필드가 filtered로 변한다.

Snort : 네트워크를 통한 침입에 대한 탐지 및 경고를 시스템 관리자에게 알려주는 네트워크 침입 탐지 시스템으로 libpcap 라이브러리를 이용하여 네트워크상의 패킷과 설정 파일에서 정의된 룰에 의해서 침입 및 공격을 알려주는 도구.
yum install snort
/etc/snort/snort.conf 파일에 설정 내용이 들어 있다(var HOME_NET 로 설정).
외부에서 포트 스캔을 하거나 접근 시도가 있으면 /var/log/snort 에 기록이 남는다.

lastlog : 텔넷 접속으로 로그인한 사용자를 추적할때 사용하는 명령어로 /var/log/lastlog의 내용 출력
last : /var/log/wtmp 파일에 저장된 정보를 읽어 들여 로그인한 사용자의 정보를 출력 (last graphy21 : 특정 사용자 로그인 정보)
xferlog : FTP로 파일 전송 기록을 저장하는 파일 (more xferlog)
커널과 시스템에 관련된 로그 메시지들은 syslogd와 klogd 두개의 데몬에 의해서 /var/log/messages에 기록된다.

--SElinux (Security Enhanced Linux)--
a
--TCP/IP 네트워크 (iptable 설정)--