COMPUTER SCIENCE

 

JAVA

 

R

 

XML

 

LINUX

 

OTHERS

 

BIOINFORMATICS

 

BIOJAVA

 

 

BIOSQL

 

 

MICROARRAY

 

 

MOTIF FINDING

 

 

REGULATION NETWORK

 

OTHERS

 

LIFE SCIENCE

 

 

我如何计算序列中的残基数?

计算序列中的残基数是一项相当普通的生物信息学任务。通常你可以构建一个整数数组使用一些索引系统。然而你可以使用AlphabetIndex做标准索引。


你可以从AlphabetManager中调用getAlphabetIndex()方法来得到一个字母索引(AlphabetIndex)。因为这种任务很常用,所以Biojava将所有索引包装到一个索引计数(IndexCount)类中。这个类实现了计数(Count)接口。

下面的程序读取不同类型的序列文件对残基计数,将结果输出到标准输出。注意:这个程序不适合多义标志。如果想要计算多义标志则需要将多义标志的组成标志求和。参见解决方案二。

方案1

import java.io.*;
import java.util.*;

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

public class CountResidues {
// 接受三个参数,第一个是文件名,第二个是序列类型(大小写敏感),第三个是字母表(大小写敏感)
public static void main(String[] args) {
// 创建一个计数对象引用
Count counts = null;

try {
// 打开序列文件
BufferedReader br = new BufferedReader(new FileReader(args[0]));

// 取得序列遍历器
SequenceIterator iter =
(SequenceIterator) SeqIOTools.fileToBiojava(args[1],args[2],br);
// 对每个序列
while(iter.hasNext()){
Sequence seq = iter.nextSequence();
// 如果需要的话,初始化计数
if(counts == null){
counts = new IndexedCount((FiniteAlphabet)seq.getAlphabet());
}
// 遍历序列中的标志
for (Iterator i = seq.iterator(); i.hasNext(); ){
AtomicSymbol sym = (AtomicSymbol)i.next();
counts.increaseCount(sym,1.0);
}
}

// 现在输出结果
for ( Iterator i =((FiniteAlphabet)counts.getAlphabet()).iterator();
i.hasNext(); ) {
AtomicSymbol sym = (AtomicSymbol)i.next();
System.out.println(sym.getName()+" : "+counts.getCount(sym));
}
}
catch(Exception ex){
ex.printStackTrace();
}
}
}


方案2

import java.io.*;
import java.util.*;

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

public class CountResidues2 {
// 接受三个参数。第一个是文件名,第二个是格式(大小写敏感),第三个是字母表(大小写敏感,例如DNA)
public static void main(String[] args) {
// 计数的句柄
Count counts = null;
try {
// 打开文件
BufferedReader br = new BufferedReader(new FileReader(args[0]));

// 获得序列遍历器
SequenceIterator iter = (SequenceIterator)SeqIOTools.fileToBiojava(args[1],args[2],br);

//对每个序列
while(iter.hasNext()){
Sequence seq = iter.nextSequence();

//必要的话,初始化计数
if(counts == null) {
counts = new IndexedCount((FiniteAlphabet)seq.getAlphabet();
}

// 遍历序列中的所有标志
for(Iterator i = seq.iterator(); i.hasNext(); ) {
Symbol sym = (Symbol)i.next();

// 如果是多义标志的话,将计数平分到组分标志中.例如标志n意味着这个位置四个碱基都有可能,所以一个n出现,则// 对每个碱基计数加0.25.

FiniteAlphabet subSymbol = (FiniteAlphabet)sym.getMatches();
for(Iterator i2 = subSymbols.iterator(); i2.hasNext(); ) {
AtomicSymbol sym2 = (AtomicSymbol)i2.next();
counts.increaseCount(sym2,1.0/(double)subSymbols.size());
}
}
}

// 输出结果
for (Iterator i = ((FiniteAlphabet)counts.getAlphabet()).iterator();
i.hasNext(); ) {
AtomicSymbol sym = (AtomicSymbol)i.next();
System.out.println(sym.getName()+" : "+counts.getCount(sym));
}
}
catch (Exception ex) {
ex.printStackTrace();
}
}
}

--BACK TO TOP

 

Maintainted by Wu Xin, CBI, Peking University, China, 2003