From c1f169dfe78f73434c435d9a0eac8956a0d6d17d Mon Sep 17 00:00:00 2001
From: Sebastiaan van der Tol <tol@astron.nl>
Date: Wed, 1 Jul 2020 19:13:16 +0200
Subject: [PATCH] Environment variable TOLERANCE now makes comparison-oskar
 target a test

When environment variable TOLERANCE is set and the absolute difference
between OKSAR and EveryBeam exceeds its value, the script
generate_basefunction_plots.py will exit with an error.
---
 .../generate_basefunction_plots.py            | 23 ++++++++++++++-----
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/demo/comparison-oskar/generate_basefunction_plots.py b/demo/comparison-oskar/generate_basefunction_plots.py
index 8da6a016..01c30e0d 100755
--- a/demo/comparison-oskar/generate_basefunction_plots.py
+++ b/demo/comparison-oskar/generate_basefunction_plots.py
@@ -1,6 +1,7 @@
 #!/usr/bin/env -S python3 -B
 
 import os
+import sys
 import numpy as np
 from matplotlib import pyplot as plt
 from generate_oskar_csv import generate_oskar_csv
@@ -21,6 +22,11 @@ if 'APPLY_TRANSPOSE' in os.environ:
 else:
     apply_transpose = True
 
+if 'TOLERANCE' in os.environ:
+    tolerance = float(os.environ['TOLERANCE'])
+else:
+    tolerance = 0.0
+
 plt.figure(figsize=(10,6))
 
 for em_idx in range(2):
@@ -69,32 +75,37 @@ for em_idx in range(2):
 
         subprocess.call(['comparison-oskar-generate-beampattern'])
 
-        A = np.load('response.npy')
+        B = np.load('response.npy')
 
         if apply_transpose:
-            A *= (-1)**(m+1)
+            B *= (-1)**(m+1)
 
         plt.subplot(2,4,5)
-        plt.imshow(np.abs(A[:,:,0,0]).T, clim=(0,.25), origin='lower')
+        plt.imshow(np.abs(B[:,:,0,0]).T, clim=(0,.25), origin='lower')
         plt.colorbar()
         plt.title('abs(Etheta)')
         plt.ylabel('EveryBeam')
 
         plt.subplot(2,4,6)
-        plt.imshow(np.abs(A[:,:,0,1]).T, clim=(0,.25), origin='lower')
+        plt.imshow(np.abs(B[:,:,0,1]).T, clim=(0,.25), origin='lower')
         plt.colorbar()
         plt.title('abs(Ephi)')
 
         plt.subplot(2,4,7)
-        plt.imshow(np.angle(A[:,:,0,0]).T, clim=(-np.pi, np.pi), cmap='twilight', origin='lower')
+        plt.imshow(np.angle(B[:,:,0,0]).T, clim=(-np.pi, np.pi), cmap='twilight', origin='lower')
         plt.colorbar()
         plt.title('angle(Etheta)')
 
         plt.subplot(2,4,8)
-        plt.imshow(np.angle(A[:,:,0,1]).T, clim=(-np.pi, np.pi), cmap='twilight', origin='lower')
+        plt.imshow(np.angle(B[:,:,0,1]).T, clim=(-np.pi, np.pi), cmap='twilight', origin='lower')
         plt.colorbar()
         plt.title('angle(Ephi)')
 
         plt.gcf().suptitle('l = {}, m = {}, s = {}'.format(l,m,s))
 
         plt.savefig('basefunction{}-{}'.format(basefunction_idx,em_idx))
+
+        if tolerance:
+            difference = np.nanmax(np.abs(A-B))
+            if difference > tolerance:
+                sys.exit("Difference between OSKAR and EveryBeam spherical wave model is {}, which is larger than the tolerance {}".format(difference, tolerance))
-- 
GitLab