我正在尝试从这里访问 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 文件,即对于 chrM 10000-15000(染色体、start_pos、end_pos),我使用现成的 samtools 独立程序而不是 htsjdk 获得 11 个映射读取:
samtools view index_test.bam chrM:10000-15000
非常感谢您的帮助
达雷克
编辑:重新成为 groovy 部分 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,但仍然不清楚我需要做什么。