我正在尝试从这里访问htsjdk.jar提供的方法: https://samtools.github.io/htsjdk/
并在此处记录: https://samtools.github.io/htsjdk/javadoc/htsjdk/index.html
使用jython。我需要访问/查询BAM文件索引(BAI文件)的方法来获取二进制BAM文件中的起始位置。测试BAM& BAI档案可以从以下地址获得: https://github.com/samtools/htsjdk/tree/master/testdata/htsjdk/samtools/BAMFileIndexTest
在放入Jython注册表后的jython 2.7.0中:
python.security.respectJavaAccessibility = false
#I did in the jython comandline:
import sys
sys.path.append("/usr/local/soft/picard_1.138/htsjdk-1.138.jar")
from htsjdk.samtools import *
from java.io import File
#the BAM index file + BAM files
bai_fh = File("./index_test.bam.bai")
mydict = SAMSequenceDictionary()
bai_foo = DiskBasedBAMFileIndex(bai_fh, mydict)
我可以访问一些方法,比如bai_foo.getNumberOfReferences()等,但是需要的方法是 getBinsOverlapping(int referenceIndex,int startPos,int endPos)位于BrowseableBAMIndex接口中。
但是,在Jython中对Java类进行子类化时,我迷失了方向。任务是获得对应于给定基因组位置的BAM文件块列表。对于测试BAM / BAI文件,即for chrM 10000-15000(chromosome,start_pos,end_pos)我使用现成的samtools独立程序而不是htsjdk获得11个映射读取:
samtools view index_test.bam chrM:10000-15000
非常感谢你的帮助
Darek
编辑:重新整理部分 Groovy版本:2.4.4
groovy -cp libs/htsjdk-1.138.jar test_htsjdk.groovy
#!/usr/bin/env groovy
import htsjdk.samtools.*
File bam_fh = new File("./A.bam")
File bai_fh = new File("./A.bam.bai")
def mydict = new SAMSequenceDictionary()
def bai_foo = new DiskBasedBAMFileIndex(bai_fh, mydict)
println bai_foo.getNumberOfReferences()
以上代码适用于groovy。我的问题不是这段代码不起作用,而是我不知道从处理BAI文件格式的Java类访问方法的正确方法。我在htsjdk / src / java / htsjdk / samtools / * java文件(来自repo @ github的git clone)中搜索了AbstractBAMFileIndex,但仍然不清楚我需要做什么。