#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)
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