Usage for listPhaseSolutions
Return to directory of Todd's CASA extensions
This function is useful for examining the phase solutions of a
self-cal table to identify antennas with the largest phase
discrepancies from zero, and hence those antennas which
may be misbehaving or have a position error.
See also
plotPhaseSolutions which calls this function.
Usage
au.listPhaseSolutions(caltable='', sort='value', threshold=0.0)
- sort: 'value', 'name', or 'id' (default='value')
- 'value': sort by absolute magnitude of the phase
- 'name': sort by antenna name
- 'id': sort by antenna ID (often the same as name)
- threshold: optional, only show phases with an absolute value larger than this (degrees, default=0)
- phasecal: optional, the field ID or name of the phase calibrator (scalar or list)
Returns a dictionary of the format:
{'separation':value,
'MSName': ms,
'target': target_name,
'phasecal': phase_calibrator_name, (only provided if phasecal is specified on command-line)
'timestamps': [{'mjdsec': value, 'antennas':['DA45',...],
'phases':[10.3,...], 'medianphase':3.2, 'percentile25':6.0, 'percentile75':15.0, 'percentile':4.5,
'meanphase':2.4, 'maxphase':8.0, 'stdphase':1.3, 'madphase':3.2},
...]
}
where antennas are string names, phases are in degrees, and separation is in degrees
percentile = half of the difference between percentile75 and percentile25, i.e. useful for plotting error bars
Example for a single source with single solution interval:
CASA <49>: au.listPhaseSolutions('selfp1_SPT2311-54', threshold=10)
fieldID = 4
target = 23:11:24.26000, -054:50:32.800000
Time = 4851555000.513961 = 2012-08-13 06:10:01 UT
1 DA42 +10.066
11 DV10 -11.328
23 PM02 +38.007
Out[6]:
{'MSName': 'uid___A002_X49990a_X1f.ms.split.cal',
'target': 'SPT2311-54',
'timestamps': [{'antennas': ['DA42', 'DV10', 'PM02'],
'madphase': 1.8705743779963402,
'maxphase': 38.007002095560289,
'meanphase': 19.800293441062248,
'medianphase': 11.327790322792493,
'mjdsec': 4851555000.5139608,
'percentile': 6.9852285476815803,
'percentile25': 10.696939113813228,
'percentile75': 24.667396209176388,
'phases': [10.066087904833962,
-11.327790322792493,
38.007002095560289],
'stdphase': 12.884387277378282}]}
Example for a series of sources each with a single solution interval:
For each antenna, this example counts the number of sources on which it has exceeded the threshold.
import numpy
antennas = []
brightfields = ['SPT2311-54','SPT2319-55','SPT2340-59','SPT2349-56']
for field in brightfields:
d = au.listPhaseSolutions('selfp1_%s'%field, threshold=20)
antennas += d['timestamps'][0]['antennas']
for ant in numpy.unique(antennas):
print "%s: %d" % (ant, antennas.count(ant))
--
ToddHunter - 2012-09-05