Coverage for /wheeldirectory/casa-6.7.0-12-py3.10.el8/lib/py/lib/python3.10/site-packages/casatasks/private/task_testconcat.py: 82%
65 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
1import os
2import sys
3import shutil
5from casatasks import casalog
6from casatools import ms as mstool
7from casatools import table as tbtool
8from .mslisthelper import check_mslist
10def testconcat(vislist,testconcatvis,freqtol,dirtol,copypointing):
11 """
12 The list of data sets given in the vis argument are concatenated into an output
13 data set in concatvis without copying the bulk data of the main table.
14 This is useful for obtaining the information in the merged subtables without
15 actually performing a time-consuming concatenation disk.
17 Keyword arguments:
18 vis -- Name of input visibility files for which the subtables are to be combined
19 default: none; example: vis = 'mydata.ms',
20 example: vis=['src2.ms','ngc5921.ms','ngc315.ms']
22 testconcatvis -- Name of MS that will contain the concatenated subtables
23 default: none; example: testconcatvis='test.ms'
25 freqtol -- Frequency shift tolerance for considering data to be in the same
26 spwid. The number of channels must also be the same.
27 default: '' do not combine unless frequencies are equal
28 example: freqtol='10MHz' will not combine spwid unless they are
29 within 10 MHz.
30 Note: This option is useful to conbine spectral windows with very slight
31 frequency differences caused by Doppler tracking, for example.
33 dirtol -- Direction shift tolerance for considering data as the same field
34 default: '' means always combine.
35 example: dirtol='1.arcsec' will not combine data for a field unless
36 their phase center differ by less than 1 arcsec. If the field names
37 are different in the input data sets, the name in the output data
38 set will be the first relevant data set in the list.
40 copypointing -- copy all rows of the pointing table
41 default: True
42 """
44 ###
45 try:
46 casalog.origin('testconcat')
47 t = tbtool()
48 m = mstool()
49 #break the reference between vis and vislist as we modify vis
50 if(type(vislist)==str):
51 vis=[vislist]
52 else:
53 vis=list(vislist)
55 # test the consistency of the setup of the different MSs
56 casalog.post('Checking MS setup consistency ...', 'INFO')
57 try:
58 mydiff = check_mslist(vis, ignore_tables=['SORTED_TABLE', 'ASDM*'], testcontent=False)
59 except Exception as instance:
60 raise RuntimeError("*** Error \'%s\' while checking MS setup consistency" % (instance))
62 if mydiff != {}:
63 casalog.post('The setup of the input MSs is not fully consistent. The concatenation may fail', 'WARN')
64 casalog.post('and/or the affected columns may contain partially only default data.', 'WARN')
65 casalog.post(str(mydiff), 'WARN')
67 if((type(testconcatvis)!=str) or (len(testconcatvis.split()) < 1)):
68 raise Exception ('parameter testconcatvis is invalid')
69 if(vis.count(testconcatvis) > 0):
70 vis.remove(testconcatvis)
72 if(os.path.exists(testconcatvis)):
73 raise Exception ('Visibility data set '+testconcatvis+' exists. Will not overwrite.')
74 else:
75 if(len(vis) >0):
76 casalog.post('copying structure of '+vis[0]+' to '+testconcatvis , 'INFO')
77 # Copy procedure which does not copy the bulk data of the main table
78 t.open(vis[0])
79 tmptb = t.copy(newtablename=testconcatvis, deep=True, valuecopy=True, norows=True) # copy only table structure
80 tmptb.close()
81 t.close()
82 # copy content of subtables
83 thesubtables = [f.name for f in os.scandir(vis[0]) if f.is_dir()]
85 for subt in thesubtables:
86 if not (subt[0]=='.'):
87 t.open(vis[0]+'/'+subt)
88 no_rows = False
89 if (subt=='POINTING' and not copypointing):
90 casalog.post('*** copypointing==False: resulting MS will have empty POINTING table', 'INFO')
91 no_rows = True
92 tmptb = t.copy(testconcatvis+'/'+subt, deep=False, valuecopy=True, norows=no_rows)
93 tmptb.close()
94 t.close()
95 vis.remove(vis[0])
96 # determine handling switch value
97 handlingswitch = 1
98 if not copypointing:
99 handlingswitch = 3
101 m.open(testconcatvis,False) # nomodify=False to enable writing
103 for elvis in vis :
104 casalog.post('concatenating subtables from '+elvis+' into '+testconcatvis , 'INFO')
106 m.concatenate(msfile=elvis,freqtol=freqtol,dirtol=dirtol,handling=handlingswitch)
108 m.writehistory(message='taskname=testconcat',origin='testconcat')
109 m.writehistory(message='vis = "'+str(testconcatvis)+'"',origin='testconcat')
110 m.writehistory(message='concatvis = "'+str(elvis)+'"',origin='testconcat')
111 m.writehistory(message='freqtol = "'+str(freqtol)+'"',origin='testconcat')
112 m.writehistory(message='dirtol = "'+str(dirtol)+'"',origin='testconcat')
113 m.writehistory(message='copypointing = "'+str(copypointing)+'"',origin='concat')
115 m.close()
117 except Exception as instance:
118 print('*** Error ***',instance)
119 raise Exception (instance)