Source code for spike.util.ValErr

#!/usr/bin/env python 
# encoding: utf-8

"""
untitled.py

Created by Marc-André on 2011-03-20.
Copyright (c) 2011 IGBMC. All rights reserved.
"""

from __future__ import print_function

[docs]def round(x): """takes the nearest integer of a float >>> round(0.6) 1.0 >>> round(0.4) 0.0 >>> round(-0.6) -1.0 >>> round(-0.4) 0.0 """ import math return math.floor(x+0.5)
[docs]def ValErr(v,e=0.0): """ nice print of a value with error bars values are rounded to significative digits >>> print ValErr(1234.567,123.4) 1230 +/- 123 can be called with a pair of values or a tuple : >>> V=(1234.567,123.4); print ValErr(V) 1230 +/- 123 values are rounded to significative digits >>> print ValErr(7654.321,1234) 7700 +/- 1230 >>> print ValErr(7654.321,123.4) 7650 +/- 123 >>> print ValErr(7654.321,12.34) 7654 +/- 12 format depends on error >>> print ValErr(1234.567,12.34) 1235 +/- 12 >>> print ValErr(1234.567,1.234) 1234.6 +/- 1.2 >>> print ValErr(1234.567,0.1234) 1234.57 +/- 0.12 >>> print ValErr(1234.567,0.01234) 1234.567 +/- 0.012 """ import math deb = 0 # set it to one for debugging info if deb: print((v,e)) if isinstance(v,tuple): # if v is tuple, unpack value and error (val,err) = v else: # assume v is value val = v err = e try: dig = math.log10(err) except: dig = 3 # if err = 0 # the larger the value of tweek (within 0 .. 1), the more the number of digits on the error value # 0 : always 1 1 : always 2 tweek=1 # auto tests are for tweek=1 idig = round(dig-tweek+0.5) if deb: print(dig,idig) err = float(round(err*10**(2-idig))) / 10**(2-idig) if deb : print(err) # choose depending on the size of err if (idig > 1): format = "%.0f +/- %.0f" elif (idig<=1): format = "%%.%df +/- %%.%df"%((-idig+1),(-idig+1)) if deb : print(format) if (idig>0): val = float(round(val*10**(1-idig))) / 10**(1-idig) return format%(val,err)