我試圖通過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,但仍不清楚我需要做什麼。
這是什麼與常規做?除了你把標題 –
@ gro_yates:抱歉的混亂。我認爲解決方案更少使用jython和groovy,更多的是尋找一種方法來實例化/子類化htsjdk.samtools Java類之一。當我從python來的時候,如果我使用python或groovy,我會很高興。或Jruby,如果這將是有人足夠耐心地找出htsjdk.samtools的相關部分的第一選擇。 – darked89
getBinsOverlapping的int參考索引是否與「chrM」相對應? – WillShackleford