diff --git a/.gitattributes b/.gitattributes index 26329ad6a8a61e5d60053cc88397f697364fe6a6..90208c8beb3837944becdaadafabedc8c85c072d 100644 --- a/.gitattributes +++ b/.gitattributes @@ -40,6 +40,7 @@ CAL/CalibrationProcessing/lib/__init__.py -text CAL/CalibrationProcessing/lib/process_holography_dataset.py -text CAL/CalibrationProcessing/lib/processing/__init__.py -text CAL/CalibrationProcessing/lib/processing/averaging.py -text +CAL/CalibrationProcessing/lib/processing/matrices.py -text CAL/CalibrationProcessing/test/CMakeLists.txt -text CAL/CalibrationProcessing/test/profiling_processing.py -text CAL/CalibrationProcessing/test/t_processing.py -text diff --git a/CAL/CalibrationCommon/test/t_holography_dataset_class.py b/CAL/CalibrationCommon/test/t_holography_dataset_class.py index 3faa1b155cb60fbec0b6a683b0fb05670821a8b1..c7840898ccd35d59579d19d9081b8e0a96410d8a 100755 --- a/CAL/CalibrationCommon/test/t_holography_dataset_class.py +++ b/CAL/CalibrationCommon/test/t_holography_dataset_class.py @@ -48,6 +48,7 @@ class TestHolographyDatasetClass(unittest.TestCase): read_dict = HolographyDataset._read_grouped_data(h5file, '/test') self.assertDictEqual(test_dict, read_dict) + if __name__ == '__main__': logging.basicConfig(format='%(name)s : %(message)s') unittest.main() diff --git a/CAL/CalibrationProcessing/lib/CMakeLists.txt b/CAL/CalibrationProcessing/lib/CMakeLists.txt index 3f0c1839a8f3cee8f849e7f2e0c276228db3a9be..38c673e25925f17c0af28a11d64af92dba1972c3 100644 --- a/CAL/CalibrationProcessing/lib/CMakeLists.txt +++ b/CAL/CalibrationProcessing/lib/CMakeLists.txt @@ -20,6 +20,7 @@ python_install( __init__.py processing/averaging.py + processing/matrices.py processing/__init__.py DESTINATION lofar/calibration) diff --git a/CAL/CalibrationProcessing/lib/processing/__init__.py b/CAL/CalibrationProcessing/lib/processing/__init__.py index 98a1f6b0511db49631206a1484d3cc29c9cc0d95..a26b7d7eb0ddb5d3ebae74aacc521aea1e25953b 100644 --- a/CAL/CalibrationProcessing/lib/processing/__init__.py +++ b/CAL/CalibrationProcessing/lib/processing/__init__.py @@ -1 +1,2 @@ -from .averaging import * \ No newline at end of file +from .averaging import * +from .matrices import * \ No newline at end of file diff --git a/CAL/CalibrationProcessing/lib/processing/matrices.py b/CAL/CalibrationProcessing/lib/processing/matrices.py new file mode 100644 index 0000000000000000000000000000000000000000..232678327b5c67240c464230cb97d96c8c26104d --- /dev/null +++ b/CAL/CalibrationProcessing/lib/processing/matrices.py @@ -0,0 +1,29 @@ +import logging + +import numpy + +logger = logging.getLogger(__name__) + + +def extract_crosscorrelation_matrices_from_HDS_datatable(datatable): + new_shape = (2, 2, datatable.shape[0]) + new_array = numpy.zeros(shape=new_shape, dtype=numpy.complex) + new_array[0, 0, :] = datatable['XX'] + new_array[0, 1, :] = datatable['XY'] + new_array[1, 0, :] = datatable['YX'] + new_array[1, 1, :] = datatable['YY'] + + return new_array + + +def invert_crosscorrelation_matrices(cross_correlation_matrices): + """ + Invert the matrices along the last axis + :param cross_correlation_matrices: matrices to invert + :type cross_correlation_matrices: numpy.ndarray + :return: + """ + assert cross_correlation_matrices.ndim >= 3 + + return numpy.linalg.inv(cross_correlation_matrices) + diff --git a/CAL/CalibrationProcessing/test/t_processing.py b/CAL/CalibrationProcessing/test/t_processing.py index f027cbb5606debc6fb439e21fce04c2bb72e42c6..d9f445b080b693da10684c46356916070f528f76 100755 --- a/CAL/CalibrationProcessing/test/t_processing.py +++ b/CAL/CalibrationProcessing/test/t_processing.py @@ -1,10 +1,10 @@ import logging import unittest - from lofar.calibration.common.datacontainers import HolographyDataset from lofar.calibration.processing import average_dataset_by_sample, average_values_by_sample -from glob import glob +from lofar.calibration.common.datacontainers.holography_dataset_definitions import HDS_data_sample_type +from lofar.calibration.processing.matrices import extract_crosscorrelation_matrices_from_HDS_datatable logger = logging.getLogger('t_processing') import numpy @@ -13,7 +13,6 @@ import numpy SAMPLE_DATASET = '/data/test/HolographyObservation/CS001HBA0.hdf5' - class TestProcessing(unittest.TestCase): def setUp(self): pass @@ -54,7 +53,8 @@ class TestProcessing(unittest.TestCase): def test_average_datatable_by_sample(self): holography_dataset = HolographyDataset.load_from_file(SAMPLE_DATASET) - averaged_data = average_dataset_by_sample(SAMPLE_DATASET, 2) + averaged_data = average_dataset_by_sample(SAMPLE_DATASET, 2).derived_data[ + 'PRE_NORMALIZATION_AVERAGE_TIME'] self.assert_recursive_dict_have_the_same_keys(holography_dataset.data, averaged_data) def assert_recursive_dict_have_the_same_keys(self, expected, actual): @@ -77,7 +77,21 @@ class TestProcessing(unittest.TestCase): else: self.assertTrue(False, 'Expected key {} is missing in the actual dict'.format(key)) + def test_matrix_inversion(self): + test_data = numpy.zeros(3, dtype=HDS_data_sample_type) + numpy.random.seed(3) + test_data['XX'] = numpy.random.randn(3) + 1.j*numpy.random.randn(3) + test_data['XY'] = numpy.random.randn(3) + 1.j * numpy.random.randn(3) + test_data['YX'] = numpy.random.randn(3) + 1.j * numpy.random.randn(3) + test_data['YY'] = numpy.random.randn(3) + 1.j * numpy.random.randn(3) + + matrices_from_data = extract_crosscorrelation_matrices_from_HDS_datatable(test_data) + + numpy.testing.assert_almost_equal(test_data['XX'], matrices_from_data[0, 0, :]) + numpy.testing.assert_almost_equal(test_data['XY'], matrices_from_data[0, 1, :]) + numpy.testing.assert_almost_equal(test_data['YX'], matrices_from_data[1, 0, :]) + numpy.testing.assert_almost_equal(test_data['YY'], matrices_from_data[1, 1, :]) if __name__ == '__main__': logging.basicConfig(format='%(name)s : %(message)s') - unittest.main() \ No newline at end of file + unittest.main()