From 621a2d9b2f7d58e2d96109b7e687a2bdfe97ea0a Mon Sep 17 00:00:00 2001
From: Peter Onyisi <ponyisi@utexas.edu>
Date: Fri, 3 Apr 2020 02:10:08 +0200
Subject: [PATCH] Update fuzzy floating point checks for histogram comparison

---
 Control/AthenaMonitoring/share/hist_file_dump.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/Control/AthenaMonitoring/share/hist_file_dump.py b/Control/AthenaMonitoring/share/hist_file_dump.py
index 19ca96707f4d..0ab7bcaaa5e6 100755
--- a/Control/AthenaMonitoring/share/hist_file_dump.py
+++ b/Control/AthenaMonitoring/share/hist_file_dump.py
@@ -8,6 +8,14 @@ import argparse
 import zlib
 import json
 
+def fixprecision(x):
+    import math
+    if not isinstance(x, float):
+        return x
+    else:
+        mantissa, exponent = math.frexp(x)
+        return float(str(mantissa)[:16]) * 2**exponent
+
 def jsonfixup(instr):
     instr = instr.Data()
     j=json.loads(instr)
@@ -15,9 +23,11 @@ def jsonfixup(instr):
     for badkey in ('fTsumw', 'fTsumwx', 'fTsumw2', 'fTsumwx2', 'fTsumwy', 'fTsumwy2', 'fTsumwxy',
                    'fTsumwz', 'fTsumwz2', 'fTsumwxz', 'fTsumwyz' ):
         if badkey in j:
-            if isinstance(j[badkey], float):
-                j[badkey] = float(str(j[badkey])[:8])
+            j[badkey] = fixprecision(j[badkey])
             #print(type(j["fTsumwx"]))
+    for badkey in ('fSumw2',):
+        if badkey in j:
+            j[badkey] = [fixprecision(_) for _ in j[badkey]]
     # the following ignores small layout fluctuations in TTrees
     if 'fBranches' in j:
         for branch in j['fBranches']['arr']:
-- 
GitLab