import os import re from casatasks import casalog from casatools import agentflagger, calibrater, ms, singledishms from . import sdutil from .mstools import write_history mysdms = singledishms() mycb = calibrater() myms = ms() @sdutil.sdtask_decorator def importasap(infile=None, outputvis=None, flagbackup=None, overwrite=None, parallel=None): """ """ try: if infile is None or outputvis is None: raise RuntimeError('Error: infile and outputvis must be specified.') # default value if flagbackup is None: flagbackup = True if overwrite is None: overwrite = False # basic check if os.path.exists(outputvis) and not overwrite: raise RuntimeError('%s exists.' % (outputvis)) if not _is_scantable(infile): raise RuntimeError('%s is not a valid Scantable.' % (infile)) # import status = mysdms.importasap(infile, outputvis, parallel) if status: # flagversions file must be deleted flagversions = outputvis.rstrip('/') + '.flagversions' if os.path.exists(flagversions): os.system('rm -rf %s' % (flagversions)) # initialize weights using cb tool mycb.open(outputvis, compress=False, addcorr=False, addmodel=False) mycb.initweights(wtmode='nyq') # create flagbackup file if user requests it if flagbackup: aflocal = agentflagger() aflocal.open(outputvis) aflocal.saveflagversion( 'Original', comment='Original flags at import into CASA using importasap', merge='save') aflocal.done() else: raise RuntimeError('Failure in importasap') # Write history to output MS param_names = importasap.__code__.co_varnames[:importasap.__code__.co_argcount] vars = locals() param_vals = [vars[p] for p in param_names] write_history(myms, outputvis, 'importasap', param_names, param_vals, casalog) finally: mycb.close() def _is_scantable(filename): """Check if given data is Scantable or not.""" ret = False if os.path.isdir(filename) and os.path.exists(filename + '/table.info') \ and os.path.exists(filename + '/table.dat'): with open(filename + '/table.info') as f: lines = f.readline() f.close() match_pattern = '^Type = (Scantable)? *$' ret = re.match(match_pattern, lines) is not None return ret