Skip to content

Commit 433e2d5

Browse files
committed
Graph fixes
Found by running new notebooks
1 parent fcd0163 commit 433e2d5

11 files changed

Lines changed: 244 additions & 128 deletions

File tree

‎arl/graphs/graphs.py‎

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -463,9 +463,9 @@ def create_predict_wstack_graph(vis_graph_list, model_graph: delayed, vis_slices
463463
"""
464464

465465
return create_predict_vis_scatter_graph(vis_graph_list, model_graph, vis_slices,
466-
scatter=visibility_scatter_w,
467-
gather=visibility_gather_w,
468-
predict=predict_wstack_single, ** kwargs)
466+
scatter=visibility_scatter_w,
467+
gather=visibility_gather_w,
468+
predict=predict_wstack_single, ** kwargs)
469469

470470
def create_predict_timeslice_graph(vis_graph_list, model_graph: delayed, vis_slices,
471471
**kwargs):
@@ -481,9 +481,9 @@ def create_predict_timeslice_graph(vis_graph_list, model_graph: delayed, vis_sli
481481
"""
482482

483483
return create_predict_vis_scatter_graph(vis_graph_list, model_graph, vis_slices,
484-
scatter=visibility_scatter_time,
485-
gather=visibility_gather_time,
486-
predict=predict_timeslice_single, ** kwargs)
484+
scatter=visibility_scatter_time,
485+
gather=visibility_gather_time,
486+
predict=predict_timeslice_single, ** kwargs)
487487

488488

489489
def create_predict_facet_vis_scatter_graph(vis_graph_list, model_graph: delayed, vis_slices, facets,
@@ -560,8 +560,8 @@ def create_predict_facet_timeslice_graph(vis_graph_list, model_graph: delayed, v
560560

561561
return create_predict_facet_vis_scatter_graph(vis_graph_list, model_graph, vis_slices=vis_slices,
562562
facets=facets, predict=predict_timeslice_single,
563-
vis_scatter=visibility_scatter_w,
564-
vis_gather=visibility_gather_w, **kwargs)
563+
vis_scatter=visibility_scatter_time,
564+
vis_gather=visibility_gather_time, **kwargs)
565565

566566

567567
def create_residual_graph(vis_graph_list, model_graph: delayed, **kwargs) -> delayed:
@@ -609,6 +609,21 @@ def create_residual_wstack_graph(vis_graph_list, model_graph: delayed, **kwargs)
609609
**kwargs)
610610

611611

612+
def create_residual_timeslice_graph(vis_graph_list, model_graph: delayed, **kwargs) -> delayed:
613+
""" Create a graph to calculate residual image using timeslicing
614+
615+
:param vis_graph_list:
616+
:param model_graph:
617+
:param kwargs: Parameters for functions in graphs
618+
:return:
619+
"""
620+
model_vis_graph_list = create_zero_vis_graph_list(vis_graph_list)
621+
model_vis_graph_list = create_predict_timeslice_graph(model_vis_graph_list, model_graph, **kwargs)
622+
residual_vis_graph_list = create_subtract_vis_graph_list(vis_graph_list, model_vis_graph_list)
623+
return create_invert_timeslice_graph(residual_vis_graph_list, model_graph, dopsf=False, normalize=True,
624+
**kwargs)
625+
626+
612627
def create_residual_facet_wstack_graph(vis_graph_list, model_graph: delayed, **kwargs) -> delayed:
613628
""" Create a graph to calculate residual image using w stacking and faceting
614629
@@ -677,9 +692,8 @@ def add_model(output, model):
677692
return delayed(add_model, nout=1, pure=True)(result, model_graph)
678693

679694

680-
def create_selfcal_graph_list(vis_graph_list, model_graph: delayed,
681-
vis_slices, global_solution=True,
682-
c_predict_vis_graph=create_predict_wstack_graph, **kwargs):
695+
def create_selfcal_graph_list(vis_graph_list, model_graph: delayed, c_predict_graph,
696+
vis_slices, global_solution=True, **kwargs):
683697
""" Create a set of graphs for (optionally global) selfcalibration of a list of visibilities
684698
685699
If global solution is true then visibilities are gathered to a single visibility data set which is then
@@ -688,20 +702,15 @@ def create_selfcal_graph_list(vis_graph_list, model_graph: delayed,
688702
689703
:param vis_graph_list:
690704
:param model_graph:
705+
:param c_predict_vis_graph
691706
:param vis_slices:
692-
:param c_predict_vis_graph: create_predict_wstack_graph
693707
:param global_solution: Solve for global gains
694708
:param kwargs: Parameters for functions in graphs
695709
:return:
696710
"""
697711

698-
def selfcal_single(vis, model_vis, **kwargs):
699-
gtsol = solve_gaintable(vis, model_vis, **kwargs)
700-
vis = apply_gaintable(vis, gtsol, inverse=True, **kwargs)
701-
return vis
702-
703712
model_vis_graph_list = create_zero_vis_graph_list(vis_graph_list)
704-
model_vis_graph_list = c_predict_vis_graph(model_vis_graph_list, model_graph, vis_slices=vis_slices, **kwargs)
713+
model_vis_graph_list = c_predict_graph(model_vis_graph_list, model_graph, vis_slices=vis_slices, **kwargs)
705714

706715
if global_solution:
707716
point_vis_graph_list = [delayed(divide_visibility, nout=len(vis_graph_list))(vis_graph_list[i],
@@ -714,6 +723,6 @@ def selfcal_single(vis, model_vis, **kwargs):
714723
return [delayed(apply_gaintable, nout=len(vis_graph_list))(v, gt_graph, inverse=True, **kwargs)
715724
for v in vis_graph_list]
716725
else:
717-
return [delayed(selfcal_single, pure=True, nout=1)(vis_graph_list[i], model_vis_graph_list[i], **kwargs)
718-
for i, _ in enumerate(vis_graph_list)]
719-
726+
gt_graph = delayed(solve_gaintable, pure=True, nout=1)(vis_graph_list, model_vis_graph_list, **kwargs)
727+
return [delayed(apply_gaintable, nout=len(vis_graph_list))(v, gt_graph, inverse=True, **kwargs)
728+
for v in vis_graph_list]

‎arl/imaging/wstack.py‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def predict_wstack_single(vis, model, predict_inner=predict_2d_base, **kwargs) -
6060
else:
6161
avis = vis
6262

63-
log.info("predict_wstack_single: predicting using single w slice")
63+
log.debug("predict_wstack_single: predicting using single w slice")
6464

6565
avis.data['vis'] *= 0.0
6666
# We might want to do wprojection so we remove the average w
@@ -116,7 +116,7 @@ def invert_wstack_single(vis: Visibility, im: Image, dopsf, normalize=True, inve
116116
:param dopsf: Make the psf instead of the dirty image
117117
:param normalize: Normalize by the sum of weights (True)
118118
"""
119-
log.info("invert_wstack_single: predicting using single w slice")
119+
log.debug("invert_wstack_single: predicting using single w slice")
120120

121121
kwargs['imaginary'] = True
122122

‎arl/pipelines/graphs.py‎

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ def create_spectral_line_imaging_pipeline_graph(vis_graph_list, model_graph: del
3737
continuum_model_graph=None,
3838
c_deconvolve_graph=create_deconvolve_graph,
3939
c_invert_graph=create_invert_graph,
40-
c_predict_graph=create_predict_graph,
41-
c_residual_graph=create_residual_graph, **kwargs) -> delayed:
40+
c_predict_vis_graph=create_predict_graph,
41+
c_residual_graph=create_residual_graph,
42+
**kwargs) -> delayed:
4243
"""Create graph for spectral line imaging pipeline
4344
4445
Uses the ical pipeline after subtraction of a continuum model
@@ -53,10 +54,11 @@ def create_spectral_line_imaging_pipeline_graph(vis_graph_list, model_graph: del
5354
:return: graphs of (deconvolved model, residual, restored)
5455
"""
5556
if continuum_model_graph is not None:
56-
vis_graph_list = c_predict_graph(vis_graph_list, continuum_model_graph, **kwargs)
57+
vis_graph_list = c_predict_vis_graph(vis_graph_list, continuum_model_graph, **kwargs)
5758

5859
return create_ical_pipeline_graph(vis_graph_list, model_graph,
5960
c_deconvolve_graph=c_deconvolve_graph,
61+
c_predict_vis_graph=c_predict_vis_graph,
6062
c_invert_graph=c_invert_graph,
6163
c_residual_graph=c_residual_graph,
6264
first_selfcal=None,
@@ -67,6 +69,7 @@ def create_ical_pipeline_graph(vis_graph_list, model_graph: delayed,
6769
c_deconvolve_graph=create_deconvolve_graph,
6870
c_invert_graph=create_invert_graph,
6971
c_residual_graph=create_residual_graph,
72+
c_predict_graph=create_predict_graph,
7073
c_selfcal_graph=create_selfcal_graph_list,
7174
first_selfcal=None, **kwargs) -> delayed:
7275
"""Create graph for ICAL pipeline
@@ -82,16 +85,16 @@ def create_ical_pipeline_graph(vis_graph_list, model_graph: delayed,
8285
psf_graph = c_invert_graph(vis_graph_list, model_graph, dopsf=True, **kwargs)
8386

8487
if first_selfcal is not None and first_selfcal == 0:
85-
vis_graph_list = c_selfcal_graph(vis_graph_list, model_graph, **kwargs)
88+
vis_graph_list = c_selfcal_graph(vis_graph_list, model_graph, c_predict_graph, **kwargs)
8689
residual_graph = c_residual_graph(vis_graph_list, model_graph, **kwargs)
8790
deconvolve_model_graph = c_deconvolve_graph(residual_graph, psf_graph, model_graph, **kwargs)
8891

8992
nmajor = get_parameter(kwargs, "nmajor", 5)
9093
if nmajor > 1:
9194
for cycle in range(nmajor):
9295
if first_selfcal is not None and cycle >= first_selfcal:
93-
vis_graph_list = c_selfcal_graph(vis_graph_list,
94-
deconvolve_model_graph, **kwargs)
96+
vis_graph_list = c_selfcal_graph(vis_graph_list, deconvolve_model_graph,
97+
c_predict_graph, **kwargs)
9598
residual_graph = c_residual_graph(vis_graph_list, deconvolve_model_graph, **kwargs)
9699

97100
deconvolve_model_graph = c_deconvolve_graph(residual_graph, psf_graph,

‎arl/util/graph_support.py‎

Lines changed: 15 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ def create_simulate_vis_graph(config='LOWBD2-CORE',
2626
""" Create a graph to simulate an observation
2727
2828
:param config: Name of configuration: def LOWBDS-CORE
29-
:param phasecentre: Phase centre as SkyCoord def: SkyCoord(ra=+15.0 * u.deg, dec=-60.0 * u.deg, frame='icrs', equinox='J2000')
29+
:param phasecentre: Phase centre def: SkyCoord(ra=+15.0 * u.deg, dec=-60.0 * u.deg, frame='icrs', equinox='J2000')
3030
:param frequency: def [1e8]
3131
:param channel_bandwidth: def [1e6]
3232
:param times: Observing times in radians: def [0.0]
3333
:param polarisation_frame: def PolarisationFrame("stokesI")
34-
:param order: 'time'|'frequency'|'both'|None: def 'frequency'
34+
:param order: 'time' or 'frequency' or 'both' or None: def 'frequency'
35+
:param format: 'blockvis' or 'vis': def 'blockvis'
3536
:param kwargs:
3637
:return: vis_graph_list with different frequencies in different elements
3738
"""
@@ -52,26 +53,26 @@ def create_simulate_vis_graph(config='LOWBD2-CORE',
5253
log.debug("create_simulate_vis_graph: Simulating split in %s" % order)
5354
vis_graph_list = list()
5455
for i, time in enumerate(times):
55-
vis_graph_list.append(delayed(create_vis, nout=1)(conf, [time], frequency=frequency,
56+
vis_graph_list.append(delayed(create_vis, nout=1)(conf, [times[i]], frequency=frequency,
5657
channel_bandwidth=channel_bandwidth,
5758
weight=1.0, phasecentre=phasecentre,
5859
polarisation_frame=polarisation_frame, **kwargs))
5960

6061
elif order == 'frequency':
6162
log.debug("create_simulate_vis_graph: Simulating split in %s" % order)
6263
vis_graph_list = list()
63-
for i, freq in enumerate(frequency):
64-
vis_graph_list.append(delayed(create_vis, nout=1)(conf, times, frequency=[freq],
65-
channel_bandwidth=[channel_bandwidth[i]],
64+
for j, _ in enumerate(frequency):
65+
vis_graph_list.append(delayed(create_vis, nout=1)(conf, times, frequency=[frequency[j]],
66+
channel_bandwidth=[channel_bandwidth[j]],
6667
weight=1.0, phasecentre=phasecentre,
6768
polarisation_frame=polarisation_frame, **kwargs))
6869

6970
elif order =='both':
7071
log.debug("create_simulate_vis_graph: Simulating split in time and frequency")
7172
vis_graph_list = list()
72-
for i, time in enumerate(times):
73-
for j, freq in enumerate(frequency):
74-
vis_graph_list.append(delayed(create_vis, nout=1)(conf, [time[i]], frequency=[frequency[j]],
73+
for i, _ in enumerate(times):
74+
for j, _ in enumerate(frequency):
75+
vis_graph_list.append(delayed(create_vis, nout=1)(conf, [times[i]], frequency=[frequency[j]],
7576
channel_bandwidth=[channel_bandwidth[j]],
7677
weight=1.0, phasecentre=phasecentre,
7778
polarisation_frame=polarisation_frame, **kwargs))
@@ -90,13 +91,13 @@ def create_simulate_vis_graph(config='LOWBD2-CORE',
9091

9192
def create_predict_gleam_model_graph(vis_graph_list, frequency, channel_bandwidth,
9293
npixel=512, cellsize=0.001,
93-
c_predict_graph=create_predict_wstack_graph, **kwargs):
94+
c_predict_vis_graph=create_predict_wstack_graph, **kwargs):
9495
""" Create a graph to fill in a model with the gleam sources and predict into a vis_graph_list
9596
9697
:param vis_graph_list:
9798
:param npixel: 512
9899
:param cellsize: 0.001
99-
:param c_predict_graph: def create_predict_wstack_graph
100+
:param c_predict_vis_graph: def create_predict_wstack_graph
100101
:param kwargs:
101102
:return: vis_graph_list
102103
"""
@@ -107,7 +108,7 @@ def create_predict_gleam_model_graph(vis_graph_list, frequency, channel_bandwidt
107108
for i, vis_graph in enumerate(vis_graph_list):
108109
model_graph = create_gleam_model_graph(vis_graph, frequency, channel_bandwidth, npixel=npixel,
109110
cellsize=cellsize, **kwargs)
110-
predicted_vis_graph_list.append(c_predict_graph([vis_graph], model_graph, **kwargs)[0])
111+
predicted_vis_graph_list.append(c_predict_vis_graph([vis_graph], model_graph, **kwargs)[0])
111112
return predicted_vis_graph_list
112113

113114

@@ -127,15 +128,15 @@ def create_gleam_model_graph(vis_graph: delayed, frequency, channel_bandwidth, n
127128
:return: graph
128129
"""
129130

130-
def calculate_model(vis):
131+
def calculate_gleam_model(vis):
131132
model = create_low_test_image_from_gleam(npixel=npixel, frequency=frequency,
132133
channel_bandwidth=channel_bandwidth,
133134
cellsize=cellsize, phasecentre=vis.phasecentre)
134135
beam = create_low_test_beam(model)
135136
model.data *= beam.data
136137
return model
137138

138-
return delayed(calculate_model, nout=1)(vis_graph)
139+
return delayed(calculate_gleam_model, nout=1)(vis_graph)
139140

140141
def create_corrupt_vis_graph(vis_graph_list, gt_graph=None, **kwargs):
141142
""" Create a graph to apply gain errors to a vis_graph_list

0 commit comments

Comments
 (0)