diff --git a/datatypes_conf.xml.sample b/datatypes_conf.xml.sample
index a56d9abf127..b44ac052d72 100644
--- a/datatypes_conf.xml.sample
+++ b/datatypes_conf.xml.sample
@@ -77,6 +77,9 @@
+
+
+
diff --git a/lib/galaxy/datatypes/sequence.py b/lib/galaxy/datatypes/sequence.py
index 522ca992319..f2f1856a5c7 100644
--- a/lib/galaxy/datatypes/sequence.py
+++ b/lib/galaxy/datatypes/sequence.py
@@ -424,6 +424,38 @@ class Maf( Alignment ):
except:
return False
+class MafCustomTrack( data.Text ):
+ file_ext = "mafcustomtrack"
+
+ MetadataElement( name="vp_chromosome", default='chr1', desc="Viewport Chromosome", readonly=True, optional=True, visible=False, no_value='' )
+ MetadataElement( name="vp_start", default='1', desc="Viewport Start", readonly=True, optional=True, visible=False, no_value='' )
+ MetadataElement( name="vp_end", default='100', desc="Viewport End", readonly=True, optional=True, visible=False, no_value='' )
+
+ def set_meta( self, dataset, overwrite = True, **kwd ):
+ """
+ Parses and sets viewport metadata from MAF file.
+ """
+ max_block_check = 10
+ chrom = None
+ forward_strand_start = float( 'inf' )
+ forward_strand_end = 0
+ maf_file = open( dataset.file_name )
+ maf_file.readline() #move past track line
+ for block in bx.align.maf.Reader( maf_file ):
+ ref_comp = block.get_component_by_src_start( dataset.metadata.dbkey )
+ if ref_comp:
+ ref_chrom = bx.align.maf.src_split( ref_comp.src )[-1]
+ if chrom is None:
+ chrom = ref_chrom
+ if chrom == ref_chrom:
+ forward_strand_start = min( forward_strand_start, ref_comp.forward_strand_start )
+ forward_strand_end = max( forward_strand_end, ref_comp.forward_strand_end )
+
+ if forward_strand_end > forward_strand_start:
+ dataset.metadata.vp_chromosome = chrom
+ dataset.metadata.vp_start = forward_strand_start
+ dataset.metadata.vp_end = forward_strand_end
+
class Axt( data.Text ):
"""Class describing an axt alignment"""