From 9ccaa364f7d837fe357cf121f441aec2ac830b7e Mon Sep 17 00:00:00 2001 From: Shane Maloney Date: Wed, 15 May 2024 11:49:49 +0100 Subject: [PATCH] Fix WCS v array indexing errors --- xrayvision/imaging.py | 20 ++++++++++---------- xrayvision/tests/test_imaging.py | 16 ++++++++-------- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/xrayvision/imaging.py b/xrayvision/imaging.py index f4bc908..06afca8 100644 --- a/xrayvision/imaging.py +++ b/xrayvision/imaging.py @@ -236,15 +236,15 @@ def generate_header(vis: Visibility, *, ------- : """ - header = {'crval1': (vis.offset[0]).to_value(apu.arcsec), - 'crval2': (vis.offset[1]).to_value(apu.arcsec), - 'cdelt1': (pixel_size[0]*apu.pix).to_value(apu.arcsec), - 'cdelt2': (pixel_size[1]*apu.pix).to_value(apu.arcsec), + header = {'crval1': (vis.offset[1]).to_value(apu.arcsec), + 'crval2': (vis.offset[0]).to_value(apu.arcsec), + 'cdelt1': (pixel_size[1]*apu.pix).to_value(apu.arcsec), + 'cdelt2': (pixel_size[0]*apu.pix).to_value(apu.arcsec), 'ctype1': 'HPLN-TAN', 'ctype2': 'HPLT-TAN', 'naxis': 2, - 'naxis1': shape[0].value, - 'naxis2': shape[1].value, + 'naxis1': shape[1].value, + 'naxis2': shape[0].value, 'cunit1': 'arcsec', 'cunit2': 'arcsec'} return header @@ -310,15 +310,15 @@ def map_to_vis(amap: GenericMap, *, u: Quantity[1/apu.arcsec], v: Quantity[1/apu meta = amap.meta new_pos = np.array([0., 0.]) if "crval1" in meta: - new_pos[0] = float(meta["crval1"]) + new_pos[1] = float(meta["crval1"]) if "crval2" in meta: - new_pos[1] = float(meta["crval2"]) + new_pos[0] = float(meta["crval2"]) new_psize = np.array([1., 1.]) if "cdelt1" in meta: - new_psize[0] = float(meta["cdelt1"]) + new_psize[1] = float(meta["cdelt1"]) if "cdelt2" in meta: - new_psize[1] = float(meta["cdelt2"]) + new_psize[0] = float(meta["cdelt2"]) vis = image_to_vis(amap.data, u=u, v=v, pixel_size=new_psize * apu.arcsec/apu.pix) vis.offset = new_pos*apu.arcsec diff --git a/xrayvision/tests/test_imaging.py b/xrayvision/tests/test_imaging.py index bed82f2..baf27f7 100644 --- a/xrayvision/tests/test_imaging.py +++ b/xrayvision/tests/test_imaging.py @@ -110,8 +110,8 @@ def test_map_to_vis(pos, pixel): u, v = np.meshgrid(u, v, indexing='ij') u, v = np.array([u, v]).reshape(2, size) / apu.arcsec - header = {'crval1': pos[0].value, 'crval2': pos[1].value, - 'cdelt1': pixel[0].value, 'cdelt2': pixel[1].value, + header = {'crval1': pos[1].value, 'crval2': pos[0].value, + 'cdelt1': pixel[1].value, 'cdelt2': pixel[0].value, 'cunit1': 'arcsec', 'cunit2': 'arcsec'} # Astropy index order is opposite to that of numpy, is 1st dim is across second down @@ -195,8 +195,8 @@ def test_vis_to_map(m, n, pos, pixel): uv = np.array([u, v]).reshape(2, m * n) / apu.arcsec u, v = uv - header = {'crval1': pos[0].value, 'crval2': pos[1].value, - 'cdelt1': pixel[0].value, 'cdelt2': pixel[1].value, + header = {'crval1': pos[1].value, 'crval2': pos[0].value, + 'cdelt1': pixel[1].value, 'cdelt2': pixel[0].value, 'cunit1': 'arcsec', 'cunit2': 'arcsec'} data = Gaussian2DKernel(2, x_size=n, y_size=m).array mp = Map((data, header)) @@ -209,10 +209,10 @@ def test_vis_to_map(m, n, pos, pixel): # TODO: figure out why atol is needed here assert_allclose(data, res.data, atol=1e-15) - assert res.reference_coordinate.Tx == pos[0] - assert res.reference_coordinate.Ty == pos[1] - assert res.scale.axis1 == pixel[0] - assert res.scale.axis2 == pixel[1] + assert res.reference_coordinate.Tx == pos[1] + assert res.reference_coordinate.Ty == pos[0] + assert res.scale.axis1 == pixel[1] + assert res.scale.axis2 == pixel[0] assert res.dimensions.x == m * apu.pix assert res.dimensions.y == n * apu.pix