Commits
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() |