def drawmaskinimage(image='', maskname='maskoo', makedefault=True): """ Till casa think graphical interaction is important. Ugly Function that uses interactive clean image mask to allow users to draw a mask and store it as a bit mask in the image so it can be used by imageanalysis methods or to mask an image Parameters image: is the image to put a bit mask in maskname: name of bit mask makedefault: if True will make new bit mask drawn be the default mask """ if (not os.path.exists(image)): return tmpmaskimage = '__muluktani' if (os.path.exists(tmpmaskimage)): shutil.rmtree(tmpmaskimage, True) im.drawmask(image=image, mask=tmpmaskimage) ia.open(image) ia.calcmask(mask='__muluktani < 0.5', name=maskname, asdefault=makedefault) ia.done() print 'regions/mask in ', image, rg.namesintable(image) shutil.rmtree(tmpmaskimage, True)
def drawmaskinimage(image='', maskname='maskoo', makedefault=True): """ Till casa think graphical interaction is important. Ugly Function that uses interactive clean image mask to allow users to draw a mask and store it as a bit mask in the image so it can be used by imageanalysis methods or to mask an image Parameters image: is the image to put a bit mask in maskname: name of bit mask makedefault: if True will make new bit mask drawn be the default mask """ if(not os.path.exists(image)): return tmpmaskimage='__muluktani' if(os.path.exists(tmpmaskimage)): shutil.rmtree(tmpmaskimage, True) im.drawmask(image=image, mask=tmpmaskimage) ia.open(image) ia.calcmask(mask='__muluktani < 0.5', name=maskname, asdefault=makedefault) ia.done() print 'regions/mask in ', image, rg.namesintable(image) shutil.rmtree(tmpmaskimage, True)
def blankcube(image, dummyMS, smooth=True, verbose=True, region='centerbox[[10h21m45s,18.05.14.9],[15arcmin,15arcmin]]', ruthless=False, extension='.image', beamround='int', blankThreshold=2.5, moments=[0]): ''' Parameters ---------- image : string Base name of image. If target image has extension other than '.image', change the extension keyword. dummyMS : string MS file required for blanking process in CASA smooth : bool, optional Smooth the image to a circular beam before blanking? Default True verbose : bool, optional region : string, optional region parameter featured in CASA ruthless : bool, optional Delete previous outputs from blankcube extension : string, optional Extension of the target image. Must include the '.', e.g., '.restored' Default '.image' beamround : string,float P blankThreshold : float, optional Initial blanking threshold of all pixels scaled by the standard deviation times the blankingthreshold Default = 2.5 (Walter et al. 2008) moments : list, optional Moments to calculate from cube. Options are 0,1,2. Example: [0,1,2] Default: [0] Returns ------- out : null Examples -------- ''' from casa import immath, imsmooth, immoments from casa import image as ia from casa import imager as im from casa import quanta as qa import os import numpy as np # Delete files associated with previous runs if ruthless: os.system('rm -rf ' + image + '.smooth.blk.image') os.system('rm -rf ' + image + '.smooth.image') os.system('rm -rf ' + image + '.blk.image') os.system('rm -rf ' + image + '.mask') imageDir = './' # Create moment maps mom0, mom1, mom2 = False, False, False if len(moments) > 0: for i, moment in enumerate(moments): if moment == 0: mom0 = True if moment == 1: mom1 = True if moment == 2: mom2 = True if mom1 == True or mom2 == True: beamScale = 1.01 elif mom0 == True: beamScale = 2. # determine beamsize of cube ia.open(imageDir + image + extension) beamsizes = np.zeros(ia.shape()[2]) for i in range(ia.shape()[2]): beamsizes[i] = ia.restoringbeam(channel=i)['major']['value'] beamsizeUnit = ia.restoringbeam(channel=i)['major']['unit'] beamsize = qa.convert(str(beamsizes.max()) + beamsizeUnit, 'arcsec')['value'] if type(beamround) == float: beamsize_smooth = beamround * beamsize else: beamsize_smooth = np.ceil(beamsize) #beamsize_smooth = 1.01 * beamsize ia.close() if verbose: print 'Max beamsize is ' + str(beamsize) + '"' if not os.path.exists(image + '.blk.image'): # create cube for blanking if smooth: # smooth to a larger beam if the user desires if verbose: print 'Convolving to ' + str(beamsize_smooth) + '"' imsmooth(imagename=image + extension, outfile=image + '.blk.image', major=str(beamsize_smooth) + 'arcsec', minor=str(beamsize_smooth) + 'arcsec', region=region, pa='0deg', targetres=True) else: # do no smooth immath(imagename=image + extension, outfile=image + '.blk.image', mode='evalexpr', region=region, expr='IM0') if not os.path.exists(image + '.smooth.image'): # convolve cube to 2X beam for blanking imsmooth(imagename=image + extension, outfile=image + '.smooth.image', major=str(beamsize * beamScale) + 'arcsec', minor=str(beamsize * beamScale) + 'arcsec', pa='0deg', region=region, targetres=True) # determine threshold of cube ia.open(image + '.smooth.image') threshold = ia.statistics()['sigma'][0] * blankThreshold ia.close() # blank the cube at threshold*sigma ia.open(image + '.smooth.image') ia.calcmask(mask=image + '.smooth.image > ' + str(threshold), name='mask1') wait = 'waits for calcmask to close' ia.close() # hand blank the cube im.open(dummyMS) pause = None while pause is None: im.drawmask(image=image + '.smooth.image', mask=image + '.mask') pause = 0 im.close # mask contains values of 0 and 1, change to a mask with only values of 1 ia.open(image + '.mask') ia.calcmask(image + '.mask' + '>0.5') ia.close() # apply mask on smoothed image immath(imagename=image + '.smooth.image', outfile=image + '.smooth.blk.image', mode='evalexpr', mask='mask(' + image + '.mask)', expr='IM0') # apply mask on image ia.open(imageDir + image + '.blk.image') ia.maskhandler('copy', [image + '.smooth.blk.image:mask0', 'newmask']) ia.maskhandler('set', 'newmask') ia.done() cube = '.blk.image' # specify name of cube for moment calculation # create moment 0 map if mom0: if ruthless: os.system('rm -rf ' + image + '.mom0.image') immoments(imagename=image + cube, moments=[0], axis='spectra', chans='', mask='mask(' + image + cube + ')', outfile=image + '.mom0.image') # create moment 1 map if mom1: if ruthless: os.system('rm -rf ' + image + '.mom1.image') immoments(imagename=image + cube, moments=[1], axis='spectra', chans='', mask='mask(' + image + cube + ')', outfile=image + '.mom1.image') # create moment 2 map if mom2: if ruthless: os.system('rm -rf ' + image + '.mom2.image') immoments(imagename=image + cube, moments=[2], axis='spectra', chans='', mask='mask(' + image + cube + ')', outfile=image + '.mom2.image') if verbose and mom0: from casa import imstat flux = imstat(image + '.mom0.image')['flux'][0] ia.open(image + '.mom0.image') beammaj = ia.restoringbeam(channel=0)['major']['value'] beammin = ia.restoringbeam(channel=0)['minor']['value'] beamsizeUnit = ia.restoringbeam(channel=0)['major']['unit'] ia.close() print 'Moment Image: ' + str(image) + '.mom0.image' print 'Beamsize: ' + str(beammaj) + '" X ' + str(beammin) + '"' print 'Flux: ' + str(flux) + ' Jy km/s'
def blankcube(image, dummyMS, smooth=True, verbose=True, region='centerbox[[10h21m45s,18.05.14.9],[15arcmin,15arcmin]]', ruthless=False, extension='.image', beamround='int', blankThreshold=2.5, moments=[0]): ''' Parameters ---------- image : string Base name of image. If target image has extension other than '.image', change the extension keyword. dummyMS : string MS file required for blanking process in CASA smooth : bool, optional Smooth the image to a circular beam before blanking? Default True verbose : bool, optional region : string, optional region parameter featured in CASA ruthless : bool, optional Delete previous outputs from blankcube extension : string, optional Extension of the target image. Must include the '.', e.g., '.restored' Default '.image' beamround : string,float P blankThreshold : float, optional Initial blanking threshold of all pixels scaled by the standard deviation times the blankingthreshold Default = 2.5 (Walter et al. 2008) moments : list, optional Moments to calculate from cube. Options are 0,1,2. Example: [0,1,2] Default: [0] Returns ------- out : null Examples -------- ''' from casa import immath,imsmooth,immoments from casa import image as ia from casa import imager as im from casa import quanta as qa import os import numpy as np # Delete files associated with previous runs if ruthless: os.system('rm -rf ' + image + '.smooth.blk.image') os.system('rm -rf ' + image + '.smooth.image') os.system('rm -rf ' + image + '.blk.image') os.system('rm -rf ' + image + '.mask') imageDir = './' # Create moment maps mom0,mom1,mom2 = False,False,False if len(moments) > 0: for i, moment in enumerate(moments): if moment == 0: mom0 = True if moment == 1: mom1 = True if moment == 2: mom2 = True if mom1 == True or mom2 == True: beamScale = 1.01 elif mom0 == True: beamScale = 2. # determine beamsize of cube ia.open(imageDir + image + extension) beamsizes = np.zeros(ia.shape()[2]) for i in range(ia.shape()[2]): beamsizes[i] = ia.restoringbeam(channel=i)['major']['value'] beamsizeUnit = ia.restoringbeam(channel=i)['major']['unit'] beamsize = qa.convert(str(beamsizes.max()) + beamsizeUnit,'arcsec')['value'] if type(beamround) == float: beamsize_smooth = beamround*beamsize else: beamsize_smooth = np.ceil(beamsize) #beamsize_smooth = 1.01 * beamsize ia.close() if verbose: print 'Max beamsize is ' + str(beamsize) + '"' if not os.path.exists(image + '.blk.image'): # create cube for blanking if smooth: # smooth to a larger beam if the user desires if verbose: print 'Convolving to ' + str(beamsize_smooth) + '"' imsmooth(imagename=image + extension, outfile=image + '.blk.image', major=str(beamsize_smooth) + 'arcsec', minor=str(beamsize_smooth) + 'arcsec', region=region, pa='0deg', targetres=True) else: # do no smooth immath(imagename=image + extension, outfile=image + '.blk.image', mode='evalexpr', region=region, expr='IM0') if not os.path.exists(image + '.smooth.image'): # convolve cube to 2X beam for blanking imsmooth(imagename=image + extension, outfile=image + '.smooth.image', major=str(beamsize*beamScale) + 'arcsec', minor=str(beamsize*beamScale) + 'arcsec', pa='0deg', region=region, targetres=True) # determine threshold of cube ia.open(image + '.smooth.image') threshold = ia.statistics()['sigma'][0] * blankThreshold ia.close() # blank the cube at threshold*sigma ia.open(image + '.smooth.image') ia.calcmask(mask=image + '.smooth.image > ' + str(threshold), name='mask1') wait = 'waits for calcmask to close' ia.close() # hand blank the cube im.open(dummyMS) pause = None while pause is None: im.drawmask(image=image + '.smooth.image', mask=image + '.mask') pause = 0 im.close # mask contains values of 0 and 1, change to a mask with only values of 1 ia.open(image + '.mask') ia.calcmask(image + '.mask' + '>0.5') ia.close() # apply mask on smoothed image immath(imagename=image + '.smooth.image', outfile=image + '.smooth.blk.image', mode='evalexpr', mask='mask(' + image + '.mask)', expr='IM0') # apply mask on image ia.open(imageDir + image + '.blk.image') ia.maskhandler('copy',[image + '.smooth.blk.image:mask0', 'newmask']) ia.maskhandler('set','newmask') ia.done() cube = '.blk.image' # specify name of cube for moment calculation # create moment 0 map if mom0: if ruthless: os.system('rm -rf ' + image + '.mom0.image') immoments(imagename=image + cube, moments=[0], axis='spectra', chans='', mask='mask(' + image + cube + ')', outfile=image + '.mom0.image') # create moment 1 map if mom1: if ruthless: os.system('rm -rf ' + image + '.mom1.image') immoments(imagename=image + cube, moments=[1], axis='spectra', chans='', mask='mask(' + image + cube + ')', outfile=image + '.mom1.image') # create moment 2 map if mom2: if ruthless: os.system('rm -rf ' + image + '.mom2.image') immoments(imagename=image + cube, moments=[2], axis='spectra', chans='', mask='mask(' + image + cube + ')', outfile=image + '.mom2.image') if verbose and mom0: from casa import imstat flux = imstat(image + '.mom0.image')['flux'][0] ia.open(image + '.mom0.image') beammaj = ia.restoringbeam(channel=0)['major']['value'] beammin = ia.restoringbeam(channel=0)['minor']['value'] beamsizeUnit = ia.restoringbeam(channel=0)['major']['unit'] ia.close() print 'Moment Image: ' + str(image) + '.mom0.image' print 'Beamsize: ' + str(beammaj) + '" X ' + str(beammin) + '"' print 'Flux: ' + str(flux) + ' Jy km/s'