我正在尝试从此处访问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 2.7.0中放入Jython注册表后:

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版本: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,但是仍然不清楚我需要做什么。

最佳答案

他们的github上有一个示例,我在后面做了一小节,但还有更多有关如何使用其SamReader的示例。

    /**
     * Broken down
     */
    final SamReaderFactory factory =
            SamReaderFactory.makeDefault().enable(SamReaderFactory.Option.VALIDATE_CRC_CHECKSUMS).validationStringency(ValidationStringency.LENIENT);

    final SamInputResource resource = SamInputResource.of(new File("/my.bam")).index(new URL("http://broadinstitute.org/my.bam.bai"));

    final SamReader myReader = factory.open(resource);

    for (final SAMRecord samRecord : myReader) {
        System.err.print(samRecord);
    }




Groovy非常适合与一堆文件进行交互,而不管格式如何。

new File('my/directory/with/many/files').eachFile{File readFile ->
    final SamInputResource resource = SamInputResource.of(readFile).index(new URL('IGotLazy.bai'))
    final SamReader myReader = ... etc

}

关于java - 使用htsjdk从jython或groovy定义的类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32344345/

10-09 09:18