Skip to content

Instantly share code, notes, and snippets.

@keflavich
Last active May 9, 2020 21:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keflavich/a9953c88cbe098b5e9bb4bdac6485f09 to your computer and use it in GitHub Desktop.
Save keflavich/a9953c88cbe098b5e9bb4bdac6485f09 to your computer and use it in GitHub Desktop.
import os
# ## (1) Import the python application layer
from imagerhelpers.imager_base import PySynthesisImager
from imagerhelpers.input_parameters import ImagerParameters
try:
from tasks import exportfits
from taskinit import iatool
ia = iatool()
except ImportError:
from casatasks import exportfits
from casatools import image
ia = image()
def my_tclean(vis, imagename, *args, **kwargs):
# (2) Set up Input Parameters
# - List all parameters that you need here
# - Defaults will be assumed for unspecified parameters
# - Nearly all parameters are identical to that in the task. Please look at the
# list of parameters under __init__ using " help ImagerParameters " )
msname = vis
kwargs['loopgain'] = kwargs.pop('gain', 0.1)
kwargs['timestr'] = kwargs.pop('timerange', '')
kwargs['dopbcorr'] = kwargs.pop('pbcor', '')
kwargs['uvdist'] = kwargs.pop('uvrange', '')
kwargs['scalebias'] = kwargs.pop('smallscalebias', '')
kwargs['cfcache'] = kwargs.pop('cfcache', '')
kwargs['nchan'] = kwargs.pop('nchan', -1) or -1
kwargs['nterms'] = kwargs.pop('nterms', 2) or 2
kwargs['facets'] = kwargs.pop('facets', 1) or 1
kwargs['chanchunks'] = kwargs.pop('chanchunks', -1) or -1
kwargs.pop('calcpsf', None)
kwargs.pop('psfphasecenter', None)
kwargs.pop('calcres', None)
kwargs.pop('restoration', None)
kwargs.pop('intent', None)
kwargs.pop('observation', None)
kwargs.pop('selectdata', None)
for key in kwargs.keys():
if kwargs[key] is None:
kwargs.pop(key)
paramList = ImagerParameters(msname=msname, imagename=imagename, **kwargs)
# (3) Construct the PySynthesisImager object, with all input parameters
imager = PySynthesisImager(params=paramList)
# (4) Initialize various modules.
# - Pick only the modules you will need later on. For example, to only make
# the PSF, there is no need for the deconvolver or iteration control modules.
# Initialize modules major cycle modules
imager.initializeImagers()
imager.initializeNormalizers()
imager.setWeighting()
# Init minor cycle modules
imager.initializeDeconvolvers()
imager.initializeIterationControl()
# (5) Make the initial images
imager.makePSF()
imager.makePB()
imager.runMajorCycle() # Make initial dirty / residual image
exportfits(imagename+".image.tt0", imagename+".image.tt0.dirty.fits", overwrite=True)
exportfits(imagename+".residual.tt0", imagename+".residual.tt0.dirty.fits", overwrite=True)
exportfits(imagename+".model.tt0", imagename+".model.tt0.dirty.fits", overwrite=True)
# (6) Make the initial clean mask
imager.hasConverged()
imager.updateMask()
majornumber = 0
minornumber = 0
# (7) Run the iteration loops
while not imager.hasConverged():
print("Beginning major cycle = {0}".format(majornumber))
imager.runMinorCycle()
minornumber += 1
imager.runMajorCycle()
imager.restoreImages()
majornumber += 1
imager.updateMask()
exportfits(imagename+".image.tt0", imagename+".image.tt0.major{0}.fits".format(majornumber), overwrite=True)
exportfits(imagename+".residual.tt0", imagename+".residual.tt0.major{0}.fits".format(majornumber), overwrite=True)
exportfits(imagename+".model.tt0", imagename+".model.tt0.major{0}.fits".format(majornumber), overwrite=True)
#ia.open(imagename+".image.tt0")
print(imagename+".image.tt0.major{0}.fits".format(majornumber))
assert os.path.exists(imagename+".image.tt0.major{0}.fits".format(majornumber))
# (8) Finish up
imager.restoreImages()
imager.pbcorImages()
# don't do this: it tries to load vis tools, which is illegal
#retrec = imager.getSummary()
assert os.path.exists(imagename+".image.tt0.major1.fits".format(1))
# (9) Close tools.
imager.deleteTools()
#return retrec
# ## (1) Import the python application layer
from imagerhelpers.imager_base import PySynthesisImager
from imagerhelpers.input_parameters import ImagerParameters
try:
from tasks import exportfits
except ImportError:
from casatasks import exportfits
def tclean(vis, imagename, *args, **kwargs):
# (2) Set up Input Parameters
# - List all parameters that you need here
# - Defaults will be assumed for unspecified parameters
# - Nearly all parameters are identical to that in the task. Please look at the
# list of parameters under __init__ using " help ImagerParameters " )
msname = vis
kwargs['loopgain'] = kwargs.pop('gain', 0.1)
kwargs['timestr'] = kwargs.pop('timerange', '')
kwargs['dopbcorr'] = kwargs.pop('pbcor', '')
kwargs['uvdist'] = kwargs.pop('uvrange', '')
kwargs['scalebias'] = kwargs.pop('smallscalebias', '')
kwargs['cfcache'] = kwargs.pop('cfcache', '')
kwargs['nchan'] = kwargs.pop('nchan', -1) or -1
kwargs['nterms'] = kwargs.pop('nterms', 2) or 2
kwargs['facets'] = kwargs.pop('facets', 1) or 1
kwargs['chanchunks'] = kwargs.pop('chanchunks', -1) or -1
kwargs.pop('calcpsf', None)
kwargs.pop('psfphasecenter', None)
kwargs.pop('calcres', None)
kwargs.pop('restoration', None)
kwargs.pop('intent', None)
kwargs.pop('observation', None)
kwargs.pop('selectdata', None)
for key in kwargs.keys():
if kwargs[key] is None:
kwargs.pop(key)
paramList = ImagerParameters(msname=msname, imagename=imagename, **kwargs)
# (3) Construct the PySynthesisImager object, with all input parameters
imager = PySynthesisImager(params=paramList)
# (4) Initialize various modules.
# - Pick only the modules you will need later on. For example, to only make
# the PSF, there is no need for the deconvolver or iteration control modules.
# Initialize modules major cycle modules
imager.initializeImagers()
imager.initializeNormalizers()
imager.setWeighting()
# Init minor cycle modules
imager.initializeDeconvolvers()
imager.initializeIterationControl()
# (5) Make the initial images
imager.makePSF()
imager.makePB()
imager.runMajorCycle() # Make initial dirty / residual image
# (6) Make the initial clean mask
imager.hasConverged()
imager.updateMask()
majornumber = 0
minornumber = 0
# (7) Run the iteration loops
while not imager.hasConverged():
imager.runMinorCycle()
exportfits(imagename+".image.tt0", imagename+".image.tt0.minor{0}.fits".format(minornumber), overwrite=True)
exportfits(imagename+".residual.tt0", imagename+".residual.tt0.minor{0}.fits".format(minornumber), overwrite=True)
minornumber += 1
imager.runMajorCycle()
exportfits(imagename+".image.tt0", imagename+".image.tt0.major{0}.fits".format(majornumber), overwrite=True)
exportfits(imagename+".residual.tt0", imagename+".residual.tt0.minor{0}.fits".format(minornumber), overwrite=True)
exportfits(imagename+".model.tt0", imagename+".model.tt0.minor{0}.fits".format(minornumber), overwrite=True)
majornumber += 1
imager.updateMask()
# (8) Finish up
retrec = imager.getSummary()
imager.restoreImages()
imager.pbcorImages()
# (9) Close tools.
imager.deleteTools()
return retrec
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment