def mapallvis(uvo, uvc, so, mapdir, lines=[]):
    """
	Similar to mapvis but doesn't do multiple frequency synthesis.
	The frequency axis is preserved so you can get spectra from the image.
	"""
    calibrator = 'cnt.usb'
    tall = 0.50

    # remove continuum, its already been mapped
    lines.remove(calibrator)
    lines.remove('usb')

    for i, lin in enumerate(lines):
        vis = '{}/{}.{}.corrected.slfc'.format(uvc, so, lin)
        for src in [
                '{}/{}.{}'.format(mapdir, so, lin),
                '{}/{}.{}.uncorrected'.format(mapdir, so, lin)
        ]:
            line = miriad.averageVelocityLine(vis, 2)
            for path in glob.glob('{}.full.*'.format(src)):
                if os.path.exists(path): shutil.rmtree(path)

            invertOptions = {
                'vis': vis,
                'stokes': 'i,v',
                'beam': '{}.full.bm'.format(src),
                'map': '{0}.i.full.mp,{0}.v.full.mp'.format(src),
                'imsize': 128,
                'cell': 0.3,
                'options': 'systemp,double',
                'sup': 0,
            }
            miriad.invert(invertOptions)

            for stk in ['i', 'v']:
                miriad.clean({
                    'map': '{}.{}.full.mp'.format(src, stk),
                    'beam': '{}.full.bm'.format(src),
                    'out': '{}.{}.full.cc'.format(src, stk),
                    'niters': 3000,
                    'cutoff': tall
                })
                miriad.restor({
                    'map': '{}.{}.full.mp'.format(src, stk),
                    'beam': '{}.full.bm'.format(src),
                    'model': '{}.{}.full.cc'.format(src, stk),
                    'out': '{}.{}.full.cm'.format(src, stk),
                })
            vis = '{}/{}.{}'.format(uvo, so, lin)
Exemple #2
0
    'options': 'systemp,double',
    'stokes': 'i,q,u,v',
    'sup': 0
})

for stk in ['i', 'q', 'u', 'v']:
    miriad.clean({
        'map': '{}.{}.mp'.format(src, stk),
        'beam': '{}.bm'.format(src),
        'out': '{}.{}.cc'.format(src, stk),
        'niters': 1000,
        'cutoff': tall
    })
    miriad.restor({
        'map': '{}.{}.mp'.format(src, stk),
        'beam': '{}.bm'.format(src),
        'model': '{}.{}.cc'.format(src, stk),
        'out': '{}.{}.cm'.format(src, stk),
    })

miriad.imstat({'in': '{}.i.cm'.format(src), 'region': 'box(6,6,50,122)'})

input('Press return to continue')

for stk in ['q', 'u', 'v']:
    miriad.cgdisp({
        'type': 'cont,pix',
        'labtyp': 'arcsec,arcsec',
        'device': '/xs',
        'options': 'full,beambl,3val',
        'csize': '0,1,0,0',
        'in': '{0}.{1}.cm,{0}.i.cm'.format(src, stk),
def mapvis(uvo, uvc, so, mapdir, lines=[], lineSelection=[]):
    """
	Make a map from visibilities
	1. Continuum Stokes I,V Uncorrected & Corrected data
	2. Map All lines. Corrected
	3. Map All lines. Uncorrected
	4. Continuum LL and RR independently, for non-selfcal and selfcal cases
	"""
    calibrator = 'cnt.usb'
    if len(lines) != len(lineSelection):
        lineSelection = [None for l in lines]

    # 1.
    src = '{}/{}.cnt'.format(mapdir, so)
    tall = 0.03

    for path in glob.glob('{}.*'.format(src)):
        if os.path.exists(path): shutil.rmtree(path)

    vis = '{}/{}.cnt.usb.corrected.slfc'.format(uvc, so)
    for src in [
            '{}/{}.cnt'.format(mapdir, so),
            '{}/{}.cnt.uncorrected'.format(mapdir, so)
    ]:
        miriad.invert({
            'vis': vis,
            'stokes': 'i,v',
            'beam': '{}.bm'.format(src),
            'map': '{0}.i.mp,{0}.v.mp'.format(src),
            'imsize': 128,
            'cell': 0.3,
            'options': 'systemp,double,mfs',
            'sup': 0
        })

        for stk in ['i', 'v']:
            miriad.clean({
                'map': '{}.{}.mp'.format(src, stk),
                'beam': '{}.bm'.format(src),
                'out': '{}.{}.cc'.format(src, stk),
                'niters': 3000,
                'cutoff': tall
            })
            miriad.restor({
                'map': '{}.{}.mp'.format(src, stk),
                'beam': '{}.bm'.format(src),
                'model': '{}.{}.cc'.format(src, stk),
                'out': '{}.{}.cm'.format(src, stk),
            })
        vis = '{}/{}.cnt.usb'.format(uvo, so)

    # 2. Map corrected line data
    # 3. Map uncorrected line data with same paramenters as in 2
    tall = 0.50

    # remove continuum, its already been mapped
    lines.remove(calibrator)
    lines.remove('usb')

    for i, lin in enumerate(lines):
        vis = '{}/{}.{}.corrected.slfc'.format(uvc, so, lin)
        for src in [
                '{}/{}.{}'.format(mapdir, so, lin),
                '{}/{}.{}.uncorrected'.format(mapdir, so, lin)
        ]:
            line = miriad.averageVelocityLine(vis, 2)
            for path in glob.glob('{}.*'.format(src)):
                if os.path.exists(path): shutil.rmtree(path)

            invertOptions = {
                'vis': vis,
                'stokes': 'i,v',
                'beam': '{}.bm'.format(src),
                'map': '{0}.i.mp,{0}.v.mp'.format(src),
                'imsize': 128,
                'cell': 0.3,
                'options': 'systemp,double,mfs',
                'sup': 0,
            }
            if lineSelection[i] is not None:
                invertOptions['line'] = lineSelection[i]
            miriad.invert(invertOptions)

            for stk in ['i', 'v']:
                miriad.clean({
                    'map': '{}.{}.mp'.format(src, stk),
                    'beam': '{}.bm'.format(src),
                    'out': '{}.{}.cc'.format(src, stk),
                    'niters': 3000,
                    'cutoff': tall
                })
                miriad.restor({
                    'map': '{}.{}.mp'.format(src, stk),
                    'beam': '{}.bm'.format(src),
                    'model': '{}.{}.cc'.format(src, stk),
                    'out': '{}.{}.cm'.format(src, stk),
                })
            vis = '{}/{}.{}'.format(uvo, so, lin)

    # 4. nopol is for selfcal case (this option is not used!)
    tall = 0.03

    for stk in ['ll', 'rr']:
        src = '{}/{}.cnt.{}'.format(mapdir, so, stk)
        for path in glob.glob('{}.*'.format(src)):
            if os.path.exists(path): shutil.rmtree(path)
        for pol in ['nopol', 'nocal']:
            path = '{}.bm'.format(src)
            if os.path.exists(path): shutil.rmtree(path)

            miriad.invert({
                'vis': '{}/{}.cnt.usb.{}'.format(uvc, so, stk),
                'beam': '{}.bm'.format(src),
                'map': '{}.{}.mp'.format(src, pol),
                'imsize': 128,
                'cell': 0.3,
                'options': 'systemp,double,mfs,{}'.format(pol),
                'sup': 0
            })
            miriad.clean({
                'map': '{}.{}.mp'.format(src, pol),
                'beam': '{}.bm'.format(src),
                'out': '{}.{}.cc'.format(src, pol),
                'niters': 3000,
                'cutoff': tall
            })
            miriad.restor({
                'map': '{}.{}.mp'.format(src, pol),
                'beam': '{}.bm'.format(src),
                'model': '{}.{}.cc'.format(src, pol),
                'out': '{}.{}.cm'.format(src, pol),
            })
Exemple #4
0
def mapallvis(uvo, uvc, so, mapdir, lines=[], lineSelection=[], selects=[]):
    """
	Similar to mapvis but doesn't do multiple frequency synthesis.
	The frequency axis is preserved so you can get spectra from the image.
	"""
    from subprocess import CalledProcessError

    if len(lines) != len(lineSelection):
        lineSelection = [None for l in lines]
    if len(lines) != len(selects):
        selects = [None for l in lines]

    calibrator = 'cnt.usb'
    tall = 0.50

    # remove continuum, its already been mapped
    lineSelection.pop(lines.index(calibrator))
    lines.remove(calibrator)

    for i, lin in enumerate(lines):
        vis = '{}/{}.{}.corrected.slfc'.format(uvc, so, lin)
        for src in [
                '{}/{}.{}'.format(mapdir, so, lin),
                '{}/{}.{}.uncorrected'.format(mapdir, so, lin)
        ]:
            for path in glob.glob('{}*.full.*'.format(src)):
                if os.path.exists(path): shutil.rmtree(path)

            invertOptions = {
                'vis': vis,
                'stokes': 'i,v',
                'beam': '{}.full.bm'.format(src),
                'map': '{0}.i.full.mp,{0}.v.full.mp'.format(src),
                'imsize': 128,
                'cell': 0.3,
                'options': 'systemp,double',
                'sup': 0,
            }
            if selects[i]:
                invertOptions['select'] = selects[i]

            try:
                miriad.invert(invertOptions)
            except CalledProcessError:
                print("### Retrying invert with line selection")
                line = miriad.averageVelocityLine(vis, 2)
                sel = lineSelection[i] if lineSelection[i] is not None else line
                invertOptions['line'] = sel
                miriad.invert(invertOptions)

            for stk in ['i', 'v']:
                miriad.clean({
                    'map': '{}.{}.full.mp'.format(src, stk),
                    'beam': '{}.full.bm'.format(src),
                    'out': '{}.{}.full.cc'.format(src, stk),
                    'niters': 3000,
                    'cutoff': tall
                })
                miriad.restor({
                    'map': '{}.{}.full.mp'.format(src, stk),
                    'beam': '{}.full.bm'.format(src),
                    'model': '{}.{}.full.cc'.format(src, stk),
                    'out': '{}.{}.full.cm'.format(src, stk),
                })
            vis = '{}/{}.{}'.format(uvo, so, lin)