from __future__ import absolute_import import os import numpy as np from casatasks.private.casa_transition import is_CASA6 if is_CASA6: from casatasks import casalog from casatools import calibrater else: from taskinit import * calibrater = cbtool def blcal(vis=None,caltable=None, field=None,spw=None,intent=None, selectdata=None,timerange=None,uvrange=None,antenna=None,scan=None, observation=None, msselect=None, solint=None,combine=None,freqdep=None,calmode=None,solnorm=None, gaintable=None,gainfield=None,interp=None,spwmap=None, parang=None): #Python script try: mycb = calibrater() casalog.origin('blcal') if ((type(vis)==str) & (os.path.exists(vis))): mycb.open(filename=vis,compress=False,addcorr=False,addmodel=False) else: raise ValueError('Visibility data set not found - please verify the name') mycb.reset() # Do data selection according to selectdata if (selectdata): # pass all data selection parameters in as specified mycb.selectvis(time=timerange,spw=spw,scan=scan,field=field, intent=intent, observation=str(observation), baseline=antenna,uvrange=uvrange,chanmode='none', msselect=msselect); else: # selectdata=F, so time,scan,baseline,uvrange,msselect='' # using spw and field specifications only mycb.selectvis(time='',spw=spw,scan='',field=field,intent=intent, baseline='',uvrange='',chanmode='none', observation='', msselect='') # Arrange apply of existing other calibrations # First do the existing cal tables... ngaintab = 0; if (gaintable!=['']): ngaintab=len(gaintable) ngainfld = len(gainfield) nspwmap = len(spwmap) ninterp = len(interp) # handle list of list issues with spwmap if (nspwmap>0): if (type(spwmap[0])!=list): # first element not a list, only one spwmap specified # make it a list of list spwmap=[spwmap]; nspwmap=1; for igt in range(ngaintab): if (gaintable[igt]!=''): # field selection is null unless specified thisgainfield='' if (igt<ngainfld): thisgainfield=gainfield[igt] # spwmap is null unless specifed thisspwmap=[-1] if (igt<nspwmap): thisspwmap=spwmap[igt]; # interp is 'linear' unless specified thisinterp='linear' if (igt<ninterp): if (interp[igt]==''): interp[igt]=thisinterp thisinterp=interp[igt] mycb.setapply(t=0.0,table=gaintable[igt],field=thisgainfield, calwt=True,spwmap=thisspwmap,interp=thisinterp) # ...and now the specialized terms # (BTW, interp irrelevant for these, since they are evaluated) # Apply parallactic angle, if requested if parang: mycb.setapply(type='P') # Set up the solve if freqdep: mycb.setsolve(type='MF',t=solint,combine=combine,refant='',table=caltable,apmode=calmode,solnorm=solnorm) else: mycb.setsolve(type='M',t=solint,combine=combine,refant='',table=caltable,apmode=calmode,solnorm=solnorm) mycb.solve() finally: mycb.close()