永发信息网

如何利用biojava设置一个blast解析器解析blast结果

答案:1  悬赏:50  手机版
解决时间 2021-03-20 08:31
  • 提问者网友:美人性情
  • 2021-03-19 19:30
如何利用biojava设置一个blast解析器解析blast结果
最佳答案
  • 五星知识达人网友:渊鱼
  • 2021-03-19 21:01
BioJava设置一个BLAST解析器解析BLAST结果代码如下:
import java.io.*;
import java.util.*;

import org.biojava.bio.program.sax.*;
import org.biojava.bio.program.ssbind.*;
import org.biojava.bio.search.*;
import org.biojava.bio.seq.db.*;
import org.xml.sax.*;
import org.biojava.bio.*;

public class BlastParser {
// args[0] 为Blast输出文件
public static void main(String[] args){
try{
// 以流的方式得到Blast输出
InputStream is = new FileInputStream(args[0]);

// 创建一个Blast类型的SAX解析器
BlastLikeSAXParser parser = new BlastLikeSAXParser();

// 创建一个可以将事件传送给句柄的SAX事件适配器
SeqSimilarityAdapter adapter = new SeqSimilarityAdapter();

// 给parser设置SAX事件适配器
parser.setContentHandler(adapter);

// 保存序列相似性搜索结果(SeqSimilaritySearchResults)的链表
List results = new ArrayList();

// 创建在结果链表(Results List)中生成序列相似性搜索结果对象的搜索内容句柄(SearchContentHandler)
SearchContentHandler builder = new BlastLikeSearchBuilder(results,
new DummySequenceDB("queries"), new DummySequenceDBInstallation());

// 解析文件,序列相似性搜索结果填充到结果链表
parser.parse(new InputSource(is));

// 输出一些Blast细节
for (Iterator i = results.iterator(); i.hasNext(); ){
SeqSimilaritySearchResult result = (SeqSimilaritySearchResult)i.next();
Annotation anno = result.getAnnotation();

for(Iterator j = anno.keys().iterator(); j.hasNext(); ){
Object key = j.next();
Object property = anno.getProperty(key);
System.out.println(key+" : "+property);
}
System.out.println("Hits: ");

// 列出匹配
for (Iterator k = result.getHits().iterator(); k.hasNext(); ){
SeqSimilaritySearchHit hit = (SeqSimilaritySearchHit)k.next();
System.out.println("\tmatch: "+hit.getSubjectID());
System.out.println("\te score: "+hit.getEValue());
}

System.out.println("\n");
}

}
catch (SAXException ex) {
//XML 出问题
ex.printStackTrace();
}catch (IOException ex) {
//IO 出问题,例如文件找不到
ex.printStackTrace();
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯