Coverage for /wheeldirectory/casa-6.7.0-12-py3.10.el8/lib/py/lib/python3.10/site-packages/casatasks/private/task_blcal.py: 91%

45 statements  

« prev     ^ index     » next       coverage.py v7.6.4, created at 2024-11-01 07:19 +0000

1import os 

2import numpy as np 

3 

4from casatasks import casalog 

5from casatools import calibrater 

6 

7def blcal(vis=None,caltable=None, 

8 field=None,spw=None,intent=None, 

9 selectdata=None,timerange=None,uvrange=None,antenna=None,scan=None, 

10 observation=None, msselect=None, 

11 solint=None,combine=None,freqdep=None,calmode=None,solnorm=None, 

12 gaintable=None,gainfield=None,interp=None,spwmap=None, 

13 parang=None): 

14 

15 #Python script 

16 

17 try: 

18 

19 mycb = calibrater() 

20 

21 casalog.origin('blcal') 

22 if ((type(vis)==str) & (os.path.exists(vis))): 

23 mycb.open(filename=vis,compress=False,addcorr=False,addmodel=False) 

24 else: 

25 raise ValueError('Visibility data set not found - please verify the name') 

26 

27 mycb.reset() 

28 

29 # Do data selection according to selectdata 

30 if (selectdata): 

31 # pass all data selection parameters in as specified 

32 mycb.selectvis(time=timerange,spw=spw,scan=scan,field=field, 

33 intent=intent, observation=str(observation), 

34 baseline=antenna,uvrange=uvrange,chanmode='none', 

35 msselect=msselect); 

36 else: 

37 # selectdata=F, so time,scan,baseline,uvrange,msselect='' 

38 # using spw and field specifications only 

39 mycb.selectvis(time='',spw=spw,scan='',field=field,intent=intent, 

40 baseline='',uvrange='',chanmode='none', 

41 observation='', msselect='') 

42 

43 

44 # Arrange apply of existing other calibrations 

45 # First do the existing cal tables... 

46 ngaintab = 0; 

47 if (gaintable!=['']): 

48 ngaintab=len(gaintable) 

49 ngainfld = len(gainfield) 

50 nspwmap = len(spwmap) 

51 ninterp = len(interp) 

52 

53 # handle list of list issues with spwmap 

54 if (nspwmap>0): 

55 if (type(spwmap[0])!=list): 

56 # first element not a list, only one spwmap specified 

57 # make it a list of list 

58 spwmap=[spwmap]; 

59 nspwmap=1; 

60 

61 for igt in range(ngaintab): 

62 if (gaintable[igt]!=''): 

63 

64 # field selection is null unless specified 

65 thisgainfield='' 

66 if (igt<ngainfld): 

67 thisgainfield=gainfield[igt] 

68 

69 # spwmap is null unless specifed 

70 thisspwmap=[-1] 

71 if (igt<nspwmap): 

72 thisspwmap=spwmap[igt]; 

73 

74 # interp is 'linear' unless specified 

75 thisinterp='linear' 

76 if (igt<ninterp): 

77 if (interp[igt]==''): 

78 interp[igt]=thisinterp 

79 thisinterp=interp[igt] 

80 

81 mycb.setapply(t=0.0,table=gaintable[igt],field=thisgainfield, 

82 calwt=True,spwmap=thisspwmap,interp=thisinterp) 

83 

84 # ...and now the specialized terms 

85 # (BTW, interp irrelevant for these, since they are evaluated) 

86 

87 # Apply parallactic angle, if requested 

88 if parang: mycb.setapply(type='P') 

89 

90 # Set up the solve 

91 if freqdep: 

92 mycb.setsolve(type='MF',t=solint,combine=combine,refant='',table=caltable,apmode=calmode,solnorm=solnorm) 

93 else: 

94 mycb.setsolve(type='M',t=solint,combine=combine,refant='',table=caltable,apmode=calmode,solnorm=solnorm) 

95 

96 mycb.solve() 

97 finally: 

98 mycb.close()