Coverage for /wheeldirectory/casa-6.7.0-12-py3.10.el8/lib/py/lib/python3.10/site-packages/casatasks/private/task_vishead.py: 91%
44 statements
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-01 07:19 +0000
« prev ^ index » next coverage.py v7.6.4, created at 2024-11-01 07:19 +0000
1# This task is designed such that the user does not need to know the
2# internal structure of the MS in order to change important bits of information.
3# (A user with advanced knowlege of the MS can use the tb tool instead.)
4# To accomplish this, I use a keyword dictionary that relates a "keyword" to
5# an MS subtable and column. The keywords should correspond to FITS keywords
6# whenever possible.
7#
8# The name vishead is a misnomer because casa tables do not have headers in the
9# sense that FITS files do. The name derives from the IMHEAD, GETHEAD
10# and PUTHEAD verbs in AIPS.
11#
12# Implementation: The task open/closes the MS for each keyword
13# to read or write (and an extra time to check existence before reading).
14# This is not very effective (in list mode, or when using this task in a loop;
15# however expert users can always use the table tool directly.
17from casatools import ms
18from casatasks import casalog
19from .vishead_util import *
20_ms = ms( )
22def vishead(vis, mode=None, listitems=None, hdkey=None, hdindex=None, hdvalue=None):
23 """Documentation goes here?"""
25 casalog.origin('vishead')
26 casalog.post("parameter vis: " + str(vis), 'DEBUG1' )
27 casalog.post("parameter mode: " + str(mode), 'DEBUG1')
28 casalog.post("parameter listitems: " + str(listitems), 'DEBUG1')
29 casalog.post("parameter hdkey: " + str(hdkey), 'DEBUG1')
30 casalog.post("parameter hdindex: " + str(hdindex), 'DEBUG1')
31 casalog.post("parameter hdvalue: " + str(hdvalue), 'DEBUG1')
33 # Define vishead keywords
34 keywords = {
35 # Keywords from OBSERVATION TABLE
36 # time_range
37 'log': ['OBSERVATION', 'LOG', digest], #OPT AoAoS
38 'schedule' :['OBSERVATION', 'SCHEDULE', digest], #array
39 # flag_row
40 'observer' :['OBSERVATION', 'OBSERVER', digest], #array
41 'project' :['OBSERVATION', 'PROJECT', digest], #array
42 'release_date' :['OBSERVATION', 'RELEASE_DATE', valref2localDate], #array
43 'schedule_type' :['OBSERVATION', 'SCHEDULE_TYPE', digest], #array
44 'telescope':['OBSERVATION', 'TELESCOPE_NAME', digest], #array
46 # Keywords from FIELD TABLE
47 'field' :['FIELD', 'NAME', digest], # also in pointing table(!)
48 # so watch out when changing
49 'ptcs': ['FIELD', 'PHASE_DIR', valref2direction_strs], #OPT
50 'fld_code': ['FIELD', 'CODE', digest], #OPT
52 # Keywords from SPECTRAL_WINDOW TABLE
53 # not sure if all of these can freely edited by
54 # the user without messing up the MS' internal consistency...
56 #don't allow change 'meas_freq_ref' :['SPECTRAL_WINDOW', 'MEAS_FREQ_REF'],
57 #don't allow change 'ref_frequency' :['SPECTRAL_WINDOW', 'REF_FREQUENCY'],
59 #per channel 'chan_freq' :['SPECTRAL_WINDOW', 'CHAN_FREQ'],
61 #per channel 'chan_width' :['SPECTRAL_WINDOW', 'CHAN_WIDTH'],
63 #per channel 'effective_bw' :['SPECTRAL_WINDOW', 'EFFECTIVE_BW'],
64 #'resolution' :['SPECTRAL_WINDOW', 'RESOLUTION'],
65 'freq_group_name' :['SPECTRAL_WINDOW', 'FREQ_GROUP_NAME', digest],
66 # don't allow change: 'total_bandwidth' :['SPECTRAL_WINDOW', 'TOTAL_BANDWIDTH'],
67 'spw_name' :['SPECTRAL_WINDOW', 'NAME', digest],
69 # Keywords from SOURCE TABLE
70 'source_name' :['SOURCE', 'NAME', digest], #OPT
71 'cal_grp': ['SOURCE', 'CALIBRATION_GROUP', digest] #OPT
73 #MS_VERSION (probably not)
74 }
76 # In list mode, list the keywords.
77 if mode == 'list' or mode == '':
79 #tb.open(vis)
80 #tb.summary()
82 values = {}
83 if not listitems:
84 listitems = list(keywords.keys())
85 listitems.sort()
86 for key in listitems:
87 if key in keywords:
88 kwtuple = keywords.get(key)
89 if keyword_exists(vis, kwtuple):
90 casalog.post(' ' + str(kwtuple[0]) + \
91 ' -> ' + str(kwtuple[1]), 'DEBUG1')
92 values[key] = getput_keyw('get', vis, kwtuple, '')
93 if len(kwtuple) > 2:
94 casalog.post(key + ': ' + str(kwtuple[2](values[key])),
95 'INFO')
96 else:
97 casalog.post(key + ': ' + str(values[key]), 'INFO')
98 else:
99 casalog.post(key + ': <undefined>', 'INFO')
100 else:
101 casalog.post("Unrecognized item: " + key, 'WARN')
103 return values
105 # In summary mode, just list the MS basic info.
106 elif mode == 'summary':
107 _ms.open(vis)
108 _ms.summary()
109 _ms.close()
110 casalog.post("Summary information is listed in logger")
112 # In GET/PUT mode, focus on 1 particular bit of MS data
113 elif (mode=='get' or mode=='put'):
114 if not hdkey in keywords:
115 raise Exception("hdkey " + str(hdkey) +" is not a recognized keyword. Your options are " + str(keywords.keys()))
117 # get/put the data specified by hdkey
118 if mode == 'get':
119 value = getput_keyw(mode, vis, keywords[hdkey], hdindex)
120 casalog.post(hdkey+': '+str(value))
121 return value
122 else:
123 getput_keyw(mode, vis, keywords[hdkey], hdindex, hdvalue)
124 casalog.post(hdkey + ' set to ' + str(hdvalue))