import os
import pipeline.infrastructure as infrastructure
import pipeline.infrastructure.basetask as basetask
import pipeline.infrastructure.vdp as vdp
from ...heuristics import findrefant
LOG = infrastructure.get_logger(__name__)
[docs]class RefAntResults(basetask.Results):
def __init__(self, vis, refant):
super(RefAntResults, self).__init__()
self._vis = vis
self._refant = ','.join([str(ant) for ant in refant])
[docs] def merge_with_context(self, context):
if self._vis is None or self._refant is None:
LOG.error('No results to merge')
return
# Do we also need to locate the antenna in the measurement set?
# This might become necessary when using different sessions
ms = context.observing_run.get_ms(name=self._vis)
if ms:
LOG.debug('Setting refant for {!s} to {!r}'.format(ms.basename, self._refant))
ms.reference_antenna = self._refant
def __str__(self):
if self._vis is None or self._refant is None:
return ('Reference antenna results:\n'
'\tNo reference antenna selected')
else:
return ('Reference antenna results:\n'
'{!s}: refant={!r}'.format(os.path.basename(self._vis), self._refant))
def __repr__(self):
return 'RefAntResults({!r}, {!r})'.format(self._vis, self._refant)
[docs]class RefAnt(basetask.StandardTaskTemplate):
Inputs = RefAntInputs
[docs] def prepare(self, **parameters):
inputs = self.inputs
# Get the reference antenna list
if inputs.hm_refant == 'manual':
refant = inputs.refant.split(',')
elif inputs.hm_refant == 'automatic':
heuristics = findrefant.RefAntHeuristics(vis=inputs.vis, field=inputs.field, spw=inputs.spw,
intent=inputs.intent, geometry=inputs.geometry,
flagging=inputs.flagging)
refant = heuristics.calculate()
else:
raise NotImplemented('Unhandled hm_refant value: {!r}'.format(inputs.hm_refant))
return RefAntResults(inputs.vis, refant)
[docs] def analyse(self, results):
return results