Added numerical_columns to tabular metadata.

This commit is contained in:
Greg Von Kuster
2007-08-31 13:23:25 +00:00
parent 0f7773a8ba
commit 4c696df636
2 changed files with 37 additions and 30 deletions
+7 -21
View File
@@ -70,9 +70,9 @@ class Interval( Tabular ):
self.set_meta( dataset )
def set_meta( self, dataset, first_line_is_header=False ):
"""
Tries to guess from the line the location number of the column for the chromosome, region start-end and strand
"""
Tabular.set_meta( dataset )
"""Tries to guess from the line the location number of the column for the chromosome, region start-end and strand"""
if dataset.has_data():
for i, line in enumerate( file(dataset.file_name) ):
line = line.rstrip('\r\n')
@@ -82,8 +82,6 @@ class Interval( Tabular ):
self.init_meta(dataset)
line = line.strip("#")
elems = line.split("\t")
if len(elems) != dataset.metadata.columns:
dataset.metadata.columns = len(elems)
valid = dict(alias_helper) # shrinks
for index, col_name in enumerate(elems):
if col_name in valid:
@@ -94,17 +92,6 @@ class Interval( Tabular ):
for lower in values[start:]:
del valid[lower] # removes lower priority keys
break # Our metadata is set, so break out of the outer loop
else:
"""
We must have an interval file without a header line, so
at most we can set the number of columns.
"""
elems = line.split("\t")
if len(elems) != dataset.metadata.columns:
dataset.metadata.columns = len(elems)
break # Our metadata is set, so break out of the outer loop
if i == 30:
break # Hopefully we'll never get here...
def get_estimated_display_viewport( self, dataset ):
"""Return a chrom, start, stop tuple for viewing a file."""
@@ -210,6 +197,8 @@ class Bed( Interval ):
Interval.init_meta( self, dataset, copy_from=copy_from )
def set_meta( self, dataset ):
Tabular().set_meta( dataset )
"""
Overrides the default setting for dataset.metadata.strandCol for BED
files that do not contain a strand column. This will result in changing
@@ -234,11 +223,8 @@ class Bed( Interval ):
else:
dataset.metadata.is_strandCol = "true"
dataset.metadata.strandCol = 6
if len(elems) != dataset.metadata.columns:
dataset.metadata.columns = len(elems)
break
if i == 30:
break
if i == 30: break
if not valid_bed_data:
dataset.metadata.is_strandCol = "false"
dataset.metadata.strandCol = 0
@@ -250,7 +236,7 @@ class Bed( Interval ):
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
"""check to see if this file doesn't conform to strict genome browser accepted bed"""
try:
if len(fields) > 12:
return Interval.as_ucsc_display_file(self, dataset) #too many fields
+30 -9
View File
@@ -20,6 +20,7 @@ class Tabular( data.Text ):
"""Add metadata elements"""
MetadataElement( name="columns", default=0, desc="Number of columns", readonly=True )
MetadataElement( name="numerical_columns", default=[], desc="Numerical columns", readonly=True )
def init_meta( self, dataset, copy_from=None ):
data.Text.init_meta( self, dataset, copy_from=copy_from )
@@ -33,18 +34,38 @@ class Tabular( data.Text ):
def set_meta( self, dataset ):
"""
Tries to determine the number of columns in the dataset
Tries to determine the number of columns as well as those columns
that contain numerical values in the dataset
"""
if dataset.has_data():
for i, line in enumerate( file(dataset.file_name) ):
numerical_columns = []
for i, line in enumerate( file ( dataset.file_name ) ):
line = line.rstrip('\r\n')
if line and not line.startswith('#') and len(line) > 0:
elems = line.split('\t')
if len(elems) != dataset.metadata.columns:
dataset.metadata.columns = len(elems)
break
if i == 30:
break
valid = True
if line and not line.startswith( '#' ):
elems = line.split( '\t' )
elems_len = len(elems)
if elems_len > 0:
"""Set the columns metadata attribute"""
if elems_len != dataset.metadata.columns:
dataset.metadata.columns = elems_len
"""Set the numerical_columns metadata attribute"""
for col in range(0, elems_len):
try:
val = float(elems[col])
valid = True
except:
val = elems[col]
if val:
if val.strip().lower() == "na": valid = True
else: valid = False
else: valid = False
if valid: numerical_columns.append(col+1)
if len(numerical_columns) > 0: break
if i == 30: break # Hopefully we never get here...
dataset.metadata.numerical_columns = numerical_columns
def make_html_table(self, data, skipchar=None):
"""Create HTML table, used for displaying peek"""