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
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')
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,
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)
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)
# 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)
**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')