Friday, February 25, 2011

ensembl api

시작 url
http://www.ensembl.org/info/docs/api/index.html


Core databases and APIs


1. DB connection 
내가 이해한걸로는 우선은 registry 라는 모듈의(클래스 인듯..) load_registry_from_db라는 메소드로 DB에 연결을 한다. 아니면 ensembl_registry.conf 파일을 미리 만들어서 load_all()이란 메소드로 conf 파일에 명시된 DB로 연결한다. http://www.ensembl.org/info/docs/api/registry.html


2. Object Adaptors
Registry 모듈로 DB에 연결되었으면 DB의 데이터를 object(데이터를 캡슐화 한것같은..)로 가져와야 한다. 이때 object adaptor를 사용한다. 그러니까 DB의 데이터 덩어리를 object라고 하고 이것들을 생성하기 위해 DB의 구조 정보등을 담고 있어서 우리가 검색하고자 하는 query 정보만 주면 object를 가져오게 하는 adaptor를 생성해야 한다. 이때 사용하는 것이 Registry의 get_adaptor 메소드. 
http://www.ensembl.org/info/docs/api/core/core_tutorial.html


3. Object 
object는 slice, gene, exon등 데이터인데 이는 2번 스텝에서 생성한 adaptor를 이용해서 adaptor에 쿼리를 인자로 줘서 생성한다. object는 reference로 return하기 때문에 while과 shift를 사용하길 권장한다. 주의 할점은 data object에서 시퀀스를 뽑아내면 그것의 strand와 상관없이 항상 + strand로 나온다. position도 strand와 상관없이 +strand 기준으로 작은 bp가 start 이 된다.


slice : object represents a single continuous region of a genome ,
features : objects in the database which have a defined location on the genom
  • gene : grouping of transcripts
  • transcript : grouping of exons
  • exon 
  • translation : trascript 객체의 translation 메소드를 호출하면 나오는 것으로 CDS와 UTR을 위한것.
  • transcript객체에는 translate가는 메소드도 있는데 이는 protein sequence를 위한것
  • proteinFeature : amino acid sequence object. translation 객체의 get_all_proteinFeature()의 return object
  • Alignment Feature : slice 객체의 DnaAlignFeatures과 ProteinAlignFeatures 메소드로 각각 dna와 protein을 genome 에 alignment 한 feature
  • repeat : RepeatMasker 와 TRF로 찾아진 repeat region, slice 객체에서 get_repeatmasked_seq 메소드를 이용해서 인자에 따라 hard 또는 soft masked sequence를 얻어낼수 있다.
  • Maker : imported into the Ensembl database from UniSTS and several other sources (primer sequences, product size...). 




그러니까 slice는 그냥 dna 가닥이고 feature는 게놈상의 정의된 위치, 그러니까 
2번 스텝의 url 뒷내용은 각 object에 대한 이야기 므로 위의 내용이 API 사용의 큰 개념인 듯하다.


살짝 본 후 느낀바는...
DB에서 sql 데이터 받아와서 DB를 만든후 혹은 파일들을 다운 받아서 파싱해서 처리해야 하는 일을 ensembl api를 이용해서 DB의 구조는 신경쓰지 않은채 할 수 있다. 잘만 이용하면 사전에 필요한 귀찮은 작업을 하지 않고 api만을 이용해서 할수 있다. 또한 던진 쿼리에 return인 object가  여러데이터 들이 캡슐화로 이루어 졌기 때문에 그 object에 왠만한 데이터는 다 들어 있다. eutil 같은 경우에는 특정 파일에 대한 내용만 가져오는 식인데 ensembl api는 내 쿼리에 해당하는 자료들이 어떠한 구조를 이루어 넘어 오기 때문에... 말이 복잡한데 그냥 쉽게 말하면 eutil은 file이 넘어 오는데 반에 ensembl api는 C의 구조체 같은 (혹은 class)가 return되기에 자료의 접근만 잘하면 parsing없이 데이터를 뽑아 낼수 있는거 같다. 다만 문제라고 한다면 네트워크를 이용해서 데이터를 얻어 오는 거라서 좀 느리다는거(참기 힘든 정도는 아니다. 꽤 빠르다. eutil 보다도 어떻게 보면 나은듯??). 알아둘 만 하다.