From 4127854051166d6dea645928ce48a4bfb60580a4 Mon Sep 17 00:00:00 2001 From: Sam Jenkins <s.jenkins@stfc.ac.uk> Date: Thu, 24 Jan 2019 11:06:13 +0000 Subject: [PATCH] Re #24512 attempted using compare method fron EnggCalibrationTest.py --- .../tests/analysis/EnginXScriptTest.py | 37 ++++++++++++++++--- 1 file changed, 31 insertions(+), 6 deletions(-) diff --git a/Testing/SystemTests/tests/analysis/EnginXScriptTest.py b/Testing/SystemTests/tests/analysis/EnginXScriptTest.py index adef0f9b3c3..e43abfc0ef1 100644 --- a/Testing/SystemTests/tests/analysis/EnginXScriptTest.py +++ b/Testing/SystemTests/tests/analysis/EnginXScriptTest.py @@ -20,8 +20,8 @@ ref_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(DIRS[0])) root_directory = os.path.join(DIRS[0], "ENGINX") cal_directory = os.path.join(root_directory, "cal") focus_directory = os.path.join(root_directory, "focus") -param_deltas = [0, 50, 0, 20] -cal_deltas = [0, 2, 20, 10, 10, 50, 5e3, 10, 1e6, 1, 200, 50, 5e2, 5, 20, 2] +param_deltas = [0.1, 0.1, 1, 2] +cal_deltas = [0.1, 90000, 0.8, 52000, 1, 0.1, 4, 3, 250, 9, 800, 1.5, 10, 0.5, 5, 0.5] class CreateVanadiumTest(systemtesting.MantidSystemTest): @@ -187,10 +187,9 @@ def _compare_tableworkspaces(workspace, ref_file, delta): if passed: for i in range(ws.columnCount()): - newcolumn = [abs(a - b) for a, b in zip(loaded.column(i), ws.column(i))] - max_diff = max(newcolumn) - mantid.kernel.logger.information("maximum difference = " + str(max_diff) + "\ndelta =" + str(delta[i])) - if not (max_diff <= delta[i]): + newcolumn = [rel_err_less_delta(a, b, delta[i]) for a, b in zip(loaded.column(i), ws.column(i))] + mantid.kernel.logger.warning("newcolumn = {}".format(all(newcolumn))) + if not all(newcolumn): passed = False mantid.kernel.logger.warning("data in: " + workspace + " and " + ref_file + " did not match") @@ -199,3 +198,29 @@ def _compare_tableworkspaces(workspace, ref_file, delta): passed = False return passed + + +# borrowed from EnggCalibrationTest +def rel_err_less_delta(val, ref, epsilon): + """ + Checks that a value 'val' does not differ from a reference value 'ref' by 'epsilon' + or more. This method compares the relative error. An epsilon of 0.1 means a relative + difference of 10 % = 100*0.1 % + + @param val :: value obtained from a calculation or algorithm + @param ref :: (expected) reference value + @param epsilon :: acceptable relative error (error tolerance) + + @returns if val differs in relative terms from ref by less than epsilon + """ + if 0 == ref: + return abs(ref-val) < epsilon + check = (abs((ref - val) / ref) < epsilon) + + mantid.kernel.logger.warning("check value = {}".format((abs((ref - val) / ref)))) + mantid.kernel.logger.warning("ref = {}".format(epsilon)) + if not check: + mantid.kernel.logger.warning("Value '{0}' differs from reference '{1}' by more than required epsilon '{2}' " + "(relative)".format(val, ref, epsilon)) + + return check -- GitLab