23
23
except ImportError :
24
24
try :
25
25
# as a backup, casa stuff can be imported if running casapy
26
+ # from casac import casac; # Recommended by Sanjay B. (Don't ask me why this is so! :)
27
+ # ms = casac.ms();
26
28
from casa import ms
27
29
from casa import quanta as qa
28
30
print 'Imported CASA'
@@ -1090,11 +1092,10 @@ def read(self, file, nints, nskip, spw, selectpol, scan, datacol):
1090
1092
self .m0 = n .zeros (self .nints )
1091
1093
1092
1094
self .rawdata = newda
1093
- self .flags = flags
1095
+ self .flags = n . invert ( flags ) # tests show that MS has opposite flag convention as Miriad! using complement of MS flag in tpipe.
1094
1096
print 'Shape of raw data, time:'
1095
1097
print self .rawdata .shape , self .reltime .shape
1096
1098
1097
-
1098
1099
class SimulationReader (Reader ):
1099
1100
""" Class for simulating visibility data for transients analysis.
1100
1101
"""
@@ -1197,7 +1198,7 @@ def prep(self):
1197
1198
# using 0 as flag
1198
1199
# self.data = n.ma.masked_array(self.rawdata[:self.nints,:, self.chans,:], self.rawdata[:self.nints,:, self.chans,:] == 0j)
1199
1200
# using standard flags
1200
- self .data = n .ma .masked_array (self .rawdata [:self .nints ,:, self .chans ,:], self .flags [:self .nints ,:, self .chans ,:] == 0 )
1201
+ self .data = n .ma .masked_array (self .rawdata [:self .nints ,:, self .chans ,:], self .flags [:self .nints ,:, self .chans ,:] == 0 ) # mask of True for flagged data (flags=0 in tpipe, which is flags=False in Miriad and flags=True in MS)
1201
1202
self .dataph = (self .data .mean (axis = 3 ).mean (axis = 1 )).real #dataph is summed and detected to form TP beam at phase center, multi-pol
1202
1203
self .min = self .dataph .min ()
1203
1204
self .max = self .dataph .max ()
@@ -1255,8 +1256,6 @@ def tracksub(self, tbin, bgwindow = 0):
1255
1256
twidth = self .twidth
1256
1257
1257
1258
dataon = data [trackon [0 ], :, trackon [1 ]]
1258
- truearron = n .ones ( n .shape (dataon ) )
1259
- falsearron = 1e-5 * n .ones ( n .shape (dataon ) ) # small weight to keep n.average from giving NaN
1260
1259
1261
1260
# set up bg track
1262
1261
if bgwindow :
@@ -1269,23 +1268,17 @@ def tracksub(self, tbin, bgwindow = 0):
1269
1268
trackoff = (trackoff [0 ] + list (n .array (track_t )+ k ), list (trackoff [1 ]) + list (track_c ))
1270
1269
1271
1270
dataoff = data [trackoff [0 ], :, trackoff [1 ]]
1272
- truearroff = n .ones ( n .shape (dataoff ) )
1273
- falsearroff = 1e-5 * n .ones ( n .shape (dataoff ) ) # small weight to keep n.average from giving NaN
1274
1271
1275
- datadiffarr = n .zeros ((len (self .chans ), self .nbl , self .npol ),dtype = 'complex' )
1272
+ datadiffarr = n .ma . zeros ((len (self .chans ), self .nbl , self .npol ),dtype = 'complex' )
1276
1273
1277
1274
# compress time axis, then subtract on and off tracks
1278
1275
for ch in n .unique (trackon [1 ]):
1279
1276
indon = n .where (trackon [1 ] == ch )
1280
- weightarr = n .where (dataon [indon ] != 0j , truearron [indon ], falsearron [indon ])
1281
- meanon = n .average (dataon [indon ], axis = 0 , weights = weightarr )
1282
- # meanon = dataon[indon].mean(axis=0) # include all zeros
1277
+ meanon = dataon [indon ].mean (axis = 0 ) # include all zeros
1283
1278
1284
1279
if bgwindow :
1285
1280
indoff = n .where (trackoff [1 ] == ch )
1286
- weightarr = n .where (dataoff [indoff ] != 0j , truearroff [indoff ], falsearroff [indoff ])
1287
- meanoff = n .average (dataoff [indoff ], axis = 0 , weights = weightarr )
1288
- # meanoff = dataoff[indoff].mean(axis=0) # include all zeros
1281
+ meanoff = dataoff [indoff ].mean (axis = 0 ) # include all zeros
1289
1282
1290
1283
datadiffarr [ch ] = meanon - meanoff
1291
1284
zeros = n .where ( (meanon == 0j ) | (meanoff == 0j ) ) # find baselines and pols with zeros for meanon or meanoff
@@ -1323,29 +1316,18 @@ def make_bispectra(self, bgwindow=4):
1323
1316
"""
1324
1317
1325
1318
bisp = lambda d , ij , jk , ki : d [:,ij ] * d [:,jk ] * n .conj (d [:,ki ]) # bispectrum for pol data
1326
- # bisp = lambda d, ij, jk, ki: n.complex(d[ij] * d[jk] * n.conj(d[ki])) # without pol axis
1327
1319
1328
- triples = self .make_triples ()
1329
- meanbl = self .data .mean (axis = 3 ).mean (axis = 2 ).mean (axis = 0 ) # find non-zero bls
1330
- self .triples = triples [(meanbl [triples ][:,0 ] != 0j ) & (meanbl [triples ][:,1 ] != 0j ) & (meanbl [triples ][:,2 ] != 0j )] # take triples with non-zero bls
1320
+ self .triples = self .make_triples ()
1321
+ self .bispectra = n .ma .zeros ((len (self .data ), len (self .triples )), dtype = 'complex' )
1331
1322
1332
- self .bispectra = n .zeros ((len (self .data ), len (self .triples )), dtype = 'complex' )
1333
- truearr = n .ones ( (self .npol , self .nbl , len (self .chans )))
1334
- falsearr = n .zeros ( (self .npol , self .nbl , len (self .chans )))
1335
-
1336
- for i in xrange ((bgwindow / 2 )+ self .twidth , len (self .data )- ( (bgwindow / 2 )+ self .twidth )):
1323
+ for i in xrange ((bgwindow / 2 )+ self .twidth , len (self .data )- ( (bgwindow / 2 )+ 2 * self .twidth )):
1337
1324
# for i in xrange((bgwindow/2)+self.twidth, len(self.data)-( (bgwindow/2)+self.twidth ), max(1,self.twidth)): # leaves gaps in data
1338
1325
diff = self .tracksub (i , bgwindow = bgwindow )
1339
1326
1340
1327
if len (n .shape (diff )) == 1 : # no track
1341
1328
continue
1342
1329
1343
- weightarr = n .where (diff != 0j , truearr , falsearr ) # ignore zeros in mean across channels # bit of a hack
1344
-
1345
- try :
1346
- diffmean = n .average (diff , axis = 2 , weights = weightarr )
1347
- except ZeroDivisionError :
1348
- diffmean = n .mean (diff , axis = 2 ) # if all zeros, just make mean # bit of a hack
1330
+ diffmean = n .mean (diff , axis = 2 ) # if all zeros, just make mean # bit of a hack
1349
1331
1350
1332
for trip in xrange (len (self .triples )):
1351
1333
ij , jk , ki = self .triples [trip ]
@@ -1483,7 +1465,7 @@ def prep(self):
1483
1465
# using 0 as flag
1484
1466
# self.data = n.ma.masked_array(self.rawdata[:self.nints,:, self.chans,:], self.rawdata[:self.nints,:, self.chans,:] == 0j)
1485
1467
# using standard flags
1486
- self .data = n .ma .masked_array (self .rawdata [:self .nints ,:, self .chans ,:], self .flags [:self .nints ,:, self .chans ,:] == 0 )
1468
+ self .data = n .ma .masked_array (self .rawdata [:self .nints ,:, self .chans ,:], self .flags [:self .nints ,:, self .chans ,:] == 0 ) # mask of True for flagged data (flags=0 in tpipe, which is flags=False in Miriad and flags=True in MS)
1487
1469
self .dataph = (self .data .mean (axis = 3 ).mean (axis = 1 )).real #dataph is summed and detected to form TP beam at phase center, multi-pol
1488
1470
self .min = self .dataph .min ()
1489
1471
self .max = self .dataph .max ()
@@ -1634,7 +1616,7 @@ def make_bispectra(self, bgwindow=4):
1634
1616
twidth = n .round (self .twidths [d ])
1635
1617
dmwidth = int (n .round (n .max (self .dmtrack0 [d ][0 ]) - n .min (self .dmtrack0 [d ][0 ])))
1636
1618
1637
- for i in xrange ((bgwindow / 2 )+ twidth , len (self .data )- ( (bgwindow / 2 )+ twidth + dmwidth )): # dmwidth avoided at end, others are split on front and back side of time iteration
1619
+ for i in xrange ((bgwindow / 2 )+ twidth , len (self .data )- ( (bgwindow / 2 )+ 2 * twidth + dmwidth )): # dmwidth avoided at end, others are split on front and back side of time iteration
1638
1620
# for i in xrange((bgwindow/2)+twidth, len(self.data)-( (bgwindow/2)+twidth+dmwidth ), max(1,twidth/2)): # can step by twidth/2, but messes up data products
1639
1621
diff = self .tracksub (d , i , bgwindow = bgwindow )
1640
1622
@@ -1891,7 +1873,7 @@ def prep(self, deleteraw=False):
1891
1873
# using 0 as flag
1892
1874
# self.data = n.ma.masked_array(self.rawdata[:self.nints,:, self.chans,:], self.rawdata[:self.nints,:, self.chans,:] == 0j)
1893
1875
# using standard flags
1894
- self .data = n .ma .masked_array (self .rawdata [:self .nints ,:, self .chans ,:], self .flags [:self .nints ,:, self .chans ,:] == 0 )
1876
+ self .data = n .ma .masked_array (self .rawdata [:self .nints ,:, self .chans ,:], self .flags [:self .nints ,:, self .chans ,:] == 0 ) # mask of True for flagged data (flags=0 in tpipe, which is flags=False in Miriad and flags=True in MS)
1895
1877
self .dataph = (self .data .mean (axis = 3 ).mean (axis = 1 )).real #dataph is summed and detected to form TP beam at phase center, multi-pol
1896
1878
self .min = self .dataph .min ()
1897
1879
self .max = self .dataph .max ()
0 commit comments