From 3ffb34a41c7a0f91b5915c5db2860bc4e9a7e68c Mon Sep 17 00:00:00 2001 From: Daniel Blankenberg Date: Fri, 9 Mar 2007 19:54:46 +0000 Subject: [PATCH] Fix for displaying BED6+ at UCSC. --- lib/galaxy/datatypes/interval.py | 30 ++++++++++++++++++++++++++++++ lib/galaxy/interfaces/root.py | 4 +--- 2 files changed, 31 insertions(+), 3 deletions(-) diff --git a/lib/galaxy/datatypes/interval.py b/lib/galaxy/datatypes/interval.py index 855652675d5..890937429da 100644 --- a/lib/galaxy/datatypes/interval.py +++ b/lib/galaxy/datatypes/interval.py @@ -197,6 +197,36 @@ class Bed( Interval ): def set_meta( self, dataset ): # metadata already set pass + def as_bedfile( self, dataset ): + '''Returns a file that contains only the bed data. If bed 6+, treat as interval.''' + for line in open(dataset.file_name): + line = line.strip() + if line == "" or line.startswith("#"): continue + fields = line.split('\t') + #check to see if this file doesn't conform to strict genome browser accepted bed + try: + if len(fields)>12: return Interval.as_bedfile(self, dataset) #too many fields + if len(fields)>6: + if len(fields) > 6: + int(fields[6]) + if len(fields) > 7: + int(fields[7]) + if len(fields) > 8: + if int(fields[8]) != 0: return Interval.as_bedfile(self, dataset) + if len(fields) > 9: + int(fields[9]) + if len(fields) > 10: + fields2 = fields[10].rstrip(",").split(",") #remove trailing comma and split on comma + for field in fields2: int(field) + if len(fields) > 11: + fields2 = fields[11].rstrip(",").split(",") #remove trailing comma and split on comma + for field in fields2: int(field) + except: return Interval.as_bedfile(self, dataset) + #only check first line for proper form + break + + try: return dataset.file_name + except: return "This item contains no content" class Gff( Tabular ): """Tab delimited data in Gff format""" diff --git a/lib/galaxy/interfaces/root.py b/lib/galaxy/interfaces/root.py index b4618625b46..0581a91cf49 100644 --- a/lib/galaxy/interfaces/root.py +++ b/lib/galaxy/interfaces/root.py @@ -117,9 +117,7 @@ class Universe(common.Root): """Returns a bed file""" data = self.app.model.Dataset.get( id ) if data: - if isinstance(data.datatype, datatypes.interval.Bed): - return self.display(trans, id=data.id) - elif isinstance(data.datatype, datatypes.interval.Interval): + if isinstance(data.datatype, datatypes.interval.Interval): mime = data.get_mime() trans.response.set_content_type(mime) file_name = data.as_bedfile()