#!/usr/bin/env python
# Script for analysing 1934-638 cal observations to compute SEFD.
# David McConnell
# 2015 Apr ...
# 2018 Feb 6 to new aces package
#
import sys
import os
import warnings
import logging
import askap.parset.parset as ps
from aces.sefd import sefd__cc as se
[docs]logger = logging.getLogger(__name__)
# This should be submitted to the batch system via scripts/sefdProcessing.sh
[docs]def set_warn_filters():
warnings.resetwarnings()
filters = [{'action': 'ignore', 'message': 'converting a masked element to nan.',
'category': UserWarning}]
for f in filters:
warnings.filterwarnings(**f)
#
# ---------------------------------------
# start execution here
#
[docs]def main(mset_id: int=None):
logging.info("sefdProcessing version {}".format(version))
set_warn_filters()
# Set default inputs:
inp = ps.ParameterSet('SEFD_defaults.parset').to_dict()
# get any override inputs:
# Get inputs:
if 'INFILE' in os.environ.keys():
infile_name = os.environ['INFILE']
else:
infile_name = None
if 'INPUTS' in os.environ.keys():
inp_file = os.environ['INPUTS']
else:
inp_file = 'SEFD_inputs.parset'
inc = ps.ParameterSet(inp_file).to_dict()
ODIR = os.getcwd()
# assert isinstance(inp, dict)
inp.update(inc)
sbid = inp['sbid']
if mset_id is None:
logger.info("No mset_id specified. Attempting to derive. ")
if 'SLURM_ARRAY_TASK_ID' in os.environ.keys():
mset_id = int(os.environ['SLURM_ARRAY_TASK_ID'])
elif 'mset_id' in inp:
mset_id = inp['mset_id']
else:
mset_id = inp['beams'][0]
scan = inp['scan']
start = inp['start']
dnt = inp['nTimAvg']
nct = inp['nTimCells']
ch0 = inp['chan0']
dch = inp['nChanAvg']
ncF = inp['nFrqCells']
doDecompose = inp['decompose']
diff = inp['difference']
uvmin = inp['uvmin']
outfile_base = os.path.join(ODIR, inp['outfile_base'])
logger.info("MeasurementSet index = {}".format(mset_id))
fname = outfile_base.format(sbid, mset_id)
# TODO
# - potential delayed start for first scan. Review after TOS FR implemented.
# if sc == 0:
# start += 15
d = se.SEFD(sbid, file_name=infile_name, mset_inx=mset_id,
dch=dch, ch0=ch0, ncf=ncF, scan=scan, dnt=dnt,
nstart=start, nct=nct,
uvmin=uvmin)
d.summary()
d.calc_sefd(difference=diff)
if doDecompose:
d.decompose(what="SEFD")
d.decompose(what="SCALE")
# d.decompose(what="RAWAMPL")
# d.plot_A(fname)
# d.save_pickle(fname)
d.save_hdf5(fname, per_ant=doDecompose)
logger.info("Written output to {}".format(fname))
if __name__ == "__main__":
[docs] fmt = '%(asctime)s %(levelname)s %(name)s %(message)s'
logging.basicConfig(format=fmt, level=logging.DEBUG)
sys.exit(main())