##################### generated by xml-casa (v2) from calibeovsa.xml ################
##################### f295775a00a77dd77b81d6e69924145c ##############################
from __future__ import absolute_import
from casashell.private.stack_manip import find_local as __sf__
from casashell.private.stack_manip import find_frame as _find_frame
from casatools.typecheck import validator as _pc
from casatools.coercetype import coerce as _coerce
from suncasatasks import calibeovsa as _calibeovsa_t
from collections import OrderedDict
import numpy
import sys
import os

import shutil

def static_var(varname, value):
    def decorate(func):
        setattr(func, varname, value)
        return func
    return decorate

class _calibeovsa:
    """
    calibeovsa ---- Calibrating EOVSA one or more measurement sets using calibration products in the SQL database.

    
    Calibrating EOVSA one or more measurement sets using calibration products in the SQL database. This task currently only works on pipeline.
    

    --------- parameter descriptions ---------------------------------------------

    vis          input EOVSA (uncalibrated) measurement set(s).
    caltype      Types of calibrations to perform
    caltbdir     Directory to place calibration tables.
    interp       Temporal interpolation for phacal table(s) (nearest or linear)
    docalib      If False, only create the calibration tables but do not perform applycal.
    doflag       If true then perform flagging.
    flagant      Antennas to be flagged. Follow CASA syntax of "antenna".
    doimage      If True, produce a quicklook image after calibration (sunpy must be installed).
    imagedir     directory to place output images. Default current directory.
    antenna      antenna/baselines to be used for imaging. Follow CASA syntax of "antenna".
    timerange    Timerange to be imaged. Follow CASA syntax of "timerange". Default is the entire duration of the ms.
    spw          spectral windows to be imaged. Follow CASA syntax of "spw".
    stokes       stokes to be imaged. Follow CASA syntax of "stokes".
    dosplit      If True, plit the corrected data column as output visibility file.
    outputvis    Name of output visibility file. Default is the name of the first vis file ended with ".corrected.ms".
    doconcat     If True, and if more than one visibility dataset provided, concatenate all into one visibility.
    concatvis    Name of output visibility file. Default is the name of the first + last vis file ended with ".corrected.ms".
    keep_orig_ms Keep the original seperated ms datasets after split?

    --------- examples -----------------------------------------------------------

    
    Calibrating EOVSA one or more measurement sets using calibration products in the SQL database.
    
    Detailed Keyword arguments:
    
    vis -- Name of input EOVSA measurement set dataset(s)
    default: none. Must be supplied
    example: vis = 'IDB20160524000518.ms'
    example: vis = ['IDB20160524000518.ms','IDB20160524000528.ms']
    
    caltype -- list. Type of calibrations to be applied.
    'refpha': reference phase calibration
    'refamp': reference amplitude calibration (not used anymore)
    'phacal': daily phase calibration
    'fluxcal': flux calibration based on total-power measurements
    default value: ['refpha','phacal']
    *** note fluxcal is already implemented in udb_corr when doing importeovsa, should not be used anymore ****
    *** pipeline only uses ['refpha','phacal']
    
    caltbdir -- string. Place to hold calibration tables. Default is current directory. Pipeline should use /data1/eovsa/caltable
    
    interp -- string. How interpolation is done for phacal? 'nearest' or 'linear'
    
    docalib -- boolean. Default True. If False, only create the calibration tables but do not perform applycal
    
    doflag -- boolean. Default True. Peforming flags?
    
    flagant -- string. Follow CASA antenna selection syntax. Default '13~15'.
    
    doimage -- boolean. Default False. If true, make a quicklook image using the specified time range and specified spw range
    
    imagedir -- string. Directory to place the output image.
    
    antenna -- string. Default '0~12'. Antenna/baselines to be used for imaging. Follow CASA antenna selection syntax.
    
    timerange -- string. Default '' (the whole duration of the visibility data). Follow CASA timerange syntax.
    e.g., '2017/07/11/20:16:00~2017/07/11/20:17:00'
    
    spw -- string. Default '1~3'. Follow CASA spw selection syntax.
    
    stokes -- string. Which stokes for the quicklook image. CASA syntax. Default 'XX'
    
    dosplit -- boolean. Split the corrected data column?
    
    outputvis -- string. Output visibility file after split
    
    doconcat -- boolean. If more than one visibility dataset provided, concatenate all into one or make separate outputs if True
    
    concatvis -- string. Output visibility file after concatenation
    
    keep_orig_ms -- boolean. Default True. Inherited from suncasa.eovsa.concateovsa.
    Keep the original seperated ms datasets after concatenation?
    
    


    """

    _info_group_ = """Calibration"""
    _info_desc_ = """Calibrating EOVSA one or more measurement sets using calibration products in the SQL database."""

    __schema = {'vis': {'anyof': [{'type': 'cStr', 'coerce': _coerce.to_str}, {'type': 'cStrVec', 'coerce': [_coerce.to_list,_coerce.to_strvec]}]}, 'caltype': {'anyof': [{'type': 'cStr', 'coerce': _coerce.to_str}, {'type': 'cStrVec', 'coerce': [_coerce.to_list,_coerce.to_strvec]}]}, 'caltbdir': {'type': 'cStr', 'coerce': _coerce.to_str}, 'interp': {'type': 'cStr', 'coerce': _coerce.to_str}, 'docalib': {'type': 'cBool'}, 'doflag': {'type': 'cBool'}, 'flagant': {'type': 'cStr', 'coerce': _coerce.to_str}, 'doimage': {'type': 'cBool'}, 'imagedir': {'type': 'cStr', 'coerce': _coerce.to_str}, 'antenna': {'type': 'cStr', 'coerce': _coerce.to_str}, 'timerange': {'type': 'cStr', 'coerce': _coerce.to_str}, 'spw': {'type': 'cStr', 'coerce': _coerce.to_str}, 'stokes': {'type': 'cStr', 'coerce': _coerce.to_str}, 'dosplit': {'type': 'cBool'}, 'outputvis': {'anyof': [{'type': 'cStr', 'coerce': _coerce.to_str}, {'type': 'cStrVec', 'coerce': [_coerce.to_list,_coerce.to_strvec]}]}, 'doconcat': {'type': 'cBool'}, 'concatvis': {'type': 'cStr', 'coerce': _coerce.to_str}, 'keep_orig_ms': {'type': 'cBool'}}

    def __init__(self):
        self.__stdout = None
        self.__stderr = None
        self.__root_frame_ = None

    def __globals_(self):
        if self.__root_frame_ is None:
            self.__root_frame_ = _find_frame( )
            assert self.__root_frame_ is not None, "could not find CASAshell global frame"
        return self.__root_frame_

    def __to_string_(self,value):
        if type(value) is str:
            return "'%s'" % value
        else:
            return str(value)

    def __validate_(self,doc,schema):
        return _pc.validate(doc,schema)

    def __do_inp_output(self,param_prefix,description_str,formatting_chars):
        out = self.__stdout or sys.stdout
        description = description_str.split( )
        prefix_width = 23 + 15 + 4
        output = [ ]
        addon = ''
        first_addon = True
        if len(description) == 0:
            out.write(param_prefix + " #\n")
            return
        while len(description) > 0:
            ## starting a new line.....................................................................
            if len(output) == 0:
                ## for first line add parameter information............................................
                if len(param_prefix)-formatting_chars > prefix_width - 1:
                    output.append(param_prefix)
                    continue
                addon = param_prefix + ' #'
                first_addon = True
                addon_formatting = formatting_chars
            else:
                ## for subsequent lines space over prefix width........................................
                addon = (' ' * prefix_width) + '#'
                first_addon = False
                addon_formatting = 0
            ## if first word of description puts us over the screen width, bail........................
            if len(addon + description[0]) - addon_formatting + 1 > self.term_width:
                ## if we're doing the first line make sure it's output.................................
                if first_addon: output.append(addon)
                break
            while len(description) > 0:
                ## if the next description word puts us over break for the next line...................
                if len(addon + description[0]) - addon_formatting + 1 > self.term_width: break
                addon = addon + ' ' + description[0]
                description.pop(0)
            output.append(addon)
        out.write('\n'.join(output) + '\n')

    #--------- return nonsubparam values ----------------------------------------------

    def __doimage_dflt( self, glb ):
        return False

    def __doimage( self, glb ):
        if 'doimage' in glb: return glb['doimage']
        return False

    def __vis_dflt( self, glb ):
        return ''

    def __vis( self, glb ):
        if 'vis' in glb: return glb['vis']
        return ''

    def __caltbdir_dflt( self, glb ):
        return ''

    def __caltbdir( self, glb ):
        if 'caltbdir' in glb: return glb['caltbdir']
        return ''

    def __docalib_dflt( self, glb ):
        return True

    def __docalib( self, glb ):
        if 'docalib' in glb: return glb['docalib']
        return True

    def __interp_dflt( self, glb ):
        return 'nearest'

    def __interp( self, glb ):
        if 'interp' in glb: return glb['interp']
        return 'nearest'

    def __caltype_dflt( self, glb ):
        return [  ]

    def __caltype( self, glb ):
        if 'caltype' in glb: return glb['caltype']
        return [  ]

    def __doflag_dflt( self, glb ):
        return True

    def __doflag( self, glb ):
        if 'doflag' in glb: return glb['doflag']
        return True

    def __dosplit_dflt( self, glb ):
        return False

    def __dosplit( self, glb ):
        if 'dosplit' in glb: return glb['dosplit']
        return False

    def __doconcat_dflt( self, glb ):
        return False

    def __doconcat( self, glb ):
        if 'doconcat' in glb: return glb['doconcat']
        return False



    #--------- return inp/go default --------------------------------------------------
    def __antenna_dflt( self, glb ):
        if self.__doimage( glb ) == bool(True): return "0~12"
        return None
    def __stokes_dflt( self, glb ):
        if self.__doimage( glb ) == bool(True): return "XX"
        return None
    def __flagant_dflt( self, glb ):
        if self.__doflag( glb ) == bool(True): return "13~15"
        return None
    def __concatvis_dflt( self, glb ):
        if self.__doconcat( glb ) == bool(True): return ""
        return None
    def __outputvis_dflt( self, glb ):
        if self.__dosplit( glb ) == bool(True): return ""
        return None
    def __keep_orig_ms_dflt( self, glb ):
        if self.__dosplit( glb ) == bool(True): return bool(True)
        if self.__doconcat( glb ) == bool(True): return bool(True)
        return None
    def __imagedir_dflt( self, glb ):
        if self.__doimage( glb ) == bool(True): return "."
        return None
    def __spw_dflt( self, glb ):
        if self.__doimage( glb ) == bool(True): return "1~3"
        return None
    def __timerange_dflt( self, glb ):
        if self.__doimage( glb ) == bool(True): return ""
        return None

    #--------- return subparam values -------------------------------------------------
    def __flagant( self, glb ):
        if 'flagant' in glb: return glb['flagant']
        dflt = self.__flagant_dflt( glb )
        if dflt is not None: return dflt
        return '13~15'
    def __imagedir( self, glb ):
        if 'imagedir' in glb: return glb['imagedir']
        dflt = self.__imagedir_dflt( glb )
        if dflt is not None: return dflt
        return '.'
    def __antenna( self, glb ):
        if 'antenna' in glb: return glb['antenna']
        dflt = self.__antenna_dflt( glb )
        if dflt is not None: return dflt
        return '0~12'
    def __timerange( self, glb ):
        if 'timerange' in glb: return glb['timerange']
        dflt = self.__timerange_dflt( glb )
        if dflt is not None: return dflt
        return ''
    def __spw( self, glb ):
        if 'spw' in glb: return glb['spw']
        dflt = self.__spw_dflt( glb )
        if dflt is not None: return dflt
        return '1~3'
    def __stokes( self, glb ):
        if 'stokes' in glb: return glb['stokes']
        dflt = self.__stokes_dflt( glb )
        if dflt is not None: return dflt
        return 'XX'
    def __outputvis( self, glb ):
        if 'outputvis' in glb: return glb['outputvis']
        dflt = self.__outputvis_dflt( glb )
        if dflt is not None: return dflt
        return ''
    def __concatvis( self, glb ):
        if 'concatvis' in glb: return glb['concatvis']
        dflt = self.__concatvis_dflt( glb )
        if dflt is not None: return dflt
        return ''
    def __keep_orig_ms( self, glb ):
        if 'keep_orig_ms' in glb: return glb['keep_orig_ms']
        dflt = self.__keep_orig_ms_dflt( glb )
        if dflt is not None: return dflt
        return True

    #--------- subparam inp output ----------------------------------------------------
    def __vis_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__vis_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return ''
        description = ''
        value = self.__vis( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'vis': value},{'vis': self.__schema['vis']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('%-15.15s = %s%-23s%s' % ('vis',pre,self.__to_string_(value),post),description,0+len(pre)+len(post))
    def __caltype_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__caltype_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return [  ]
        description = ''
        value = self.__caltype( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'caltype': value},{'caltype': self.__schema['caltype']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('%-15.15s = %s%-23s%s' % ('caltype',pre,self.__to_string_(value),post),description,0+len(pre)+len(post))
    def __caltbdir_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__caltbdir_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return ''
        description = ''
        value = self.__caltbdir( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'caltbdir': value},{'caltbdir': self.__schema['caltbdir']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('%-15.15s = %s%-23s%s' % ('caltbdir',pre,self.__to_string_(value),post),description,0+len(pre)+len(post))
    def __interp_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__interp_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return 'nearest'
        description = ''
        value = self.__interp( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'interp': value},{'interp': self.__schema['interp']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('%-15.15s = %s%-23s%s' % ('interp',pre,self.__to_string_(value),post),description,0+len(pre)+len(post))
    def __docalib_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__docalib_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return True
        description = ''
        value = self.__docalib( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'docalib': value},{'docalib': self.__schema['docalib']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('%-15.15s = %s%-23s%s' % ('docalib',pre,self.__to_string_(value),post),description,0+len(pre)+len(post))
    def __doflag_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__doflag_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return True
        description = ''
        value = self.__doflag( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'doflag': value},{'doflag': self.__schema['doflag']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('\x1B[1m\x1B[47m%-15.15s =\x1B[0m %s%-23s%s' % ('doflag',pre,self.__to_string_(value),post),description,13+len(pre)+len(post))
    def __flagant_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__flagant_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return '13~15'
        if self.__flagant_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__flagant( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'flagant': value},{'flagant': self.__schema['flagant']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('flagant',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __doimage_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__doimage_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return False
        description = ''
        value = self.__doimage( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'doimage': value},{'doimage': self.__schema['doimage']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('\x1B[1m\x1B[47m%-15.15s =\x1B[0m %s%-23s%s' % ('doimage',pre,self.__to_string_(value),post),description,13+len(pre)+len(post))
    def __imagedir_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__imagedir_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return '.'
        if self.__imagedir_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__imagedir( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'imagedir': value},{'imagedir': self.__schema['imagedir']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('imagedir',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __antenna_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__antenna_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return '0~12'
        if self.__antenna_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__antenna( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'antenna': value},{'antenna': self.__schema['antenna']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('antenna',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __timerange_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__timerange_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return ''
        if self.__timerange_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__timerange( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'timerange': value},{'timerange': self.__schema['timerange']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('timerange',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __spw_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__spw_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return '1~3'
        if self.__spw_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__spw( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'spw': value},{'spw': self.__schema['spw']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('spw',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __stokes_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__stokes_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return 'XX'
        if self.__stokes_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__stokes( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'stokes': value},{'stokes': self.__schema['stokes']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('stokes',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __dosplit_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__dosplit_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return False
        description = ''
        value = self.__dosplit( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'dosplit': value},{'dosplit': self.__schema['dosplit']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('\x1B[1m\x1B[47m%-15.15s =\x1B[0m %s%-23s%s' % ('dosplit',pre,self.__to_string_(value),post),description,13+len(pre)+len(post))
    def __outputvis_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__outputvis_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return ''
        if self.__outputvis_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__outputvis( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'outputvis': value},{'outputvis': self.__schema['outputvis']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('outputvis',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __doconcat_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__doconcat_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return False
        description = ''
        value = self.__doconcat( self.__globals_( ) )
        (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'doconcat': value},{'doconcat': self.__schema['doconcat']}) else ('\x1B[91m','\x1B[0m')
        self.__do_inp_output('\x1B[1m\x1B[47m%-15.15s =\x1B[0m %s%-23s%s' % ('doconcat',pre,self.__to_string_(value),post),description,13+len(pre)+len(post))
    def __concatvis_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__concatvis_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return ''
        if self.__concatvis_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__concatvis( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'concatvis': value},{'concatvis': self.__schema['concatvis']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('concatvis',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))
    def __keep_orig_ms_inp(self):
        def xml_default( ):
            ## play the crazy subparameter shell game
            dflt = self.__keep_orig_ms_dflt( self.__globals_( ) )
            if dflt is not None: return dflt
            return True
        if self.__keep_orig_ms_dflt( self.__globals_( ) ) is not None:
             description = ''
             value = self.__keep_orig_ms( self.__globals_( ) )
             (pre,post) = (('','') if value == xml_default( ) else ('\x1B[34m','\x1B[0m')) if self.__validate_({'keep_orig_ms': value},{'keep_orig_ms': self.__schema['keep_orig_ms']}) else ('\x1B[91m','\x1B[0m')
             self.__do_inp_output('   \x1B[92m%-12.12s =\x1B[0m %s%-23s%s' % ('keep_orig_ms',pre,self.__to_string_(value),post),description,9+len(pre)+len(post))

    #--------- global default implementation-------------------------------------------
    @static_var('state', __sf__('casa_inp_go_state'))
    def set_global_defaults(self):
        self.set_global_defaults.state['last'] = self
        glb = self.__globals_( )
        if 'antenna' in glb: del glb['antenna']
        if 'stokes' in glb: del glb['stokes']
        if 'flagant' in glb: del glb['flagant']
        if 'concatvis' in glb: del glb['concatvis']
        if 'dosplit' in glb: del glb['dosplit']
        if 'doflag' in glb: del glb['doflag']
        if 'outputvis' in glb: del glb['outputvis']
        if 'keep_orig_ms' in glb: del glb['keep_orig_ms']
        if 'vis' in glb: del glb['vis']
        if 'interp' in glb: del glb['interp']
        if 'caltype' in glb: del glb['caltype']
        if 'docalib' in glb: del glb['docalib']
        if 'doconcat' in glb: del glb['doconcat']
        if 'imagedir' in glb: del glb['imagedir']
        if 'doimage' in glb: del glb['doimage']
        if 'caltbdir' in glb: del glb['caltbdir']
        if 'spw' in glb: del glb['spw']
        if 'timerange' in glb: del glb['timerange']


    #--------- inp function -----------------------------------------------------------
    def inp(self):
        print("# calibeovsa -- %s" % self._info_desc_)
        self.term_width, self.term_height = shutil.get_terminal_size(fallback=(80, 24))
        self.__vis_inp( )
        self.__caltype_inp( )
        self.__caltbdir_inp( )
        self.__interp_inp( )
        self.__docalib_inp( )
        self.__doflag_inp( )
        self.__flagant_inp( )
        self.__doimage_inp( )
        self.__imagedir_inp( )
        self.__antenna_inp( )
        self.__timerange_inp( )
        self.__spw_inp( )
        self.__stokes_inp( )
        self.__dosplit_inp( )
        self.__outputvis_inp( )
        self.__doconcat_inp( )
        self.__concatvis_inp( )
        self.__keep_orig_ms_inp( )

    #--------- tget function ----------------------------------------------------------
    @static_var('state', __sf__('casa_inp_go_state'))
    def tget(self,savefile=None):
        from casashell.private.stack_manip import find_frame
        from runpy import run_path
        filename = savefile
        if filename is None:
            filename = "calibeovsa.last" if os.path.isfile("calibeovsa.last") else "calibeovsa.saved"
        if os.path.isfile(filename):
            glob = find_frame( )
            newglob = run_path( filename, init_globals={ } )
            for i in newglob:
                glob[i] = newglob[i]
            self.tget.state['last'] = self
        else:
            print("could not find last file: %s\nsetting defaults instead..." % filename)
            self.set_global_defaults( )

    #--------- tput function ----------------------------------------------------------
    def tput(self,outfile=None):
        def noobj(s):
           if s.startswith('<') and s.endswith('>'):
               return "None"
           else:
               return s

        _postfile = outfile if outfile is not None else os.path.realpath('calibeovsa.last')

        _invocation_parameters = OrderedDict( )
        _invocation_parameters['vis'] = self.__vis( self.__globals_( ) )
        _invocation_parameters['caltype'] = self.__caltype( self.__globals_( ) )
        _invocation_parameters['caltbdir'] = self.__caltbdir( self.__globals_( ) )
        _invocation_parameters['interp'] = self.__interp( self.__globals_( ) )
        _invocation_parameters['docalib'] = self.__docalib( self.__globals_( ) )
        _invocation_parameters['doflag'] = self.__doflag( self.__globals_( ) )
        _invocation_parameters['flagant'] = self.__flagant( self.__globals_( ) )
        _invocation_parameters['doimage'] = self.__doimage( self.__globals_( ) )
        _invocation_parameters['imagedir'] = self.__imagedir( self.__globals_( ) )
        _invocation_parameters['antenna'] = self.__antenna( self.__globals_( ) )
        _invocation_parameters['timerange'] = self.__timerange( self.__globals_( ) )
        _invocation_parameters['spw'] = self.__spw( self.__globals_( ) )
        _invocation_parameters['stokes'] = self.__stokes( self.__globals_( ) )
        _invocation_parameters['dosplit'] = self.__dosplit( self.__globals_( ) )
        _invocation_parameters['outputvis'] = self.__outputvis( self.__globals_( ) )
        _invocation_parameters['doconcat'] = self.__doconcat( self.__globals_( ) )
        _invocation_parameters['concatvis'] = self.__concatvis( self.__globals_( ) )
        _invocation_parameters['keep_orig_ms'] = self.__keep_orig_ms( self.__globals_( ) )

        try:
            with open(_postfile,'w') as _f:
                for _i in _invocation_parameters:
                    _f.write("%-12s = %s\n" % (_i,noobj(repr(_invocation_parameters[_i]))))
                _f.write("#calibeovsa( ")
                count = 0
                for _i in _invocation_parameters:
                    _f.write("%s=%s" % (_i,noobj(repr(_invocation_parameters[_i]))))
                    count += 1
                    if count < len(_invocation_parameters): _f.write(",")
                _f.write(" )\n")
        except: return False
        return True

    def __call__( self, vis=None, caltype=None, caltbdir=None, interp=None, docalib=None, doflag=None, flagant=None, doimage=None, imagedir=None, antenna=None, timerange=None, spw=None, stokes=None, dosplit=None, outputvis=None, doconcat=None, concatvis=None, keep_orig_ms=None ):
        def noobj(s):
           if s.startswith('<') and s.endswith('>'):
               return "None"
           else:
               return s
        _prefile = os.path.realpath('calibeovsa.pre')
        _postfile = os.path.realpath('calibeovsa.last')
        _return_result_ = None
        _arguments = [vis,caltype,caltbdir,interp,docalib,doflag,flagant,doimage,imagedir,antenna,timerange,spw,stokes,dosplit,outputvis,doconcat,concatvis,keep_orig_ms]
        _invocation_parameters = OrderedDict( )
        if any(map(lambda x: x is not None,_arguments)):
            # invoke python style
            # set the non sub-parameters that are not None
            local_global = { }
            if vis is not None: local_global['vis'] = vis
            if caltype is not None: local_global['caltype'] = caltype
            if caltbdir is not None: local_global['caltbdir'] = caltbdir
            if interp is not None: local_global['interp'] = interp
            if docalib is not None: local_global['docalib'] = docalib
            if doflag is not None: local_global['doflag'] = doflag
            if doimage is not None: local_global['doimage'] = doimage
            if dosplit is not None: local_global['dosplit'] = dosplit
            if doconcat is not None: local_global['doconcat'] = doconcat

            # the invocation parameters for the non-subparameters can now be set - this picks up those defaults
            _invocation_parameters['vis'] = self.__vis( local_global )
            _invocation_parameters['caltype'] = self.__caltype( local_global )
            _invocation_parameters['caltbdir'] = self.__caltbdir( local_global )
            _invocation_parameters['interp'] = self.__interp( local_global )
            _invocation_parameters['docalib'] = self.__docalib( local_global )
            _invocation_parameters['doflag'] = self.__doflag( local_global )
            _invocation_parameters['doimage'] = self.__doimage( local_global )
            _invocation_parameters['dosplit'] = self.__dosplit( local_global )
            _invocation_parameters['doconcat'] = self.__doconcat( local_global )

            # the sub-parameters can then be set. Use the supplied value if not None, else the function, which gets the appropriate default
            _invocation_parameters['flagant'] = self.__flagant( _invocation_parameters ) if flagant is None else flagant
            _invocation_parameters['imagedir'] = self.__imagedir( _invocation_parameters ) if imagedir is None else imagedir
            _invocation_parameters['antenna'] = self.__antenna( _invocation_parameters ) if antenna is None else antenna
            _invocation_parameters['timerange'] = self.__timerange( _invocation_parameters ) if timerange is None else timerange
            _invocation_parameters['spw'] = self.__spw( _invocation_parameters ) if spw is None else spw
            _invocation_parameters['stokes'] = self.__stokes( _invocation_parameters ) if stokes is None else stokes
            _invocation_parameters['outputvis'] = self.__outputvis( _invocation_parameters ) if outputvis is None else outputvis
            _invocation_parameters['concatvis'] = self.__concatvis( _invocation_parameters ) if concatvis is None else concatvis
            _invocation_parameters['keep_orig_ms'] = self.__keep_orig_ms( _invocation_parameters ) if keep_orig_ms is None else keep_orig_ms

        else:
            # invoke with inp/go semantics
            _invocation_parameters['vis'] = self.__vis( self.__globals_( ) )
            _invocation_parameters['caltype'] = self.__caltype( self.__globals_( ) )
            _invocation_parameters['caltbdir'] = self.__caltbdir( self.__globals_( ) )
            _invocation_parameters['interp'] = self.__interp( self.__globals_( ) )
            _invocation_parameters['docalib'] = self.__docalib( self.__globals_( ) )
            _invocation_parameters['doflag'] = self.__doflag( self.__globals_( ) )
            _invocation_parameters['flagant'] = self.__flagant( self.__globals_( ) )
            _invocation_parameters['doimage'] = self.__doimage( self.__globals_( ) )
            _invocation_parameters['imagedir'] = self.__imagedir( self.__globals_( ) )
            _invocation_parameters['antenna'] = self.__antenna( self.__globals_( ) )
            _invocation_parameters['timerange'] = self.__timerange( self.__globals_( ) )
            _invocation_parameters['spw'] = self.__spw( self.__globals_( ) )
            _invocation_parameters['stokes'] = self.__stokes( self.__globals_( ) )
            _invocation_parameters['dosplit'] = self.__dosplit( self.__globals_( ) )
            _invocation_parameters['outputvis'] = self.__outputvis( self.__globals_( ) )
            _invocation_parameters['doconcat'] = self.__doconcat( self.__globals_( ) )
            _invocation_parameters['concatvis'] = self.__concatvis( self.__globals_( ) )
            _invocation_parameters['keep_orig_ms'] = self.__keep_orig_ms( self.__globals_( ) )
        try:
            with open(_prefile,'w') as _f:
                for _i in _invocation_parameters:
                    _f.write("%-12s = %s\n" % (_i,noobj(repr(_invocation_parameters[_i]))))
                _f.write("#calibeovsa( ")
                count = 0
                for _i in _invocation_parameters:
                    _f.write("%s=%s" % (_i,noobj(repr(_invocation_parameters[_i]))))
                    count += 1
                    if count < len(_invocation_parameters): _f.write(",")
                _f.write(" )\n")
        except: pass
        try:
            _return_result_ = _calibeovsa_t( _invocation_parameters['vis'],_invocation_parameters['caltype'],_invocation_parameters['caltbdir'],_invocation_parameters['interp'],_invocation_parameters['docalib'],_invocation_parameters['doflag'],_invocation_parameters['flagant'],_invocation_parameters['doimage'],_invocation_parameters['imagedir'],_invocation_parameters['antenna'],_invocation_parameters['timerange'],_invocation_parameters['spw'],_invocation_parameters['stokes'],_invocation_parameters['dosplit'],_invocation_parameters['outputvis'],_invocation_parameters['doconcat'],_invocation_parameters['concatvis'],_invocation_parameters['keep_orig_ms'] )
        except Exception as e:
            from traceback import format_exc
            from casatasks import casalog
            casalog.origin('calibeovsa')
            casalog.post("Exception Reported: Error in calibeovsa: %s" % str(e),'SEVERE')
            casalog.post(format_exc( ))
            _return_result_ = False
        try:
            os.rename(_prefile,_postfile)
        except: pass
        return _return_result_

calibeovsa = _calibeovsa( )

