Commits

Dirk Petry authored c3ba747648e


New Development: Yes/No JIRA Issue: CAS-8580 Ready for Test: Yes Interface Changes: Yes What Interface Changed: new optional parameter forcesingleephemfield in concat Test Programs: test_concat Put in Release Notes: Yes Module(s): gcwrap Description: Improvements to the concatephem recipe and the new optional parameter forcesingleephemfield in concat which controls how concat makes use of the concatephem recipe to concatenate ephemerides. Also added a test case to test_concat. Needs data version r10818.
No tags

gcwrap/python/scripts/recipes/ephemerides/concatephem.py

Modified
56 56 stepsizes.append(mystepsize)
57 57
58 58 if os.path.exists(outputephem):
59 59 casalog.post('Output ephemeris table '+outputephem+' exists already.', 'SEVERE')
60 60 return
61 61
62 62 casalog.post('Ephem no., startMJD, endMJD, step size (d)', 'INFO')
63 63 for i in range(0,len(starts)):
64 64 casalog.post(str(i)+', '+str(starts[i])+', '+str(ends[i])+', '+str(stepsizes[i]), 'INFO')
65 65
66 + backstep = 0
66 67 for i in range(0,len(starts)):
67 68 shouldconcat_with_previous.append(False)
68 69 canconcat_with_previous.append(False)
69 70 hasoverlap_with_previous.append(False)
70 71 gap_to_previous.append(0)
71 72 if i>0:
72 - if stepsizes[i]==stepsizes[i-1]:
73 - casalog.post( 'Ephemerides '+str(i-1)+' and '+str(i)+' have same step size.', 'INFO')
74 - if starts[i-1] < starts[i]:
75 - casalog.post( 'Ephemeris '+str(i-1)+' begins before '+str(i), 'INFO')
76 - if ends[i-1] < ends[i]:
77 - casalog.post( 'Ephemeris '+str(i-1)+' ends before '+str(i), 'INFO')
73 + if stepsizes[i]==stepsizes[i-1-backstep]:
74 + casalog.post( 'Ephemerides '+str(i-1-backstep)+' and '+str(i)+' have same step size.', 'INFO')
75 + if starts[i-1-backstep] <= starts[i]:
76 + casalog.post( 'Ephemeris '+str(i-1-backstep)+' begins before '+str(i), 'INFO')
77 + if ends[i-1-backstep] < ends[i]:
78 + casalog.post( 'Ephemeris '+str(i-1-backstep)+' ends before '+str(i), 'INFO')
78 79 shouldconcat_with_previous[i] = True
79 - numsteps_to_add = (starts[i]-ends[i-1])/stepsizes[i] - 1
80 + numsteps_to_add = (starts[i]-ends[i-1-backstep])/stepsizes[i] - 1
80 81 gap_to_previous[i] = int(round(numsteps_to_add))
81 82 if abs(round(numsteps_to_add) - numsteps_to_add)<1E-6:
82 - casalog.post( 'Gap between ephemerides '+str(i-1)+' and '+str(i)+' is '+str(gap_to_previous[i])+' steps', 'INFO')
83 + casalog.post( 'Gap between ephemerides '+str(i-1-backstep)+' and '+str(i)+' is '+str(gap_to_previous[i])+' steps', 'INFO')
83 84 canconcat_with_previous[i] = True
85 + backstep = 0
84 86 if numsteps_to_add<0.:
85 - casalog.post( 'Ephemerides '+str(i-1)+' and '+str(i)+' have overlap of '+str(-gap_to_previous[i])+' steps', 'INFO')
87 + casalog.post( 'Ephemerides '+str(i-1-backstep)+' and '+str(i)+' have overlap of '+str(-gap_to_previous[i])+' steps', 'INFO')
86 88 hasoverlap_with_previous[i]=True
87 89 else:
88 - casalog.post( 'Gap between ephemerides '+str(i-1)+' and '+str(i)+' is not an integer number of steps:', 'WARN')
90 + casalog.post( 'Gap between ephemerides '+str(i-1-backstep)+' and '+str(i)+' is not an integer number of steps:', 'WARN')
89 91 casalog.post( str(round(numsteps_to_add) - numsteps_to_add), 'INFO')
90 92 canconcat_with_previous[i] = False
93 + backstep += 1
91 94 else:
92 - casalog.post( 'Ephemeris '+str(i-1)+' does not end before '+str(i), 'INFO')
95 + casalog.post( 'Ephemeris '+str(i-1-backstep)+' does not end before '+str(i), 'INFO')
93 96 shouldconcat_with_previous[i] = False
94 97 canconcat_with_previous[i] = False
98 + backstep += 1
95 99 else:
96 - casalog.post( 'Ephemeris '+str(i-1)+' begins before '+str(i), 'INFO')
100 + casalog.post( 'Ephemeris '+str(i-1-backstep)+' does not begin before or at the same time as '+str(i), 'INFO')
97 101 casalog.post('Ephemerides are in wrong order.', 'SEVERE')
98 102 return
99 103 else:
100 - casalog.post( 'Ephemerides '+str(i-1)+' and '+str(i)+' do not have same step size.', 'INFO')
104 + casalog.post( 'Ephemerides '+str(i-1-backstep)+' and '+str(i)+' do not have same step size.', 'INFO')
101 105 casalog.post('Ephemerides have inhomogeneous steps sizes.', 'SEVERE')
102 106 return
103 107 #end if
104 108
109 +
105 110 if outputephem=='' or len(starts)<2:
106 111 return
107 112 else:
108 113 casalog.post( 'Creating output ephemeris ...', 'INFO')
109 114
110 115 os.system('cp -R '+ephems[0]+' '+outputephem)
111 116
112 117 mytb2 = tbtool()
113 118
114 119 try:
115 120 mytb.open(outputephem, nomodify=False)
116 121 except:
117 122 casalog.post('Error opening table '+outputepehem+' for writing.', 'SEVERE')
118 123 return
119 124
120 125
121 126 for i in range(1,len(starts)):
122 127
123 - mynrows = mytb.nrows()
124 -
125 - mytb2.open(ephems[i])
126 - mynrows2 = mytb2.nrows()
127 - startrow = 0
128 - if(hasoverlap_with_previous[i]):
129 - startrow = -gap_to_previous[i]
130 - elif(gap_to_previous[i]>0): # fill gap with dummy rows
131 - mytb.addrows(gap_to_previous[i])
132 - startmjd = mytb.getcell('MJD', mynrows-1)
133 - for j in range(mynrows, mynrows+gap_to_previous[i]):
134 - newmjd = startmjd+stepsizes[i]*(j-mynrows+1)
135 - mytb.putcell('MJD', j, newmjd)
136 - mytb.putcell('RA', j, 0.)
137 - mytb.putcell('DEC', j, 0.)
138 - mytb.putcell('Rho', j, 0.)
139 - mytb.putcell('RadVel', j, 0.)
140 - mytb.putcell('diskLong', j, 0.)
141 - mytb.putcell('diskLat', j, 0.)
142 -
143 - casalog.post( str(gap_to_previous[i])+' dummy rows appended to fill gap', 'INFO')
144 -
145 - mynrows = mytb.nrows()
146 -
147 - mytb.addrows(mynrows2-startrow)
148 - for j in range(mynrows, mynrows+mynrows2-startrow):
149 - fromrow = j - mynrows + startrow
150 - mytb.putcell('MJD', j, mytb2.getcell('MJD', fromrow))
151 - mytb.putcell('RA', j, mytb2.getcell('RA', fromrow))
152 - mytb.putcell('DEC', j, mytb2.getcell('DEC', fromrow))
153 - mytb.putcell('Rho', j, mytb2.getcell('Rho', fromrow))
154 - mytb.putcell('RadVel', j, mytb2.getcell('RadVel', fromrow))
155 - mytb.putcell('diskLong', j, mytb2.getcell('diskLong', fromrow))
156 - mytb.putcell('diskLat', j, mytb2.getcell('diskLat', fromrow))
157 -
158 - casalog.post( str(mynrows2-startrow)+' rows copied over', 'INFO')
128 + if shouldconcat_with_previous[i] and canconcat_with_previous[i]:
129 +
130 + mynrows = mytb.nrows()
131 +
132 + mytb2.open(ephems[i])
133 + mynrows2 = mytb2.nrows()
134 + startrow = 0
135 + if(hasoverlap_with_previous[i]):
136 + startrow = -gap_to_previous[i]
137 + elif(gap_to_previous[i]>0): # fill gap with dummy rows
138 + mytb.addrows(gap_to_previous[i])
139 + startmjd = mytb.getcell('MJD', mynrows-1)
140 + for j in range(mynrows, mynrows+gap_to_previous[i]):
141 + newmjd = startmjd+stepsizes[i]*(j-mynrows+1)
142 + mytb.putcell('MJD', j, newmjd)
143 + mytb.putcell('RA', j, 0.)
144 + mytb.putcell('DEC', j, 0.)
145 + mytb.putcell('Rho', j, 0.)
146 + mytb.putcell('RadVel', j, 0.)
147 + mytb.putcell('diskLong', j, 0.)
148 + mytb.putcell('diskLat', j, 0.)
149 +
150 + casalog.post( str(gap_to_previous[i])+' dummy rows appended to fill gap', 'INFO')
151 +
152 + mynrows = mytb.nrows()
153 +
154 + mytb.addrows(mynrows2-startrow)
155 + for j in range(mynrows, mynrows+mynrows2-startrow):
156 + fromrow = j - mynrows + startrow
157 + mytb.putcell('MJD', j, mytb2.getcell('MJD', fromrow))
158 + mytb.putcell('RA', j, mytb2.getcell('RA', fromrow))
159 + mytb.putcell('DEC', j, mytb2.getcell('DEC', fromrow))
160 + mytb.putcell('Rho', j, mytb2.getcell('Rho', fromrow))
161 + mytb.putcell('RadVel', j, mytb2.getcell('RadVel', fromrow))
162 + mytb.putcell('diskLong', j, mytb2.getcell('diskLong', fromrow))
163 + mytb.putcell('diskLat', j, mytb2.getcell('diskLat', fromrow))
164 +
165 + casalog.post( str(mynrows2-startrow)+' rows copied over', 'INFO')
166 +
167 + else:
168 +
169 + casalog.post( 'Ephemeris '+str(i)+' skipped', 'INFO')
170 +
171 + #endif
172 + #endfor
173 + #endif
159 174
160 175 return
161 176
162 177
163 178 def findephems(vis=[], field=''):
164 179
165 180 """
166 181 findephems
167 182
168 183 Search the MSs given in the list "vis" for ephemerides for
188 203
189 204 for visname in vis:
190 205 if not os.path.exists(visname+'/FIELD'):
191 206 casalog.post('MS '+visname+' does not exist.', 'SEVERE')
192 207 return []
193 208
194 209 mytb.open(visname+'/FIELD')
195 210 fnames = mytb.getcol('NAME')
196 211
197 212 if type(field) == int:
198 - field = fnames[field]
199 - elif type(field) != str:
213 + field = str(fnames[field])
214 + if type(field) != str:
200 215 casalog.post('Parameter field must be str or int.', 'SEVERE')
201 216 mytb.close()
202 217 return []
203 218
204 219 if field in fnames:
205 220 colnames = mytb.colnames()
206 221 if not 'EPHEMERIS_ID' in colnames:
207 222 casalog.post('MS '+visname+' has no ephemerides attached.', 'WARN')
208 223 rval.append('')
209 224 mytb.close()

Everything looks good. We'll let you know here if there's anything you should know about.

Add shortcut