Skip to content
Snippets Groups Projects
Commit ada40b2d authored by David Rafferty's avatar David Rafferty
Browse files

Add script to check results

parent 32ba306b
No related branches found
No related tags found
2 merge requests!69Change the name of the pre-calibrated output MS,!34Resolve RAP-199
#! /usr/bin/env python3
"""
Checks the outputs of a workflow run
"""
import argparse
from argparse import RawTextHelpFormatter
from losoto.h5parm import h5parm
import os
import sys
from filecmp import dircmp
import numpy as np
def main(results_path, control_path):
"""
Checks the outputs of an end-to-end workflow job
Parameters
----------
results_path : str
Path to output results directory of job
control_path : str
Path to control results directory
"""
# Check that all expected output files are present
dcmp = dircmp(results_path, control_path)
if len(dcmp.left_only) > 0:
print('ERROR: The following files are present in the output but not in the control: {}'.format(dcmp.left_only))
sys.exit(1)
if len(dcmp.right_only) > 0:
print('ERROR: The following files are present in the control but not in the output: {}'.format(dcmp.right_only))
sys.exit(1)
# Check that the calibration solutions match the control ones
check_h5parm = os.path.join(results_path, 'cal_values', 'cal_solutions.h5')
control_h5parm = os.path.join(control_path, 'cal_values', 'cal_solutions.h5')
check_h5 = h5parm(check_h5parm, readonly=True)
control_h5 = h5parm(control_h5parm, readonly=True)
for check_solset in check_h5.getSolsets():
control_solset = control_h5.getSolset(check_solset.name)
for check_soltab in check_solset.getSoltabs():
control_soltab = control_solset.getSoltab(check_soltab.name)
if not np.allclose(check_soltab.val, control_soltab.val, rtol=1e-03,
atol=1e-03, equal_nan=True):
print('ERROR: Val array of soltab {} of solset {} does not match '
'the control'.format(check_soltab.anme, check_solset.name))
sys.exit(1)
if __name__ == '__main__':
descriptiontext = "Checks the ouput of a workflow run.\n"
parser = argparse.ArgumentParser(description=descriptiontext, formatter_class=RawTextHelpFormatter)
parser.add_argument('results_path', help='Path to output results')
parser.add_argument('control_path', help='Path to control results')
args = parser.parse_args()
main(args.results_path, args.control_path)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment