diff --git a/gracedb/translator.py b/gracedb/translator.py index d640e79e6f7118f80e3b44fd0d9ab1c333b99db2..9000531de1dbdf842d1bb6c9519416c3927ba743 100644 --- a/gracedb/translator.py +++ b/gracedb/translator.py @@ -16,6 +16,28 @@ from VOEventLib.Vutil import parse, getWhereWhen from utils import isoToGps from utils.vfile import VersionedFile +# This function checks for 'inf' in a float field, asks the database +# what's the maximum value it can accept for that field, and returns +# that value. Since the database query will introduce some overhead, +# I'm not going to use this to check all fields. + +from django.db import connection +def cleanData(val, field_name, table_name='gracedb_event'): + if val is None: + return val + elif isinstance(val, float): + if abs(val)==float('inf'): + cursor = connection.cursor() + cursor.execute('SELECT MAX(%s) from %s' % (field_name, table_name)) + maxval = cursor.fetchone()[0] + return maxval + else: + return val + elif isinstance(val, basestring): + raise ValueError("Unrecognized string in the %s column" % field_name) + else: + raise ValueError("Unrecognized value in column %s" % field_name) + def handle_uploaded_data(event, datafilename, log_filename='event.log', coinc_table_filename='coinc.xml'): @@ -111,7 +133,7 @@ def handle_uploaded_data(event, datafilename, coinc_table = coinc_table[0] event.instruments = coinc_table[0].instruments event.nevents = coinc_table[0].nevents - event.likelihood = coinc_table[0].likelihood + event.likelihood = cleanData(coinc_table[0].likelihood,'likelihood') event.ifos = ifos event.end_time = end_time[0] @@ -236,7 +258,7 @@ def handle_uploaded_data(event, datafilename, coinc_table = coinc_table[0] event.instruments = coinc_table[0].instruments event.nevents = coinc_table[0].nevents - event.likelihood = coinc_table[0].likelihood + event.likelihood = cleanData(coinc_table[0].likelihood,'likelihood') # extended attributes coinc_inspiral_table = glue.ligolw.table.getTablesByName( @@ -306,7 +328,7 @@ def handle_uploaded_data(event, datafilename, coinc_table = coinc_table[0] event.instruments = coinc_table[0].instruments event.nevents = coinc_table[0].nevents - event.likelihood = coinc_table[0].likelihood + event.likelihood = cleanData(coinc_table[0].likelihood, 'likelihood') # XXX xml_filename unused. #xml_filename = os.path.join(output_dir, coinc_table_filename)