@@ -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
470470def 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
489489def 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
567567def 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+
612627def 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 ]
0 commit comments