From fb30e2b06103f3fbfa3dd1238c1f4e707d04b633 Mon Sep 17 00:00:00 2001 From: Jim Johnson Date: Wed, 9 Dec 2015 13:58:13 -0600 Subject: [PATCH 1/2] Update SnpEffDb and SnpSiftDbNSFP vor SnpEff v4.1 --- lib/galaxy/datatypes/text.py | 38 +++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/datatypes/text.py b/lib/galaxy/datatypes/text.py index 7a99d6f2ea5..fd279699625 100644 --- a/lib/galaxy/datatypes/text.py +++ b/lib/galaxy/datatypes/text.py @@ -302,12 +302,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 Exception, e: + pass + return snpeff_version + def set_meta( self, dataset, **kwd ): Text.set_meta(self, dataset, **kwd ) data_dir = dataset.extra_files_path @@ -317,6 +333,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: @@ -324,6 +342,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: @@ -337,7 +359,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: @@ -369,8 +392,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 ) @@ -418,3 +441,12 @@ 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' + From acef6ab3f99e5420602ea06b77ac647599f80e5a Mon Sep 17 00:00:00 2001 From: Jim Johnson Date: Thu, 10 Dec 2015 12:05:07 -0600 Subject: [PATCH 2/2] Fix style errors --- lib/galaxy/datatypes/text.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/lib/galaxy/datatypes/text.py b/lib/galaxy/datatypes/text.py index fd279699625..d05e1c9d942 100644 --- a/lib/galaxy/datatypes/text.py +++ b/lib/galaxy/datatypes/text.py @@ -309,18 +309,18 @@ class SnpEffDb( Text ): def __init__( self, **kwd ): Text.__init__( self, **kwd ) - # The SnpEff version line was added in SnpEff version 4.1 + # 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()) + m = re.match('^(SnpEff)\s+(\d+\.\d+).*$', lines[0].strip()) if m: snpeff_version = m.groups()[0] + m.groups()[1] fh.close() - except Exception, e: + except: pass return snpeff_version @@ -343,7 +343,7 @@ class SnpEffDb( Text ): 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)) + snpeff_version = self.getSnpeffVersionFromFile(os.path.join(root, fname)) if snpeff_version: dataset.metadata.snpeff_version = snpeff_version else: @@ -441,7 +441,7 @@ 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)) @@ -449,4 +449,3 @@ class SnpSiftDbNSFP( Text ): else: dataset.peek = 'file does not exist' dataset.blurb = 'file purged from disc' -