/lib/galaxy/datatypes/coverage.py
https://bitbucket.org/h_morita_dbcls/galaxy-central · Python · 66 lines · 41 code · 10 blank · 15 comment · 0 complexity · 825029d4ba2c06e4a06df647e5486db8 MD5 · raw file
- """
- Coverage datatypes
- """
- import pkg_resources
- pkg_resources.require( "bx-python" )
- import logging, os, sys, time, tempfile, shutil
- import data
- from galaxy import util
- from galaxy.datatypes.sniff import *
- from galaxy.web import url_for
- from cgi import escape
- import urllib
- from bx.intervals.io import *
- from galaxy.datatypes import metadata
- from galaxy.datatypes.metadata import MetadataElement
- from galaxy.datatypes.tabular import Tabular
- import math
- log = logging.getLogger(__name__)
- class LastzCoverage( Tabular ):
- file_ext = "coverage"
-
- MetadataElement( name="chromCol", default=1, desc="Chrom column", param=metadata.ColumnParameter )
- MetadataElement( name="positionCol", default=2, desc="Position column", param=metadata.ColumnParameter )
- MetadataElement( name="forwardCol", default=3, desc="Forward or aggregate read column", param=metadata.ColumnParameter )
- MetadataElement( name="reverseCol", desc="Optional reverse read column", param=metadata.ColumnParameter, optional=True, no_value=0 )
- MetadataElement( name="columns", default=3, desc="Number of columns", readonly=True, visible=False )
- def get_track_window(self, dataset, data, start, end):
- """
- Assumes we have a numpy file.
- """
- # Maybe if we import here people will still be able to use Galaxy when numpy kills it
- pkg_resources.require("numpy>=1.2.1")
- #from numpy.lib import format
- import numpy
- range = end - start
- # Determine appropriate resolution to plot ~1000 points
- resolution = ( 10 ** math.ceil( math.log10( range / 1000 ) ) )
- # Restrict to valid range
- resolution = min( resolution, 10000 )
- resolution = max( resolution, 1 )
- # Memory map the array (don't load all the data)
- data = numpy.load( data )
- # Grab just what we need
- t_start = math.floor( start / resolution )
- t_end = math.ceil( end / resolution )
- x = numpy.arange( t_start, t_end ) * resolution
- y = data[ t_start : t_end ]
-
- return zip(x.tolist(), y.tolist())
- def get_track_resolution( self, dataset, start, end):
- range = end - start
- # Determine appropriate resolution to plot ~1000 points
- resolution = math.ceil( 10 ** math.ceil( math.log10( range / 1000 ) ) )
- # Restrict to valid range
- resolution = min( resolution, 10000 )
- resolution = max( resolution, 1 )
- return resolution