Tuesday, January 16, 2007

Java for Bioinformatics, BioJava

BioJava official Homepage : http://www.biojava.org

1. 서열정보

* BioJava의 서열 관련 클래스는 모두 index가 1부터 시작된다.

SymbolList 클래스
: 각 서열 Alphabet을 구성하는 Symbol 객체를 가리키는 참조변수로 이루어진다.
따라서, Symbol 객체(DNA, RNA, Protein)가 정의되어 있어야 하고, 아래와 같이 접근.

FiniteAlphabet dna=DNATools.getDNA();
FiniteAlphabet rna=DNATools.getRNA();
FiniteAlphabet protein=ProteinTools.getAlphabet();

Exam)SymbolList 이용한 서열 객체 생성

import org.biojava.bio.seq.*;
import org.biojava.bio.symbol.*;

try{
SymbolList dan=DNATools.createDNA("agtagcgcgta");
}catch(IllegalSymbolException ex){}

Exam)SymbolList 객체를 구성하는 Symbol 객체의 이름 접근

SymbolList dan=DNATools.createDNA("agtagcgcgta");
for(int i=1;i<=dna.length();i++){ //index는 1부터 시작한다. 0이 아니다.

Symbol base=dna.symbolAt(i); // i번째 SymbolList 참조자가 가리키는 Symbol 객체 반환
System.out.println(base.getName()); //Symbol base의 이름 출력(예, a=adenine)
}


Sequence 클래스
:SymbolList와 달리 생물학적 서열을 표현하기 위한 여러 abstract method를 가진다.

Exam) Sequence 객체 생성

try{
Sequence dna=DNAtools.createDNASequence("agtagcgat","DNA_sequence");
}


Exam) FASTA file 읽기

try{

BufferedReader read=new BufferedReader(new FileReader(filename));
SequenceIterator seq=SeqIOTools.readFastaDNA(read); // Genbank 파일일 경우 readGenbank() 이용.

while(seq.hasNext()){
Sequence dna=seq.nextSequence();
//출력 or other 작업

}

}

2. Annotation을 위한 class

Annotation 클래스
:SeqIOTools로 읽은 서열 정보는 각 Feature에 따라 객체에 저장되며,
다양한 Method들을 통해 이들에 접근할 수 있다.


Exam) Genbank 파일의 각 Feature에 따른 정보 출력

SequenceIterator seq=SeqIOTools.readGenbankDNA(read);

while(seq.hasNext()){
Sequence dna=seq.nextSequence();
Annotation anno=dna.getAnnotation();
Iterator key=anno.keys().iterator();

while(key.hasNext()){

Object ob=key.next();
System.out.println(ob.toString()+"="+anno.getProperty(ob));
}
}

Feature 클래스
:하나의 feature에도 위치 정보등 여러 unit의 정보가 저장된다. BioJava에서는 feature 항목과
이에 해당하는 정보 자체를 모두 저장하고, Feature 클래스를 통해 각각 접근할 수 있다.

Exam)위의 exam과 같은 context에서 feature 정보 출력

while(seq.hasNext()){
Sequence dna=seq.nextSequence();
Iterator feature_iter=dna.features();

while(feature_iter.hasNext()){

Feature f=(Feature)(feature_iter.next());
Annotation anno=f.getAnnotation();
System.out.println(f.getType()+"="+anno); //feature type(예, species, sequence, LOCUS)과 이에 해당하는 annotaion 출력
}
}

3. PDB file parsing

import org.biojava.bio.structure.*;
import org.biojava.bio.structure.io.*;

try{

PDBFileReader read=new PDBFileReader();
Structure pdb=read.getStructure(seqfile);
System.out.println("PDB code :"+pdb.getPDBCode());

for(int i=0;i< pdb.nrModels();i++){
ArrayList chains=pdb.getChains(i);

for(Iterator iter=chains.iterator();iter.hasNext();){
Chain c=(Chain)(iter.next());
System.out.println("Chain :"+c.getName()+"\n"+c.getSequence());
Atom a=c.getGroup(0).getAtom(0);
System.out.println("a.getPDBserial()+a.getX()+a.getY()+a.getZ());
}
}
}catch(IOException){}
catch(StructureException){}