t2activity

우선 1.7 버전으로 업그레이드 되면서 눈에 띄게 달라진 점이라면 T2 Activity palette, Taverna 2 preview의 2개의 Perspective가 화면 상단에 추가 되었구요. 사용할 수 있는 공개 플러그인들도 대거 추가되었습니다.

t2plugin

내년 6월인가에 Taverna 2 버전이 발표된다고 하는데 미리미리 그 기능들을 보여주는거 같습니다. Papers도 버전업되고 이것저것 연말이라 그런지 버전업 붐입니다. 얼른 업그레이드 해야지 ^^

Posted by hongiiv

2007/12/20 16:30 2007/12/20 16:30
, ,
Response
No Trackback , a comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/292

Taverna 사용 내역을 기록하기

Taverna에서는 자신이 수행한 워크플로우에 대한 내용을 데이터베이스에 기록해 놓을 수 있다. input과 output을 비롯해서 중간에 생성된 결과물까지 몽땅 데이터베이스에 기록해 놓았다가 언제든지 다시 실행해 볼 수 있다.

바로 LogBook이라는 플러그인이 그것을 가능하게 해준다.

LogBook

위의 그림처럼 자신이 수행한 워크플로우에 대한 모든 내역을 기록하고 다시 꺼내 볼 수 있도록 하고 있다. MySQL 데이터베이스만 설정해 주면 사용준비 끝이다.

자신의 작업 내역을 기록해 보고 싶다면 강력 추천한다.

또 한가지 Taverna에서 Beanshell을 가지고 java 프로그램을 작성할 때 외부의 jar 라이브러리를 불러다가 프로그램을 작성할 수 있는 기능이 있는데, Beanshell의 설정창 맨 마지막 탭을 보면 Dependencies 탭에 Local JAR file에 명시된 부분에 자신이 사용하고자 하는 jar 파일을 위치시키면 앞으로 Beanshell 스크립트에서 해당 라이브러리를 사용할 수 있다.

third_party

Posted by hongiiv

2007/11/21 21:19 2007/11/21 21:19
, , , , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/268

Taverna Plugins 개발하기

뭐하나 새로운걸 만드는 것보다는 Taverna에 통합하는 편이 나을듯 해서 Taverna 개발자 가이드를 보고 있습니다. 나름 이런저런 설명을 친절하게 해 놓았지만, 실제 뭔가를 만들기에는 좀더 공부를 해야겠습니다. 문서에는 가장 좋은 레퍼런스는 Taverna 자신의 소스코드라니 소스코드를 뚫어지게 쳐다보는 수 밖엔 ^^;;

Taverna를 이용하여 Plugins을 개발하기 위해서는 우선 SVN, SPI(Service Provider Interface), Maven에 대한 내용을 숙지하고 시작해야 한다.

SVN은 Taverna의 소스코드를 다운로드 받기 위한 것이고, SPI와 Maven은 실제 plugins을 만들고 빌드하기 위해 필요한 내용이다. 여기에 덧붙여 eclipse에 대해서 알면 더 좋다. 개발자 가이드에도 나와 있듯이 eclipse와 maven을 연동해서 plugins 코드를 작성하고 빌드하는것을 추천(?)하고 있다.

앞서 언급했듯이 Taverna는 SPI라는 프로그래밍 인터페이스(API)를 통해서 프로그래밍 할 수 있도록 하고 있는데, 일반적으로 인터페이스만을 정의하고 실제 구현을 통해 plugin을 개발하도록 되어 있다. 예를 들어 JCE의 암호 알고리즘이나 XML Parser의 경우 인터페이스만을 정의하고 실제 암호알고리즘이나 XML Parser는 서로 다른 곳에서 제공하는 혹은 만들어서 사용할 수 있도록 하고 있다. Taverna에서는 12개의 SPI를 제공하고 있는데 중요한 몇가지를 살펴보면 다음과 같다.

  • org.embl.ebi.escience.scuflworkers.java.LocalWorker
  • org.embl.ebi.escience.scuflui.spi.UIComponentFactorySPI
  • net.sf.taverna.perspectives.PerspectiveSPI
LocalWorker는 Available Processors의 Local Java Widget 부분에서 사용할 수 있는 Processors plugins을 만들때 사용하는 인터페이스다. 여기서 입력과 출력 등을 구현해서 사용하면 된다.

그럼 이제부터 실제로 plugins을 개발해 보도록 하자. 첫번째로 프로젝트의 구조(폴더)를 다음과 같이 작성한다.

  • src/main/java/ - 메인 자바 소스코드
  • src/main/resources/ - 정의된 SPI(META-INF/services/)와 리소스(이미지, 아이콘 등)
  • src/test/java/ - 자바 유닛 테스트
  • pom.xml - 프로젝트 설정파일로 Maven에서 사용된다.

그림. plugins을 개발하기 위한 기본 구조
maven_structure
그림. org.embl.ebi.escience.scuflworkers.java.LocalWorker 인터페이스 구성

사용자 삽입 이미지

리스트. TestPlugins.java - plugins 예제

package org.homelinux.socmaster.taverna.scuflworkers.io;

import org.embl.ebi.escience.scuflworkers.java.LocalWorker;
import uk.ac.soton.itinnovation.taverna.enactor.entities.TaskExecutionException;

public class TestPlugins implements LocalWorker{
    public String[] inputNames() {
            returin new String {"inputlist1", "inputlist2"};
    }
    public String[] inputTypes() {
           returin new String {"text/plain", "text/plain"};
   }
    public String[] outputNames() {
           returin new String {"outputlist"};
   }
    public String[] outputTypes() {
           returin new String {"text/plain"};
   }
    pubic Map execute(Map inputMap) throws TaskExecutionException {
            HashMap outputMap = new HashMap();
            String mergeString = inputMap.get("inputlist1")+inputMap.get("inputlist2);
            outputMap.put("outputlist", mergeString);

            return outputMap;
   }
}

위 코드는 입력으로 받은 두 개의 문장을 합쳐서 출력으로 내보내는 plugins 예제로 LocalWorker의 execute(), inputNames(), inputTypes(), outputNames(), outputTypes() 메소드를 구현하면 된다.

src/main/resource/META-INF/services/org.embl.ebi.escience.scuflworkers.java.LocalWorker 파일을 생성하고 자신의 SPI를 구현한 클래스 이름을 적어준다.

$ cat src/main/resource/META-INF/services/org.embl.ebi.escience.scuflworkers.java.LocalWorker

org.homelinux.socmaster.taverna.scuflworkers.io.TestPlugins

마지막으로 pom.xml 파일을 통해서 repository 등을 설정하고 해당 plugin에 대한 설명을 넣은 plugin-test-0.1.xml, plugins의 목록을 담은 pluginlist.xml을 각각 생성하여 publishing 하면 된다.

pluginlist.xml은 http://socmaster.homelinux.org/taverna/1.5/plugins/로 접속 가능한 곳에 위치하도록 한다.

리스트. pluginlist.xml
<plugins>
    <plugin>plugin-test-0.1.xml</plugin>
</plugins>

plugin-test-0.1.xml도 http://socmaster.homelinux.org/taverna/1.5/plugins/에 위치하도록 한다.

리스트. plugin-test-0.1.xml
<plugin>
     <name>TestPlugins</name>

      <description>
           Example Taverna Plugins
      </description>
      <identifier>org.homelinux.socmaster.taverna.zzzzzzzzzzzzz</identifier>
      <version>0.1</version>
      <provider>socmaster.homelinux.org</provider>

      <repositories>
           <repository>http://socmaster.homelinux.org/maven/repository/</repository>
      </repositories>

      <profile>
           <artifact groupId="socmaster.homelinux.org.taverna" artifactId="TestPlugins" version="0.1"/>
      </profile>

      <taverna>
      <version>1.5</version>
      </taverna>

</plugin>

만들어진 jar 파일은 http://socmaster.homelinux.org/maven/repository/org/homelinux/socmaster/taverna/TestPlugins/0.1에 위치하도록 한다.

그림. Taverna에서 plugin 등록하기

plugin_sites

그림. 최종적으로 완성된 프로젝트 구조

final_source_structure


Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.

Posted by hongiiv

2007/10/24 21:24 2007/10/24 21:24
, , , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/245

Biopipe 경진대회 문제를 풀면서 8,000여개의 multiple 서열을 sort하는 beanshell 스크립트를 만들었는데, 로컬에서 돌아가다 보니 좀 시간이 걸렸다. 간단하게 웹 서비스를 만들어서 휘리릭 배포해서 쓰고 싶어졌다. Axis와 JWS를 이용해서 간단하게 해결하자.

우선 Tomcat에 Axis를 설치한다. Axis를 다운로드 받아서 common/lib에 라이브러리들 옮기고 webapps/axis 디렉토리를 Tomcat의 webapps에 옮긴 다음 http://hostname:8080/axis 로 가면 첫화면에서 validation을 선택하여 필요한 라이브러리를 체크하고 없다면 추가해준다. 이때 라이브러리는 java의 lib/ext 디렉토리에 해당 라이브러리를 옮겨주면 끝.

이제 필요한 java 클래스를 만들고 확장자를 .jws로 한 후 Tomcat의 webapps/axis에 넣어준 후 웹브라우저로 접속해 보면 끝.

다음과 같이 test.jws 파일을 만들고 webapps/axis에 넣어준다.

public class test {
        public String testMethod(String testString) {
                return "Hello " + testString;
        }
}

웹 브라우저에 http://hostname:8080/axis/test.jws로 접속하면

jws1

Click to see the WSDL을 클릭하면 wsdl 파일을 볼 수 있다.

jws2

이제 Taverna에서 호출한 결과는 다음과 같다.

jws3

jws4

이상으로 axis와 jws를 통해서 초간단 웹 서비스를 생성하고 이를 Beanshell 대신 사용한다면 재사용 측면이나 높은 서버의 성능을 사용한다는 여러가지 장점을 얻을 수 있겠다.

Posted by hongiiv

2007/08/31 14:23 2007/08/31 14:23
, , , ,
Response
No Trackback , 4 Comments
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/228

Biopipe 경진대회 단백체 문제

이전까지는 유전체 문제를 풀어보았는데 이제 단백체 문제를 풀어보도록 하겠다. KOBIC의 Biopipe를 통해서 문제를 풀어야 하는데, 계속해서 Taverna를 이용해서 문제를 풀고 있으니... 경진대회에 참가하려면 Biopipe로 작성해야 하는데 ㅋㅋ

자! 그럼 단백체 1번 문제를 살펴보자. OMIM 데이터베이스를 이용해서 질병관련 유전자를 찾고 이 유전자의 Symbol을 이용해서 단백질 서열을 얻은다음 EBI interproscan을 통해 얻어진 정보를 이용해 막관련 단백질을 추출하여 대상 질병에 대한 Pathway 정보를 얻는것이 1번문제이다.

처음으로 일본의 XML Central of DDBJ에서 제공하는 OMIM 관련 웹 서비스( http://xml.nig.ac.jp/wsdl/OMIM.wsdl)의 search 메소드를 이용해서 질병관련 유전자를 검색한다. search메소드는 키워드(cancer, diabetes)로 주어진 질병에 대해 OMIM 데이터베이스를 검색해서 반환하는 메소드이다. 이 메소드의 결과로는 OMIM ID list가 반환된다. 반환된 결과의 OMIM ID에는 접두사로 asterisk(*), number(#), plus(+), percent(%)가 붙는데, 각각의 의미는

*     gene with known sequence
+     gene with known sequence and phenotype
#     phenotype description, molecular basis known
%     mendelian phenotype or locus, molecular basis unknown
no prefix     other, mainly phenotypes with suspected mendelian basis

OMIM의 search 결과의 맨 마지막 부분을 보면 ";" 뒤에 gene symbol이 있다. 이 세미콜론(;) 뒤의 gene symbol만을 추출해서 convert_GeneSymbol_to_ProteinRefseq (http://sequenceome.kobic.re.kr/WS_Sequenceome/SearchDB?wsdl)을 통해 해당 gene symbol의 protein RefSeq를 얻으면 된다. convert_GeneSymbol_to_ProteinRefseq 메소드는 두개의 인자를 받는데, 하나는 gene symbol이고 다른 하나는 NCBI TaxID이다. Homo sapiens의 경우 9606이므로 convert_GeneSymbol_to_ProteinRefseq("BCAS1","9606")하면 BACS1의 Protein RefSeq를 얻을 수 있다.

OMIM의 결과로 부터 gene symbol을 추출하기 위해서 OMIM의 결과를 넣으면 gene symbol만을 String 형태로 뽑아내는 스크립트를 작성한다.

gene symbol 추출하기 BeanShell Script

more..


위 스크립트의 결과로 "PCANAP2,PCANAP5,PCANAP8" 형태의 symbol이 생성된다. 이를 convert_GeneSymbol_to_ProteinRefseq 메소드로 돌리면 " SAFB:NP_002958.2,ABCC1:NP_063956.1&NP_063957.1&NP_004987.2&NP_063915.2&NP_063953.2&NP_063954.2&NP_063955.2"

위와 같이 gene symbol:protein Refseq&protein Refseq 포맷으로 결과를 반환한다. 여기서 또 protein Refseq만을 뽑아내는 스크립트를 만든다.

protein Refseq 추출 BeanShell Script

자! 이젠 이렇게 얻은 Refseq에 대한 실제 서열을 가져온다. Biopipe 경진대회 문제에서는 refseq2seq 메소드를 사용하라고 되어 있는데, 이건 KOBIC에서 만든 메소드로 추측된다. 따라서 WSDL 주소를 모르겠다. ^^;; 그러나 여기 DDBJ의 RefSeq 모듈( http://xml.nig.ac.jp/wsdl/RefSeq.wsdl)의 search 메소드나 유전체 문제에서 사용한 EBI의 WSDbfetch를 이용하면 FlatFile 형태의 결과가 반환된다. 이렇게 해서 얻은 정보중 서열만 추출해낸다.

이렇게 얻은 질병 관련 protein 서열(정말 무지 힘들게 얻은)을 EBI interproscan을 통해 막관련 단백질을 추출한다. 근데 이부분에서 어떻게 interproscan에서 막관련 단백질만을 추출하는냐 지인에게 물었더니 Go terms의 Cellular Component의 membrane이 있다면 막관련 단백질이라고 하니 이부분을 찾으면 막관련 단백질을 찾는건 끝이고, gi number를 어떻게든 찾아서 Pathway정보만 얻으면 된단 말이지...

EBI interproscan예

more..

위 서열을 interproscan에 넣으면,

more..


막관련 단백질의 gi number를 이용해서 대상질병에 대한 Pathway정보를 얻으면 된다. Pathway정보는 유전체 문제에서 다루었기 때문에 넘어간다.

이상 끝. 모자란 부분은 다음에 추가~!^^;;

Posted by hongiiv

2007/08/26 18:40 2007/08/26 18:40
, ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/223

Biopipe 경진 대회의 연결툴 요청 답변

아래 내용은 Biopipe 경진대회에 연결툴 요청에 관한 답변이다. 파일형태의 output을 String형태의 input과 연결하기 위한 File2String과 그 반대인 String2File에 대한 모듈을 작성했다고 연락이 왔다. Biopipe 홈페이지에는 이 내용이 없는것 같아서 답변내용을 블로그에 올린다. 다른 참가분들도 이모듈을 이용해서 디자인 하시길...^&^

Reply:
1. 기존의 모듈이 나타나지 않은 이유 : searchSimple 이란 모듈이 온톨로지상에 3개 이상이 있습니다. 따라서 참가자분께서 사용한 것과 제가 만든 Adapter가 일치하지 않았습니다.

2.
현재상태 : 참가자분께서 만든 모듈간의 Adapter를 만들었습니다. 그리고 추가적으로 Ontology상에 String2File, File2String이란 모듈을 추가하였습니다.

3. 적용방법 :
3.1 현재 두 모듈을 선으로 연결해서 관련 Adapter를 사용합니다.
3.2 String2File, File2String 모듈을 이용하여 디자인도 가능합니다.

감사합니다. 좋은 파이프라인을 구축하시기 바랍니다.

Posted by hongiiv

2007/08/25 23:59 2007/08/25 23:59
, , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/222

Biopipe 경진대회 Taverna를 이용한 문제2 풀이

새로운 문제가 오늘 따근따근하게 올라왔으니 한번 어떤가 풀어봐야겠다. 문제 풀이라기 보단 그냥 힌트로 블럭 조립하는 느낌이다.

새로운 문제의 1단계는
'Candidatus Carsonella ruddii PV'라는 세균의 전체 유전체 서열을 FASTA 포맷으로 가져오고 코딩서열 (CDS) 목록을 포함하는 유전체의 주석 정보를 GenBank flat file 포맷으로 가져오기 바랍니다.

DDBJ에서 제공하는 GIB 데이터베이스의 웹 서비스를 이용하면 된다. 우선 Candidatus Carsonella ruddii PV 라는 세균의 GIB에서 제공하는 ChID를 알아야 이 세균에 대한 정보를 얻을 수 있다. 따라서 이름을 가지고 ChID를 얻어오는 getChIDFromOrganismName을 사용한다. getChIDFromOrganismName는 GIBV(http://xml.nig.ac.jp/wsdl/GIBV.wsdl)와 Gib( http://xml.nig.ac.jp/wsdl/Gib.wsdl)에 둘다 존재한다. GIBV는 Viruses에 대한 데이터베이스이고, Gib는 microbial genomes에 대한 데이터베이스이다. 문제로 출제된 'Candidatus Carsonella ruddii PV'라는 세균을 계속해서 GIBV의 getChIDFromOrganismName으로 찾으니 나오나!!!


다행히 Gib의 getChIDFromOrganismName으로 ChID(chromosome ID)가 Crud_PV: 임을 알아내고 바로 이 결과를 getFastaFile(type인자로 genome을 주고)로 보내서 전체 서열에 대한 FASTA포맷의 결과를 얻어냈다.

23

이제 코딩서열(CDS) 목록을 포함하는 유전체의 주석정보를 가지고 오면 된다. 그것도 GenBank Flat File형태로 이건 getFlatFile을 사용했다. getFlatFile과 getFastaFile은 모두 ChID를 인자로 주어야 한다. 그외 CDS 정보만 얻길 원한다면 getCDS를 통해서 CDS정보만을 가져 올 수 있다.

21

23

두번째로는 ORF의 아미노산 서열을 찾아 multi-fasta 포맷으로 저장하는 것이다. getFasta로 얻은 전체서열에 대한 ORF는 EBI에서 제공하는 nucleic_gene_finding의 getorf를 사용하면 된다. getorf의 sequence_direct_data를 getFasta의 fasta서열로 지정하고, sformat을 fasta로 지정하면 해당 서열에 대한 ORF를 반환한다. 결과로 얻은 multi-fasta 형식의 ORF 아미노산 서열은 18,156 라인의 8,610개의 서열에 해당하는 좀 많은?? 서열이기 때문에 이와 상동성이 높은 단백질 데이터베이스인 SwissProt에 대해 Blast를 수행하기에는 좀 많다. 그래서 문제에서도 서열이 긴 순서대로 20개정도만 선택해서 가져오기를 바라고 있다. ^^;;

여기서 또하나의 문제는 20개건 만개의 서열이건 이를 Taverna에서 Blast 수행하면 하나의 서열만 수행한다는 점이다. DDBJ에서 제공하는 simplesearch나 EBI에서 제공하는 Blast, WuBlast도 multi-fasta포맷으로 여러개의 서열을 지정해도 하나의 서열만 blast를 수행하기 때문에 Blast를 수행할때 서열을 하나씩 분리해서 List형태로 만든 다음 Blast를 수행해야 한다. 따라서 다음과 같이 BeanShell 스크립트를 만들어 multi-fasta포맷의 서열을 여러개의 List로 바꾸어 blast를 수행한다.

import java.util.*;

StringTokenizer tokenizer = new StringTokenizer(input,">");

int tokensize = tokenizer.countTokens();
String[][] output;
output = new String[tokensize][1];   
int i =0;

while(tokenizer.hasMoreElements()){
    output[i][0] = ">" + tokenizer.nextToken();
    i = i+1;
}

위의 BeanShell 스크립트에다가 서열길이가 긴 20개만 sort해서 추출하는 코드를 추가하면 된다. 다 보여주면 재미 없으니깐 sort하는 부분은 ㅋㅋㅋ

Taverna의 List 형태로 분리된 fasta 포맷의 ORF

list

이렇게 List 향태로 분리한 후 Blast를 수행해야 모든 서열에 대해 Blast가 가능하다.
이렇게 List로 분리된 서열을 EBI의 WuBlast를 수행한다.

blast

서열길이가 긴 순서대로 20개에 대해 WU-Blast를 수행한 결과는 위와 같다.

final_problem_2

위 다이어그램은 최종적으로 작성된 다이어그램이다. 마지막으로 ORF의 정확한 시작코돈의 위치와 처음 얻은 CDS정보와 Blast의 결과를 비교하면 끝.


Posted by hongiiv

2007/08/23 16:22 2007/08/23 16:22
, ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/221

KOBIC의 Biopipe 경진대회 - 삼일째 오후

어제 포스팅에서 언급했던것과 같이 Biopipe를 통해 문제를 해결하려고 Biopipe 사이트에 들어가서 차근차근 진행하다가 내가 잘못해서 그런지 몰라도 처음부터 꽉 막혀 버렸다.
WSDbfetch_fetchData를 통해서 서열을 얻고 이를 protein 서열로 바꾸기 위해nucleic_translation_transeq를 사용했다. 각각의 모듈을 독립적으로 실행시 잘 돌아간다. 전체적으로 돌리면 아무런 반응이 없다. 시간이 흐른뒤 점심을 먹고 다시 해보니 잘 된다. 이런 QnA란에 올랐던 글을 지웠다. 아직 답변이 올라오기 전이라. 내가 뭔가 잘못했던건가???

그래 이번엔 searchSimple을 통해 protein 서열에 대해 blastp를 수행하려고 했다. nucleic_translation_transeq의 결과는 파일 형태인데 searchSimple의 입력은 string이다. 어쩔 도리가 없다. 또한 searchSimple은 서열데이터만 넣어야 하니 >로 시작하는 첫줄은 날려야 한다. Taverna에서는 일도 아닌것이 여기서는 ㅠㅠ 어떡하란 말이지. 이런 기본적인 입출력 부분에서 꽉 막혀버리다니.

그리고 이건 오전에 좀 화가 나서 쓴 내용이다.

"코빅은 문제 해결을 통해 프로그램의 질적인 완성도를 높이고, 다양한 요구사항을 개발에 반영하여...(이하생략)"


좋은 생각이다. 테스터들이 자발적으로 참여하기 어렵다면 이런 경진대회를 통해서 사용을 유도하고 이에 따른 버그와 요구사항을 이끌어 낸다. 그런데 이런 처음부터 너무 난관이 많다. 베타버전의 버그테스트는 버그테스트 대로 진행하고, 이러한 버그가 어는 정도(?) 해결한 후에 경진대회를 했으면 하는 생각이다. 이건 경진대회<버그사냥대회, 이러다가 나같은 사용자는 짜증나서 먼가 해보기전에 죽어버릴지도 모른다.

그래 이제 좀 돌아가는것 같으니 위의 내용은 취소하겠다. 그런데 갑자기 Solve Problem에 문제가 한셋트(?)씩 더 생긴것이 아닌가 아무런 공지 없이 헉^^;;
더군다나 자신이 만든 My BioPipe에 있는 list가 삭제가 되지 않는다. 아니 어디있는지 없는지 모르겠다. 그런데 SubmittedBiopipe의 내용중 일부가 사라졌다. 분명히 cho란 author의 biopipe가 있었는데 아주 유용했는데^^;; 이런 어떻게 하는거지 나도 하나 올렸는데 어떻게 지우는 건지 통 모르겠다. ㅜㅜ

일회성 이벤트가 아닌 일회성 툴이 아니라 Taverna나 myexperiment.org와 같은 멋진 아니 더 훌륭한 Biopipe가 되길 바라면서 계속적으로 경진 대회에 관한 글을 포스팅 할 예정이다.

Posted by hongiiv

2007/08/23 14:02 2007/08/23 14:02
, , ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/220

Biopipe beta 경진대회 3단계 문제 풀이

1,2 단계는 그럭저럭 해볼만 하다. 하지만 3단계는 ㅋㅋ

3단계 문제는 Blast의 결과 정확히 말하자면 blastp의 결과물을 가지고 유용한 정보 Pathway, PPI정보등을 찾는것이다. 이건 무한한 상상력을 발휘하면 되겠다.

그럼 이제부터 풀어보도록하자.

우선 blast 결과물은 어떠한 DB를 대상으로 했는가가 중요하다. Pathway 정보는 KEGG를 통해서 알수 있는데 Blast의 결과에 나오는 ID와 KEGG에서 사용하는 ID가 서로 상이하기 때문에 이를 KEGG ID로 변환하는 과정이 필요로 한다. 이것은 KEGG의 bconv라는 모듈을 통해서 가능하다. NCBI GI의 경우 ncbi-gi:번호 형식으로 bconv를 수행하면 ncbi-gi에 해당하는 KEGG ID를 반환한다.
External database  Database prefix
----------------- ---------------
NCBI GI ncbi-gi:
NCBI GeneID ncbi-geneid:
GenBank genbank:
UniGene unigene:
UniProt uniprot:
OMIM omim:
각각의 BLAST의 결과에 맞도록 prefix를 지정해서 KEGG ID를 얻어서 KEGG를 통해 pathway정보를 get하면 된다. 나는 SWISS Prot를 DB를 가지고 Blast를 수행했기 때문에 UniProt을 선택해서 사용했다.

http://phoebus.cs.man.ac.uk:1977/axis/services 에서 제공하는 blastsimplifier를 통해 Blast 결과 파일을 파싱해서 UniProt ID만을 추출이 가능하다. 다음 그림은 lastsimplifier를 통해 Blast 결과에서 Gene ID만을 추출한것이다.

16

추출된 ID를 uniprot: 접두사를 붙여서 bconv를 수행한다. 접두사를 붙이는 BeanShell 스크립트는 다음과 같이 모양이 되겠다.

==========================================================
String[] split = input.split("\n");
Vector nonEmpty = new Vector();

for (int i = 0; i < split.length; i++)
{       
    String trimmed = split[i].trim();
    nonEmpty.add(trimmed);   
}

String output = "";

for (int i = 0; i < nonEmpty.size(); i++)
{
    output = output + "uniprot:" + (String) (nonEmpty.elementAt(i) + "\n");
}
==========================================================

이렇게 해서 얻어진 Blast 결과에 대한 KEGG ID를 get_pathways_by_genes를 통해 돌리면 해당하는 Pathway 정보를 얻을 수 있다. 이렇게 얻어진 Pathway를 그림 파일로 얻기 위해서는 color_pathway_by_elements를 통해 pathway파일의 URL을 얻은 후 Local Services의 net에 있는 Get image from URL을 통해 얻으면 다음 그림과 같이 멋지게 Taverna에서 Pathway를 볼수 있다.

그런데 여기서 Blast의 결과에 대한 KEGG ID가 모두 Pathway 정보를 가지고 있는 것은 아니다, KEGG에서는 꾸준히 Pathway정보를 넣고 있는 중이기 때문에 혹 저처럼 get_pathways_by_genes을 수행했는데 결과가 없어서 뭐야 이거 안되는건가 하고 하루를 낭비하지 말길... pathway 정보가 없는 것도 있으니 테스트할때 주의해야겠다. 괜히 나는 pathway 정보가 없는 KEGG ID가지고 하루종일 결과가 안나온다고 씨름을 했으니.. ^^;;

각각의 그림은 bconv의 결과로 얻어진 KEGG ID, bconv에서 KEGG ID만을 추출, get_pathways_by_genes의 결과인 Pahtway와 Pathway 그림파일이다.

11

12

13

14

지금까지의 문제 풀이는 Biopipe가 아닌 Taverna에서 이루어졌다. Biopipe에서도 수월하게 진행될 수 있는지 내일 한번 해봐야겠다.


Posted by hongiiv

2007/08/22 18:35 2007/08/22 18:35
, ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/219

Taverna를 이용한 Biopipe 경진대회 문제 풀이

아래 포스팅에도 언급했던 이번 국가생물자원정보관리센터(KOBIC)에서는 경진대회에 참가하는 방법이 두가지가 있다. 첫째, 직접 생물학적 의미를 가지는 파이라인을 본인이 직접 제작하는 방법 둘째, 제출된 문제를 해결하는 방법

우선 아이디어가 없기 때문에 ^^;; 제출된 문제를 해결해보기로 했다. 문제는 간단했다. 유전체와 단백체를 나뉘어 있으며 각 3단계의 총 6개의 문제가 제출되어있다. 각 문제는 독립적인 문제가 아니라 연결되어지는 말그대로 단계별로 풀어야한다.

유전체의 1단계 문제는 관심있는 유전자 아이디(refseq ID)를 이용하여 Nucleotide 서열을 받아오는 문제이다.

그럼 1단계의 문제를 풀기 위해서는 우선 refseq ID를 입력으로 넣으면 해당 Nucleotide 서열을 반환하는 서비스가 있느냐? 하는 것부터 해결해야 한다. 경진대회에서는 1단계에서 사용가능한 웹 서비스를 힌트(?)형식으로 제공하고 있기 때문에 쉽게 풀수 있지만, 수많은 웹 서비스중에서 내가 원하는 기능(내가 원하는 Input을 받아 Output을 내놓는)을 어떻게 찾을것인가의 문제는 웹 서비스를 Omics와 Task별로 분류해서 보여주고 Search 기능과 해당 웹서비스를 선택하면 간단한 설명이 나오기 때문에 조금만 주의해서 찾아본다면 그다지 어렵지 않을 것이다. 그리고 전 포스팅에서도 말했듯이 국내에서 개발되었다는 장점!! 물어보면 된다. 대답도 지금 베타 기간이라 빠르다. 이러한 빠른 피드백이 베타기간, 경진대회기간만이 아니라 꾸준히 되어야겠지만...

다시 1단계에서 사용가능한 웹 서비스는 EBI의 http://www.ebi.ac.uk/Tools/webservices/ 에서 다양한 웹 서비스 중에서 Biological 데이터베이스 검색하는 WSDbfetch 서비스는이다. WSDbfetch는  EMBL, UniProt Cluster, InterPro, RefSeq genome등 다양한 데이터베이스의 검색을 지원하고 있다.

그럼 이제 WSDbfetch를 이용해서 1단계 문제를 해결하도록 해보자.

Taverna를 실행하고 Service Panel에서 WSDbfetch의 WSDL 파일을 추가해서 해당 웹 서비스를 사용할 수 있도록 설정한다. Available Processors를 마우스 오른쪽을 클릭하면, Add New WSDL Scavenger를 선택해서 WSDL의 위치(http://www.ebi.ac.uk/tools/webservices/ ··· tch.wsdl)를 입력한다.

1

그럼 위 그림처럼 웹 서비스가 사용 가능하도록 등록된다. 간단하게 웹 서비스의 형태는 RPC 형태이고 사용가능한 operation은 총 7개로 이중 fetchData를 사용할 것이다. fetchData를 선택하고 마우스 오른쪽 버튼을 눌러 Add to Model을 선택하면 Advaned model explorer에 fetchData가 추가 된다.

2

fetchData는 3개의 input(query, format, style)과 2개의 output(attachementList, fetchDataReturn)이 있다. input에 대해 값을 지정하는 방법은 3가지정도로 요약될 수 있는데, 입력에 대해서 기본값을 지정하는 방법, Workflow inputs를 통해 입력하는 방법, 문자 상수(String Constant)를 이용해 입력하는 방법이 있다.

그럼 문자 상수를 이용해서 값을 지정해 보자. 다시 Service Panel을 보면 Local Services 항목에 String Constant를 선택해서 Add to Model을 선택한다. Advanced model explorer에 3개의 String Constant를 만들고 각각에 이름과 값을 지정한다.

3

query 상수의 값에 RefSeq:NM_005700, format 상수의 값에 fasta, style 상수의 값에 raw를 지정하고 fetchData의 입력값에 각각 연결한다. query 상수의 value를 선택하고 Processors의 fetchaData의 query를 선택해서 연결시킨다. 마찬가지로 format, style도 상수의 값과 input을 연결시킨다.

마지막으로 output을 생성한다. Advanced model explorer에서 Workflow outpus를 선택하고 output을 지정한다. 만들어진 output과 fetchData의 fetchDataReturn과 연결시킨다.

5

모든 연결을 완성하면 다음과 같은 다이어그램이 된다.

6

상단의 Results를 클릭해서 실행을 해보면 Status상에서 현재 진행상황을 살펴볼수 있다.

7

Results를 클릭하면 해당 refseq의 서열을 확인할 수 있다.

8

이상으로 1단계의 문제를 Taverna를 통해서 풀어보았다. 매우 단순한 작업이기 때문에 프로그래밍에 익숙하지 않은 사용자들도 충분히 잘 해결할 수 있다고 생각된다.

Posted by hongiiv

2007/08/22 12:40 2007/08/22 12:40
, ,
Response
No Trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/218

Tarverna에서 Blast Workflow 예제

Posted by hongiiv

2007/07/27 10:10 2007/07/27 10:10
,
Response
A trackback , No Comment
RSS :
http://socmaster.homelinux.org/~hongiiv/rss/response/208



야후 블로그 벳지


Site Stats

Total hits:
291450
Today:
57
Yesterday:
166