def make_mask(self, threshisl=5): """ Create a mask of the image where only belivable flux is """ logger.info('%s: Making mask...' % self.imagename) if not os.path.exists(self.maskname): make_mask(image_name=self.imagename, mask_name=self.maskname, threshisl=threshisl, atrous_do=True) if self.user_mask is not None: logger.info('%s: Adding user mask (%s)...' % (self.imagename, self.user_mask)) blank_image_reg(self.maskname, self.user_mask, inverse=False, blankval=1)
def ft_model_cc(mss, imagename, c, user_mask=None, keep_in_beam=True, model_column='MODEL_DATA'): """ skymodel : cc-list made by wsclean keep_in_beam : if True remove everything outside primary beam, otherwise everything inside """ logger.info('Predict with CC...') maskname = imagename + '-mask.fits' skymodel = imagename + '-sources.txt' skymodel_cut = imagename + '-sources-cut.txt' skydb = imagename + '-sources.skydb' # prepare mask if not os.path.exists(maskname): logger.info('Predict (make mask)...') make_mask(image_name=imagename + '-MFS-image.fits', mask_name=maskname, threshisl=5, atrous_do=True) if user_mask is not None: blank_image_reg(maskname, user_mask, inverse=False, blankval=1) # set to 1 pixels into user_mask blank_image_reg( maskname, 'self/beam.reg', inverse=keep_in_beam, blankval=0) # if keep_in_beam set to 0 everything outside beam.reg # apply mask logger.info('Predict (apply mask)...') lsm = lsmtool.load(skymodel) lsm.select('%s == True' % maskname) fluxes = lsm.getColValues('I') #lsm.remove(np.abs(fluxes) < 5e-4) # TEST lsm.write(skymodel_cut, format='makesourcedb', clobber=True) del lsm # convert to skydb logger.info('Predict (makesourcedb)...') check_rm(skydb) s.add('makesourcedb outtype="blob" format="<" in="' + skymodel_cut + '" out="' + skydb + '"', log='makesourcedb-c' + str(c) + '.log', cmd_type='general') s.run(check=True) # predict logger.info('Predict (ft)...') for ms in mss: s.add('NDPPP '+parset_dir+'/NDPPP-predict.parset msin='+ms+' msout.datacolumn='+model_column+' pre.usebeammodel=false pre.sourcedb='+skydb, \ log=ms+'_pre-c'+str(c)+'.log', cmd_type='NDPPP') s.run(check=True)
def ft_model_wsclean(mss, imagename, c, user_mask=None, keep_in_beam=True, resamp=None, model_column='MODEL_DATA'): """ mss : vector of mss imagename : root name for wsclean model images resamp : must be '10asec' or another pixels size to resample models keep_in_beam : if True remove everything outside primary beam, otherwise everything inside """ logger.info('Predict with model image...') # remove CC not in mask logger.info('Predict (mask)...') maskname = imagename + '-mask.fits' make_mask(image_name=imagename + '-MFS-image.fits', mask_name=maskname, threshisl=5, atrous_do=True) if user_mask is not None: blank_image_reg(maskname, user_mask, inverse=False, blankval=1) blank_image_reg(maskname, 'self/beam.reg', inverse=keep_in_beam) for modelname in sorted(glob.glob(imagename + '*model.fits')): blank_image_fits(modelname, maskname, inverse=True) if resamp is not None: logger.info('Predict (resamp)...') for model in sorted(glob.glob(imagename + '*model.fits')): model_out = model.replace(imagename, imagename + '-resamp') s.add('/home/fdg/opt/src/nnradd/build/nnradd ' + resamp + ' ' + model_out + ' ' + model, log='resamp-c' + str(c) + '.log', log_append=True, cmd_type='general') s.run(check=True) imagename = imagename + '-resamp' logger.info('Predict (ft)...') s.add('wsclean -predict -name ' + imagename + ' -mem 90 -j '+str(s.max_processors)+' -channelsout 10 '+' '.join(mss), \ log='wscleanPRE-c'+str(c)+'.log', cmd_type='wsclean', processors='max') s.run(check=True) if model_column != 'MODEL_DATA': logger.info('Predict (set %s = MODEL_DATA)...' % model_column) for ms in mss: s.add('taql "update ' + ms + ' set ' + model_column + ' = MODEL_DATA"', log=ms + '_taql0-c' + str(c) + '.log', cmd_type='general') s.run(check=True)
def inference(self, question, image_feat): """Function used for running inverence given the image and question Args: question (str): The question image (np.ndarray): The image Returns: [dict]: { "img": { "iatt_maps": torch.Tensor(1, 100, 2) }, "text" { "qatt": torch.Tensor(1, 14, 2) } } """ # extract indices of question words ques_ix = proc_ques(question, self.token_to_ix, max_token=14) ques_ix = torch.tensor(ques_ix).unsqueeze(0) # pad image features frcn_feat = torch.zeros(100, 2048) frcn_feat[:image_feat.shape[0]] = image_feat image_feat = frcn_feat.unsqueeze(0) image_feat_mask = make_mask(image_feat) ret = self.net.forward(image_feat, image_feat_mask, ques_ix) return ret
def forward(self, img_feat, img_feat_mask, ques_ix, **kwargs): # Pre-process Language Feature ques_feat_mask = make_mask(ques_ix.unsqueeze(2)).squeeze(2).permute( 0, 2, 1) ques_feat = self.embedding(ques_ix) # (N, T, WORD_EMBED_SIZE) ques_feat = self.dropout(ques_feat) ques_feat, _ = self.lstm(ques_feat) # (N, T, LSTM_OUT_SIZE) ques_feat = self.dropout_lstm(ques_feat) text_ret = defaultdict(list) img_ret = defaultdict(list) z = self.backbone(img_feat, ques_feat, img_feat_mask.squeeze(2).permute(0, 2, 1), ques_feat_mask, text_ret=text_ret, img_ret=img_ret) # MFH:(N, 2*O) / MFB:(N, O) proj_feat = self.proj(z) # (N, answer_size) return_dict = { "proj_feat": proj_feat, "img": img_ret, "text": text_ret } return return_dict
########################################################################################################################### # avg time only - SB.MS:CORRECTED_DATA -> concat-avg.MS:DATA (selfcal corrected data, beam applied, circular) logging.info('Average...') check_rm('concat-avg.MS*') s.add('NDPPP /home/fdg/scripts/autocal/VirgoA/parset_self-lowres/NDPPP-concatavg2.parset msin="['+','.join(mss)+']" msout=concat-avg.MS avg.freqstep=1 avg.timestep=4', \ log='concatavg.log', cmd_type='NDPPP') s.run(check=True) ######################################################################################################### # large FoV image logging.info('Low-res wide field image...') s.add_casa('/home/fdg/scripts/autocal/casa_comm/virgoLBA/casa_clean-lowres.py', \ params={'msfile':'concat-avg.MS', 'imagename':'img/clean-wide', 'imtype':'wide'}, log='clean-wide.log') s.run(check=True) make_mask(image_name='img/clean-wide.image.tt0', mask_name='img/wide.newmask') logging.info('Low-res wide field image (with mask)...') s.add_casa('/home/fdg/scripts/autocal/casa_comm/virgoLBA/casa_clean-lowres.py', \ params={'msfile':'concat-avg.MS', 'imagename':'img/clean-wide-masked', 'imtype':'wide', 'mask':'img/wide.newmask'}, log='clean-wide-masked.log') ######################################################################################################### # central clean logging.info('Clean...') s.add_casa('/home/fdg/scripts/autocal/casa_comm/virgoLBA/casa_clean-lowres.py', \ params={'msfile':'concat-avg.MS', 'imagename':'img/normal'}, log='clean.log') s.run(check=True) ########################################################################################################## # uvsub + large FoV image s.add( 'taql "update concat-avg.MS set CORRECTED_DATA = CORRECTED_DATA - MODEL_DATA"'
def clean(c, mss, dd, avgfreq=4, avgtime=10, facet=False, skip_mask=False): """ c = cycle/name mss = list of mss to avg/clean """ # averaging before cleaning *.MS:CORRECTED_DATA -> *-avg.MS:DATA logging.info('Averaging before cleaning...') check_rm('mss_imgavg') os.mkdir('mss_imgavg') nchan = find_nchan(mss[0]) for ms in mss: msout = 'mss_imgavg/'+os.path.basename(ms) check_rm(msout) s.add('NDPPP '+parset_dir+'/NDPPP-avg.parset msin='+ms+' msin.nchan='+str(nchan-nchan%4)+' msin.datacolumn=CORRECTED_DATA \ msout='+msout+' avg.freqstep='+str(avgfreq)+' avg.timestep='+str(avgtime), log=ms+'_cleanavg-c'+str(c)+'.log', cmd_type='NDPPP') s.run(check=True) mssavg = [ms for ms in glob.glob('mss_imgavg/*MS')] # set image name imagename = 'peel/'+dd['name']+'/images/peel-'+str(c) # set pixscale, imsize and niter pixscale = scale_from_ms(mss[0]) if facet: imsize = size_from_reg('peel/'+dd['name']+'/models/peel_facet-0000-model.fits', 'regions/'+dd['reg_facet'], dd['coord'], pixscale, pad=1.5) # niter = 10000 else: imsize = size_from_reg('peel/'+dd['name']+'/models/peel_dd-0000-model.fits', 'regions/'+dd['reg'], dd['coord'], pixscale, pad=1.5) # niter = 2000 if imsize < 512: trim = 512 imsize = 1024 elif imsize < 1024: trim = 1024 imsize = 1024 else: trim = imsize logging.debug('Image size: '+str(imsize)+' - Pixel scale: '+str(pixscale)) # TODO: add multiscale if dd['extended']: multiscale = [0,4,16,64] else: multiscale = [] # Clean mask clean logging.info('Cleaning (cycle: '+str(c)+')...') s.add('wsclean -reorder -name ' + imagename + ' -size '+str(imsize)+' '+str(imsize)+' -trim '+str(trim)+' '+str(trim)+' \ -mem 90 -j '+str(s.max_processors)+' -baseline-averaging 2.0 \ -scale '+str(pixscale)+'arcsec -weight briggs 0.0 -threshold 0.05 -niter 10000 -no-update-model-required -mgain 0.6 \ -pol I -cleanborder 0 -joinchannels -fit-spectral-pol 2 -channelsout 10 -deconvolution-channels 5 '+' '.join(mss), \ log='wsclean-c'+str(c)+'.log', cmd_type='wsclean', processors='max') s.run(check=True) if skip_mask: check_rm('mss_imgavg') return imagename, trim, pixscale if dd['faint'] or facet: make_mask(image_name = imagename+'-MFS-image.fits', mask_name = imagename+'.newmask', atrous_do=dd['extended'], threshisl=5) else: make_mask(image_name = imagename+'-MFS-image.fits', mask_name = imagename+'.newmask', atrous_do=dd['extended'], threshisl=20) # if dd['mask'] is set then add it to the new mask if dd['mask'] != '': s.add_casa('/home/fdg/scripts/autocal/casa_comm/casa_blank.py', \ params={'imgs':imagename+'.newmask', 'region':dd['mask'], 'setTo':1}, log='casablank-c'+str(c)+'.log', log_append=True) s.run(check=True) logging.info('Cleaning with mask (cycle: '+str(c)+')...') s.add('wsclean -reorder -name ' + imagename + '-M -size '+str(imsize)+' '+str(imsize)+' -trim '+str(trim)+' '+str(trim)+' \ -mem 90 -j '+str(s.max_processors)+' -baseline-averaging 2.0 -casamask '+imagename+'.newmask \ -scale '+str(pixscale)+'arcsec -weight briggs 0.0 -threshold 0.05 -niter 5000 -no-update-model-required -mgain 0.6 \ -pol I -cleanborder 0 -joinchannels -fit-spectral-pol 2 -channelsout 10 -deconvolution-channels 5 '+' '.join(mss), \ log='wscleanM-c'+str(c)+'.log', cmd_type='wsclean', processors='max') s.run(check=True) check_rm('mss_imgavg') return imagename, trim, pixscale
########################################################################################################################### # avg time only - SB.MS:CORRECTED_DATA -> concat-avg.MS:DATA (selfcal corrected data, beam applied, circular) logging.info('Average...') check_rm('concat-avg.MS*') s.add('NDPPP /home/fdg/scripts/autocal/VirgoA/parset_self-lowres/NDPPP-concatavg2.parset msin="['+','.join(mss)+']" msout=concat-avg.MS avg.freqstep=1 avg.timestep=4', \ log='concatavg.log', cmd_type='NDPPP') s.run(check=True) ######################################################################################################### # large FoV image logging.info('Low-res wide field image...') s.add_casa('/home/fdg/scripts/autocal/casa_comm/virgoLBA/casa_clean-lowres.py', \ params={'msfile':'concat-avg.MS', 'imagename':'img/clean-wide', 'imtype':'wide'}, log='clean-wide.log') s.run(check=True) make_mask(image_name = 'img/clean-wide.image.tt0', mask_name = 'img/wide.newmask') logging.info('Low-res wide field image (with mask)...') s.add_casa('/home/fdg/scripts/autocal/casa_comm/virgoLBA/casa_clean-lowres.py', \ params={'msfile':'concat-avg.MS', 'imagename':'img/clean-wide-masked', 'imtype':'wide', 'mask':'img/wide.newmask'}, log='clean-wide-masked.log') ######################################################################################################### # central clean logging.info('Clean...') s.add_casa('/home/fdg/scripts/autocal/casa_comm/virgoLBA/casa_clean-lowres.py', \ params={'msfile':'concat-avg.MS', 'imagename':'img/normal'}, log='clean.log') s.run(check=True) ########################################################################################################## # uvsub + large FoV image s.add('taql "update concat-avg.MS set CORRECTED_DATA = CORRECTED_DATA - MODEL_DATA"') # uvsub s.run(check=False)
s.add('taql "update '+ms+' set CORRECTED_DATA = CORRECTED_DATA - MODEL_DATA"', log=ms+'_taql2.log', cmd_type='general') s.run(check=True) logger.info('Cleaning...') check_rm('img') os.makedirs('img') imagename = 'img/wide' s.add('wsclean -reorder -name ' + imagename + ' -size 5000 5000 -trim 4000 4000 -mem 90 -j '+str(s.max_processors)+' -baseline-averaging 2.0 \ -scale 5arcsec -weight briggs 0.0 -niter 100000 -no-update-model-required -mgain 0.9 \ -pol I -joinchannels -fit-spectral-pol 2 -channelsout 10 -auto-threshold 20 '+' '.join(mss), \ log='wscleanA.log', cmd_type='wsclean', processors='max') s.run(check=True) # make mask maskname = imagename+'-mask.fits' make_mask(image_name = imagename+'-MFS-image.fits', mask_name = maskname, threshisl = 3, atrous_do=True) # remove CC not in mask for modelname in sorted(glob.glob(imagename+'*model.fits')): blank_image_fits(modelname, maskname, inverse=True) logger.info('Cleaning w/ mask') imagename = 'img/wideM' s.add('wsclean -reorder -name ' + imagename + ' -size 5000 5000 -trim 4000 4000 -mem 90 -j '+str(s.max_processors)+' -baseline-averaging 2.0 \ -scale 5arcsec -weight briggs 0.0 -niter 100000 -no-update-model-required -mgain 0.8 -minuv-l 30 \ -pol I -joinchannels -fit-spectral-pol 2 -channelsout 10 -auto-threshold 0.1 -save-source-list -apply-primary-beam -use-differential-lofar-beam \ -fitsmask '+maskname+' '+' '.join(mss), \ log='wscleanB.log', cmd_type='wsclean', processors='max') s.run(check=True) # prepare mask logger.info('Masking skymodel...')
def clean(c, mss, dd, avgfreq=2, avgtime=8, facet=False): """ c = cycle/name mss = list of mss to avg/clean """ # averaging before cleaning *.MS:CORRECTED_DATA -> *-avg.MS:DATA logger.info('Averaging before cleaning...') check_rm('mss_imgavg') os.mkdir('mss_imgavg') nchan = find_nchan(mss[0]) for ms in mss: msout = 'mss_imgavg/' + os.path.basename(ms) check_rm(msout) s.add('NDPPP ' + parset_dir + '/NDPPP-avg.parset msin=' + ms + ' msin.nchan=' + str(nchan - nchan % 4) + ' msin.datacolumn=CORRECTED_DATA \ msout=' + msout + ' avg.freqstep=' + str(avgfreq) + ' avg.timestep=' + str(avgtime), log=ms + '_cleanavg-c' + str(c) + '.log', cmd_type='NDPPP') s.run(check=True) mssavg = [ms for ms in sorted(glob.glob('mss_imgavg/*MS'))] # set pixscale and imsize pixscale = scale_from_ms(mssavg[0]) if facet: imsize = int((dd['facet_size'] / (pixscale / 3600.)) * 1.5) else: imsize = int((dd['dd_size'] / (pixscale / 3600.)) * 1.5) if imsize < 512: imsize = 512 trim = int(imsize * 0.7) if imsize % 2 == 1: imsize += 1 # make even if trim % 2 == 1: trim += 1 # make even logger.debug('Image size: ' + str(imsize) + ' - Pixel scale: ' + str(pixscale)) # -trim '+str(trim)+' '+str(trim)+' # -auto-mask 5 -auto-threshold 1 -rms-background -rms-background-window 25 \ # -multiscale # clean 1 logger.info('Cleaning (cycle: ' + str(c) + ')...') if facet: imagename = 'img/facet-' + str(c) else: imagename = 'img/ddcal-' + str(c) s.add('/home/fdg/opt/src/wsclean-2.2.9/build/wsclean -reorder -name ' + imagename + ' -size '+str(imsize)+' '+str(imsize)+' -trim '+str(trim)+' '+str(trim)+' \ -mem 90 -j ' +str(s.max_processors)+' -baseline-averaging 2.0 \ -scale ' +str(pixscale)+'arcsec -weight briggs 0.0 -niter 100000 -no-update-model-required -mgain 0.9 -pol I \ -joinchannels -fit-spectral-pol 2 -channelsout 10 \ -auto-threshold 20 ' +' '.join(mssavg), \ log='wsclean-c'+str(c)+'.log', cmd_type='wsclean', processors='max') s.run(check=True) os.system('cat logs/wsclean-c' + str(c) + '.log | grep Jy') # make mask maskname = imagename + '-mask.fits' make_mask(image_name=imagename + '-MFS-image.fits', mask_name=maskname, threshisl=3) # clean 2 logger.info('Cleaning w/ mask (cycle: ' + str(c) + ')...') if facet: imagename = 'img/facetM-' + str(c) else: imagename = 'img/ddcalM-' + str(c) s.add('/home/fdg/opt/src/wsclean-2.2.9/build/wsclean -reorder -name ' + imagename + ' -size '+str(imsize)+' '+str(imsize)+' -trim '+str(trim)+' '+str(trim)+' \ -mem 90 -j ' +str(s.max_processors)+' -baseline-averaging 2.0 \ -scale ' +str(pixscale)+'arcsec -weight briggs 0.0 -niter 100000 -no-update-model-required -mgain 0.8 -pol I \ -joinchannels -fit-spectral-pol 2 -channelsout 10 \ -auto-threshold 0.1 -fitsmask ' +maskname+' '+' '.join(mssavg), \ log='wscleanM-c'+str(c)+'.log', cmd_type='wsclean', processors='max') s.run(check=True) os.system('cat logs/wscleanM-c' + str(c) + '.log | grep Jy') # remove CC not in mask maskname = imagename + '-mask.fits' if facet: make_mask(image_name=imagename + '-MFS-image.fits', mask_name=maskname, threshisl=5) else: make_mask(image_name=imagename + '-MFS-image.fits', mask_name=maskname, threshisl=7) for modelname in sorted(glob.glob(imagename + '*model.fits')): blank_image_fits(modelname, maskname, inverse=True) check_rm('mss_imgavg') return imagename
# concatenate data - MS.MS -> concat.MS (selfcal corrected data, beam applied, circular) logging.info('Make widefield model - Concatenating...') check_rm('concat.MS*') pt.msutil.msconcat(mss_c, 'concat.MS', concatTime=False) # uvsub, MODEL_DATA is still Virgo logging.info('Make widefield model - UV-Subtracting Virgo A...') os.system('taql "update concat.MS set CORRECTED_DATA = CORRECTED_DATA - MODEL_DATA"') # uvsub # clean, mask, clean logging.info('Make widefield model - Widefield imaging...') imagename = 'img/clean-wide-c'+str(i) s.add_casa('/home/stsf309/scripts/autocal/casa_comm/virgoHBA/casa_clean.py', \ params={'msfile':'concat.MS', imagename=imagename, imtype='wide'}, log='clean-wide1-c'+str(i)+'.log') s.run(check=True) make_mask(image_name = imagename+'.image.tt0', mask_name = imagename+'.newmask') s.add_casa('/home/stsf309/scripts/autocal/casa_comm/casa_blank.py', params={'imgs':imagename+'.newmask', 'region':'/home/stsf309/scripts/autocal/VirA_HBA/m87.crtf'}) s.run(check=True) logging.info('Make widefield model - Widefield imaging2...') s.add_casa('/home/stsf309/scripts/autocal/casa_comm/virgoHBA/casa_clean.py', \ params={'msfile':'concat.MS', imagename=imagename.reaplce('wide','wode-masked'), mask=imagename+'.newmask' imtype='wide'}, log='clean-wide2-c'+str(i)+'.log') s.run(check=True) # Subtract widefield model using ft on a virtual concat - concat.MS:CORRECTED_DATA -> concat.MS:CORRECTED_DATA-MODEL_DATA (selfcal corrected data, beam applied, circular, field sources subtracted) logging.info('Flagging - Subtracting wide-field model...') check_rm('concat.MS*') pt.msutil.msconcat(mss_c, 'concat.MS', concatTime=False) s.add_casa('/home/stsf309/scripts/autocal/casa_comm/casa_ft.py', \ params={'msfile':'concat.MS', 'model':'img/wide-c'+str(i)+'.model', 'wproj':512}, log='ft-flag-c'+str(i)+'.log') s.run(check=True) os.system('taql "update concat.MS set CORRECTED_DATA = CORRECTED_DATA - MODEL_DATA"') # uvsub