def test_ical_pipeline_global(self): self.actualSetUp(add_errors=True) controls = create_calibration_controls() controls['T']['first_selfcal'] = 1 controls['T']['timescale'] = 'auto' clean, residual, restored, gt_list = \ ical_list_serial_workflow(self.vis_list, model_imagelist=self.model_imagelist, context='2d', algorithm='mmclean', facets=1, scales=[0, 3, 10], niter=1000, fractional_threshold=0.1, threshold=0.1, nmoment=3, nmajor=5, gain=0.1, deconvolve_facets=4, deconvolve_overlap=32, deconvolve_taper='tukey', psf_support=64, calibration_context='T', controls=controls, do_selfcal=True, global_solution=True) centre = len(clean) // 2 if self.persist: export_image_to_fits(clean[centre], '%s/test_pipelines_ical_global_pipeline_serial_clean.fits' % self.dir) export_image_to_fits(residual[centre][0], '%s/test_pipelines_ical_global_pipeline_serial_residual.fits' % self.dir) export_image_to_fits(restored[centre], '%s/test_pipelines_ical_global_pipeline_serial_restored.fits' % self.dir) export_gaintable_to_hdf5(gt_list[0]['T'], '%s/test_pipelines_ical_global_pipeline_serial_gaintable.hdf5' % self.dir) qa = qa_image(restored[centre]) assert numpy.abs(qa.data['max'] - 98.92656340122159) < 1.0, str(qa) assert numpy.abs(qa.data['min'] + 0.7024492707920869) < 1.0, str(qa)
def test_calibrate_serial(self): amp_errors = {'T': 0.0, 'G': 0.0} phase_errors = {'T': 1.0, 'G': 0.0} self.actualSetUp(amp_errors=amp_errors, phase_errors=phase_errors) controls = create_calibration_controls() controls['T']['first_selfcal'] = 0 controls['T']['timeslice'] = 'auto' calibrate_list = \ calibrate_list_serial_workflow(self.error_blockvis_list, self.blockvis_list, calibration_context='T', controls=controls, do_selfcal=True, global_solution=False) assert len(calibrate_list) == 2 assert numpy.max(calibrate_list[1][0]['T'].residual) < 7e-6, numpy.max(calibrate_list[1][0]['T'].residual) assert numpy.max(numpy.abs(calibrate_list[0][0].vis - self.blockvis_list[0].vis)) < 2e-6
def test_calibrate_serial_global_empty(self): amp_errors = {'T': 0.0, 'G': 0.0} phase_errors = {'T': 1.0, 'G': 0.0} self.actualSetUp(amp_errors=amp_errors, phase_errors=phase_errors) for v in self.blockvis_list: v.data['vis'][...] = 0.0 + 0.0j controls = create_calibration_controls() controls['T']['first_selfcal'] = 0 controls['T']['timeslice'] = 'auto' calibrate_list = \ calibrate_list_serial_workflow(self.error_blockvis_list, self.blockvis_list, calibration_context='T', controls=controls, do_selfcal=True, global_solution=True) assert len(calibrate_list[1][0]) == 1 assert numpy.max(calibrate_list[1][0]['T'].residual) == 0.0, numpy.max(calibrate_list[1][0]['T'].residual)
def test_ical_pipeline(self): amp_errors = {'T': 0.0, 'G': 0.00, 'B': 0.0} phase_errors = {'T': 0.1, 'G': 0.0, 'B': 0.0} self.actualSetUp(add_errors=True, block=True, amp_errors=amp_errors, phase_errors=phase_errors) controls = create_calibration_controls() controls['T']['first_selfcal'] = 1 controls['G']['first_selfcal'] = 3 controls['B']['first_selfcal'] = 4 controls['T']['timescale'] = 'auto' controls['G']['timescale'] = 'auto' controls['B']['timescale'] = 1e5 clean, residual, restored = \ ical_list_serial_workflow(self.vis_list, model_imagelist=self.model_imagelist, context='2d', calibration_context='T', controls=controls, do_selfcal=True, global_solution=False, algorithm='mmclean', facets=1, scales=[0, 3, 10], niter=1000, fractional_threshold=0.1, nmoments=2, nchan=self.freqwin, threshold=2.0, nmajor=5, gain=0.1, deconvolve_facets=8, deconvolve_overlap=16, deconvolve_taper='tukey') centre = len(clean) // 2 export_image_to_fits( clean[centre], '%s/test_pipelines_ical_pipeline_clean.fits' % self.dir) export_image_to_fits( residual[centre][0], '%s/test_pipelines_ical_pipeline_residual.fits' % self.dir) export_image_to_fits( restored[centre], '%s/test_pipelines_ical_pipeline_restored.fits' % self.dir) qa = qa_image(restored[centre]) assert numpy.abs(qa.data['max'] - 100.13739440876233) < 1.0, str(qa) assert numpy.abs(qa.data['min'] + 0.03644435471804354) < 1.0, str(qa)
print(qa_image(residual[0], context='Residual clean image - no selfcal')) #plt.show() export_image_to_fits( residual[0], '%s/imaging-dask_continuum_imaging_residual.fits' % (results_dir)) if rank == 0: for chan in range(nfreqwin): residual = continuum_imaging_list[1][chan] #show_image(residual[0], title='Channel %d' % chan, cm='Greys', # vmax=0.1, vmin=-0.01) #plt.show() # In[ ]: controls = create_calibration_controls() controls['T']['first_selfcal'] = 1 controls['G']['first_selfcal'] = 3 controls['B']['first_selfcal'] = 4 controls['T']['timeslice'] = 'auto' controls['G']['timeslice'] = 'auto' controls['B']['timeslice'] = 1e5 pp.pprint(controls) # In[ ]: # TODO I change this to predicted_vislist to make it deterministic, I hope it makes # sense :)