Example #1
0
 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)
Example #2
0
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)
Example #3
0
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)
Example #4
0
    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
Example #5
0
    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"'
Example #7
0
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
Example #8
0
###########################################################################################################################
# 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)
Example #9
0
        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...')
Example #10
0
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
Example #11
0
        # 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