2015-09-02 74 views
2

我試圖通過htsjdk.jar從這裏提供的接入方式: https://samtools.github.io/htsjdk/使用htsjdk定義的類或Groovy

這裏記載:用Jython https://samtools.github.io/htsjdk/javadoc/htsjdk/index.html

。我需要訪問/查詢BAM文件索引(BAI文件)以獲取二進制BAM文件中的起始位置的方法。

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()等: https://github.com/samtools/htsjdk/tree/master/testdata/htsjdk/samtools/BAMFileIndexTest

用Jython 2.7.0投入Jython的註冊表後:測試BAM & BAI文件可以從即獲得,但所需方法
getBinsOverlapping(int referenceIndex,int startPos,int endPos)位於BrowseableBAMIndex接口中。

但是在Jython中對Java類進行子類化時,我迷失了方向。任務是獲得與給定基因組位置相對應的BAM文件塊的列表。對於測試BAM/BAI文件,即對於 CHRM 10000-15000(染色體,START_POS,end_pos)我得到11映射使用過讀取貨架samtools獨立的程序,而不是htsjdk的:

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文件(git clone from repo @ github)中搜索了AbstractBAMFileIndex,但仍不清楚我需要做什麼。

+2

這是什麼與常規做?除了你把標題 –

+0

@ gro_yates:抱歉的混亂。我認爲解決方案更少使用jython和groovy,更多的是尋找一種方法來實例化/子類化htsjdk.samtools Java類之一。當我從python來的時候,如果我使用python或groovy,我會很高興。或Jruby,如果這將是有人足夠耐心地找出htsjdk.samtools的相關部分的第一選擇。 – darked89

+0

getBinsOverlapping的int參考索引是否與「chrM」相對應? – WillShackleford

回答

3

有自己的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 

} 
2

我不知道要放什麼東西的參考指標,但在打印輸出看上去不夠好我的人誰從來沒有用這種數據的交易:

import sys 
sys.path.append("/home/shackle/sam-tools/samtools-htsjdk-f650176/dist/htsjdk-1.138.jar") 
from htsjdk.samtools import * 
from java.io import File 
#the BAM index file + BAM files 
indexFile = File("/home/shackle/index_test.bam.bai") 
bamFile = File("/home/shackle/index_test.bam") 
sfr = SAMFileReader(bamFile, indexFile) 
sfr.enableIndexCaching(True) 
bbi = sfr.getBrowseableIndex() 
for i in range(0,256): 
    print "i = " , i 
    bl = bbi.getBinsOverlapping(i, 10000, 15000) 
    count = 0 
    for bin in bl: 
     print "bin.getBinNumber() = " , bin.getBinNumber() 
     count = count + 1 
     print "count = ", count 
相關問題