Skip to content

Commit 3dba130

Browse files
committed
Move imaging to be based on imaging context
1 parent 9b6a231 commit 3dba130

29 files changed

Lines changed: 32959 additions & 1699 deletions

‎arl/graphs/graphs.py‎

Lines changed: 130 additions & 536 deletions
Large diffs are not rendered by default.

‎arl/image/iterators.py‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def image_null_iter(im: Image, **kwargs) -> numpy.ndarray:
2525

2626

2727
def image_raster_iter(im: Image, **kwargs) -> Image:
28-
"""Create a image_raster_iter generator, returning images
28+
"""Create an image_raster_iter generator, returning images
2929
3030
The WCS is adjusted appropriately for each raster element. Hence this is a coordinate-aware
3131
way to iterate through an image.
@@ -45,8 +45,8 @@ def image_raster_iter(im: Image, **kwargs) -> Image:
4545
log.debug("raster: predicting using %d x %d image partitions" % (facets, facets))
4646
assert facets <= im.nheight, "Cannot have more raster elements than pixels"
4747
assert facets <= im.nwidth, "Cannot have more raster elements than pixels"
48-
assert im.nheight % facets == 0, "The partitions must exactly fill the image"
49-
assert im.nwidth % facets == 0, "The partitions must exactly fill the image"
48+
assert im.nheight % facets == 0, "The %d partitions must exactly fill the image %d" % (facets, im.nheight)
49+
assert im.nwidth % facets == 0, "The %d partitions must exactly fill the image %d" % (facets, im.width)
5050

5151
dx = int(im.nwidth // facets)
5252
dy = int(im.nheight // facets)

‎arl/imaging/__init__.py‎

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,17 +14,16 @@
1414
:scale: 75 %
1515
1616
"""
17-
from arl.imaging.base import predict_2d, predict_2d_base, predict_skycomponent_visibility, \
18-
predict_skycomponent_blockvisibility, invert_2d, invert_2d_base, normalize_sumwt, shift_vis_to_image, \
19-
create_image_from_visibility, residual_image
20-
from arl.imaging.facets import invert_facets, predict_facets
21-
from arl.imaging.facets_wprojection import invert_facets_wprojection, predict_facets_wprojection
22-
from arl.imaging.facets_wstack import invert_facets_wstack, predict_facets_wstack
23-
from arl.imaging.iterated import invert_with_raster_iterator, predict_with_raster_iterator, invert_with_vis_iterator, \
24-
predict_with_vis_iterator
2517
from arl.imaging.params import get_polarisation_map, get_rowmap, get_uvw_map, standard_kernel_list, \
2618
w_kernel_list, get_kernel_list, advise_wide_field
27-
from arl.imaging.timeslice import invert_timeslice, invert_timeslice_single, predict_timeslice, predict_timeslice_single
28-
from arl.imaging.wprojection import invert_wprojection, predict_wprojection
29-
from arl.imaging.wprojection_wstack import invert_wprojection_wstack, predict_wprojection_wstack
30-
from arl.imaging.wstack import invert_wstack, invert_wstack_single, predict_wstack, predict_wstack_single
19+
from arl.imaging.base import predict_2d_base, predict_skycomponent_visibility, \
20+
predict_skycomponent_blockvisibility, invert_2d_base, normalize_sumwt, shift_vis_to_image, \
21+
create_image_from_visibility, residual_image
22+
from arl.imaging.imaging_context import imaging_context, invert_context, predict_context
23+
from arl.imaging.legacy import invert_2d, predict_2d, invert_facets, predict_facets, \
24+
invert_facets_wprojection, predict_facets_wprojection, \
25+
invert_facets_wstack, predict_facets_wstack, \
26+
invert_timeslice, predict_timeslice, \
27+
invert_wprojection, predict_wprojection, \
28+
invert_wprojection_wstack, predict_wprojection_wstack, \
29+
invert_wstack, predict_wstack

‎arl/imaging/facets.py‎

Lines changed: 0 additions & 47 deletions
This file was deleted.

‎arl/imaging/facets_wprojection.py‎

Lines changed: 0 additions & 47 deletions
This file was deleted.

‎arl/imaging/facets_wstack.py‎

Lines changed: 0 additions & 44 deletions
This file was deleted.

‎arl/imaging/imaging_context.py‎

Lines changed: 26 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@
1414
from arl.image.iterators import image_raster_iter, image_null_iter
1515
from arl.image.operations import create_empty_image_like
1616
from arl.imaging import normalize_sumwt
17-
from arl.imaging import predict_2d_base, invert_2d_base, \
18-
predict_timeslice_single, invert_timeslice_single, \
19-
predict_wstack_single, invert_wstack_single
17+
from arl.imaging import predict_2d_base, invert_2d_base
18+
from arl.imaging.timeslice import predict_timeslice_single, invert_timeslice_single
19+
from arl.imaging.wstack import predict_wstack_single, invert_wstack_single
2020
from arl.visibility.base import copy_visibility, create_visibility_from_rows
2121
from arl.visibility.coalesce import coalesce_visibility
2222
from arl.visibility.iterators import vis_slice_iter, vis_timeslice_iter, vis_null_iter, \
@@ -47,7 +47,7 @@ def imaging_contexts():
4747
'image_iterator': image_null_iter,
4848
'vis_iterator': vis_slice_iter,
4949
'inner': 'image'},
50-
'facets+slice': {'predict': predict_2d_base,
50+
'facets_slice': {'predict': predict_2d_base,
5151
'invert': invert_2d_base,
5252
'image_iterator': image_raster_iter,
5353
'vis_iterator': vis_slice_iter,
@@ -57,7 +57,7 @@ def imaging_contexts():
5757
'image_iterator': image_null_iter,
5858
'vis_iterator': vis_timeslice_iter,
5959
'inner': 'vis'},
60-
'facets+timeslice': {'predict': predict_timeslice_single,
60+
'facets_timeslice': {'predict': predict_timeslice_single,
6161
'invert': invert_timeslice_single,
6262
'image_iterator': image_raster_iter,
6363
'vis_iterator': vis_timeslice_iter,
@@ -66,13 +66,13 @@ def imaging_contexts():
6666
'invert': invert_2d_base,
6767
'image_iterator': image_raster_iter,
6868
'vis_iterator': vis_null_iter,
69-
'inner': 'vis'},
69+
'inner': 'image'},
7070
'wstack': {'predict': predict_wstack_single,
7171
'invert': invert_wstack_single,
7272
'image_iterator': image_null_iter,
7373
'vis_iterator': vis_wstack_iter,
7474
'inner': 'image'},
75-
'facets+wstack': {'predict': predict_wstack_single,
75+
'facets_wstack': {'predict': predict_wstack_single,
7676
'invert': invert_wstack_single,
7777
'image_iterator': image_raster_iter,
7878
'vis_iterator': vis_wstack_iter,
@@ -87,15 +87,18 @@ def imaging_context(context='2d'):
8787
return contexts[context]
8888

8989

90-
def invert_context(vis: Visibility, im: Image, dopsf=False, normalize=True, context='2d', inner=None, **kwargs):
90+
def invert_context(vis, im: Image, dopsf=False, normalize=True, context='2d', inner=None,
91+
**kwargs):
9192
""" Invert using a specified iterators and invert
9293
9394
:param vis:
9495
:param im:
9596
:param dopsf: Make the psf instead of the dirty image
9697
:param normalize: Normalize by the sum of weights (True)
98+
:param context: Imaing context e.g. '2d', 'timeslice', etc.
99+
:param inner: Inner loop 'vis'|'image'
97100
:param kwargs:
98-
:return:
101+
:return: Image, sum of weights
99102
"""
100103
c = imaging_context(context)
101104
vis_iter = c['vis_iterator']
@@ -129,21 +132,21 @@ def invert_context(vis: Visibility, im: Image, dopsf=False, normalize=True, cont
129132
totalwt += sumwt
130133
resultimage.data += workimage.data
131134
else:
135+
# We assume that the weight is the same for all image iterations
132136
totalwt = None
133137
workimage = create_empty_image_like(im)
134138
for dpatch in image_iter(workimage, **kwargs):
135139
totalwt = None
136-
sumwt = 0.0
137140
for rows in vis_iter(svis, **kwargs):
138141
if numpy.sum(rows):
139142
visslice = create_visibility_from_rows(svis, rows)
140143
result, sumwt = invert(visslice, dpatch, dopsf, normalize=False, **kwargs)
141144
# Ensure that we fill in the elements of dpatch instead of creating a new numpy arrray
142145
dpatch.data[...] += result.data[...]
143-
if totalwt is None:
144-
totalwt = sumwt
145-
else:
146-
totalwt += sumwt
146+
if totalwt is None:
147+
totalwt = sumwt
148+
else:
149+
totalwt += sumwt
147150
resultimage.data += workimage.data
148151
workimage.data[...] = 0.0
149152

@@ -153,8 +156,16 @@ def invert_context(vis: Visibility, im: Image, dopsf=False, normalize=True, cont
153156
return resultimage, totalwt
154157

155158

156-
def predict_context(vis: Visibility, model: Image, context='2d', inner=None, **kwargs) -> Visibility:
159+
def predict_context(vis, model: Image, context='2d', inner=None, **kwargs) -> Visibility:
157160
"""Iterate through prediction using specified iterators and predict
161+
162+
:param vis:
163+
:param model: Model image, used to determine image characteristics
164+
:param context: Imaing context e.g. '2d', 'timeslice', etc.
165+
:param inner: Inner loop 'vis'|'image'
166+
:param kwargs:
167+
:return:
168+
158169
159170
"""
160171
c = imaging_context(context)

0 commit comments

Comments
 (0)