|
|||
NRAO Home > CASA > CASA Cookbook and User Reference Manual |
|
H.3.2 File task_clean.py
Task clean implementation file.
import os
from taskinit import *
from cleanhelper import *
def clean(vis,imagename,field, spw, selectdata, timerange, uvrange, antenna,
scan, mode,niter, gain,threshold, psfmode, imagermode, ftmachine,
mosweight, scaletype, multiscale, negcomponent,interactive,mask,
nchan,start,width,imsize,cell, phasecenter, restfreq, stokes,
weighting,robust, uvtaper,outertaper,innertaper, modelimage,
restoringbeam,pbcor, minpb, noise, npixels, npercycle, cyclefactor,
cyclespeedup):
#Python script
casalog.origin(’clean’)
maskimage=’’
if((mask==[]) or (mask==’’)):
mask=[’’]
if (interactive):
if( (mask==’’) or (mask==[’’]) or (mask==[])):
#try:
if(1):
imCln=imtool.create()
imset=cleanhelper(imCln, vis)
if((len(imagename)==0) or (imagename.isspace())):
raise Exception, ’Cannot proceed with blank imagename’
casalog.origin(’clean’)
imset.defineimages(imsize=imsize, cell=cell, stokes=stokes,
mode=mode, spw=spw, nchan=nchan,
start=start, width=width,
restfreq=restfreq, field=field,
phasecenter=phasecenter)
imset.datselweightfilter(field=field, spw=spw,
timerange=timerange,
uvrange=uvrange,
antenna=antenna, scan=scan,
wgttype=weighting,
robust=robust,
noise=noise, npixels=npixels,
mosweight=mosweight,
innertaper=innertaper,
outertaper=outertaper)
if(maskimage==’’):
maskimage=imagename+’.mask’
imset.makemaskimage(outputmask=maskimage,imagename=imagename,
maskobject=mask)
###define clean alg
alg=psfmode
if(multiscale==[0]):
multiscale=[]
if((type(multiscale)==list) and (len(multiscale)>0)):
alg=’multiscale’
imCln.setscales(scalemethod=’uservector’,
uservector=multiscale)
if(imagermode==’csclean’):
alg=’mf’+alg
if(imagermode==’mosaic’):
if(alg.count(’mf’) <1):
alg=’mf’+alg
imCln.setoptions(ftmachine=ftmachine, padding=1.0)
imCln.setvp(dovp=True)
###PBCOR or not
sclt=’SAULT’
if((scaletype==’PBCOR’) or (scaletype==’pbcor’)):
sclt=’NONE’
imCln.setvp(dovp=True)
else:
if(imagermode != ’mosaic’):
##make a pb for flux scale
imCln.setvp(dovp=True)
imCln.makeimage(type=’pb’, image=imagename+’.flux’)
imCln.setvp(dovp=False)
##restoring
imset.setrestoringbeam(restoringbeam)
###model image
imset.convertmodelimage(modelimages=modelimage,
outputmodel=imagename+’.model’)
####after all the mask shenanigans...make sure to use the
####last mask
maskimage=imset.outputmask
if((imagermode==’mosaic’)):
imCln.setmfcontrol(stoplargenegatives=negcomponent,scaletype=sclt,
minpb=minpb,cyclefactor=cyclefactor,
cyclespeedup=cyclespeedup,
fluxscale=[imagename+’.flux’])
else:
imCln.setmfcontrol(stoplargenegatives=negcomponent,
cyclefactor=cyclefactor, cyclespeedup=cyclespeedup)
imCln.clean(algorithm=alg,niter=niter,gain=gain,
threshold=qa.quantity(threshold,’mJy’),
model=[imagename+’.model’],
residual=[imagename+’.residual’],
image=[imagename+’.image’],
psfimage=[imagename+’.psf’],
mask=maskimage, interactive=interactive,
npercycle=npercycle)
imCln.close()
presdir=os.path.realpath(’.’)
newimage=imagename
if(imagename.count(’/’) > 0):
newimage=os.path.basename(imagename)
os.chdir(os.path.dirname(imagename))
result = ’\’’ + newimage + ’.image’ + ’\’’;
fluxscale_image = ’\’’ + newimage + ’.flux’ + ’\’’;
if (pbcor):
if(sclt != ’NONE’):
##otherwise its already divided
ia.open(newimage+’.image’)
pixmask = fluxscale_image+’>’+str(minpb);
ia.calcmask(pixmask,asdefault=True);
pixels=’iif(’+ fluxscale_image+’>’+str(minpb)+’,’
+ result+’/’+fluxscale_image+’, 0)’
ia.calc(pixels=pixels)
ia.close()
else:
## people has imaged the fluxed corrected image
## but want the
## final image to be non-fluxed corrected
if(sclt==’NONE’):
ia.open(newimage+’.image’)
result=newimage+’.image’
fluxscale_image=newimage+’.flux’
pixels=result+’*’+fluxscale_image
ia.calc(pixels=pixels)
ia.close()
os.chdir(presdir)
del imCln
# except Exception, instance:
# print ’*** Error *** ’,instance
# raise Exception, instance
More information about CASA may be found at the
CASA web page
Copyright © 2010 Associated Universities Inc., Washington, D.C.
This code is available under the terms of the GNU General Public Lincense
Home |
Contact Us |
Directories |
Site Map |
Help |
Privacy Policy |
Search