mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #1280 from jj-umn/patch-2
Update SnpEffDb and SnpSiftDbNSFP for SnpEff v4.1
This commit is contained in:
@@ -355,12 +355,28 @@ class SnpEffDb( Text ):
|
||||
"""Class describing a SnpEff genome build"""
|
||||
file_ext = "snpeffdb"
|
||||
MetadataElement( name="genome_version", default=None, desc="Genome Version", readonly=True, visible=True, no_value=None )
|
||||
MetadataElement( name="snpeff_version", default="SnpEff4.0", desc="SnpEff Version", readonly=True, visible=True, no_value=None )
|
||||
MetadataElement( name="regulation", default=[], desc="Regulation Names", readonly=True, visible=True, no_value=[], optional=True)
|
||||
MetadataElement( name="annotation", default=[], desc="Annotation Names", readonly=True, visible=True, no_value=[], optional=True)
|
||||
|
||||
def __init__( self, **kwd ):
|
||||
Text.__init__( self, **kwd )
|
||||
|
||||
# The SnpEff version line was added in SnpEff version 4.1
|
||||
def getSnpeffVersionFromFile(self, path):
|
||||
snpeff_version = None
|
||||
try:
|
||||
fh = gzip.open(path, 'rb')
|
||||
buf = fh.read(100)
|
||||
lines = buf.splitlines()
|
||||
m = re.match('^(SnpEff)\s+(\d+\.\d+).*$', lines[0].strip())
|
||||
if m:
|
||||
snpeff_version = m.groups()[0] + m.groups()[1]
|
||||
fh.close()
|
||||
except:
|
||||
pass
|
||||
return snpeff_version
|
||||
|
||||
def set_meta( self, dataset, **kwd ):
|
||||
Text.set_meta(self, dataset, **kwd )
|
||||
data_dir = dataset.extra_files_path
|
||||
@@ -370,6 +386,8 @@ class SnpEffDb( Text ):
|
||||
annotations_dict = {'nextProt.bin' : '-nextprot', 'motif.bin': '-motif'}
|
||||
regulations = []
|
||||
annotations = []
|
||||
genome_version = None
|
||||
snpeff_version = None
|
||||
if data_dir and os.path.isdir(data_dir):
|
||||
for root, dirs, files in os.walk(data_dir):
|
||||
for fname in files:
|
||||
@@ -377,6 +395,10 @@ class SnpEffDb( Text ):
|
||||
# if snpEffectPredictor.bin download succeeded
|
||||
genome_version = os.path.basename(root)
|
||||
dataset.metadata.genome_version = genome_version
|
||||
# read the first line of the gzipped snpEffectPredictor.bin file to get the SnpEff version
|
||||
snpeff_version = self.getSnpeffVersionFromFile(os.path.join(root, fname))
|
||||
if snpeff_version:
|
||||
dataset.metadata.snpeff_version = snpeff_version
|
||||
else:
|
||||
m = re.match(regulation_pattern, fname)
|
||||
if m:
|
||||
@@ -390,7 +412,8 @@ class SnpEffDb( Text ):
|
||||
dataset.metadata.annotation = annotations
|
||||
try:
|
||||
fh = file(dataset.file_name, 'w')
|
||||
fh.write("%s\n" % genome_version)
|
||||
fh.write("%s\n" % genome_version if genome_version else 'Genome unknown')
|
||||
fh.write("%s\n" % snpeff_version if snpeff_version else 'SnpEff version unknown')
|
||||
if annotations:
|
||||
fh.write("annotations: %s\n" % ','.join(annotations))
|
||||
if regulations:
|
||||
@@ -422,8 +445,8 @@ class SnpSiftDbNSFP( Text ):
|
||||
"""
|
||||
def __init__( self, **kwd ):
|
||||
Text.__init__( self, **kwd )
|
||||
self.add_composite_file( '%s.grp', description='Group File', substitute_name_with_metadata='reference_name', is_binary=False )
|
||||
self.add_composite_file( '%s.ti', description='', substitute_name_with_metadata='reference_name', is_binary=False )
|
||||
self.add_composite_file( '%s.gz', description='dbNSFP bgzip', substitute_name_with_metadata='reference_name', is_binary=True )
|
||||
self.add_composite_file( '%s.gz.tbi', description='Tabix Index File', substitute_name_with_metadata='reference_name', is_binary=True )
|
||||
|
||||
def init_meta( self, dataset, copy_from=None ):
|
||||
Text.init_meta( self, dataset, copy_from=copy_from )
|
||||
@@ -471,3 +494,11 @@ class SnpSiftDbNSFP( Text ):
|
||||
self.regenerate_primary_file(dataset)
|
||||
except Exception as e:
|
||||
log.warn("set_meta fname: %s %s" % (dataset.file_name if dataset and dataset.file_name else 'Unkwown', str(e)))
|
||||
|
||||
def set_peek( self, dataset, is_multi_byte=False ):
|
||||
if not dataset.dataset.purged:
|
||||
dataset.peek = '%s : %s' % (dataset.metadata.reference_name, ','.join(dataset.metadata.annotation))
|
||||
dataset.blurb = '%s' % dataset.metadata.reference_name
|
||||
else:
|
||||
dataset.peek = 'file does not exist'
|
||||
dataset.blurb = 'file purged from disc'
|
||||
|
||||
Reference in New Issue
Block a user