Source code for pipeline.hsd.cli.gotasks.hsd_blflag

##################### generated by xml-casa (v2) from hsd_blflag.xml ################
##################### f151a976ee2dbb445bded36b19ebbec6 ##############################
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 pipeline.hsd.cli import hsd_blflag as _hsd_blflag_t
from collections import OrderedDict
import numpy
import sys
import os

import shutil

[docs]def static_var(varname, value): def decorate(func): setattr(func, varname, value) return func return decorate
class _hsd_blflag: """ hsd_blflag ---- Flag spectra based on predefined criteria of single dish pipeline Data are flagged based on several flagging rules. Available rules are: expected rms, calculated rms, and running mean of both pre-fit and post-fit spectra. Tsys flagging is also available. In addition, the heuristics script creates many plots for each stage. Those plots are included in the weblog. Output: results -- If pipeline mode is 'getinputs' then None is returned. Otherwise the results object for the pipeline task is returned. --------- parameter descriptions --------------------------------------------- iteration Number of iterations to perform sigma clipping to calculate threshold value of flagging. edge Number of channels to be dropped from the edge. The value must be a list of integer with length of one or two. If list length is one, same number will be applied both side of the band. example: [10,20], [10] flag_tsys Activate (True) or deactivate (False) Tsys flag. tsys_thresh Threshold value for Tsys flag. flag_weath Activate (True) or deactivate (False) weather flag. Since weather flagging is not implemented yet, setting True has no effect at the moment. weath_thresh Threshold value for weather flag. flag_prfre Activate (True) or deactivate (False) flag by expected rms of pre-fit spectra. prfre_thresh Threshold value for flag by expected rms of pre-fit spectra. flag_pofre Activate (True) or deactivate (False) flag by expected rms of post-fit spectra. pofre_thresh Threshold value for flag by expected rms of post-fit spectra. flag_prfr Activate (True) or deactivate (False) flag by rms of pre-fit spectra. prfr_thresh Threshold value for flag by rms of pre-fit spectra. flag_pofr Activate (True) or deactivate (False) flag by rms of post-fit spectra. pofr_thresh Threshold value for flag by rms of post-fit spectra. flag_prfrm Activate (True) or deactivate (False) flag by running mean of pre-fit spectra. prfrm_thresh Threshold value for flag by running mean of pre-fit spectra. prfrm_nmean Number of channels for running mean of pre-fit spectra. flag_pofrm Activate (True) or deactivate (False) flag by running mean of post-fit spectra. pofrm_thresh Threshold value for flag by running mean of post-fit spectra. pofrm_nmean Number of channels for running mean of post-fit spectra. flag_user Activate (True) or deactivate (False) user-defined flag. Since user flagging is not implemented yet, setting True has no effect at the moment. user_thresh Threshold value for flag by user-defined rule. plotflag True to plot result of data flagging. pipelinemode The pipeline operating mode. In 'automatic' mode the pipeline determines the values of all context defined pipeline inputs automatically. In interactive mode the user can set the pipeline context defined parameters manually. In 'getinputs' mode the user can check the settings of all pipeline parameters without running the task. infiles ASDM or MS files to be processed. This parameter behaves as data selection parameter. The name specified by infiles must be registered to context before you run hsd_blflag. antenna Data selection by antenna names or ids. example: 'PM03,PM04' '' (all antennas) field Data selection by field names or ids. example: '*Sgr*,M100' '' (all fields) spw Data selection by spw ids. example: '3,4' (spw 3 and 4) '' (all spws) pol Data selection by polarizations. example: 'XX,YY' (correlation XX and YY) '' (all polarizations) dryrun Run the commands (True) or generate the commands to be run but do not execute (False). acceptresults Add the results of the task to the pipeline context (True) or reject them (False). parallel Execute using CASA HPC functionality, if available. --------- examples ----------------------------------------------------------- """ _info_group_ = """pipeline""" _info_desc_ = """Flag spectra based on predefined criteria of single dish pipeline""" __schema = {'iteration': {'type': 'cInt'}, 'edge': {'type': 'cIntVec', 'coerce': [_coerce.to_list,_coerce.to_intvec]}, 'flag_tsys': {'type': 'cBool'}, 'tsys_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'flag_weath': {'type': 'cBool'}, 'weath_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'flag_prfre': {'type': 'cBool'}, 'prfre_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'flag_pofre': {'type': 'cBool'}, 'pofre_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'flag_prfr': {'type': 'cBool'}, 'prfr_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'flag_pofr': {'type': 'cBool'}, 'pofr_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'flag_prfrm': {'type': 'cBool'}, 'prfrm_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'prfrm_nmean': {'type': 'cInt'}, 'flag_pofrm': {'type': 'cBool'}, 'pofrm_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'pofrm_nmean': {'type': 'cInt'}, 'flag_user': {'type': 'cBool'}, 'user_thresh': {'type': 'cFloat', 'coerce': _coerce.to_float}, 'plotflag': {'type': 'cBool'}, 'pipelinemode': {'type': 'cStr', 'coerce': _coerce.to_str, 'allowed': [ 'automatic', 'interactive', 'getinputs' ]}, 'infiles': {'type': 'cStrVec', 'coerce': [_coerce.to_list,_coerce.to_strvec]}, 'antenna': {'type': 'cStr', 'coerce': _coerce.to_str}, 'field': {'type': 'cStr', 'coerce': _coerce.to_str}, 'spw': {'type': 'cStr', 'coerce': _coerce.to_str}, 'pol': {'type': 'cStr', 'coerce': _coerce.to_str}, 'dryrun': {'type': 'cBool'}, 'acceptresults': {'type': 'cBool'}, 'parallel': {'type': 'cStr', 'coerce': _coerce.to_str, 'allowed': [ 'automatic', 'true', 'false' ]}} 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 + 16 + 4 output = [ ] addon = '' first_addon = True 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 __flag_prfre_dflt( self, glb ): return True def __flag_prfre( self, glb ): if 'flag_prfre' in glb: return glb['flag_prfre'] return True def __flag_tsys_dflt( self, glb ): return True def __flag_tsys( self, glb ): if 'flag_tsys' in glb: return glb['flag_tsys'] return True def __edge_dflt( self, glb ): return [ int(0),int(0) ] def __edge( self, glb ): if 'edge' in glb: return glb['edge'] return [ int(0),int(0) ] def __iteration_dflt( self, glb ): return int(5) def __iteration( self, glb ): if 'iteration' in glb: return glb['iteration'] return int(5) def __flag_pofre_dflt( self, glb ): return True def __flag_pofre( self, glb ): if 'flag_pofre' in glb: return glb['flag_pofre'] return True def __flag_prfr_dflt( self, glb ): return True def __flag_prfr( self, glb ): if 'flag_prfr' in glb: return glb['flag_prfr'] return True def __flag_weath_dflt( self, glb ): return False def __flag_weath( self, glb ): if 'flag_weath' in glb: return glb['flag_weath'] return False def __plotflag_dflt( self, glb ): return True def __plotflag( self, glb ): if 'plotflag' in glb: return glb['plotflag'] return True def __flag_prfrm_dflt( self, glb ): return True def __flag_prfrm( self, glb ): if 'flag_prfrm' in glb: return glb['flag_prfrm'] return True def __flag_user_dflt( self, glb ): return False def __flag_user( self, glb ): if 'flag_user' in glb: return glb['flag_user'] return False def __pipelinemode_dflt( self, glb ): return 'automatic' def __pipelinemode( self, glb ): if 'pipelinemode' in glb: return glb['pipelinemode'] return 'automatic' def __flag_pofr_dflt( self, glb ): return True def __flag_pofr( self, glb ): if 'flag_pofr' in glb: return glb['flag_pofr'] return True def __flag_pofrm_dflt( self, glb ): return True def __flag_pofrm( self, glb ): if 'flag_pofrm' in glb: return glb['flag_pofrm'] return True #--------- return inp/go default -------------------------------------------------- def __antenna_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return "" if self.__pipelinemode( glb ) == "getinputs": return "" return None def __pofrm_nmean_dflt( self, glb ): if self.__flag_pofrm( glb ) == bool(True): return int(5) return None def __dryrun_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return bool(False) return None def __pofr_thresh_dflt( self, glb ): if self.__flag_pofr( glb ) == bool(True): return float(4.0) return None def __tsys_thresh_dflt( self, glb ): if self.__flag_tsys( glb ) == bool(True): return float(3.0) return None def __prfrm_nmean_dflt( self, glb ): if self.__flag_prfrm( glb ) == bool(True): return int(5) return None def __field_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return "" if self.__pipelinemode( glb ) == "getinputs": return "" return None def __user_thresh_dflt( self, glb ): if self.__flag_user( glb ) == bool(True): return float(5.0) return None def __weath_thresh_dflt( self, glb ): if self.__flag_weath( glb ) == bool(True): return float(3.0) return None def __prfre_thresh_dflt( self, glb ): if self.__flag_prfre( glb ) == bool(True): return float(3.0) return None def __pofrm_thresh_dflt( self, glb ): if self.__flag_pofrm( glb ) == bool(True): return float(5.0) return None def __prfrm_thresh_dflt( self, glb ): if self.__flag_prfrm( glb ) == bool(True): return float(5.5) return None def __acceptresults_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return bool(True) return None def __pofre_thresh_dflt( self, glb ): if self.__flag_pofre( glb ) == bool(True): return float(1.3333) return None def __prfr_thresh_dflt( self, glb ): if self.__flag_prfr( glb ) == bool(True): return float(4.5) return None def __pol_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return "" if self.__pipelinemode( glb ) == "getinputs": return "" return None def __spw_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return "" if self.__pipelinemode( glb ) == "getinputs": return "" return None def __parallel_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return "automatic" return None def __infiles_dflt( self, glb ): if self.__pipelinemode( glb ) == "interactive": return [] if self.__pipelinemode( glb ) == "getinputs": return [] return None #--------- return subparam values ------------------------------------------------- def __tsys_thresh( self, glb ): if 'tsys_thresh' in glb: return glb['tsys_thresh'] dflt = self.__tsys_thresh_dflt( glb ) if dflt is not None: return dflt return float(3.0) def __weath_thresh( self, glb ): if 'weath_thresh' in glb: return glb['weath_thresh'] dflt = self.__weath_thresh_dflt( glb ) if dflt is not None: return dflt return float(3.0) def __prfre_thresh( self, glb ): if 'prfre_thresh' in glb: return glb['prfre_thresh'] dflt = self.__prfre_thresh_dflt( glb ) if dflt is not None: return dflt return float(3.0) def __pofre_thresh( self, glb ): if 'pofre_thresh' in glb: return glb['pofre_thresh'] dflt = self.__pofre_thresh_dflt( glb ) if dflt is not None: return dflt return float(1.3333) def __prfr_thresh( self, glb ): if 'prfr_thresh' in glb: return glb['prfr_thresh'] dflt = self.__prfr_thresh_dflt( glb ) if dflt is not None: return dflt return float(4.5) def __pofr_thresh( self, glb ): if 'pofr_thresh' in glb: return glb['pofr_thresh'] dflt = self.__pofr_thresh_dflt( glb ) if dflt is not None: return dflt return float(4.0) def __prfrm_thresh( self, glb ): if 'prfrm_thresh' in glb: return glb['prfrm_thresh'] dflt = self.__prfrm_thresh_dflt( glb ) if dflt is not None: return dflt return float(5.5) def __prfrm_nmean( self, glb ): if 'prfrm_nmean' in glb: return glb['prfrm_nmean'] dflt = self.__prfrm_nmean_dflt( glb ) if dflt is not None: return dflt return int(5) def __pofrm_thresh( self, glb ): if 'pofrm_thresh' in glb: return glb['pofrm_thresh'] dflt = self.__pofrm_thresh_dflt( glb ) if dflt is not None: return dflt return float(5.0) def __pofrm_nmean( self, glb ): if 'pofrm_nmean' in glb: return glb['pofrm_nmean'] dflt = self.__pofrm_nmean_dflt( glb ) if dflt is not None: return dflt return int(5) def __user_thresh( self, glb ): if 'user_thresh' in glb: return glb['user_thresh'] dflt = self.__user_thresh_dflt( glb ) if dflt is not None: return dflt return float(5.0) def __infiles( self, glb ): if 'infiles' in glb: return glb['infiles'] dflt = self.__infiles_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 '' def __field( self, glb ): if 'field' in glb: return glb['field'] dflt = self.__field_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 '' def __pol( self, glb ): if 'pol' in glb: return glb['pol'] dflt = self.__pol_dflt( glb ) if dflt is not None: return dflt return '' def __dryrun( self, glb ): if 'dryrun' in glb: return glb['dryrun'] dflt = self.__dryrun_dflt( glb ) if dflt is not None: return dflt return False def __acceptresults( self, glb ): if 'acceptresults' in glb: return glb['acceptresults'] dflt = self.__acceptresults_dflt( glb ) if dflt is not None: return dflt return True def __parallel( self, glb ): if 'parallel' in glb: return glb['parallel'] dflt = self.__parallel_dflt( glb ) if dflt is not None: return dflt return 'automatic' #--------- subparam inp output ---------------------------------------------------- def __iteration_inp(self): description = 'Number of iteration to perform sigma clipping to calculate threshold' value = self.__iteration( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'iteration': value},{'iteration': self.__schema['iteration']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('%-16.16s = %s%-23s%s' % ('iteration',pre,self.__to_string_(value),post),description,0+len(pre)+len(post)) def __edge_inp(self): description = 'Number of edge channels to be excluded from statistic calculation to flag data' value = self.__edge( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'edge': value},{'edge': self.__schema['edge']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('%-16.16s = %s%-23s%s' % ('edge',pre,self.__to_string_(value),post),description,0+len(pre)+len(post)) def __flag_tsys_inp(self): description = 'Flag data by Tsys value' value = self.__flag_tsys( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_tsys': value},{'flag_tsys': self.__schema['flag_tsys']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_tsys',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __tsys_thresh_inp(self): if self.__tsys_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for Tsys flag' value = self.__tsys_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'tsys_thresh': value},{'tsys_thresh': self.__schema['tsys_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('tsys_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_weath_inp(self): description = 'Flag data by weather (not implemented yet)' value = self.__flag_weath( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_weath': value},{'flag_weath': self.__schema['flag_weath']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_weath',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __weath_thresh_inp(self): if self.__weath_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for weather flag' value = self.__weath_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'weath_thresh': value},{'weath_thresh': self.__schema['weath_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('weath_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_prfre_inp(self): description = 'Flag data by EXPECTED RMS of pre-fit spectra' value = self.__flag_prfre( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_prfre': value},{'flag_prfre': self.__schema['flag_prfre']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_prfre',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __prfre_thresh_inp(self): if self.__prfre_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for EXPECTED RMS of pre-fit spectra flag' value = self.__prfre_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'prfre_thresh': value},{'prfre_thresh': self.__schema['prfre_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('prfre_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_pofre_inp(self): description = 'Flag data by EXPECTED RMS of post-fit spectra' value = self.__flag_pofre( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_pofre': value},{'flag_pofre': self.__schema['flag_pofre']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_pofre',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __pofre_thresh_inp(self): if self.__pofre_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for EXPECTED RMS of post-fit spectra flag' value = self.__pofre_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'pofre_thresh': value},{'pofre_thresh': self.__schema['pofre_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('pofre_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_prfr_inp(self): description = 'Flag data by RMS of pre-fit spectra' value = self.__flag_prfr( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_prfr': value},{'flag_prfr': self.__schema['flag_prfr']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_prfr',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __prfr_thresh_inp(self): if self.__prfr_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for RMS of pre-fit flag' value = self.__prfr_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'prfr_thresh': value},{'prfr_thresh': self.__schema['prfr_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('prfr_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_pofr_inp(self): description = 'Flag data by RMS of post-fit spectra' value = self.__flag_pofr( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_pofr': value},{'flag_pofr': self.__schema['flag_pofr']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_pofr',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __pofr_thresh_inp(self): if self.__pofr_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for RMS of post-fit spectra flag' value = self.__pofr_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'pofr_thresh': value},{'pofr_thresh': self.__schema['pofr_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('pofr_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_prfrm_inp(self): description = 'Flag data by running mean of pre-fit spectra' value = self.__flag_prfrm( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_prfrm': value},{'flag_prfrm': self.__schema['flag_prfrm']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_prfrm',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __prfrm_thresh_inp(self): if self.__prfrm_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for running mean of pre-fit spectra flag' value = self.__prfrm_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'prfrm_thresh': value},{'prfrm_thresh': self.__schema['prfrm_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('prfrm_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __prfrm_nmean_inp(self): if self.__prfrm_nmean_dflt( self.__globals_( ) ) is not None: description = 'Number of channels for running mean of pre-fit spectra flag' value = self.__prfrm_nmean( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'prfrm_nmean': value},{'prfrm_nmean': self.__schema['prfrm_nmean']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('prfrm_nmean',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_pofrm_inp(self): description = 'Flag data by running mean of post-fit spectra' value = self.__flag_pofrm( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_pofrm': value},{'flag_pofrm': self.__schema['flag_pofrm']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_pofrm',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __pofrm_thresh_inp(self): if self.__pofrm_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for running mean of post-fit spectra flag' value = self.__pofrm_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'pofrm_thresh': value},{'pofrm_thresh': self.__schema['pofrm_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('pofrm_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __pofrm_nmean_inp(self): if self.__pofrm_nmean_dflt( self.__globals_( ) ) is not None: description = 'Number of channels for running mean of post-fit spectra flag' value = self.__pofrm_nmean( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'pofrm_nmean': value},{'pofrm_nmean': self.__schema['pofrm_nmean']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('pofrm_nmean',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __flag_user_inp(self): description = 'Flag data by user flag (not implemented yet)' value = self.__flag_user( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'flag_user': value},{'flag_user': self.__schema['flag_user']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('flag_user',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __user_thresh_inp(self): if self.__user_thresh_dflt( self.__globals_( ) ) is not None: description = 'Threshold for user flag' value = self.__user_thresh( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'user_thresh': value},{'user_thresh': self.__schema['user_thresh']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('user_thresh',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __plotflag_inp(self): description = 'Create plots for flagging' value = self.__plotflag( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'plotflag': value},{'plotflag': self.__schema['plotflag']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('%-16.16s = %s%-23s%s' % ('plotflag',pre,self.__to_string_(value),post),description,0+len(pre)+len(post)) def __pipelinemode_inp(self): description = 'The pipeline operating mode' value = self.__pipelinemode( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'pipelinemode': value},{'pipelinemode': self.__schema['pipelinemode']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output('\x1B[1m\x1B[47m%-16.16s =\x1B[0m %s%-23s%s' % ('pipelinemode',pre,self.__to_string_(value),post),description,13+len(pre)+len(post)) def __infiles_inp(self): if self.__infiles_dflt( self.__globals_( ) ) is not None: description = 'List of input files to be flagged (\'\'=all)' value = self.__infiles( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'infiles': value},{'infiles': self.__schema['infiles']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('infiles',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __antenna_inp(self): if self.__antenna_dflt( self.__globals_( ) ) is not None: description = 'select data by antenna names or ids, e.g. \'PM03,PM04\' (\'\'=all)' value = self.__antenna( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'antenna': value},{'antenna': self.__schema['antenna']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('antenna',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __field_inp(self): if self.__field_dflt( self.__globals_( ) ) is not None: description = 'select data by field names or ids, e.g. \'M100,Sgr*\' (\'\'=all)' value = self.__field( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'field': value},{'field': self.__schema['field']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('field',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __spw_inp(self): if self.__spw_dflt( self.__globals_( ) ) is not None: description = 'select data by spectral windows, e.g. \'3,5,7\' (\'\'=all)' value = self.__spw( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'spw': value},{'spw': self.__schema['spw']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('spw',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __pol_inp(self): if self.__pol_dflt( self.__globals_( ) ) is not None: description = 'select data by polarizations, e.g. \'XX,YY\' (\'\'=all)' value = self.__pol( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'pol': value},{'pol': self.__schema['pol']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('pol',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __dryrun_inp(self): if self.__dryrun_dflt( self.__globals_( ) ) is not None: description = 'Run the task (False) or display the task command (True)' value = self.__dryrun( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'dryrun': value},{'dryrun': self.__schema['dryrun']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('dryrun',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __acceptresults_inp(self): if self.__acceptresults_dflt( self.__globals_( ) ) is not None: description = 'Add the results into the pipeline context' value = self.__acceptresults( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'acceptresults': value},{'acceptresults': self.__schema['acceptresults']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('acceptresults',pre,self.__to_string_(value),post),description,9+len(pre)+len(post)) def __parallel_inp(self): if self.__parallel_dflt( self.__globals_( ) ) is not None: description = 'Execute using CASA HPC functionality, if available.' value = self.__parallel( self.__globals_( ) ) (pre,post) = ('','') if self.__validate_({'parallel': value},{'parallel': self.__schema['parallel']}) else ('\x1B[91m','\x1B[0m') self.__do_inp_output(' \x1B[92m%-13.13s =\x1B[0m %s%-23s%s' % ('parallel',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 'pofrm_nmean' in glb: del glb['pofrm_nmean'] if 'dryrun' in glb: del glb['dryrun'] if 'pofr_thresh' in glb: del glb['pofr_thresh'] if 'tsys_thresh' in glb: del glb['tsys_thresh'] if 'prfrm_nmean' in glb: del glb['prfrm_nmean'] if 'field' in glb: del glb['field'] if 'flag_user' in glb: del glb['flag_user'] if 'flag_prfrm' in glb: del glb['flag_prfrm'] if 'pipelinemode' in glb: del glb['pipelinemode'] if 'user_thresh' in glb: del glb['user_thresh'] if 'flag_prfre' in glb: del glb['flag_prfre'] if 'weath_thresh' in glb: del glb['weath_thresh'] if 'prfre_thresh' in glb: del glb['prfre_thresh'] if 'pofrm_thresh' in glb: del glb['pofrm_thresh'] if 'prfrm_thresh' in glb: del glb['prfrm_thresh'] if 'acceptresults' in glb: del glb['acceptresults'] if 'flag_pofrm' in glb: del glb['flag_pofrm'] if 'flag_weath' in glb: del glb['flag_weath'] if 'flag_tsys' in glb: del glb['flag_tsys'] if 'iteration' in glb: del glb['iteration'] if 'pofre_thresh' in glb: del glb['pofre_thresh'] if 'prfr_thresh' in glb: del glb['prfr_thresh'] if 'flag_prfr' in glb: del glb['flag_prfr'] if 'edge' in glb: del glb['edge'] if 'flag_pofre' in glb: del glb['flag_pofre'] if 'flag_pofr' in glb: del glb['flag_pofr'] if 'pol' in glb: del glb['pol'] if 'spw' in glb: del glb['spw'] if 'plotflag' in glb: del glb['plotflag'] if 'parallel' in glb: del glb['parallel'] if 'infiles' in glb: del glb['infiles'] #--------- inp function ----------------------------------------------------------- def inp(self): print("# hsd_blflag -- %s" % self._info_desc_) self.term_width, self.term_height = shutil.get_terminal_size(fallback=(80, 24)) self.__iteration_inp( ) self.__edge_inp( ) self.__flag_tsys_inp( ) self.__tsys_thresh_inp( ) self.__flag_weath_inp( ) self.__weath_thresh_inp( ) self.__flag_prfre_inp( ) self.__prfre_thresh_inp( ) self.__flag_pofre_inp( ) self.__pofre_thresh_inp( ) self.__flag_prfr_inp( ) self.__prfr_thresh_inp( ) self.__flag_pofr_inp( ) self.__pofr_thresh_inp( ) self.__flag_prfrm_inp( ) self.__prfrm_thresh_inp( ) self.__prfrm_nmean_inp( ) self.__flag_pofrm_inp( ) self.__pofrm_thresh_inp( ) self.__pofrm_nmean_inp( ) self.__flag_user_inp( ) self.__user_thresh_inp( ) self.__plotflag_inp( ) self.__pipelinemode_inp( ) self.__infiles_inp( ) self.__antenna_inp( ) self.__field_inp( ) self.__spw_inp( ) self.__pol_inp( ) self.__dryrun_inp( ) self.__acceptresults_inp( ) self.__parallel_inp( ) #--------- tget function ---------------------------------------------------------- @static_var('state', __sf__('casa_inp_go_state')) def tget(self,file=None): from casashell.private.stack_manip import find_frame from runpy import run_path filename = None if file is None: if os.path.isfile("hsd_blflag.last"): filename = "hsd_blflag.last" elif isinstance(file, str): if os.path.isfile(file): filename = file if filename is not None: 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, setting defaults instead...") self.set_global_defaults( ) def __call__( self, iteration=None, edge=None, flag_tsys=None, tsys_thresh=None, flag_weath=None, weath_thresh=None, flag_prfre=None, prfre_thresh=None, flag_pofre=None, pofre_thresh=None, flag_prfr=None, prfr_thresh=None, flag_pofr=None, pofr_thresh=None, flag_prfrm=None, prfrm_thresh=None, prfrm_nmean=None, flag_pofrm=None, pofrm_thresh=None, pofrm_nmean=None, flag_user=None, user_thresh=None, plotflag=None, pipelinemode=None, infiles=None, antenna=None, field=None, spw=None, pol=None, dryrun=None, acceptresults=None, parallel=None ): def noobj(s): if s.startswith('<') and s.endswith('>'): return "None" else: return s _prefile = os.path.realpath('hsd_blflag.pre') _postfile = os.path.realpath('hsd_blflag.last') _return_result_ = None _arguments = [iteration,edge,flag_tsys,tsys_thresh,flag_weath,weath_thresh,flag_prfre,prfre_thresh,flag_pofre,pofre_thresh,flag_prfr,prfr_thresh,flag_pofr,pofr_thresh,flag_prfrm,prfrm_thresh,prfrm_nmean,flag_pofrm,pofrm_thresh,pofrm_nmean,flag_user,user_thresh,plotflag,pipelinemode,infiles,antenna,field,spw,pol,dryrun,acceptresults,parallel] _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 iteration is not None: local_global['iteration'] = iteration if edge is not None: local_global['edge'] = edge if flag_tsys is not None: local_global['flag_tsys'] = flag_tsys if flag_weath is not None: local_global['flag_weath'] = flag_weath if flag_prfre is not None: local_global['flag_prfre'] = flag_prfre if flag_pofre is not None: local_global['flag_pofre'] = flag_pofre if flag_prfr is not None: local_global['flag_prfr'] = flag_prfr if flag_pofr is not None: local_global['flag_pofr'] = flag_pofr if flag_prfrm is not None: local_global['flag_prfrm'] = flag_prfrm if flag_pofrm is not None: local_global['flag_pofrm'] = flag_pofrm if flag_user is not None: local_global['flag_user'] = flag_user if plotflag is not None: local_global['plotflag'] = plotflag if pipelinemode is not None: local_global['pipelinemode'] = pipelinemode # the invocation parameters for the non-subparameters can now be set - this picks up those defaults _invocation_parameters['iteration'] = self.__iteration( local_global ) _invocation_parameters['edge'] = self.__edge( local_global ) _invocation_parameters['flag_tsys'] = self.__flag_tsys( local_global ) _invocation_parameters['flag_weath'] = self.__flag_weath( local_global ) _invocation_parameters['flag_prfre'] = self.__flag_prfre( local_global ) _invocation_parameters['flag_pofre'] = self.__flag_pofre( local_global ) _invocation_parameters['flag_prfr'] = self.__flag_prfr( local_global ) _invocation_parameters['flag_pofr'] = self.__flag_pofr( local_global ) _invocation_parameters['flag_prfrm'] = self.__flag_prfrm( local_global ) _invocation_parameters['flag_pofrm'] = self.__flag_pofrm( local_global ) _invocation_parameters['flag_user'] = self.__flag_user( local_global ) _invocation_parameters['plotflag'] = self.__plotflag( local_global ) _invocation_parameters['pipelinemode'] = self.__pipelinemode( 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['tsys_thresh'] = self.__tsys_thresh( _invocation_parameters ) if tsys_thresh is None else tsys_thresh _invocation_parameters['weath_thresh'] = self.__weath_thresh( _invocation_parameters ) if weath_thresh is None else weath_thresh _invocation_parameters['prfre_thresh'] = self.__prfre_thresh( _invocation_parameters ) if prfre_thresh is None else prfre_thresh _invocation_parameters['pofre_thresh'] = self.__pofre_thresh( _invocation_parameters ) if pofre_thresh is None else pofre_thresh _invocation_parameters['prfr_thresh'] = self.__prfr_thresh( _invocation_parameters ) if prfr_thresh is None else prfr_thresh _invocation_parameters['pofr_thresh'] = self.__pofr_thresh( _invocation_parameters ) if pofr_thresh is None else pofr_thresh _invocation_parameters['prfrm_thresh'] = self.__prfrm_thresh( _invocation_parameters ) if prfrm_thresh is None else prfrm_thresh _invocation_parameters['prfrm_nmean'] = self.__prfrm_nmean( _invocation_parameters ) if prfrm_nmean is None else prfrm_nmean _invocation_parameters['pofrm_thresh'] = self.__pofrm_thresh( _invocation_parameters ) if pofrm_thresh is None else pofrm_thresh _invocation_parameters['pofrm_nmean'] = self.__pofrm_nmean( _invocation_parameters ) if pofrm_nmean is None else pofrm_nmean _invocation_parameters['user_thresh'] = self.__user_thresh( _invocation_parameters ) if user_thresh is None else user_thresh _invocation_parameters['infiles'] = self.__infiles( _invocation_parameters ) if infiles is None else infiles _invocation_parameters['antenna'] = self.__antenna( _invocation_parameters ) if antenna is None else antenna _invocation_parameters['field'] = self.__field( _invocation_parameters ) if field is None else field _invocation_parameters['spw'] = self.__spw( _invocation_parameters ) if spw is None else spw _invocation_parameters['pol'] = self.__pol( _invocation_parameters ) if pol is None else pol _invocation_parameters['dryrun'] = self.__dryrun( _invocation_parameters ) if dryrun is None else dryrun _invocation_parameters['acceptresults'] = self.__acceptresults( _invocation_parameters ) if acceptresults is None else acceptresults _invocation_parameters['parallel'] = self.__parallel( _invocation_parameters ) if parallel is None else parallel else: # invoke with inp/go semantics _invocation_parameters['iteration'] = self.__iteration( self.__globals_( ) ) _invocation_parameters['edge'] = self.__edge( self.__globals_( ) ) _invocation_parameters['flag_tsys'] = self.__flag_tsys( self.__globals_( ) ) _invocation_parameters['tsys_thresh'] = self.__tsys_thresh( self.__globals_( ) ) _invocation_parameters['flag_weath'] = self.__flag_weath( self.__globals_( ) ) _invocation_parameters['weath_thresh'] = self.__weath_thresh( self.__globals_( ) ) _invocation_parameters['flag_prfre'] = self.__flag_prfre( self.__globals_( ) ) _invocation_parameters['prfre_thresh'] = self.__prfre_thresh( self.__globals_( ) ) _invocation_parameters['flag_pofre'] = self.__flag_pofre( self.__globals_( ) ) _invocation_parameters['pofre_thresh'] = self.__pofre_thresh( self.__globals_( ) ) _invocation_parameters['flag_prfr'] = self.__flag_prfr( self.__globals_( ) ) _invocation_parameters['prfr_thresh'] = self.__prfr_thresh( self.__globals_( ) ) _invocation_parameters['flag_pofr'] = self.__flag_pofr( self.__globals_( ) ) _invocation_parameters['pofr_thresh'] = self.__pofr_thresh( self.__globals_( ) ) _invocation_parameters['flag_prfrm'] = self.__flag_prfrm( self.__globals_( ) ) _invocation_parameters['prfrm_thresh'] = self.__prfrm_thresh( self.__globals_( ) ) _invocation_parameters['prfrm_nmean'] = self.__prfrm_nmean( self.__globals_( ) ) _invocation_parameters['flag_pofrm'] = self.__flag_pofrm( self.__globals_( ) ) _invocation_parameters['pofrm_thresh'] = self.__pofrm_thresh( self.__globals_( ) ) _invocation_parameters['pofrm_nmean'] = self.__pofrm_nmean( self.__globals_( ) ) _invocation_parameters['flag_user'] = self.__flag_user( self.__globals_( ) ) _invocation_parameters['user_thresh'] = self.__user_thresh( self.__globals_( ) ) _invocation_parameters['plotflag'] = self.__plotflag( self.__globals_( ) ) _invocation_parameters['pipelinemode'] = self.__pipelinemode( self.__globals_( ) ) _invocation_parameters['infiles'] = self.__infiles( self.__globals_( ) ) _invocation_parameters['antenna'] = self.__antenna( self.__globals_( ) ) _invocation_parameters['field'] = self.__field( self.__globals_( ) ) _invocation_parameters['spw'] = self.__spw( self.__globals_( ) ) _invocation_parameters['pol'] = self.__pol( self.__globals_( ) ) _invocation_parameters['dryrun'] = self.__dryrun( self.__globals_( ) ) _invocation_parameters['acceptresults'] = self.__acceptresults( self.__globals_( ) ) _invocation_parameters['parallel'] = self.__parallel( self.__globals_( ) ) try: with open(_prefile,'w') as _f: for _i in _invocation_parameters: _f.write("%-13s = %s\n" % (_i,noobj(repr(_invocation_parameters[_i])))) _f.write("#hsd_blflag( ") 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_ = _hsd_blflag_t( _invocation_parameters['iteration'],_invocation_parameters['edge'],_invocation_parameters['flag_tsys'],_invocation_parameters['tsys_thresh'],_invocation_parameters['flag_weath'],_invocation_parameters['weath_thresh'],_invocation_parameters['flag_prfre'],_invocation_parameters['prfre_thresh'],_invocation_parameters['flag_pofre'],_invocation_parameters['pofre_thresh'],_invocation_parameters['flag_prfr'],_invocation_parameters['prfr_thresh'],_invocation_parameters['flag_pofr'],_invocation_parameters['pofr_thresh'],_invocation_parameters['flag_prfrm'],_invocation_parameters['prfrm_thresh'],_invocation_parameters['prfrm_nmean'],_invocation_parameters['flag_pofrm'],_invocation_parameters['pofrm_thresh'],_invocation_parameters['pofrm_nmean'],_invocation_parameters['flag_user'],_invocation_parameters['user_thresh'],_invocation_parameters['plotflag'],_invocation_parameters['pipelinemode'],_invocation_parameters['infiles'],_invocation_parameters['antenna'],_invocation_parameters['field'],_invocation_parameters['spw'],_invocation_parameters['pol'],_invocation_parameters['dryrun'],_invocation_parameters['acceptresults'],_invocation_parameters['parallel'] ) except Exception as e: from traceback import format_exc from casatasks import casalog casalog.origin('hsd_blflag') casalog.post("Exception Reported: Error in hsd_blflag: %s" % str(e),'SEVERE') casalog.post(format_exc( )) _return_result_ = False try: os.rename(_prefile,_postfile) except: pass return _return_result_ hsd_blflag = _hsd_blflag( )