casa
$Rev:20696$
|
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