[galaxy-commits] commit/galaxy-central: 3 new changesets

Bitbucket commits-noreply at bitbucket.org
Mon Apr 23 11:17:34 EDT 2012


3 new commits in galaxy-central:


https://bitbucket.org/galaxy/galaxy-central/changeset/c5da9bd8bbfc/
changeset:   c5da9bd8bbfc
user:        jgoecks
date:        2012-04-23 15:08:29
summary:     Use tabix for indexing and getting data from GTF files. This is faster and more flexible than using interval index.
affected #:  3 files

diff -r 8b773372d0dce1d815b90d257efa073d5a039e72 -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 datatypes_conf.xml.sample
--- a/datatypes_conf.xml.sample
+++ b/datatypes_conf.xml.sample
@@ -85,7 +85,11 @@
     <datatype extension="gff3" type="galaxy.datatypes.interval:Gff3" display_in_upload="true"/><datatype extension="gif" type="galaxy.datatypes.images:Gif" mimetype="image/gif"/><datatype extension="gmaj.zip" type="galaxy.datatypes.images:Gmaj" mimetype="application/zip"/>
-    <datatype extension="gtf" type="galaxy.datatypes.interval:Gtf" display_in_upload="true"/>
+    <datatype extension="gtf" type="galaxy.datatypes.interval:Gtf" display_in_upload="true">
+        <converter file="gff_to_bgzip_converter.xml" target_datatype="bgzip"/>
+        <converter file="gff_to_tabix_converter.xml" target_datatype="tabix" depends_on="bgzip"/>
+        <converter file="gff_to_summary_tree_converter.xml" target_datatype="summary_tree"/>
+    </datatype><datatype extension="h5" type="galaxy.datatypes.binary:Binary" mimetype="application/octet-stream" subclass="True" /><datatype extension="html" type="galaxy.datatypes.images:Html" mimetype="text/html"/><datatype extension="interval" type="galaxy.datatypes.interval:Interval" display_in_upload="true">


diff -r 8b773372d0dce1d815b90d257efa073d5a039e72 -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 lib/galaxy/datatypes/interval.py
--- a/lib/galaxy/datatypes/interval.py
+++ b/lib/galaxy/datatypes/interval.py
@@ -953,6 +953,9 @@
         dataset.metadata.attribute_types = attribute_types
         dataset.metadata.attributes = len( attribute_types )
         Gff.set_meta( self, dataset, overwrite = overwrite, skip = i )
+        
+    def get_track_type( self ):
+        return "FeatureTrack", {"data": "tabix", "index": "summary_tree"}
 
 
 class Wiggle( Tabular, _RemoteCallMixin ):


diff -r 8b773372d0dce1d815b90d257efa073d5a039e72 -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 lib/galaxy/visualization/tracks/data_providers.py
--- a/lib/galaxy/visualization/tracks/data_providers.py
+++ b/lib/galaxy/visualization/tracks/data_providers.py
@@ -1024,7 +1024,7 @@
         """
         start, end = int( start ), int( end )
         source = open( self.original_dataset.file_name )
-        
+    
         def features_in_region_iter():
             offset = 0
             for feature in GFFReaderWrapper( source, fix_strand=True ):
@@ -1034,7 +1034,7 @@
                     yield feature, offset
                 offset += feature.raw_size
         return features_in_region_iter()
-        
+            
     def process_data( self, iterator, start_val=0, max_vals=None, **kwargs ):
         """
         Process data from an iterator to a format that can be provided to client.
@@ -1057,6 +1057,47 @@
 
             
         return { 'data': results, 'message': message }
+        
+class GtfTabixDataProvider( TabixDataProvider ):
+    
+    def process_data( self, iterator, start_val=0, max_vals=None, **kwargs ):
+        # Loop through lines and group by transcript_id; each group is a feature.
+        features = {}
+        for count, line in enumerate( iterator ):
+            line_attrs = parse_gff_attributes( line.split('\t')[8] )
+            transcript_id = line_attrs[ 'transcript_id' ]
+            if transcript_id in features:
+                feature = features[ transcript_id ]
+            else:
+                feature = []
+                features[ transcript_id ] = feature
+            feature.append( line )
+            
+        # Set up iterator for features.
+        def features_iterator():
+            for transcript_id, feature in features.items():
+                for line in feature: 
+                    yield line
+                    
+        # Process data.
+        filter_cols = from_json_string( kwargs.get( "filter_cols", "[]" ) )
+        no_detail = ( "no_detail" in kwargs )
+        results = []
+        message = None
+
+        # TODO: remove reader-wrapper and create features directly.
+        for count, feature in enumerate( GFFReaderWrapper( features_iterator() ) ):
+            if count < start_val:
+                continue
+            if count-start_val >= max_vals:
+                message = ERROR_MAX_VALS % ( max_vals, "reads" )
+                break
+                
+            payload = package_gff_feature( feature, no_detail=no_detail, filter_cols=filter_cols )
+            payload.insert( 0, feature.intervals[ 0 ].attributes[ 'transcript_id' ] )
+            results.append( payload )
+                        
+        return { 'data': results, 'message': message }
 
 #
 # -- ENCODE Peak data providers.
@@ -1189,6 +1230,7 @@
     "tabix": { 
         Vcf: VcfTabixDataProvider,
         Bed: BedTabixDataProvider,
+        Gtf: GtfTabixDataProvider,
         ENCODEPeak: ENCODEPeakTabixDataProvider,
         Interval: IntervalTabixDataProvider,
         "default" : TabixDataProvider },



https://bitbucket.org/galaxy/galaxy-central/changeset/678ac108a4c4/
changeset:   678ac108a4c4
user:        jgoecks
date:        2012-04-23 15:28:12
summary:     Fix style conflict between base.css and trackster.css
affected #:  5 files

diff -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 static/june_2007_style/base_sprites.less.tmpl
--- a/static/june_2007_style/base_sprites.less.tmpl
+++ b/static/june_2007_style/base_sprites.less.tmpl
@@ -88,6 +88,10 @@
 }
 .icon-button.plus-button {
     -sprite-group: fugue;
+    -sprite-image: fugue/plus-button-bw.png;
+}
+.icon-button.plus-button:hover {
+    -sprite-group: fugue;
     -sprite-image: fugue/plus-button.png;
 }
 .icon-button.gear {


diff -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 static/june_2007_style/blue/base.css
--- a/static/june_2007_style/blue/base.css
+++ b/static/june_2007_style/blue/base.css
@@ -751,9 +751,10 @@
 .icon-button.go-to-full-screen{background:url(fugue.png) no-repeat 0px -286px;}
 .icon-button.import{background:url(fugue.png) no-repeat 0px -312px;}
 .icon-button.plus-button{background:url(fugue.png) no-repeat 0px -338px;}
-.icon-button.gear{background:url(fugue.png) no-repeat 0px -364px;}
-.icon-button.chart_curve{background:url(fugue.png) no-repeat 0px -390px;}
-.text-and-autocomplete-select{background:url(fugue.png) no-repeat right -416px;}
+.icon-button.plus-button:hover{background:url(fugue.png) no-repeat 0px -364px;}
+.icon-button.gear{background:url(fugue.png) no-repeat 0px -390px;}
+.icon-button.chart_curve{background:url(fugue.png) no-repeat 0px -416px;}
+.text-and-autocomplete-select{background:url(fugue.png) no-repeat right -442px;}
 div.historyItem-error .state-icon{background:url(history-states.png) no-repeat 0px 0px;}
 div.historyItem-empty .state-icon{background:url(history-states.png) no-repeat 0px -25px;}
 div.historyItem-queued .state-icon{background:url(history-states.png) no-repeat 0px -50px;}


diff -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 static/june_2007_style/blue/fugue.png
Binary file static/june_2007_style/blue/fugue.png has changed


diff -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 static/june_2007_style/blue/trackster.css
--- a/static/june_2007_style/blue/trackster.css
+++ b/static/june_2007_style/blue/trackster.css
@@ -86,8 +86,6 @@
 .icon-button.toggle-expand:hover{background:transparent url(../images/fugue/toggle-expand.png) no-repeat;}
 .icon-button.cross-circle{background:transparent url(../images/fugue/cross-circle-bw.png) no-repeat;margin-right:0px;}
 .icon-button.cross-circle:hover{background:transparent url(../images/fugue/cross-circle.png) no-repeat;}
-.icon-button.plus-button{background:transparent url(../images/fugue/plus-button-bw.png) no-repeat;}
-.icon-button.plus-button:hover{background:transparent url(../images/fugue/plus-button.png) no-repeat;}
 .icon-button.block--plus{background:transparent url(../images/fugue/block--plus-bw.png) no-repeat;}
 .icon-button.block--plus:hover{background:transparent url(../images/fugue/block--plus.png) no-repeat;}
 .icon-button.bookmarks{background:transparent url(../images/fugue/bookmarks-bw.png) no-repeat;}


diff -r c5da9bd8bbfc1e2634b7981c836a62796f7b33f7 -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 static/june_2007_style/trackster.css.tmpl
--- a/static/june_2007_style/trackster.css.tmpl
+++ b/static/june_2007_style/trackster.css.tmpl
@@ -411,12 +411,6 @@
 .icon-button.cross-circle:hover {
     background: transparent url(../images/fugue/cross-circle.png) no-repeat;
 }
-.icon-button.plus-button {
-    background: transparent url(../images/fugue/plus-button-bw.png) no-repeat;
-}
-.icon-button.plus-button:hover {
-    background: transparent url(../images/fugue/plus-button.png) no-repeat;
-}
 .icon-button.block--plus {
     background: transparent url(../images/fugue/block--plus-bw.png) no-repeat;
 }



https://bitbucket.org/galaxy/galaxy-central/changeset/ebd5932ed7f1/
changeset:   ebd5932ed7f1
user:        jgoecks
date:        2012-04-23 17:14:27
summary:     Create GTF features directly rather than parsing from lines. This is much faster than parsing.
affected #:  2 files

diff -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 -r ebd5932ed7f1d0b434383995ea1338609b9814f4 lib/galaxy/datatypes/util/gff_util.py
--- a/lib/galaxy/datatypes/util/gff_util.py
+++ b/lib/galaxy/datatypes/util/gff_util.py
@@ -10,8 +10,8 @@
     A GFF interval, including attributes. If file is strictly a GFF file,
     only attribute is 'group.'
     """
-    def __init__( self, reader, fields, chrom_col, feature_col, start_col, end_col, \
-                  strand_col, score_col, default_strand, fix_strand=False ):
+    def __init__( self, reader, fields, chrom_col=0, feature_col=2, start_col=3, end_col=4, \
+                  strand_col=6, score_col=5, default_strand='.', fix_strand=False ):
         # HACK: GFF format allows '.' for strand but GenomicInterval does not. To get around this,
         # temporarily set strand and then unset after initing GenomicInterval.
         unknown_strand = False
@@ -45,8 +45,8 @@
     """
     A GFF feature, which can include multiple intervals.
     """
-    def __init__( self, reader, chrom_col, feature_col, start_col, end_col, \
-                  strand_col, score_col, default_strand, fix_strand=False, intervals=[], \
+    def __init__( self, reader, chrom_col=0, feature_col=2, start_col=3, end_col=4, \
+                  strand_col=6, score_col=5, default_strand='.', fix_strand=False, intervals=[], \
                   raw_size=0 ):
         GFFInterval.__init__( self, reader, intervals[0].fields, chrom_col, feature_col, \
                               start_col, end_col, strand_col, score_col, default_strand, \


diff -r 678ac108a4c44b06693a22f6d7d301986a3b30f3 -r ebd5932ed7f1d0b434383995ea1338609b9814f4 lib/galaxy/visualization/tracks/data_providers.py
--- a/lib/galaxy/visualization/tracks/data_providers.py
+++ b/lib/galaxy/visualization/tracks/data_providers.py
@@ -1071,28 +1071,22 @@
             else:
                 feature = []
                 features[ transcript_id ] = feature
-            feature.append( line )
-            
-        # Set up iterator for features.
-        def features_iterator():
-            for transcript_id, feature in features.items():
-                for line in feature: 
-                    yield line
-                    
+            feature.append( GFFInterval( None, line.split( '\t') ) )
+                                
         # Process data.
         filter_cols = from_json_string( kwargs.get( "filter_cols", "[]" ) )
         no_detail = ( "no_detail" in kwargs )
         results = []
         message = None
 
-        # TODO: remove reader-wrapper and create features directly.
-        for count, feature in enumerate( GFFReaderWrapper( features_iterator() ) ):
+        for count, intervals in enumerate( features.values() ):
             if count < start_val:
                 continue
             if count-start_val >= max_vals:
                 message = ERROR_MAX_VALS % ( max_vals, "reads" )
                 break
-                
+            
+            feature = GFFFeature( None, intervals=intervals )    
             payload = package_gff_feature( feature, no_detail=no_detail, filter_cols=filter_cols )
             payload.insert( 0, feature.intervals[ 0 ].attributes[ 'transcript_id' ] )
             results.append( payload )

Repository URL: https://bitbucket.org/galaxy/galaxy-central/

--

This is a commit notification from bitbucket.org. You are receiving
this because you have the service enabled, addressing the recipient of
this email.


More information about the galaxy-commits mailing list