Example #1
0
#print reference_time
for k, name in enumerate(gauge_names):

    sqsum = 0
    denom = 0
    model = []
    if verbose:
        print
        print 'Validating ' + name
    observed_timeseries = validation_data[name]
    for i, t in enumerate(reference_time):
        model.append(f(t, point_id=k)[0])

    # Covariance measure
    res = cov(observed_timeseries, model)
    if verbose:
        report_difference('Covariance', res, expected_covariance[name], rtol,
                          atol)

    # Difference measures
    res = sum(abs(observed_timeseries - model)) / len(model)
    if verbose:
        report_difference('Accumulated difference', res,
                          expected_difference[name], rtol, atol)

    # Extrema
    res = max(model)
    if verbose:
        report_difference('Maximum', res, expected_maximum[name], rtol, atol)
Example #2
0
def compare_timeseries(timevector,
                       timeseries1,
                       timeseries2,
                       name='',
                       legend=('Time series 1', 'Time series 2'),
                       eps=1.0e-6):
    """Compare and plot two timeseries
    """

    timeseries1 = num.array(timeseries1)
    timeseries2 = num.array(timeseries2)
    N = timevector.shape[0]
    assert timeseries1.shape[0] == N
    assert timeseries2.shape[0] == N

    print 'Testing gauge "%s"' % name
    print 'epsilon', eps
    # Covariance measure
    res = cov(timeseries1 - timeseries2)
    print '2 norm diff', res
    msg = '2-norm of timeseries difference was too large: %e' % res
    assert res < eps, msg

    # Maximum norm
    nominator = max(abs(timeseries1 - timeseries2))
    denominator = max(abs(timeseries1))
    if denominator > 0:
        # Relative measure
        res = nominator / denominator
    else:
        # Absolute measure
        res = nominator / N

    print 'Max abs diff', res
    msg = '%s: Difference between timeseries was too large: %e' % (name, res)
    assert res < eps, msg

    nominator = sum(abs(timeseries1 - timeseries2))
    denominator = sum(abs(timeseries1))
    if denominator > 0:
        # Relative measure
        res = nominator / denominator
    else:
        # Absolute measure
        res = nominator / N

    print 'Sum abs diff', res
    msg = '%s: Difference between timeseries was too large: %e' % (name, res)
    assert res < eps, msg

    # Extrema
    max1 = max(timeseries1)
    max2 = max(timeseries2)
    res = abs(max1 - max2)
    print 'Max diff', res
    msg = '%s: Difference between maxima was too large: %e' % (name, res)
    assert res < eps, msg

    min1 = min(timeseries1)
    min2 = min(timeseries2)
    res = abs(min1 - min2)
    print 'Min diff', res
    msg = '%s: Difference between minima was too large: %e' % (name, res)
    assert res < eps, msg

    # Locations of extrema
    i1 = num.argmax(timeseries1)
    i2 = num.argmax(timeseries2)

    res = abs(timevector[i1] - timevector[i2])
    print 'Max loc diff', res
    msg = '%s: Difference between location of maxima was too large: %e' % (
        name, res)
    assert res < eps, msg

    i1 = num.argmin(timeseries1)
    i2 = num.argmin(timeseries2)

    res = abs(timevector[i1] - timevector[i2])
    print 'Min loc diff', res
    msg = '%s: Difference between location of minima was too large: %e' % (
        name, res)
    assert res < eps, msg

    if plotting:
        # Generate plots
        #pylab.ion() # No plotting on screen
        pylab.hold(False)

        pylab.plot(timevector, timeseries1, 'r-', timevector, timeseries2,
                   'k-')

        pylab.title('Gauge %s' % name)
        pylab.xlabel('time(s)')
        pylab.ylabel('stage (m)')
        pylab.legend(legend, shadow=True, loc='upper left')
        pylab.savefig(name, dpi=300)

        # Error vector
        #pylab.ion() # No plotting on screen
        pylab.hold(False)
        pylab.plot(timevector, timeseries1 - timeseries2, 'b-')
        pylab.title('Gauge %s (difference)' % name)
        pylab.xlabel('time(s)')
        pylab.ylabel('stage difference (m)')
        pylab.savefig(name + '_diff', dpi=300)

    print 'Gauge "%s" OK' % name
    print
#print reference_time
for k, name in enumerate(gauge_names):

    sqsum = 0
    denom = 0
    model = []
    if verbose: 
        print 
        print 'Validating ' + name
    observed_timeseries = validation_data[name]
    for i, t in enumerate(reference_time):
        model.append(f(t, point_id=k)[0])

    # Covariance measure    
    res = cov(observed_timeseries, model)
    if verbose:
        report_difference('Covariance', res, expected_covariance[name], rtol, atol)
     
    # Difference measures    
    res = sum(abs(observed_timeseries-model))/len(model)
    if verbose:
        report_difference('Accumulated difference', res,
                      expected_difference[name], rtol, atol)    

    # Extrema
    res = max(model)
    if verbose:
        report_difference('Maximum', res, expected_maximum[name], rtol, atol)
    
    res = min(model)
def compare_timeseries(timevector, 
                       timeseries1,
                       timeseries2,
                       name='',
                       legend = ('Time series 1', 'Time series 2'),
                       eps=1.0e-6):
    """Compare and plot two timeseries
    """

    
    timeseries1 = num.array(timeseries1)
    timeseries2 = num.array(timeseries2) 
    N = timevector.shape[0]
    assert timeseries1.shape[0] == N    
    assert timeseries2.shape[0] == N        

    print 'Testing gauge "%s"' % name
    print 'epsilon', eps
    # Covariance measure    
    res = cov(timeseries1-timeseries2)
    print '2 norm diff', res        
    msg = '2-norm of timeseries difference was too large: %e' % res
    assert res < eps, msg
     
    # Maximum norm
    nominator = max(abs(timeseries1-timeseries2))    
    denominator = max(abs(timeseries1))
    if denominator > 0:
        # Relative measure
        res = nominator/denominator
    else:
        # Absolute measure
        res = nominator/N

    print 'Max abs diff', res    
    msg = '%s: Difference between timeseries was too large: %e' % (name, res)
    assert res < eps, msg
    
    
    nominator = sum(abs(timeseries1-timeseries2))    
    denominator = sum(abs(timeseries1))
    if denominator > 0:
        # Relative measure
        res = nominator/denominator
    else:
        # Absolute measure
        res = nominator/N

    print 'Sum abs diff', res    
    msg = '%s: Difference between timeseries was too large: %e' % (name, res)
    assert res < eps, msg

    # Extrema
    max1 = max(timeseries1)
    max2 = max(timeseries2)
    res = abs(max1-max2)
    print 'Max diff', res
    msg = '%s: Difference between maxima was too large: %e' % (name, res)
    assert res < eps, msg    

    min1 = min(timeseries1)
    min2 = min(timeseries2)
    res = abs(min1-min2)    
    print 'Min diff', res
    msg = '%s: Difference between minima was too large: %e' % (name, res)
    assert res < eps, msg

    
    # Locations of extrema
    i1 = num.argmax(timeseries1)
    i2 = num.argmax(timeseries2)
    
    res = abs(timevector[i1]-timevector[i2])
    print 'Max loc diff', res
    msg = '%s: Difference between location of maxima was too large: %e' % (name, res)
    assert res < eps, msg

    i1 = num.argmin(timeseries1)
    i2 = num.argmin(timeseries2)
    
    res = abs(timevector[i1]-timevector[i2])    
    print 'Min loc diff', res    
    msg = '%s: Difference between location of minima was too large: %e' % (name, res)
    assert res < eps, msg
    

    if plotting:
        # Generate plots
        #pylab.ion() # No plotting on screen
        pylab.hold(False)
    
        pylab.plot(timevector, timeseries1, 'r-',
                   timevector, timeseries2, 'k-')

        pylab.title('Gauge %s' % name)
        pylab.xlabel('time(s)')
        pylab.ylabel('stage (m)')    
        pylab.legend(legend, shadow=True, loc='upper left')
        pylab.savefig(name, dpi = 300)        

        # Error vector
        #pylab.ion() # No plotting on screen
        pylab.hold(False)
        pylab.plot(timevector, timeseries1-timeseries2, 'b-')
        pylab.title('Gauge %s (difference)' % name)    
        pylab.xlabel('time(s)')
        pylab.ylabel('stage difference (m)')  
        pylab.savefig(name + '_diff', dpi = 300)                  


    print 'Gauge "%s" OK' % name
    print