很多DNA分子,比如说质粒和细菌染色体是环状的。这样环状的分子上的位置就相对的模糊(比如说原点的定义不同,位置也不同)。在Biojava中真正的环状标志链并不存在。标志实际上是以数组或指针存储的。环状的效果可以用环状视图对象(CircularView)来模拟。这个对想要实现标志链视图(SymbolListView)。在标准的标志链中不可能访问超出标志链范围的位置。任何试图访问0位置或length+1位置都会跑出边界例外。但在环状视图中可以这么做,访问0,-5位置并且得到一个标志。在CirclarView中没有索引限制,索引1指向标志链中的第一个标志,索引0指向标记链中第一个标志前的标志,在这个例子中也就是标志链的最后一个标志。环状位置由环状位置类来处理。可以用位置工具(LocationTools)类来创建。下面的程序展示了这一点。
注意:由于先前版本的问题,可能你会得到奇怪的结果。请使用最新版本的Biojava(1.3及以上)。参见"我如何下载
安装Biojava".
[code lang="java"]
import org.biojava.bio.seq.*;
import org.biojava.bio.symbol.*;
public class SpecifyCircular {
try{
Location[] locs = new Location[3];
// 分别创建一个20摩序列的第三碱基到第八碱基,第零碱基到第四碱基,第十八碱基到第二十四碱基的环状位置
Locs[0] = LocationTools.makeCircularLocation(3,8,20);
Locs[1] = LocationTools.makeCircularLocation(0,4,20);
Locs[2] = LocationTools.makeCircularLocation(18,24,20);
for (int i =0; i < locs.length; i++) {
// 打印位置
System.out.println("Location: "+locs[i].toString());
// 创建一个标志链
SymbolList sl = DNATools.createDNA("gcagctaggcggaaggagct");
System.out.println("SymbolList: "+sl.seqString());
// 获得符合位置定义的序列部分
SymbolList sym = locs[i].symbols(sl);
System.out.println("Symbol specified by Location: "+sym.seqString());
}
}
catch (IllegalSymbolException ex) {
//使用了非法标志
ex.printStackTrace();
}
}
}
[/code]