def readsegment(d, segment):
    """ Prepare to read segment of data
    """

    # set requested time range based on given parameters
    starttime = qa.getvalue(qa.convert(qa.time(qa.quantity(d['segmenttimes'][segment,0],'d'),form=['ymd'], prec=9)[0], 's'))[0]
    stoptime = qa.getvalue(qa.convert(qa.time(qa.quantity(d['segmenttimes'][segment,1],'d'),form=['ymd'], prec=9)[0], 's'))[0]
    logger.info('Reading segment %d/%d, times %s to %s' % (segment, len(d['segmenttimes'])-1, qa.time(qa.quantity(starttime/(24*3600),'d'),form=['hms'], prec=9)[0], qa.time(qa.quantity(stoptime/(24*3600), 'd'), form=['hms'], prec=9)[0]))

    # read data into data structure
    ms.open(d['filename'])
    if len(d['spwlist']) == 1:
        ms.selectinit(datadescid=d['spwlist'][0])
    else:
        ms.selectinit(datadescid=0, reset=True)    # reset includes spw in iteration over time
    selection = {'time': [starttime, stoptime], 'uvdist': [1., 1e10]}
#    selection = {'time': [starttime, stoptime], 'uvdist': [1., 1e10], 'antenna1': d['ants'], 'antenna2': d['ants']}    # **this misses ants for some reason!**
    ms.select(items = selection)
    ms.selectpolarization(d['pols'])
    da = ms.getdata([d['datacol'],'axis_info','u','v','w','flag','data_desc_id'], ifraxis=True)
    good = n.where((da['data_desc_id']) == d['spwlist'][0])[0]   # take first spw                                                
    time0 = da['axis_info']['time_axis']['MJDseconds'][good]
    data0 = n.transpose(da[d['datacol']], axes=[3,2,1,0])[good]
    flag0 = n.transpose(da['flag'], axes=[3,2,1,0])[good]
    u0 = da['u'].transpose()[good] * d['freq_orig'][0] * (1e9/3e8)    # uvw are in m, so divide by wavelength of first chan to set in lambda
    v0 = da['v'].transpose()[good] * d['freq_orig'][0] * (1e9/3e8)
    w0 = da['w'].transpose()[good] * d['freq_orig'][0] * (1e9/3e8)

    if len(d['spwlist']) > 1:
        for spw in d['spwlist'][1:]:
            good = n.where((da['data_desc_id']) == spw)[0]
            data1 = n.transpose(da[d['datacol']], axes=[3,2,1,0])[good]
            data0 = n.concatenate( (data0, data1), axis=2 )
            flag0 = n.concatenate( (flag0, n.transpose(da['flag'], axes=[3,2,1,0])[good]), axis=2 )

    del da
    data0 = data0[:,:,d['chans'],:] * n.invert(flag0[:,:,d['chans'],:])   # flag==1 means bad data (for vla)                     

    return data0.astype('complex64'), u0.astype('float32'), v0.astype('float32'), w0.astype('float32')
def readsegment ( d , segment ) : starttime = qa . getvalue ( qa . convert ( qa . time ( qa . quantity ( d [ 'segmenttimes' ] [ segment , 0 ] , 'd' ) , form = [ 'ymd' ] , prec = 9 ) [ 0 ] , 's' ) ) [ 0 ] stoptime = qa . getvalue ( qa . convert ( qa . time ( qa . quantity ( d [ 'segmenttimes' ] [ segment , 1 ] , 'd' ) , form = [ 'ymd' ] , prec = 9 ) [ 0 ] , 's' ) ) [ 0 ] logger . info ( 'Reading segment %d/%d, times %s to %s' % ( segment , len ( d [ 'segmenttimes' ] ) - 1 , qa . time ( qa . quantity ( starttime / ( 24 * 3600 ) , 'd' ) , form = [ 'hms' ] , prec = 9 ) [ 0 ] , qa . time ( qa . quantity ( stoptime / ( 24 * 3600 ) , 'd' ) , form = [ 'hms' ] , prec = 9 ) [ 0 ] ) ) ms . open ( d [ 'filename' ] ) if len ( d [ 'spwlist' ] ) == 1 : ms . selectinit ( datadescid = d [ 'spwlist' ] [ 0 ] ) else : ms . selectinit ( datadescid = 0 , reset = True ) selection = { 'time' : [ starttime , stoptime ] , 'uvdist' : [ 1. , 1e10 ] } ms . select ( items = selection ) ms . selectpolarization ( d [ 'pols' ] ) da = ms . getdata ( [ d [ 'datacol' ] , 'axis_info' , 'u' , 'v' , 'w' , 'flag' , 'data_desc_id' ] , ifraxis = True ) good = n . where ( ( da [ 'data_desc_id' ] ) == d [ 'spwlist' ] [ 0 ] ) [ 0 ] time0 = da [ 'axis_info' ] [ 'time_axis' ] [ 'MJDseconds' ] [ good ] data0 = n . transpose ( da [ d [ 'datacol' ] ] , axes = [ 3 , 2 , 1 , 0 ] ) [ good ] flag0 = n . transpose ( da [ 'flag' ] , axes = [ 3 , 2 , 1 , 0 ] ) [ good ] u0 = da [ 'u' ] . transpose ( ) [ good ] * d [ 'freq_orig' ] [ 0 ] * ( 1e9 / 3e8 ) v0 = da [ 'v' ] . transpose ( ) [ good ] * d [ 'freq_orig' ] [ 0 ] * ( 1e9 / 3e8 ) w0 = da [ 'w' ] . transpose ( ) [ good ] * d [ 'freq_orig' ] [ 0 ] * ( 1e9 / 3e8 ) if len ( d [ 'spwlist' ] ) > 1 : for spw in d [ 'spwlist' ] [ 1 : ] : good = n . where ( ( da [ 'data_desc_id' ] ) == spw ) [ 0 ] data1 = n . transpose ( da [ d [ 'datacol' ] ] , axes = [ 3 , 2 , 1 , 0 ] ) [ good ] data0 = n . concatenate ( ( data0 , data1 ) , axis = 2 ) flag0 = n . concatenate ( ( flag0 , n . transpose ( da [ 'flag' ] , axes = [ 3 , 2 , 1 , 0 ] ) [ good ] ) , axis = 2 ) del da data0 = data0 [ : , : , d [ 'chans' ] , : ] * n . invert ( flag0 [ : , : , d [ 'chans' ] , : ] ) return data0 . astype ( 'complex64' ) , u0 . astype ( 'float32' ) , v0 . astype ( 'float32' ) , w0 . astype ( 'float32' )
Prepare to read segment of data