示例#1
0
def KAT2AIPS (katdata, outUV, disk, fitsdisk, err, \
              calInt=1.0, **kwargs):
    """Convert KAT-7 HDF 5 data set to an Obit UV.

    This module requires katdal and katpoint and their dependencies
    contact Ludwig Schwardt <*****@*****.**> for details.

    Parameters
    ----------
    katdata : string
        input katfile object
    outUV : ??
        Obit UV object, should be a KAT template for the
        appropriate number of IFs and poln.
    disk  : int
        AIPS Disk number
    fitsdisk: int
        FITS Disk number
    err : ??
        Obit error/message stack
    calInt : 
        Calibration interval in min.
    targets : list, optinal
        List of targetnames to extract from the file
    """
    ################################################################
    OErr.PLog(err, OErr.Info, "Converting h5 data to AIPS UV format.")
    OErr.printErr(err)
    print "Converting h5 data to AIPS UV format.\n"

    # Extract metadata
    meta = GetKATMeta(katdata, err)

    # Extract AIPS parameters of the uv data to the metadata
    meta["Aproject"] = outUV.Aname
    meta["Aclass"] = outUV.Aclass
    meta["Aseq"] = outUV.Aseq
    meta["Adisk"] = disk
    meta["calInt"] = calInt
    meta["fitsdisk"] = fitsdisk
    # Update descriptor
    UpdateDescriptor(outUV, meta, err)
    # Write AN table
    WriteANTable(outUV, meta, err)
    # Write FQ table
    WriteFQTable(outUV, meta, err)
    # Write SU table
    WriteSUTable(outUV, meta, err)

    # Convert data
    ConvertKATData(outUV, katdata, meta, err)

    # Index data
    OErr.PLog(err, OErr.Info, "Indexing data")
    OErr.printErr(err)
    UV.PUtilIndex(outUV, err)

    # Open/close UV to update header
    outUV.Open(UV.READONLY, err)
    outUV.Close(err)
    if err.isErr:
        OErr.printErrMsg(err, message="Update UV header failed")

    # initial CL table
    OErr.PLog(err, OErr.Info, "Create Initial CL table")
    OErr.printErr(err)
    print "Create Initial CL table\n"
    UV.PTableCLGetDummy(outUV, outUV, 1, err, solInt=calInt)
    outUV.Open(UV.READONLY, err)
    outUV.Close(err)
    if err.isErr:
        OErr.printErrMsg(err, message="Update UV header failed")

    # History
    outHistory = History.History("outhistory", outUV.List, err)
    outHistory.Open(History.READWRITE, err)
    outHistory.TimeStamp("Convert KAT7 HDF 5 data to Obit", err)
    outHistory.WriteRec(-1, "datafile = " + katdata.name, err)
    outHistory.WriteRec(-1, "calInt   = " + str(calInt), err)
    outHistory.Close(err)
    outUV.Open(UV.READONLY, err)
    outUV.Close(err)
    if err.isErr:
        OErr.printErrMsg(err, message="Update UV header failed")
    # Return the metadata for the pipeline
    return meta
示例#2
0
def KAT2AIPS (katdata, outUV, disk, fitsdisk, err, \
              calInt=1.0, static=None, **kwargs):
    """Convert MeerKAT MVF data set to an Obit UV.

    This module requires katdat and katpoint and their dependencies
    contact Ludwig Schwardt <*****@*****.**> for details.

    Parameters
    ----------
    katdata : string
        input katdal object
    outUV : ??
        Obit UV object, shoud be a KAT template for the
        appropriate number of IFs and poln.
    disk  : int
        AIPS Disk number
    fitsdisk: int
        FITS Disk number
    err : ??
        Obit error/message stack
    calInt : 
        Calibration interval in min.
    targets : list, optinal
        List of targetnames to extract from the file
    stop_w : bool
        Fring stop data? (Values only for KAT-7)
    """
    ################################################################
    OErr.PLog(err, OErr.Info, "Converting MVF data to AIPS UV format.")
    OErr.printErr(err)
    print("Converting MVF data to AIPS UV format.\n")

    # Extract metadata
    meta = GetKATMeta(katdata, err)

    # TODO: Fix this all up so that the below isn't the case!
    if meta["products"].size != meta["nants"] * meta["nants"] * 4:
        raise ValueError(
            "Only full stokes and all correlation products are supported.")

    # Extract AIPS parameters of the uv data to the metadata
    meta["Aproject"] = outUV.Aname
    meta["Aclass"] = outUV.Aclass
    meta["Aseq"] = outUV.Aseq
    meta["Adisk"] = disk
    meta["calInt"] = calInt
    meta["fitsdisk"] = fitsdisk
    # Update descriptor
    UpdateDescriptor(outUV, meta, err)
    # Write AN table
    WriteANTable(outUV, meta, err)
    # Write FQ table
    WriteFQTable(outUV, meta, err)
    # Write SU table
    WriteSUTable(outUV, meta, err)

    # Convert data
    ConvertKATData(outUV,
                   katdata,
                   meta,
                   err,
                   static=static,
                   blmask=kwargs.get('blmask', 1.e10),
                   stop_w=kwargs.get('stop_w', False),
                   timeav=kwargs.get('timeav', 1),
                   flag=kwargs.get('flag', False),
                   doweight=kwargs.get('doweight', True),
                   doflags=kwargs.get('doflags', True))

    # Index data
    OErr.PLog(err, OErr.Info, "Indexing data")
    OErr.printErr(err)
    UV.PUtilIndex(outUV, err)

    # Open/close UV to update header
    outUV.Open(UV.READONLY, err)
    outUV.Close(err)
    if err.isErr:
        OErr.printErrMsg(err, message="Update UV header failed")

    # initial CL table
    OErr.PLog(err, OErr.Info, "Create Initial CL table")
    OErr.printErr(err)
    print("Create Initial CL table\n")
    UV.PTableCLfromNX(outUV, meta["maxant"], err, calInt=calInt)
    outUV.Open(UV.READONLY, err)
    outUV.Close(err)
    if err.isErr:
        OErr.printErrMsg(err, message="Update UV header failed")

    # History
    outHistory = History.History("outhistory", outUV.List, err)
    outHistory.Open(History.READWRITE, err)
    outHistory.TimeStamp("Convert MeerKAT MVF data to Obit", err)
    for name in katdata.name.split(','):
        for line in _history_wrapper.wrap("datafile = " + name):
            outHistory.WriteRec(-1, line, err)
    outHistory.WriteRec(-1, "calInt   = " + str(calInt), err)
    outHistory.Close(err)
    outUV.Open(UV.READONLY, err)
    outUV.Close(err)
    if err.isErr:
        OErr.printErrMsg(err, message="Update UV header failed")
    # Return the metadata for the pipeline
    return meta