casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables
task_bandpass.py
Go to the documentation of this file.
00001 import os
00002 import numpy as np
00003 from taskinit import *
00004 
00005 def bandpass(vis=None,caltable=None,
00006              field=None,spw=None,intent=None,
00007              selectdata=None,timerange=None,uvrange=None,antenna=None,scan=None,
00008              observation=None,msselect=None,
00009              solint=None,combine=None,refant=None,minblperant=None,
00010              minsnr=None,solnorm=None,
00011              bandtype=None,smodel=None,
00012              append=None,fillgaps=None,
00013              degamp=None,degphase=None,visnorm=None,
00014              maskcenter=None,maskedge=None,
00015              gaintable=None,gainfield=None,interp=None,spwmap=None,
00016              gaincurve=None,opacity=None,parang=None):
00017 
00018         #Python script
00019         casalog.origin('bandpass')
00020 
00021         try:
00022                 if ((type(vis)==str) & (os.path.exists(vis))):    
00023                         cb.open(filename=vis,compress=False,addcorr=False,addmodel=False)
00024                 else:
00025                         raise Exception, 'Visibility data set not found - please verify the name'
00026                 cb.reset()
00027 
00028                 # Do data selection according to selectdata
00029                 if (selectdata):
00030                         # pass all data selection parameters in as specified
00031                         cb.selectvis(time=timerange,spw=spw,scan=scan,field=field,
00032                                      intent=intent, observation=str(observation),
00033                                      baseline=antenna,uvrange=uvrange,chanmode='none',
00034                                      msselect=msselect);
00035                 else:
00036                         # selectdata=F, so time,scan,baseline,uvrange,msselect=''
00037                         # using spw and field specifications only
00038                         cb.selectvis(time='',spw=spw,scan='',field=field,intent=intent,
00039                                      observation='', baseline='',uvrange='',chanmode='none',
00040                                      msselect='');
00041 
00042 
00043                 # set the model, if specified
00044                 if (len(smodel)>0):
00045                         cb.setptmodel(smodel);
00046                 
00047 
00048                 #Apply other calibrations
00049                 # First do the existing cal tables...
00050                 ngaintab = 0;
00051                 if (gaintable!=['']):
00052                         ngaintab=len(gaintable)
00053 
00054                 ngainfld = len(gainfield)
00055                 nspwmap = len(spwmap)
00056                 ninterp = len(interp)
00057 
00058                 # handle list of list issues with spwmap
00059                 if (nspwmap>0):
00060                         if (type(spwmap[0])!=list):
00061                                 # first element not a list, only one spwmap specified
00062                                 # make it a list of list
00063                                 spwmap=[spwmap];
00064                                 nspwmap=1;
00065 
00066                 for igt in range(ngaintab):
00067                         if (gaintable[igt]!=''):
00068 
00069                                 # field selection is null unless specified
00070                                 thisgainfield=''
00071                                 if (igt<ngainfld):
00072                                         thisgainfield=gainfield[igt]
00073                                         
00074                                 # spwmap is null unless specifed
00075                                 thisspwmap=[-1]
00076                                 if (igt<nspwmap):
00077                                         thisspwmap=spwmap[igt];
00078 
00079                                 # interp is 'linear' unless specified
00080                                 thisinterp='linear'
00081                                 if (igt<ninterp):
00082                                         if (interp[igt]==''):
00083                                                 interp[igt]=thisinterp
00084                                         thisinterp=interp[igt]
00085 
00086                                 cb.setapply(t=0.0,table=gaintable[igt],field=thisgainfield,
00087                                             calwt=True,spwmap=thisspwmap,interp=thisinterp)
00088                 
00089                 # ...and now the specialized terms
00090                 # (BTW, interp irrelevant for these, since they are evaluated)
00091 
00092                 # opacity (if non-trivially specified and any >0.0)
00093                 opacarr=np.array(opacity)   # as numpy array for uniformity
00094                 if (np.sum(opacarr)>0.0):
00095                         # opacity transmitted as a list in all cases
00096                         cb.setapply(type='TOPAC',t=-1,opacity=opacarr.tolist(),calwt=True)
00097 
00098                 if gaincurve: cb.setapply(type='GAINCURVE',t=-1,calwt=True)
00099 
00100                 # Apply parallactic angle, if requested
00101                 if parang: cb.setapply(type='P')
00102 
00103                 # set up for solving (
00104                 if (bandtype=='B'):
00105                         cb.setsolve(type='B',t=solint,combine=combine,refant=refant,minblperant=minblperant,
00106                                     solnorm=solnorm,minsnr=minsnr,table=caltable,append=append,fillgaps=fillgaps)
00107                 elif (bandtype=='BPOLY'):
00108                         cb.setsolvebandpoly(refant=refant,table=caltable,append=append,
00109                                             t=solint,combine=combine,
00110                                             degamp=degamp,degphase=degphase,visnorm=visnorm,
00111                                             solnorm=solnorm,maskcenter=maskcenter,maskedge=maskedge)
00112 
00113                 cb.solve()
00114                 cb.close()
00115 
00116         except Exception, instance:
00117                 print '*** Error ***',instance
00118                 cb.close()
00119                 raise Exception, instance
00120