Ejemplo n.º 1
0
def join_cubes(inputs, output, channels, resume=False, box=None):
    """Join cubes at specific channels
    """
    if len(channels) != len(inputs):
        raise ValueError("Length of channels(%i)!=inputs(%i)" %
                         (len(channels), len(inputs)))

    # Concatenated image
    imagename = os.path.expanduser(output)

    # Join
    if resume and os.path.isdir(imagename):
        casalog.post('Skipping concatenated image: %s' % imagename)
    else:
        if os.path.isdir(imagename):
            os.system('rm -rf %s' % imagename)
        # Crop images
        for i, (chans, inp) in enumerate(zip(channels, inputs)):
            infile = os.path.expanduser(inp)
            img_name = 'temp%i.image' % i
            if os.path.isdir(img_name):
                os.system('rm -rf temp*.image')
            aux = crop_spectral_axis(infile, img_name, chans, box=box)
            aux.close()

            if i == 0:
                filelist = img_name
            else:
                filelist += ' ' + img_name

        # Concatenate
        ia.imageconcat(outfile=imagename, infiles=filelist)
        ia.close()

    # Put rms
    put_rms(imagename)

    # Export fits
    if resume and os.path.isfile(imagename + '.fits'):
        casalog.post('Skipping FITS export')
    else:
        exportfits(imagename=imagename,
                   fitsimage=imagename + '.fits',
                   overwrite=True)

    # Clean up
    casalog.post('Cleaning up')
    os.system('rm -rf temp*.image')

    return True
Ejemplo n.º 2
0
        if 'mask' not in impars:
            impars['mask'] = maskname

        imname = contimagename+"_robust{0}".format(robust)

        if not os.path.exists(imname+".image.tt0"):
            tclean(vis=continuum_ms,
                   field=field.encode(),
                   imagename=imname,
                   phasecenter=phasecenter,
                   outframe='LSRK',
                   veltype='radio',
                   usemask='user',
                   interactive=False,
                   cell=cellsize,
                   imsize=imsize,
                   antenna=antennae,
                   pbcor=True,
                   **impars
                  )
            ia.open(imname+".image.tt0")
            ia.sethistory(origin='almaimf_cont_imaging',
                          history=["{0}: {1}".format(key, val) for key, val in
                                   impars.items()])
            ia.close()

            exportfits(imname+".image.tt0", imname+".image.tt0.fits")
            exportfits(imname+".image.tt0.pbcor", imname+".image.tt0.pbcor.fits")
        else:
            logprint("Skipping completed file {0}".format(imname), origin='almaimf_cont_imaging')
Ejemplo n.º 3
0
                   pbcor=True,
                   **impars_thisiter)
            ia.open(imname + ".image.tt0")
            ia.sethistory(origin='almaimf_cont_imaging',
                          history=[
                              "{0}: {1}".format(key, val)
                              for key, val in impars.items()
                          ])
            ia.sethistory(origin='almaimf_cont_imaging',
                          history=[
                              "git_version: {0}".format(git_version),
                              "git_date: {0}".format(git_date)
                          ])
            ia.close()

            exportfits(imname + ".image.tt0", imname + ".image.tt0.fits")
            exportfits(imname + ".image.tt0.pbcor",
                       imname + ".image.tt0.pbcor.fits")
            exportfits(imname + ".model.tt0", imname + ".model.tt0.fits")
            exportfits(imname + ".residual.tt0", imname + ".residual.tt0.fits")
        else:
            logprint("Skipping completed file {0}".format(imname),
                     origin='almaimf_cont_imaging')

        # reclean step (optional)
        try:
            maskname = make_custom_mask(field,
                                        imname + ".image.tt0",
                                        os.getenv('ALMAIMF_ROOTDIR'),
                                        band,
                                        rootdir=imaging_root,
Ejemplo n.º 4
0
def imaging(vis, trial_name, interactive, imsize, cellsize, glx_ctr, restfreq,
            specmode, outframe, veltype, restoringbeam, weighting, robust,
            scales, smallscalebias, dogrowprune,
            growiterations, noisethreshold, minbeamfrac, sidelobethreshold,
            gridder, pbmask, pblimit, threshold, niter_in, nsigma, cyclefactor,
            minpsffraction, gain, w, nchan):
    #
    titles = ['.dirty', '', '.2.strong']
    #
    for i in range(2):
        # niter
        niter = 0 if i == 0 else niter_in
        # masking method
        usemask = 'auto-multithresh' if i == 2 else 'pb'
        # deconvolver
        deconvolver = 'multiscale'
        #
        tclean(vis=vis,
               imagename=trial_name,
               interactive=interactive,
               intent='*TARGET*',
               #
               datacolumn='data',
               nchan=nchan,
               start=str(w * nchan / (-2)) + 'km/s',
               width=str(w) + 'km/s',
               # Image dimension
               imsize=imsize,
               cell=cellsize,
               phasecenter=glx_ctr,
               restfreq=restfreq,
               specmode=specmode,
               outframe=outframe,
               veltype=veltype,
               # Restore to common beam?
               restoringbeam=restoringbeam,
               # Weighting
               weighting=weighting,
               robust=robust,
               # Methods
               deconvolver=deconvolver,
               scales=scales,
               gain=gain,
               smallscalebias=smallscalebias,
               usemask=usemask,
               dogrowprune=dogrowprune,
               growiterations=growiterations,
               noisethreshold=noisethreshold,
               minbeamfrac=minbeamfrac,
               sidelobethreshold=sidelobethreshold,
               gridder=gridder,
               pbmask=pbmask,
               pblimit=pblimit,
               pbcor=True,
               # Stopping criteria
               threshold=threshold,
               niter=niter,
               nsigma=nsigma,
               cyclefactor=cyclefactor,
               minpsffraction=minpsffraction)
        #
        nonpbcube = trial_name + '.image'
        pbcube = trial_name + '.image.pbcor'
        cubename = trial_name + '.image.pb'
        tempcube = trial_name + titles[i] + '.cube.fits'
        residualname = trial_name + '.residual'
        tempresidual = trial_name + titles[i] + '.residual.fits'
        m0name = cubename + '.integrated'
        tempm0 = trial_name + titles[i] + '.m0.fits'
        m1name = cubename + '.weighted_coord'
        tempm1 = trial_name + titles[i] + '.m1.fits'
        m2name = cubename + '.weighted_dispersion_coord'
        tempm2 = trial_name + titles[i] + '.m2.fits'
        for mxname in [m0name, m1name, m2name]:
            if os.path.isdir(mxname):
                rmtree(mxname)
        #
        print("...Calculating moment maps")
        if i == 0:
            rms = imstat(pbcube)['rms'][0]
            excludepix = [-1000, (2 * rms)]
            immoments(imagename=pbcube, moments=[0], axis='spectral',
                      excludepix=excludepix, outfile=m0name)
        else:
            # calculate mask here
            # change masked_spec_width according to w
            if w > 10:
                spec_width = 1
            else:
                spec_width = 3
            mask_dir, work_rms = \
                make_mask_python(nonpbcube, masked_beam=2.0,
                                 masked_spec_width=spec_width,
                                 masked_snr=2.0, reject_area_in_beams=2)
            # Use the PB corrected image!
            immoments(imagename=pbcube, moments=[0, 1, 2], axis='spectral',
                      mask=mask_dir, excludepix=-1, outfile=cubename)
        print("#\n")
        print("...Exporting fits files of " + titles[i])
        for (mxname, fitsname) in zip([pbcube, residualname, m0name, m1name,
                                       m2name],
                                      [tempcube, tempresidual, tempm0, tempm1,
                                       tempm2]):
            if (mxname in [residualname, m1name, m2name]) and i == 0:
                continue
            exportfits(imagename=mxname, fitsimage=fitsname)
            # Blocking nan pixels
            if mxname == pbcube:
                data = fits.getdata(tempcube)
                nanmask = np.any(np.isnan(data), axis=(0, 1))
                del data
            if mxname in [m0name, m1name, m2name]:
                print("...Setting " + mxname + " NaNs to zeros")
                data, hdr = fits.getdata(fitsname, header=True)
                data[np.isnan(data)] = 0.0
                data[0, 0][nanmask] = np.nan
                fits.writeto(fitsname, data, hdr, overwrite=True)
            with open(fitsname, 'rb') as f_in:
                with gzip.open(fitsname + '.gz', 'wb') as f_out:
                    shutil.copyfileobj(f_in, f_out)
            os.remove(fitsname)
            if mxname in [m0name, m1name, m2name]:
                rmtree(mxname)
        """
        print("...Plotting weighted m1 image")
        plt.ioff()
        m0 = fits.getdata(tempm0 + '.gz')[0, 0]
        m1 = fits.getdata(tempm1 + '.gz')[0, 0]
        #
        cmap = cm.bwr_r
        norm = mpl.colors.Normalize(vmin=np.nanmin(m1),
                                    vmax=np.nanmax(m1))
        m = cm.ScalarMappable(norm=norm, cmap=cmap)
        with np.errstate(invalid='ignore'):
            mm = m.to_rgba(m1)[:, :, :3]
            temp = np.sum(mm, axis=2)
            for i in range(3):
                mm[:, :, i] /= temp
            m0[m0 <= 0] = np.min(m0[m0 > 0])
        m0 = np.log10(m0)
        m0 -= m0.min()
        m0 /= m0.max()
        for i in range(3):
            mm[:, :, i] *= m0
        mm /= mm.max()
        #
        fig1, ax1 = plt.subplots(figsize=(12, 10))
        fig2, ax2 = plt.subplots()
        mpb = ax2.imshow(m1, cmap='bwr_r', origin='lower')
        ax1.imshow(mm, origin='lower')
        ax1.set_xticklabels([])
        ax1.set_yticklabels([])
        plt.colorbar(mpb, ax=ax1)
        fig1.savefig(trial_name + titles[i] + '.m1.m0-weighted.png')
        plt.close('all')
        """
        if i == 1:
            target = os.getcwd().split('/')[-1]
            no_detection_check(image=pbcube,
                               pbimage=trial_name + '.pb',
                               target=target,
                               work_rms=work_rms,
                               chanwidth=w)
Ejemplo n.º 5
0
def everythings_imcontsub(image='', fitorder=1, masked_spec_width=3,
                          pbimage='', w=0):
    assert False, 'Function under development!'
    # 0) Definitions
    imname_cont = image + '.imcont'
    imname_contsub = image + '.imcontsub'
    # 1) Load cube
    vh = vishead(image)
    numchan = vh  # Need to write 
    # 1-1) Select channels according to channel number
    chans = '0~10,' + str(numchan - 11) + '~' + str(numchan - 1)
    # 2) imcontsub. save both cont and contsub
    imcontsub(imagename=image,
              linefile=imname_contsub,
              contfile=imname_cont,
              fitorder=fitorder,
              chans=chans)
    # 3) run masking for contsub image with pbcor image itself
    mask_dir, work_rms = \
        make_mask_python(imname_contsub, masked_beam=2.0,
                         masked_spec_width=masked_spec_width,
                         masked_snr=2.0, reject_area_in_beams=2)
    # 4) run moment map building for contsub image
    cubename = image + '.imcs'
    tempcube = cubename + '.cube.fits'
    m0name = cubename + '.integrated'
    tempm0 = cubename + '.m0.fits'
    m1name = cubename + '.weighted_coord'
    tempm1 = cubename + '.m1.fits'
    m2name = cubename + '.weighted_dispersion_coord'
    tempm2 = cubename + '.m2.fits'
    for mxname in [m0name, m1name, m2name]:
        if os.path.isdir(mxname):
            rmtree(mxname)
    immoments(imagename=imname_contsub, moments=[0, 1, 2], axis='spectral',
              mask=mask_dir, excludepix=-1, outfile=cubename)
    for (mxname, fitsname) in zip([imname_contsub, m0name, m1name, m2name],
                                  [tempcube, tempm0, tempm1, tempm2]):
        exportfits(imagename=mxname, fitsimage=fitsname)
        # Blocking nan pixels
        if mxname == imname_contsub:
            data = fits.getdata(tempcube)
            nanmask = np.any(np.isnan(data), axis=(0, 1))
            del data
        if mxname in [m0name, m1name, m2name]:
            print("...Setting " + mxname + " NaNs to zeros")
            data, hdr = fits.getdata(fitsname, header=True)
            data[np.isnan(data)] = 0.0
            data[0, 0][nanmask] = np.nan
            fits.writeto(fitsname, data, hdr, overwrite=True)
        with open(fitsname, 'rb') as f_in:
            with gzip.open(fitsname + '.gz', 'wb') as f_out:
                shutil.copyfileobj(f_in, f_out)
        os.remove(fitsname)
        if mxname in [m0name, m1name, m2name]:
            rmtree(mxname)
    # 5) run no detection check
    target = os.getcwd().split('/')[-1]
    no_detection_check(image=imname_contsub,
                       pbimage=pbimage,
                       target=target,
                       work_rms=work_rms,
                       chanwidth=w)
Ejemplo n.º 6
0
                # sidelobethreshold=0.2,
                # minbeamfrac=0.5, #3
                # negativethreshold=0.0,
                # noisethreshold=3.0,lownoisethreshold=0.5,
                # usemask='auto-multithresh',
                usemask='pb',
                interactive=False,  #True,
                cell=cellsize,
                imsize=imsize,
                weighting='briggs',
                robust=robust,
                pbcor=True,
                antenna=antennae,
                pblimit=0.1)

            exportfits(imname + ".image.tt0", imname + ".image.tt0.fits")

            exportfits(imname + ".image.tt0.pbcor",
                       imname + ".image.tt0.pbcor.fits")

    logprint("Cleanest continuum images done.",
             origin='almaimf_cont_3sigtemplate')
    # ----------------------------------------------
    # CLEAN FOR THE BEST SENSITIVITY CONTINUUM:

    # Using here the splitted spw for line imaging:
    # For B3: only spw 1,2,3 is used (spw 0 is for N2H+ J=1-0)
    # For B6: only spw 6,7 is used

    with open('to_image.json', 'r') as fh:
        to_image = json.load(fh)
Ejemplo n.º 7
0
            **impars)
        for suffix in ('image', 'residual', 'model'):
            ia.open(lineimagename + "." + suffix)
            ia.sethistory(origin='almaimf_line_imaging',
                          history=[
                              "{0}: {1}".format(key, val)
                              for key, val in impars.items()
                          ])
            ia.sethistory(origin='almaimf_line_imaging',
                          history=[
                              "git_version: {0}".format(git_version),
                              "git_date: {0}".format(git_date)
                          ])
            ia.close()

        impbcor(imagename=lineimagename + '.image',
                pbimage=lineimagename + '.pb',
                outfile=lineimagename + '.image.pbcor',
                overwrite=True)

        exportfits(lineimagename + ".image",
                   lineimagename + ".image.fits",
                   overwrite=True)
        exportfits(lineimagename + ".image.pbcor",
                   lineimagename + ".image.pbcor.fits",
                   overwrite=True)

    logprint("Completed {0}".format(vis), origin='almaimf_line_imaging')

    logprint("Completed line_imaging.py run", origin='almaimf_line_imaging')